diff --git a/.agents/skills/monitor-ci/SKILL.md b/.agents/skills/monitor-ci/SKILL.md index a4af6cbb556..3330adb7d42 100644 --- a/.agents/skills/monitor-ci/SKILL.md +++ b/.agents/skills/monitor-ci/SKILL.md @@ -111,7 +111,7 @@ The decision script returns one of the following statuses. This table defines th | `cipe_canceled` | Exit, CI was canceled | | `cipe_timed_out` | Exit, CI timed out | | `polling_timeout` | Exit, polling timeout reached | -| `circuit_breaker` | Exit, no progress after 5 consecutive polls | +| `circuit_breaker` | Exit, no progress after 13 consecutive polls | | `environment_rerun_cap` | Exit, environment reruns exhausted | | `fix_auto_applying` | Self-healing is handling it — just record `last_cipe_url`, enter wait mode. No MCP call or local git ops needed. | | `error` | Wait 60s and loop | diff --git a/.agents/skills/monitor-ci/scripts/ci-poll-decide.mjs b/.agents/skills/monitor-ci/scripts/ci-poll-decide.mjs index 5a296493320..5560aa564a5 100644 --- a/.agents/skills/monitor-ci/scripts/ci-poll-decide.mjs +++ b/.agents/skills/monitor-ci/scripts/ci-poll-decide.mjs @@ -106,7 +106,7 @@ function categorizeTasks() { } function backoff(count) { - const delays = [60, 90, 120]; + const delays = [60, 90, 120, 180]; return delays[Math.min(count, delays.length - 1)]; } @@ -145,7 +145,7 @@ function isNewCipe() { // 3. still waiting → wait (waiting_for_cipe) // NORMAL MODE: // 4. polling timeout → done (polling_timeout) -// 5. circuit breaker (5 polls) → done (circuit_breaker) +// 5. circuit breaker (13 polls) → done (circuit_breaker) // 6. CI succeeded → done (ci_success) // 7. CI canceled → done (cipe_canceled) // 8. CI timed out → done (cipe_timed_out) @@ -177,7 +177,7 @@ function classify() { // --- Guards --- if (isTimedOut()) return { action: "done", code: "polling_timeout" }; - if (noProgressCount >= 5) return { action: "done", code: "circuit_breaker" }; + if (noProgressCount >= 13) return { action: "done", code: "circuit_breaker" }; // --- Terminal CI states --- if (cipeStatus === "SUCCEEDED") return { action: "done", code: "ci_success" }; @@ -267,7 +267,7 @@ const messages = { // guards polling_timeout: () => "Polling timeout exceeded.", - circuit_breaker: () => "No progress after 5 consecutive polls. Stopping.", + circuit_breaker: () => "No progress after 13 consecutive polls. Stopping.", // terminal ci_success: () => "CI passed successfully!", diff --git a/.codex/config.toml b/.codex/config.toml index 8a814f76b36..a8e81ce1609 100644 --- a/.codex/config.toml +++ b/.codex/config.toml @@ -1,14 +1,10 @@ - -mcp_servers.nx-mcp.command = 'npx' -mcp_servers.nx-mcp.args = [ - 'nx', - 'mcp', - '--minimal', -] +[mcp_servers.nx-mcp] +command = "npx" +args = [ "nx", "mcp", "--minimal" ] [features] multi_agent = true [agents.ci-monitor-subagent] -description = 'CI helper for /monitor-ci. Fetches CI status, retrieves fix details, or updates self-healing fixes. Executes one MCP tool call and returns the result.' -config_file = 'agents/ci-monitor-subagent.toml' +description = "CI helper for /monitor-ci. Fetches CI status, retrieves fix details, or updates self-healing fixes. Executes one MCP tool call and returns the result." +config_file = "agents/ci-monitor-subagent.toml" diff --git a/.gemini/commands/monitor-ci.toml b/.gemini/commands/monitor-ci.toml index d8188067911..321275b0a16 100644 --- a/.gemini/commands/monitor-ci.toml +++ b/.gemini/commands/monitor-ci.toml @@ -108,7 +108,7 @@ The decision script returns one of the following statuses. This table defines th | `cipe_canceled` | Exit, CI was canceled | | `cipe_timed_out` | Exit, CI timed out | | `polling_timeout` | Exit, polling timeout reached | -| `circuit_breaker` | Exit, no progress after 5 consecutive polls | +| `circuit_breaker` | Exit, no progress after 13 consecutive polls | | `environment_rerun_cap` | Exit, environment reruns exhausted | | `fix_auto_applying` | Self-healing is handling it — just record `last_cipe_url`, enter wait mode. No MCP call or local git ops needed. | | `error` | Wait 60s and loop | diff --git a/.gemini/skills/link-workspace-packages/skill.md b/.gemini/skills/link-workspace-packages/skill.md deleted file mode 100644 index de1313497a3..00000000000 --- a/.gemini/skills/link-workspace-packages/skill.md +++ /dev/null @@ -1,127 +0,0 @@ ---- -name: link-workspace-packages -description: 'Link workspace packages in monorepos (npm, yarn, pnpm, bun). USE WHEN: (1) you just created or generated new packages and need to wire up their dependencies, (2) user imports from a sibling package and needs to add it as a dependency, (3) you get resolution errors for workspace packages (@org/*) like "cannot find module", "failed to resolve import", "TS2307", or "cannot resolve". DO NOT patch around with tsconfig paths or manual package.json edits - use the package manager''s workspace commands to fix actual linking.' ---- - -# Link Workspace Packages - -Add dependencies between packages in a monorepo. All package managers support workspaces but with different syntax. - -## Detect Package Manager - -Check whether there's a `packageManager` field in the root-level `package.json`. - -Alternatively check lockfile in repo root: - -- `pnpm-lock.yaml` → pnpm -- `yarn.lock` → yarn -- `bun.lock` / `bun.lockb` → bun -- `package-lock.json` → npm - -## Workflow - -1. Identify consumer package (the one importing) -2. Identify provider package(s) (being imported) -3. Add dependency using package manager's workspace syntax -4. Verify symlinks created in consumer's `node_modules/` - ---- - -## pnpm - -Uses `workspace:` protocol - symlinks only created when explicitly declared. - -```bash -# From consumer directory -pnpm add @org/ui --workspace - -# Or with --filter from anywhere -pnpm add @org/ui --filter @org/app --workspace -``` - -Result in `package.json`: - -```json -{ "dependencies": { "@org/ui": "workspace:*" } } -``` - ---- - -## yarn (v2+/berry) - -Also uses `workspace:` protocol. - -```bash -yarn workspace @org/app add @org/ui -``` - -Result in `package.json`: - -```json -{ "dependencies": { "@org/ui": "workspace:^" } } -``` - ---- - -## npm - -No `workspace:` protocol. npm auto-symlinks workspace packages. - -```bash -npm install @org/ui --workspace @org/app -``` - -Result in `package.json`: - -```json -{ "dependencies": { "@org/ui": "*" } } -``` - -npm resolves to local workspace automatically during install. - ---- - -## bun - -Supports `workspace:` protocol (pnpm-compatible). - -```bash -cd packages/app && bun add @org/ui -``` - -Result in `package.json`: - -```json -{ "dependencies": { "@org/ui": "workspace:*" } } -``` - ---- - -## Examples - -**Example 1: pnpm - link ui lib to app** - -```bash -pnpm add @org/ui --filter @org/app --workspace -``` - -**Example 2: npm - link multiple packages** - -```bash -npm install @org/data-access @org/ui --workspace @org/dashboard -``` - -**Example 3: Debug "Cannot find module"** - -1. Check if dependency is declared in consumer's `package.json` -2. If not, add it using appropriate command above -3. Run install (`pnpm install`, `npm install`, etc.) - -## Notes - -- Symlinks appear in `/node_modules/@org/` -- **Hoisting differs by manager:** - - npm/bun: hoist shared deps to root `node_modules` - - pnpm: no hoisting (strict isolation, prevents phantom deps) - - yarn berry: uses Plug'n'Play by default (no `node_modules`) -- Root `package.json` should have `"private": true` to prevent accidental publish diff --git a/.gemini/skills/monitor-ci/references/fix-flows.md b/.gemini/skills/monitor-ci/references/fix-flows.md deleted file mode 100644 index b33aa02167b..00000000000 --- a/.gemini/skills/monitor-ci/references/fix-flows.md +++ /dev/null @@ -1,108 +0,0 @@ -# Detailed Status Handling & Fix Flows - -## Status Handling by Code - -### fix_auto_apply_skipped - -The script returns `autoApplySkipReason` in its output. - -1. Report the skip reason to the user (e.g., "Auto-apply was skipped because the previous CI pipeline execution was triggered by Nx Cloud") -2. Offer to apply the fix manually — spawn UPDATE_FIX subagent with `APPLY` if user agrees -3. Record `last_cipe_url`, enter wait mode - -### fix_apply_ready - -- Spawn UPDATE_FIX subagent with `APPLY` -- Record `last_cipe_url`, enter wait mode - -### fix_needs_local_verify - -The script returns `verifiableTaskIds` in its output. - -1. **Detect package manager:** `pnpm-lock.yaml` → `pnpm nx`, `yarn.lock` → `yarn nx`, otherwise `npx nx` -2. **Run verifiable tasks in parallel** — spawn `general` subagents for each task -3. **If all pass** → spawn UPDATE_FIX subagent with `APPLY`, enter wait mode -4. **If any fail** → Apply Locally + Enhance Flow (see below) - -### fix_needs_review - -Spawn FETCH_HEAVY subagent, then analyze fix content (`suggestedFixDescription`, `suggestedFixSummary`, `taskFailureSummaries`): - -- If fix looks correct → apply via MCP -- If fix needs enhancement → Apply Locally + Enhance Flow -- If fix is wrong → run `ci-state-update.mjs gate --gate-type local-fix`. If not allowed, print message and exit. Otherwise → Reject + Fix From Scratch Flow - -### fix_failed / no_fix - -Spawn FETCH_HEAVY subagent for `taskFailureSummaries`. Run `ci-state-update.mjs gate --gate-type local-fix` — if not allowed, print message and exit. Otherwise attempt local fix (counter already incremented by gate). If successful → commit, push, enter wait mode. If not → exit with failure. - -### environment_issue - -1. Run `ci-state-update.mjs gate --gate-type env-rerun`. If not allowed, print message and exit. -2. Spawn UPDATE_FIX subagent with `RERUN_ENVIRONMENT_STATE` -3. Enter wait mode with `last_cipe_url` set - -### self_healing_throttled - -Spawn FETCH_HEAVY subagent for `selfHealingSkipMessage`. - -1. **Parse throttle message** for CI Attempt URLs (regex: `/cipes/{id}`) -2. **Reject previous fixes** — for each URL: spawn FETCH_THROTTLE_INFO to get `shortLink`, then UPDATE_FIX with `REJECT` -3. **Attempt local fix**: Run `ci-state-update.mjs gate --gate-type local-fix`. If not allowed → skip to step 4. Otherwise use `failedTaskIds` and `taskFailureSummaries` for context. -4. **Fallback if local fix not possible or budget exhausted**: push empty commit (`git commit --allow-empty -m "ci: rerun after rejecting throttled fixes"`), enter wait mode - -### no_new_cipe - -1. Report to user: no CI attempt found, suggest checking CI provider -2. If `--auto-fix-workflow`: detect package manager, run install, commit lockfile if changed, enter wait mode -3. Otherwise: exit with guidance - -### cipe_no_tasks - -1. Report to user: CI failed with no tasks recorded -2. Retry: `git commit --allow-empty -m "chore: retry ci [monitor-ci]"` + push, enter wait mode -3. If retry also returns `cipe_no_tasks`: exit with failure - -## Fix Action Flows - -### Apply via MCP - -Spawn UPDATE_FIX subagent with `APPLY`. New CI Attempt spawns automatically. No local git ops. - -### Apply Locally + Enhance Flow - -1. `nx-cloud apply-locally ` (sets state to `APPLIED_LOCALLY`) -2. Enhance code to fix failing tasks -3. Run failing tasks to verify -4. If still failing → run `ci-state-update.mjs gate --gate-type local-fix`. If not allowed, commit current state and push (let CI be final judge). Otherwise loop back to enhance. -5. If passing → commit and push, enter wait mode - -### Reject + Fix From Scratch Flow - -1. Run `ci-state-update.mjs gate --gate-type local-fix`. If not allowed, print message and exit. -2. Spawn UPDATE_FIX subagent with `REJECT` -3. Fix from scratch locally -4. Commit and push, enter wait mode - -## Environment vs Code Failure Recognition - -When any local fix path runs a task and it fails, assess whether the failure is a **code issue** or an **environment/tooling issue** before running the gate script. - -**Indicators of environment/tooling failures** (non-exhaustive): command not found / binary missing, OOM / heap allocation failures, permission denied, network timeouts / DNS failures, missing system libraries, Docker/container issues, disk space exhaustion. - -When detected → bail immediately without running gate (no budget consumed). Report that the failure is an environment/tooling issue, not a code bug. - -**Code failures** (compilation errors, test assertion failures, lint violations, type errors) are genuine candidates for local fix attempts and proceed normally through the gate. - -## Git Safety - -- Stage specific files by name — `git add -A` or `git add .` risks committing the user's unrelated work-in-progress or secrets - -## Commit Message Format - -```bash -git commit -m "fix(): - -Failed tasks: , -Local verification: passed|enhanced|failed-pushing-to-ci" -``` diff --git a/.gemini/skills/monitor-ci/scripts/ci-poll-decide.mjs b/.gemini/skills/monitor-ci/scripts/ci-poll-decide.mjs deleted file mode 100644 index 5a296493320..00000000000 --- a/.gemini/skills/monitor-ci/scripts/ci-poll-decide.mjs +++ /dev/null @@ -1,384 +0,0 @@ -#!/usr/bin/env node - -/** - * CI Poll Decision Script - * - * Deterministic decision engine for CI monitoring. - * Takes ci_information JSON + state args, outputs a single JSON action line. - * - * Architecture: - * classify() — pure decision tree, returns { action, code, extra? } - * buildOutput() — maps classification to full output with messages, delays, counters - * - * Usage: - * node ci-poll-decide.mjs '' \ - * [--wait-mode] [--prev-cipe-url ] [--expected-sha ] \ - * [--prev-status ] [--timeout ] [--new-cipe-timeout ] \ - * [--env-rerun-count ] [--no-progress-count ] \ - * [--prev-cipe-status ] [--prev-sh-status ] \ - * [--prev-verification-status ] [--prev-failure-classification ] - */ - -// --- Arg parsing --- - -const args = process.argv.slice(2); -const ciInfoJson = args[0]; -const pollCount = parseInt(args[1], 10) || 0; -const verbosity = args[2] || "medium"; - -function getFlag(name) { - return args.includes(name); -} - -function getArg(name) { - const idx = args.indexOf(name); - return idx !== -1 && idx + 1 < args.length ? args[idx + 1] : null; -} - -const waitMode = getFlag("--wait-mode"); -const prevCipeUrl = getArg("--prev-cipe-url"); -const expectedSha = getArg("--expected-sha"); -const prevStatus = getArg("--prev-status"); -const timeoutSeconds = parseInt(getArg("--timeout") || "0", 10); -const newCipeTimeoutSeconds = parseInt(getArg("--new-cipe-timeout") || "0", 10); -const envRerunCount = parseInt(getArg("--env-rerun-count") || "0", 10); -const inputNoProgressCount = parseInt(getArg("--no-progress-count") || "0", 10); -const prevCipeStatus = getArg("--prev-cipe-status"); -const prevShStatus = getArg("--prev-sh-status"); -const prevVerificationStatus = getArg("--prev-verification-status"); -const prevFailureClassification = getArg("--prev-failure-classification"); - -// --- Parse CI info --- - -let ci; -try { - ci = JSON.parse(ciInfoJson); -} catch { - console.log( - JSON.stringify({ - action: "done", - code: "error", - message: "Failed to parse ci_information JSON", - noProgressCount: inputNoProgressCount + 1, - envRerunCount, - }), - ); - process.exit(0); -} - -const { - cipeStatus, - selfHealingStatus, - verificationStatus, - selfHealingEnabled, - selfHealingSkippedReason, - failureClassification: rawFailureClassification, - failedTaskIds = [], - verifiedTaskIds = [], - couldAutoApplyTasks, - autoApplySkipped, - autoApplySkipReason, - userAction, - cipeUrl, - commitSha, -} = ci; - -const failureClassification = rawFailureClassification?.toLowerCase() ?? null; - -// --- Helpers --- - -function categorizeTasks() { - const verifiedSet = new Set(verifiedTaskIds); - const unverified = failedTaskIds.filter((t) => !verifiedSet.has(t)); - if (unverified.length === 0) return { category: "all_verified" }; - - const e2e = unverified.filter((t) => { - const parts = t.split(":"); - return parts.length >= 2 && parts[1].includes("e2e"); - }); - if (e2e.length === unverified.length) return { category: "e2e_only" }; - - const verifiable = unverified.filter((t) => { - const parts = t.split(":"); - return !(parts.length >= 2 && parts[1].includes("e2e")); - }); - return { category: "needs_local_verify", verifiableTaskIds: verifiable }; -} - -function backoff(count) { - const delays = [60, 90, 120]; - return delays[Math.min(count, delays.length - 1)]; -} - -function hasStateChanged() { - if (prevCipeStatus && cipeStatus !== prevCipeStatus) return true; - if (prevShStatus && selfHealingStatus !== prevShStatus) return true; - if (prevVerificationStatus && verificationStatus !== prevVerificationStatus) return true; - if (prevFailureClassification && failureClassification !== prevFailureClassification) return true; - return false; -} - -function isTimedOut() { - if (timeoutSeconds <= 0) return false; - const avgDelay = pollCount === 0 ? 0 : backoff(Math.floor(pollCount / 2)); - return pollCount * avgDelay >= timeoutSeconds; -} - -function isWaitTimedOut() { - if (newCipeTimeoutSeconds <= 0) return false; - return pollCount * 30 >= newCipeTimeoutSeconds; -} - -function isNewCipe() { - return (prevCipeUrl && cipeUrl && cipeUrl !== prevCipeUrl) || (expectedSha && commitSha && commitSha === expectedSha); -} - -// ============================================================ -// classify() — pure decision tree -// -// Returns: { action: 'poll'|'wait'|'done', code: string, extra? } -// -// Decision priority (top wins): -// WAIT MODE: -// 1. new CI Attempt detected → poll (new_cipe_detected) -// 2. wait timed out → done (no_new_cipe) -// 3. still waiting → wait (waiting_for_cipe) -// NORMAL MODE: -// 4. polling timeout → done (polling_timeout) -// 5. circuit breaker (5 polls) → done (circuit_breaker) -// 6. CI succeeded → done (ci_success) -// 7. CI canceled → done (cipe_canceled) -// 8. CI timed out → done (cipe_timed_out) -// 9. CI failed, no tasks recorded → done (cipe_no_tasks) -// 10. environment failure → done (environment_rerun_cap | environment_issue) -// 11. self-healing throttled → done (self_healing_throttled) -// 12. CI in progress / not started → poll (ci_running) -// 13. self-healing in progress → poll (sh_running) -// 14. flaky task auto-rerun → poll (flaky_rerun) -// 15. fix auto-applied → poll (fix_auto_applied) -// 16. auto-apply: skipped → done (fix_auto_apply_skipped) -// 17. auto-apply: verification pending→ poll (verification_pending) -// 18. auto-apply: verified → done (fix_auto_applying) -// 19. fix: verification failed/none → done (fix_needs_review) -// 20. fix: all/e2e verified → done (fix_apply_ready) -// 21. fix: needs local verify → done (fix_needs_local_verify) -// 22. self-healing failed → done (fix_failed) -// 23. no fix available → done (no_fix) -// 24. fallback → poll (fallback) -// ============================================================ - -function classify() { - // --- Wait mode --- - if (waitMode) { - if (isNewCipe()) return { action: "poll", code: "new_cipe_detected" }; - if (isWaitTimedOut()) return { action: "done", code: "no_new_cipe" }; - return { action: "wait", code: "waiting_for_cipe" }; - } - - // --- Guards --- - if (isTimedOut()) return { action: "done", code: "polling_timeout" }; - if (noProgressCount >= 5) return { action: "done", code: "circuit_breaker" }; - - // --- Terminal CI states --- - if (cipeStatus === "SUCCEEDED") return { action: "done", code: "ci_success" }; - if (cipeStatus === "CANCELED") return { action: "done", code: "cipe_canceled" }; - if (cipeStatus === "TIMED_OUT") return { action: "done", code: "cipe_timed_out" }; - - // --- CI failed, no tasks --- - if (cipeStatus === "FAILED" && failedTaskIds.length === 0 && selfHealingStatus == null) - return { action: "done", code: "cipe_no_tasks" }; - - // --- Environment failure --- - if (failureClassification === "environment_state") { - if (envRerunCount >= 2) return { action: "done", code: "environment_rerun_cap" }; - return { action: "done", code: "environment_issue" }; - } - - // --- Throttled --- - if (selfHealingSkippedReason === "THROTTLED") return { action: "done", code: "self_healing_throttled" }; - - // --- Still running: CI --- - if (cipeStatus === "IN_PROGRESS" || cipeStatus === "NOT_STARTED") return { action: "poll", code: "ci_running" }; - - // --- Still running: self-healing --- - if ((selfHealingStatus === "IN_PROGRESS" || selfHealingStatus === "NOT_STARTED") && !selfHealingSkippedReason) - return { action: "poll", code: "sh_running" }; - - // --- Still running: flaky rerun --- - if (failureClassification === "flaky_task") return { action: "poll", code: "flaky_rerun" }; - - // --- Fix auto-applied, waiting for new CI Attempt --- - if (userAction === "APPLIED_AUTOMATICALLY") return { action: "poll", code: "fix_auto_applied" }; - - // --- Auto-apply path (couldAutoApplyTasks) --- - if (couldAutoApplyTasks === true) { - if (autoApplySkipped === true) - return { - action: "done", - code: "fix_auto_apply_skipped", - extra: { autoApplySkipReason }, - }; - if (verificationStatus === "NOT_STARTED" || verificationStatus === "IN_PROGRESS") - return { action: "poll", code: "verification_pending" }; - if (verificationStatus === "COMPLETED") return { action: "done", code: "fix_auto_applying" }; - // verification FAILED or NOT_EXECUTABLE → falls through to fix_needs_review - } - - // --- Fix available --- - if (selfHealingStatus === "COMPLETED") { - if ( - verificationStatus === "FAILED" || - verificationStatus === "NOT_EXECUTABLE" || - (couldAutoApplyTasks !== true && !verificationStatus) - ) - return { action: "done", code: "fix_needs_review" }; - - const tasks = categorizeTasks(); - if (tasks.category === "all_verified" || tasks.category === "e2e_only") - return { action: "done", code: "fix_apply_ready" }; - return { - action: "done", - code: "fix_needs_local_verify", - extra: { verifiableTaskIds: tasks.verifiableTaskIds }, - }; - } - - // --- Fix failed --- - if (selfHealingStatus === "FAILED") return { action: "done", code: "fix_failed" }; - - // --- No fix available --- - if (cipeStatus === "FAILED" && (selfHealingEnabled === false || selfHealingStatus === "NOT_EXECUTABLE")) - return { action: "done", code: "no_fix" }; - - // --- Fallback --- - return { action: "poll", code: "fallback" }; -} - -// ============================================================ -// buildOutput() — maps classification to full JSON output -// ============================================================ - -// Message templates keyed by status or key -const messages = { - // wait mode - new_cipe_detected: () => `New CI Attempt detected! CI: ${cipeStatus || "N/A"}`, - no_new_cipe: () => "New CI Attempt timeout exceeded. No new CI Attempt detected.", - waiting_for_cipe: () => "Waiting for new CI Attempt...", - - // guards - polling_timeout: () => "Polling timeout exceeded.", - circuit_breaker: () => "No progress after 5 consecutive polls. Stopping.", - - // terminal - ci_success: () => "CI passed successfully!", - cipe_canceled: () => "CI Attempt was canceled.", - cipe_timed_out: () => "CI Attempt timed out.", - cipe_no_tasks: () => "CI failed but no Nx tasks were recorded.", - - // environment - environment_rerun_cap: () => "Environment rerun cap (2) exceeded. Bailing.", - environment_issue: () => "CI: FAILED | Classification: ENVIRONMENT_STATE", - - // throttled - self_healing_throttled: () => "Self-healing throttled \u2014 too many unapplied fixes.", - - // polling - ci_running: () => `CI: ${cipeStatus}`, - sh_running: () => `CI: ${cipeStatus} | Self-healing: ${selfHealingStatus}`, - flaky_rerun: () => "CI: FAILED | Classification: FLAKY_TASK (auto-rerun in progress)", - fix_auto_applied: () => "CI: FAILED | Fix auto-applied, new CI Attempt spawning", - verification_pending: () => `CI: FAILED | Self-healing: COMPLETED | Verification: ${verificationStatus}`, - - // actionable - fix_auto_applying: () => "Fix verified! Auto-applying...", - fix_auto_apply_skipped: (extra) => - `Fix verified but auto-apply was skipped. ${ - extra?.autoApplySkipReason ? `Reason: ${extra.autoApplySkipReason}` : "Offer to apply manually." - }`, - fix_needs_review: () => `Fix available but needs review. Verification: ${verificationStatus || "N/A"}`, - fix_apply_ready: () => "Fix available and verified. Ready to apply.", - fix_needs_local_verify: (extra) => - `Fix available. ${extra.verifiableTaskIds.length} task(s) need local verification.`, - fix_failed: () => "Self-healing failed to generate a fix.", - no_fix: () => "CI failed, no fix available.", - - // fallback - fallback: () => - `CI: ${cipeStatus || "N/A"} | Self-healing: ${ - selfHealingStatus || "N/A" - } | Verification: ${verificationStatus || "N/A"}`, -}; - -// Codes where noProgressCount resets to 0 (genuine progress occurred) -const resetProgressCodes = new Set([ - "ci_success", - "fix_auto_applying", - "fix_auto_apply_skipped", - "fix_needs_review", - "fix_apply_ready", - "fix_needs_local_verify", -]); - -function formatMessage(msg) { - if (verbosity === "minimal") { - const currentStatus = `${cipeStatus}|${selfHealingStatus}|${verificationStatus}`; - if (currentStatus === (prevStatus || "")) return null; - return msg; - } - if (verbosity === "verbose") { - return [ - `Poll #${pollCount + 1} | CI: ${cipeStatus || "N/A"} | Self-healing: ${ - selfHealingStatus || "N/A" - } | Verification: ${verificationStatus || "N/A"}`, - msg, - ].join("\n"); - } - return `Poll #${pollCount + 1} | ${msg}`; -} - -function buildOutput(decision) { - const { action, code, extra } = decision; - - // noProgressCount is already computed before classify() was called. - // Here we only handle the reset for "genuine progress" done-codes. - - const msgFn = messages[code]; - const rawMsg = msgFn ? msgFn(extra) : `Unknown: ${code}`; - const message = formatMessage(rawMsg); - - const result = { - action, - code, - message, - noProgressCount: resetProgressCodes.has(code) ? 0 : noProgressCount, - envRerunCount, - }; - - // Add delay - if (action === "wait") { - result.delay = 30; - } else if (action === "poll") { - result.delay = code === "new_cipe_detected" ? 60 : backoff(noProgressCount); - result.fields = "light"; - } - - // Add extras - if (code === "new_cipe_detected") result.newCipeDetected = true; - if (extra?.verifiableTaskIds) result.verifiableTaskIds = extra.verifiableTaskIds; - if (extra?.autoApplySkipReason) result.autoApplySkipReason = extra.autoApplySkipReason; - - console.log(JSON.stringify(result)); -} - -// --- Run --- - -// Compute noProgressCount from input. Single assignment, no mutation. -// Wait mode: reset on new cipe, otherwise unchanged (wait doesn't count as no-progress). -// Normal mode: reset on any state change, otherwise increment. -const noProgressCount = (() => { - if (waitMode) return isNewCipe() ? 0 : inputNoProgressCount; - if (isNewCipe() || hasStateChanged()) return 0; - return inputNoProgressCount + 1; -})(); - -buildOutput(classify()); diff --git a/.gemini/skills/monitor-ci/scripts/ci-state-update.mjs b/.gemini/skills/monitor-ci/scripts/ci-state-update.mjs deleted file mode 100644 index 345daa0c7df..00000000000 --- a/.gemini/skills/monitor-ci/scripts/ci-state-update.mjs +++ /dev/null @@ -1,158 +0,0 @@ -#!/usr/bin/env node - -/** - * CI State Update Script - * - * Deterministic state management for CI monitor actions. - * Three commands: gate, post-action, cycle-check. - * - * Usage: - * node ci-state-update.mjs gate --gate-type [counter args] - * node ci-state-update.mjs post-action --action [--cipe-url ] [--commit-sha ] - * node ci-state-update.mjs cycle-check --code [--agent-triggered] [counter args] - */ - -// --- Arg parsing --- - -const args = process.argv.slice(2); -const command = args[0]; - -function getFlag(name) { - return args.includes(name); -} - -function getArg(name) { - const idx = args.indexOf(name); - return idx !== -1 && idx + 1 < args.length ? args[idx + 1] : null; -} - -function output(result) { - console.log(JSON.stringify(result)); -} - -// --- gate --- -// Check if an action is allowed and return incremented counter. -// Called before any local fix attempt or environment rerun. - -function gate() { - const gateType = getArg("--gate-type"); - - if (gateType === "local-fix") { - const count = parseInt(getArg("--local-verify-count") || "0", 10); - const max = parseInt(getArg("--local-verify-attempts") || "3", 10); - if (count >= max) { - return output({ - allowed: false, - localVerifyCount: count, - message: `Local fix budget exhausted (${count}/${max} attempts)`, - }); - } - return output({ - allowed: true, - localVerifyCount: count + 1, - message: null, - }); - } - - if (gateType === "env-rerun") { - const count = parseInt(getArg("--env-rerun-count") || "0", 10); - if (count >= 2) { - return output({ - allowed: false, - envRerunCount: count, - message: `Environment issue persists after ${count} reruns. Manual investigation needed.`, - }); - } - return output({ - allowed: true, - envRerunCount: count + 1, - message: null, - }); - } - - output({ allowed: false, message: `Unknown gate type: ${gateType}` }); -} - -// --- post-action --- -// Compute next state after an action is taken. -// Returns wait mode params and whether the action was agent-triggered. - -function postAction() { - const action = getArg("--action"); - const cipeUrl = getArg("--cipe-url"); - const commitSha = getArg("--commit-sha"); - - // MCP-triggered or auto-applied: track by cipeUrl - const cipeUrlActions = ["fix-auto-applying", "apply-mcp", "env-rerun"]; - // Local push: track by commitSha - const commitShaActions = [ - "apply-local-push", - "reject-fix-push", - "local-fix-push", - "auto-fix-push", - "empty-commit-push", - ]; - - const trackByCipeUrl = cipeUrlActions.includes(action); - const trackByCommitSha = commitShaActions.includes(action); - - if (!trackByCipeUrl && !trackByCommitSha) { - return output({ error: `Unknown action: ${action}` }); - } - - // fix-auto-applying: self-healing did it, NOT the monitor - const agentTriggered = action !== "fix-auto-applying"; - - output({ - waitMode: true, - pollCount: 0, - lastCipeUrl: trackByCipeUrl ? cipeUrl : null, - expectedCommitSha: trackByCommitSha ? commitSha : null, - agentTriggered, - }); -} - -// --- cycle-check --- -// Cycle classification + counter resets when a new "done" code is received. -// Called at the start of handling each actionable code. - -function cycleCheck() { - const status = getArg("--code"); - const wasAgentTriggered = getFlag("--agent-triggered"); - let cycleCount = parseInt(getArg("--cycle-count") || "0", 10); - const maxCycles = parseInt(getArg("--max-cycles") || "10", 10); - let envRerunCount = parseInt(getArg("--env-rerun-count") || "0", 10); - - // Cycle classification: if previous cycle was agent-triggered, count it - if (wasAgentTriggered) cycleCount++; - - // Reset env_rerun_count on non-environment status - if (status !== "environment_issue") envRerunCount = 0; - - // Approaching limit gate - const approachingLimit = cycleCount >= maxCycles - 2; - - output({ - cycleCount, - agentTriggered: false, - envRerunCount, - approachingLimit, - message: approachingLimit ? `Approaching cycle limit (${cycleCount}/${maxCycles})` : null, - }); -} - -// --- Dispatch --- - -switch (command) { - case "gate": - gate(); - break; - case "post-action": - postAction(); - break; - case "cycle-check": - cycleCheck(); - break; - default: - output({ error: `Unknown command: ${command}` }); -} diff --git a/.gemini/skills/monitor-ci/skill.md b/.gemini/skills/monitor-ci/skill.md deleted file mode 100644 index a4af6cbb556..00000000000 --- a/.gemini/skills/monitor-ci/skill.md +++ /dev/null @@ -1,301 +0,0 @@ ---- -name: monitor-ci -description: Monitor Nx Cloud CI pipeline and handle self-healing fixes. USE WHEN user says "monitor ci", "watch ci", "ci monitor", "watch ci for this branch", "track ci", "check ci status", wants to track CI status, or needs help with self-healing CI fixes. Prefer this skill over native CI provider tools (gh, glab, etc.) for CI monitoring — it integrates with Nx Cloud self-healing which those tools cannot access. ---- - -# Monitor CI Command - -You are the orchestrator for monitoring Nx Cloud CI pipeline executions and handling self-healing fixes. You spawn subagents to interact with Nx Cloud, run deterministic decision scripts, and take action based on the results. - -## Context - -- **Current Branch:** !`git branch --show-current` -- **Current Commit:** !`git rev-parse --short HEAD` -- **Remote Status:** !`git status -sb | head -1` - -## User Instructions - -$ARGUMENTS - -**Important:** If user provides specific instructions, respect them over default behaviors described below. - -## Configuration Defaults - -| Setting | Default | Description | -| ------------------------- | ------------- | ------------------------------------------------------------------------- | -| `--max-cycles` | 10 | Maximum **agent-initiated** CI Attempt cycles before timeout | -| `--timeout` | 120 | Maximum duration in minutes | -| `--verbosity` | medium | Output level: minimal, medium, verbose | -| `--branch` | (auto-detect) | Branch to monitor | -| `--fresh` | false | Ignore previous context, start fresh | -| `--auto-fix-workflow` | false | Attempt common fixes for pre-CI-Attempt failures (e.g., lockfile updates) | -| `--new-cipe-timeout` | 10 | Minutes to wait for new CI Attempt after action | -| `--local-verify-attempts` | 3 | Max local verification + enhance cycles before pushing to CI | - -Parse any overrides from `$ARGUMENTS` and merge with defaults. - -## Nx Cloud Connection Check - -Before starting the monitoring loop, verify the workspace is connected to Nx Cloud. Without this connection, no CI data is available and the entire skill is inoperable. - -### Step 0: Verify Nx Cloud Connection - -1. **Check `nx.json`** at workspace root for `nxCloudId` or `nxCloudAccessToken` -2. **If `nx.json` missing OR neither property exists** → exit with: - - ``` - Nx Cloud not connected. Unlock 70% faster CI and auto-fix broken PRs with https://nx.dev/nx-cloud - ``` - -3. **If connected** → continue to main loop - -## Architecture Overview - -1. **This skill (orchestrator)**: spawns subagents, runs scripts, prints status, does local coding work -2. **ci-monitor-subagent (haiku)**: calls one MCP tool (ci_information or update_self_healing_fix), returns structured result, exits -3. **ci-poll-decide.mjs (deterministic script)**: takes ci_information result + state, returns action + status message -4. **ci-state-update.mjs (deterministic script)**: manages budget gates, post-action state transitions, and cycle classification - -## Status Reporting - -The decision script handles message formatting based on verbosity. When printing messages to the user: - -- Prepend `[monitor-ci]` to every message from the script's `message` field -- For your own action messages (e.g. "Applying fix via MCP..."), also prepend `[monitor-ci]` - -## Anti-Patterns - -These behaviors cause real problems — racing with self-healing, losing CI progress, or wasting context: - -| Anti-Pattern | Why It's Bad | -| ----------------------------------------------------------------------------------------------- | ------------------------------------------------------------------ | -| Using CI provider CLIs with `--watch` flags (e.g., `gh pr checks --watch`, `glab ci status -w`) | Bypasses Nx Cloud self-healing entirely | -| Writing custom CI polling scripts | Unreliable, pollutes context, no self-healing | -| Cancelling CI workflows/pipelines | Destructive, loses CI progress | -| Running CI checks on main agent | Wastes main agent context tokens | -| Independently analyzing/fixing CI failures while polling | Races with self-healing, causes duplicate fixes and confused state | - -**If this skill fails to activate**, the fallback is: - -1. Use CI provider CLI for a one-time, read-only status check (single call, no watch/polling flags) -2. Immediately delegate to this skill with gathered context -3. Do not continue polling on main agent — it wastes context tokens and bypasses self-healing - -## Session Context Behavior - -If the user previously ran `/monitor-ci` in this session, you may have prior state (poll counts, last CI Attempt URL, etc.). Resume from that state unless `--fresh` is set, in which case discard it and start from Step 1. - -## MCP Tool Reference - -Three field sets control polling efficiency — use the lightest set that gives you what you need: - -```yaml -WAIT_FIELDS: "cipeUrl,commitSha,cipeStatus" -LIGHT_FIELDS: "cipeStatus,cipeUrl,branch,commitSha,selfHealingStatus,verificationStatus,userAction,failedTaskIds,verifiedTaskIds,selfHealingEnabled,failureClassification,couldAutoApplyTasks,autoApplySkipped,autoApplySkipReason,shortLink,confidence,confidenceReasoning,hints,selfHealingSkippedReason,selfHealingSkipMessage" -HEAVY_FIELDS: "taskOutputSummary,suggestedFix,suggestedFixReasoning,suggestedFixDescription" -``` - -The `ci_information` tool accepts `branch` (optional, defaults to current git branch), `select` (comma-separated field names), and `pageToken` (0-based pagination for long strings). - -The `update_self_healing_fix` tool accepts a `shortLink` and an action: `APPLY`, `REJECT`, or `RERUN_ENVIRONMENT_STATE`. - -## Default Behaviors by Status - -The decision script returns one of the following statuses. This table defines the **default behavior** for each. User instructions can override any of these. - -**Simple exits** — just report and exit: - -| Status | Default Behavior | -| ----------------------- | ---------------------------------------------------------------------------------------------------------------- | -| `ci_success` | Exit with success | -| `cipe_canceled` | Exit, CI was canceled | -| `cipe_timed_out` | Exit, CI timed out | -| `polling_timeout` | Exit, polling timeout reached | -| `circuit_breaker` | Exit, no progress after 5 consecutive polls | -| `environment_rerun_cap` | Exit, environment reruns exhausted | -| `fix_auto_applying` | Self-healing is handling it — just record `last_cipe_url`, enter wait mode. No MCP call or local git ops needed. | -| `error` | Wait 60s and loop | - -**Statuses requiring action** — when handling these in Step 3, read `references/fix-flows.md` for the detailed flow: - -| Status | Summary | -| ------------------------ | --------------------------------------------------------------------------------------------- | -| `fix_auto_apply_skipped` | Fix verified but auto-apply skipped (e.g., loop prevention). Inform user, offer manual apply. | -| `fix_apply_ready` | Fix verified (all tasks or e2e-only). Apply via MCP. | -| `fix_needs_local_verify` | Fix has unverified non-e2e tasks. Run locally, then apply or enhance. | -| `fix_needs_review` | Fix verification failed/not attempted. Analyze and decide. | -| `fix_failed` | Self-healing failed. Fetch heavy data, attempt local fix (gate check first). | -| `no_fix` | No fix available. Fetch heavy data, attempt local fix (gate check first) or exit. | -| `environment_issue` | Request environment rerun via MCP (gate check first). | -| `self_healing_throttled` | Reject old fixes, attempt local fix. | -| `no_new_cipe` | CI Attempt never spawned. Auto-fix workflow or exit with guidance. | -| `cipe_no_tasks` | CI failed with no tasks. Retry once with empty commit. | - -**Key rules (always apply):** - -- **Git safety**: Stage specific files by name — `git add -A` or `git add .` risks committing the user's unrelated work-in-progress or secrets -- **Environment failures** (OOM, command not found, permission denied): bail immediately. These aren't code bugs, so spending local-fix budget on them is wasteful -- **Gate check**: Run `ci-state-update.mjs gate` before local fix attempts — if budget exhausted, print message and exit - -## Main Loop - -### Step 1: Initialize Tracking - -``` -cycle_count = 0 # Only incremented for agent-initiated cycles (counted against --max-cycles) -start_time = now() -no_progress_count = 0 -local_verify_count = 0 -env_rerun_count = 0 -last_cipe_url = null -expected_commit_sha = null -agent_triggered = false # Set true after monitor takes an action that triggers new CI Attempt -poll_count = 0 -wait_mode = false -prev_status = null -prev_cipe_status = null -prev_sh_status = null -prev_verification_status = null -prev_failure_classification = null -``` - -### Step 2: Polling Loop - -Repeat until done: - -#### 2a. Spawn subagent (FETCH_STATUS) - -Determine select fields based on mode: - -- **Wait mode**: use WAIT_FIELDS (`cipeUrl,commitSha,cipeStatus`) -- **Normal mode (first poll or after newCipeDetected)**: use LIGHT_FIELDS - -Call the `ci_information` tool with the determined `select` fields for the current branch. Wait for the result before proceeding. - -#### 2b. Run decision script - -```bash -node /scripts/ci-poll-decide.mjs '' \ - [--wait-mode] \ - [--prev-cipe-url ] \ - [--expected-sha ] \ - [--prev-status ] \ - [--timeout ] \ - [--new-cipe-timeout ] \ - [--env-rerun-count ] \ - [--no-progress-count ] \ - [--prev-cipe-status ] \ - [--prev-sh-status ] \ - [--prev-verification-status ] \ - [--prev-failure-classification ] -``` - -The script outputs a single JSON line: `{ action, code, message, delay?, noProgressCount, envRerunCount, fields?, newCipeDetected?, verifiableTaskIds? }` - -#### 2c. Process script output - -Parse the JSON output and update tracking state: - -- `no_progress_count = output.noProgressCount` -- `env_rerun_count = output.envRerunCount` -- `prev_cipe_status = subagent_result.cipeStatus` -- `prev_sh_status = subagent_result.selfHealingStatus` -- `prev_verification_status = subagent_result.verificationStatus` -- `prev_failure_classification = subagent_result.failureClassification` -- `prev_status = output.action + ":" + (output.code || subagent_result.cipeStatus)` -- `poll_count++` - -Based on `action`: - -- **`action == "poll"`**: Print `output.message`, sleep `output.delay` seconds, go to 2a - - If `output.newCipeDetected`: clear wait mode, reset `wait_mode = false` -- **`action == "wait"`**: Print `output.message`, sleep `output.delay` seconds, go to 2a -- **`action == "done"`**: Proceed to Step 3 with `output.code` - -### Step 3: Handle Actionable Status - -When decision script returns `action == "done"`: - -1. Run cycle-check (Step 4) **before** handling the code -2. Check the returned `code` -3. Look up default behavior in the table above -4. Check if user instructions override the default -5. Execute the appropriate action -6. **If action expects new CI Attempt**, update tracking (see Step 3a) -7. If action results in looping, go to Step 2 - -#### Tool calls for actions - -Several statuses require fetching additional data or calling tools: - -- **fix_apply_ready**: Call `update_self_healing_fix` with action `APPLY` -- **fix_needs_local_verify**: Call `ci_information` with HEAVY_FIELDS for fix details before local verification -- **fix_needs_review**: Call `ci_information` with HEAVY_FIELDS → get `suggestedFixDescription`, `suggestedFixSummary`, `taskFailureSummaries` -- **fix_failed / no_fix**: Call `ci_information` with HEAVY_FIELDS → get `taskFailureSummaries` for local fix context -- **environment_issue**: Call `update_self_healing_fix` with action `RERUN_ENVIRONMENT_STATE` -- **self_healing_throttled**: Call `ci_information` with HEAVY_FIELDS → get `selfHealingSkipMessage`; then call `update_self_healing_fix` for each old fix - -### Step 3a: Track State for New-CI-Attempt Detection - -After actions that should trigger a new CI Attempt, run: - -```bash -node /scripts/ci-state-update.mjs post-action \ - --action \ - --cipe-url \ - --commit-sha -``` - -Action types: `fix-auto-applying`, `apply-mcp`, `apply-local-push`, `reject-fix-push`, `local-fix-push`, `env-rerun`, `auto-fix-push`, `empty-commit-push` - -The script returns `{ waitMode, pollCount, lastCipeUrl, expectedCommitSha, agentTriggered }`. Update all tracking state from the output, then go to Step 2. - -### Step 4: Cycle Classification and Progress Tracking - -When the decision script returns `action == "done"`, run cycle-check **before** handling the code: - -```bash -node /scripts/ci-state-update.mjs cycle-check \ - --code \ - [--agent-triggered] \ - --cycle-count --max-cycles \ - --env-rerun-count -``` - -The script returns `{ cycleCount, agentTriggered, envRerunCount, approachingLimit, message }`. Update tracking state from the output. - -- If `approachingLimit` → ask user whether to continue (with 5 or 10 more cycles) or stop monitoring -- If previous cycle was NOT agent-triggered (human pushed), log that human-initiated push was detected - -#### Progress Tracking - -- `no_progress_count`, circuit breaker (5 polls), and backoff reset are handled by ci-poll-decide.mjs (progress = any change in cipeStatus, selfHealingStatus, verificationStatus, or failureClassification) -- `env_rerun_count` reset on non-environment status is handled by ci-state-update.mjs cycle-check -- On new CI Attempt detected (poll script returns `newCipeDetected`) → reset `local_verify_count = 0`, `env_rerun_count = 0` - -## Error Handling - -| Error | Action | -| ------------------------------ | ----------------------------------------------------------------------------------------------------------- | -| Git rebase conflict | Report to user, exit | -| `nx-cloud apply-locally` fails | Reject fix via MCP (`action: "REJECT"`), then attempt manual patch (Reject + Fix From Scratch Flow) or exit | -| MCP tool error | Retry once, if fails report to user | -| Subagent spawn failure | Retry once, if fails exit with error | -| Decision script error | Treat as `error` status, increment `no_progress_count` | -| No new CI Attempt detected | If `--auto-fix-workflow`, try lockfile update; otherwise report to user with guidance | -| Lockfile auto-fix fails | Report to user, exit with guidance to check CI logs | - -## User Instruction Examples - -Users can override default behaviors: - -| Instruction | Effect | -| ------------------------------------------------ | --------------------------------------------------- | -| "never auto-apply" | Always prompt before applying any fix | -| "always ask before git push" | Prompt before each push | -| "reject any fix for e2e tasks" | Auto-reject if `failedTaskIds` contains e2e | -| "apply all fixes regardless of verification" | Skip verification check, apply everything | -| "if confidence < 70, reject" | Check confidence field before applying | -| "run 'nx affected -t typecheck' before applying" | Add local verification step | -| "auto-fix workflow failures" | Attempt lockfile updates on pre-CI-Attempt failures | -| "wait 45 min for new CI Attempt" | Override new-CI-Attempt timeout (default: 10 min) | diff --git a/.gemini/skills/nx-generate/skill.md b/.gemini/skills/nx-generate/skill.md deleted file mode 100644 index af7ba80a445..00000000000 --- a/.gemini/skills/nx-generate/skill.md +++ /dev/null @@ -1,166 +0,0 @@ ---- -name: nx-generate -description: Generate code using nx generators. INVOKE IMMEDIATELY when user mentions scaffolding, setup, structure, creating apps/libs, or setting up project structure. Trigger words - scaffold, setup, create a ... app, create a ... lib, project structure, generate, add a new project. ALWAYS use this BEFORE calling nx_docs or exploring - this skill handles discovery internally. ---- - -# Run Nx Generator - -Nx generators are powerful tools that scaffold projects, make automated code migrations or automate repetitive tasks in a monorepo. They ensure consistency across the codebase and reduce boilerplate work. - -This skill applies when the user wants to: - -- Create new projects like libraries or applications -- Scaffold features or boilerplate code -- Run workspace-specific or custom generators -- Do anything else that an nx generator exists for - -## Key Principles - -1. **Always use `--no-interactive`** - Prevents prompts that would hang execution -2. **Read the generator source code** - The schema alone is not enough; understand what the generator actually does -3. **Match existing repo patterns** - Study similar artifacts in the repo and follow their conventions -4. **Verify with lint/test/build/typecheck etc.** - Generated code must pass verification. The listed targets are just an example, use what's appropriate for this workspace. - -## Steps - -### 1. Discover Available Generators - -Use the Nx CLI to discover available generators: - -- List all generators for a plugin: `npx nx list @nx/react` -- View available plugins: `npx nx list` - -This includes plugin generators (e.g., `@nx/react:library`) and local workspace generators. - -### 2. Match Generator to User Request - -Identify which generator(s) could fulfill the user's needs. Consider what artifact type they want, which framework is relevant, and any specific generator names mentioned. - -**IMPORTANT**: When both a local workspace generator and an external plugin generator could satisfy the request, **always prefer the local workspace generator**. Local generators are customized for the specific repo's patterns. - -If no suitable generator exists, you can stop using this skill. However, the burden of proof is high—carefully consider all available generators before deciding none apply. - -### 3. Get Generator Options - -Use the `--help` flag to understand available options: - -```bash -npx nx g @nx/react:library --help -``` - -Pay attention to required options, defaults that might need overriding, and options relevant to the user's request. - -### Library Buildability - -**Default to non-buildable libraries** unless there's a specific reason for buildable. - -| Type | When to use | Generator flags | -| --------------------------- | ----------------------------------------------------------------- | ----------------------------------- | -| **Non-buildable** (default) | Internal monorepo libs consumed by apps | No `--bundler` flag | -| **Buildable** | Publishing to npm, cross-repo sharing, stable libs for cache hits | `--bundler=vite` or `--bundler=swc` | - -Non-buildable libs: - -- Export `.ts`/`.tsx` source directly -- Consumer's bundler compiles them -- Faster dev experience, less config - -Buildable libs: - -- Have their own build target -- Useful for stable libs that rarely change (cache hits) -- Required for npm publishing - -**If unclear, ask the user:** "Should this library be buildable (own build step, better caching) or non-buildable (source consumed directly, simpler setup)?" - -### 4. Read Generator Source Code - -**This step is critical.** The schema alone does not tell you everything. Reading the source code helps you: - -- Know exactly what files will be created/modified and where -- Understand side effects (updating configs, installing deps, etc.) -- Identify behaviors and options not obvious from the schema -- Understand how options interact with each other - -To find generator source code: - -- For plugin generators: Use `node -e "console.log(require.resolve('@nx//generators.json'));"` to find the generators.json, then locate the source from there -- If that fails, read directly from `node_modules//generators.json` -- For local generators: Typically in `tools/generators/` or a local plugin directory. Search the repo for the generator name. - -After reading the source, reconsider: Is this the right generator? If not, go back to step 2. - -> **⚠️ `--directory` flag behavior can be misleading.** -> It should specify the full path of the generated library or component, not the parent path that it will be generated in. -> -> ```bash -> # ✅ Correct - directory is the full path for the library -> nx g @nx/react:library --directory=libs/my-lib -> # generates libs/my-lib/package.json and more -> -> # ❌ Wrong - this will create files at libs and libs/src/... -> nx g @nx/react:library --name=my-lib --directory=libs -> # generates libs/package.json and more -> ``` - -### 5. Examine Existing Patterns - -Before generating, examine the target area of the codebase: - -- Look at similar existing artifacts (other libraries, applications, etc.) -- Identify naming conventions, file structures, and configuration patterns -- Note which test runners, build tools, and linters are used -- Configure the generator to match these patterns - -### 6. Dry-Run to Verify File Placement - -**Always run with `--dry-run` first** to verify files will be created in the correct location: - -```bash -npx nx g @nx/react:library --name=my-lib --dry-run --no-interactive -``` - -Review the output carefully. If files would be created in the wrong location, adjust your options based on what you learned from the generator source code. - -Note: Some generators don't support dry-run (e.g., if they install npm packages). If dry-run fails for this reason, proceed to running the generator for real. - -### 7. Run the Generator - -Execute the generator: - -```bash -nx generate --no-interactive -``` - -> **Tip:** New packages often need workspace dependencies wired up (e.g., importing shared types, being consumed by apps). The `link-workspace-packages` skill can help add these correctly. - -### 8. Modify Generated Code (If Needed) - -Generators provide a starting point. Modify the output as needed to: - -- Add or modify functionality as requested -- Adjust imports, exports, or configurations -- Integrate with existing code patterns - -**Important:** If you replace or delete generated test files (e.g., `*.spec.ts`), either write meaningful replacement tests or remove the `test` target from the project configuration. Empty test suites will cause `nx test` to fail. - -### 9. Format and Verify - -Format all generated/modified files: - -```bash -nx format --fix -``` - -This example is for built-in nx formatting with prettier. There might be other formatting tools for this workspace, use these when appropriate. - -Then verify the generated code works. Keep in mind that the changes you make with a generator or subsequent modifications might impact various projects so it's usually not enough to only run targets for the artifact you just created. - -```bash -# these targets are just an example! -nx run-many -t build,lint,test,typecheck -``` - -These targets are common examples used across many workspaces. You should do research into other targets available for this workspace and its projects. CI configuration is usually a good guide for what the critical targets are that have to pass. - -If verification fails with manageable issues (a few lint errors, minor type issues), fix them. If issues are extensive, attempt obvious fixes first, then escalate to the user with details about what was generated, what's failing, and what you've attempted. diff --git a/.gemini/skills/nx-import/references/ESLINT.md b/.gemini/skills/nx-import/references/ESLINT.md deleted file mode 100644 index 0d4afb8d9d0..00000000000 --- a/.gemini/skills/nx-import/references/ESLINT.md +++ /dev/null @@ -1,109 +0,0 @@ -## ESLint - -ESLint-specific guidance for `nx import`. For generic import issues (root deps, pnpm globs, project references), see `SKILL.md`. - ---- - -### How `@nx/eslint/plugin` Works - -`@nx/eslint/plugin` scans for ESLint config files and creates a lint target for each project. It detects **both** flat config files (`eslint.config.{js,mjs,cjs,ts,mts,cts}`) and legacy config files (`.eslintrc.{json,js,cjs,mjs,yml,yaml}`). - -**Plugin options (set during `nx add @nx/eslint`):** - -```json -{ - "plugin": "@nx/eslint/plugin", - "options": { - "targetName": "eslint:lint" - } -} -``` - -**Auto-installation**: `nx import` auto-detects ESLint config files and offers to install `@nx/eslint`. Accept the offer — it registers the plugin and updates `namedInputs.production` to exclude ESLint config files. - ---- - -### Duplicate `lint` and `eslint:lint` Targets - -After import, projects will have **two** lint-related targets if the source `package.json` has a `"lint"` npm script: - -- `eslint:lint` — inferred by `@nx/eslint/plugin`; has proper caching and input/output tracking -- `lint` — created by Nx from the npm script via `nx:run-script`; no caching intelligence, just wraps `npm run lint` - -**Fix**: Remove the `"lint"` script from each project's `package.json`. Keep `"lint:fix"` if present — there is no plugin-inferred equivalent for auto-fixing. - ---- - -### Legacy `.eslintrc.*` Configs Linting Generated Files - -When `@nx/eslint/plugin` runs `eslint .` on a project with a legacy `.eslintrc.*` config that uses `parserOptions.project`, it tries to lint **all** files in the project directory including: - -- Generated `dist/**/*.d.ts` files (not in tsconfig `include`) -- The `.eslintrc.js` config file itself (not in tsconfig `include`) - -This causes `Parsing error: ESLint was configured to run on X using parserOptions.project, however that TSConfig does not include this file`. - -**Fix**: Add `ignorePatterns` to the `.eslintrc.*` config: - -```json -// .eslintrc.json -{ - "ignorePatterns": ["dist/**"] -} -``` - -```js -// .eslintrc.js — also ignore the config file itself since module.exports isn't in tsconfig -module.exports = { - ignorePatterns: ["dist/**", ".eslintrc.js"], - // ... -}; -``` - ---- - -### Flat Config `.cjs` Files Self-Linting - -When a project uses `eslint.config.cjs` (CJS flat config), `eslint .` lints the config file itself. The `require()` call on line 1 triggers `@typescript-eslint/no-require-imports`. - -**Fix**: Add the config filename to the top-level `ignores` array: - -```js -module.exports = tseslint.config( - { - ignores: ["dist/**", "node_modules/**", "eslint.config.cjs"], - }, - // ... -); -``` - -The same applies to `eslint.config.js` in a CJS project (no `"type": "module"`) if it uses `require()`. - ---- - -### `typescript-eslint` Version Conflict With ESLint 9 - -`typescript-eslint@7.x` declares `peerDependencies: { "eslint": "^8.56.0" }`, but it is commonly used alongside `"eslint": "^9.0.0"`. npm treats this as a hard peer dep conflict and refuses to install. - -**Root cause**: `@nx/eslint` init adds `eslint@~8.57.0` at the workspace root (for its own peer deps). Workspace packages that request `eslint@^9.0.0` + `typescript-eslint@^7.0.0` trigger the conflict when npm resolves their deps. - -**Fix**: Upgrade `typescript-eslint` from `^7.0.0` to `^8.0.0` directly in the affected workspace package's `package.json`. The `tseslint.config()` API and `tseslint.configs.recommended` are identical between v7 and v8 — no config changes needed. - -```json -// packages/my-package/package.json -{ - "devDependencies": { - "typescript-eslint": "^8.0.0" - } -} -``` - -**Note**: npm's root-level `"overrides"` field does not force versions for workspace packages' direct dependencies — update each package.json individually. - ---- - -### Mixed ESLint v8 and v9 in One Workspace - -Legacy v8 and flat-config v9 packages can coexist in the same workspace. Each package resolves its own `eslint` version. The root `eslint@~8.57.0` (added by `@nx/eslint` init) is used by legacy v8 packages; v9 packages get their own hoisted `eslint@9`. - -`@nx/eslint/plugin` infers `eslint:lint` targets for **both** config formats. Legacy packages run ESLint v8 with `.eslintrc.*`; flat-config packages run ESLint v9 with `eslint.config.*`. No special nx.json configuration is needed to support both simultaneously. diff --git a/.gemini/skills/nx-import/references/GRADLE.md b/.gemini/skills/nx-import/references/GRADLE.md deleted file mode 100644 index 30dface2ea4..00000000000 --- a/.gemini/skills/nx-import/references/GRADLE.md +++ /dev/null @@ -1,12 +0,0 @@ -## Gradle - -- If you import an entire Gradle repository into a subfolder, files like `gradlew`, `gradlew.bat`, and `gradle/wrapper` will end up inside that imported subfolder. -- The `@nx/gradle` plugin expects those files at the workspace root to infer Gradle projects/tasks automatically. -- If the target workspace has no Gradle setup yet, consider moving those files to the root (especially when using `@nx/gradle`). -- If the target workspace already has Gradle configured, avoid duplicate wrappers: remove imported duplicates from the subfolder or merge carefully. -- Because the import lands in a subfolder, Gradle project references can break; review settings and project path references, then fix any errors. -- If `@nx/gradle` is installed, run `nx show projects` to verify that Gradle projects are being inferred. - -Helpful docs: - -- https://nx.dev/docs/technologies/java/gradle/introduction diff --git a/.gemini/skills/nx-import/references/JEST.md b/.gemini/skills/nx-import/references/JEST.md deleted file mode 100644 index a0f62f6fdf6..00000000000 --- a/.gemini/skills/nx-import/references/JEST.md +++ /dev/null @@ -1,228 +0,0 @@ -## Jest - -Jest-specific guidance for `nx import`. For the basic "Jest Preset Missing" fix (create `jest.preset.js`, install deps), see `SKILL.md`. This file covers deeper Jest integration issues. - ---- - -### How `@nx/jest` Works - -`@nx/jest/plugin` scans for `jest.config.{ts,js,cjs,mjs,cts,mts}` and creates a `test` target for each project. - -**Plugin options:** - -```json -{ - "plugin": "@nx/jest/plugin", - "options": { - "targetName": "test" - } -} -``` - -`npx nx add @nx/jest` does two things: - -1. **Registers `@nx/jest/plugin` in `nx.json`** — without this, no `test` targets are inferred -2. Updates `namedInputs.production` to exclude test files - -**Gotcha**: `nx add @nx/jest` does NOT create `jest.preset.js` — that file is only generated when you run a generator (e.g. `@nx/jest:configuration`). For imports, you must create it manually (see "Jest Preset" section below). - -**Other gotcha**: If you create `jest.preset.js` manually but skip `npx nx add @nx/jest`, the plugin won't be registered and `nx run PROJECT:test` will fail with "Cannot find target 'test'". You need both. - ---- - -### Jest Preset - -The preset provides shared Jest configuration (test patterns, ts-jest transform, resolver, jsdom environment). - -**Root `jest.preset.js`:** - -```js -const nxPreset = require("@nx/jest/preset").default; -module.exports = { ...nxPreset }; -``` - -**Project `jest.config.ts`:** - -```ts -export default { - displayName: "my-lib", - preset: "../../jest.preset.js", - // project-specific overrides -}; -``` - -The `preset` path is relative from the project root to the workspace root. Subdirectory imports preserve the original relative path (e.g. `../../jest.preset.js`), which resolves correctly if the import destination matches the source directory depth. - ---- - -### Testing Dependencies - -#### Core (always needed) - -``` -pnpm add -wD jest ts-jest @types/jest @nx/jest -``` - -#### Environment-specific - -- **DOM testing** (React, Vue, browser libs): `jest-environment-jsdom` -- **Node testing** (APIs, CLIs): no extra deps (Jest defaults to `node` env, but Nx preset defaults to `jsdom`) - -#### React testing - -``` -pnpm add -wD @testing-library/react @testing-library/jest-dom -``` - -#### React with Babel (non-ts-jest transform) - -Some React projects use Babel instead of ts-jest for JSX transformation: - -``` -pnpm add -wD babel-jest @babel/core @babel/preset-env @babel/preset-react @babel/preset-typescript -``` - -**When**: Project `jest.config` has `transform` using `babel-jest` instead of `ts-jest`. Common in older Nx workspaces and CRA migrations. - -#### Vue testing - -``` -pnpm add -wD @vue/test-utils -``` - -Vue projects typically use Vitest (not Jest) — see VITE.md. - ---- - -### `tsconfig.spec.json` - -Jest projects need a `tsconfig.spec.json` that includes test files: - -```json -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../dist/out-tsc", - "module": "commonjs", - "types": ["jest", "node"] - }, - "include": [ - "jest.config.ts", - "src/**/*.test.ts", - "src/**/*.spec.ts", - "src/**/*.d.ts" - ] -} -``` - -**Common issues after import:** - -- Missing `"types": ["jest", "node"]` — causes `describe`/`it`/`expect` to be unrecognized -- Missing `"module": "commonjs"` — Jest doesn't support ESM by default (ts-jest transpiles to CJS) -- `include` array missing test patterns — TypeScript won't check test files - ---- - -### Jest vs Vitest Coexistence - -Workspaces can have both: - -- **Jest**: Next.js apps, older React libs, Node libraries -- **Vitest**: Vite-based React/Vue apps and libs - -Both `@nx/jest/plugin` and `@nx/vite/plugin` (which infers Vitest targets) coexist without conflicts — they detect different config files (`jest.config.*` vs `vite.config.*`). - -**Target naming**: Both default to `test`. If a project somehow has both config files, rename one: - -```json -{ - "plugin": "@nx/jest/plugin", - "options": { "targetName": "jest-test" } -} -``` - ---- - -### `@testing-library/jest-dom` — Jest vs Vitest - -Projects migrating from Jest to Vitest (or workspaces with both) need different imports: - -**Jest** (in `test-setup.ts`): - -```ts -import "@testing-library/jest-dom"; -``` - -**Vitest** (in `test-setup.ts`): - -```ts -import "@testing-library/jest-dom/vitest"; -``` - -If the source used Jest but the dest workspace uses Vitest for that project type, update the import path. Also add `@testing-library/jest-dom` to tsconfig `types` array. - ---- - -### Non-Nx Source: Test Script Rewriting - -Nx rewrites `package.json` scripts during init. Test scripts get broken: - -- `"test": "jest"` → `"test": "nx test"` (circular if no executor configured) -- `"test": "vitest run"` → `"test": "nx test run"` (broken — `run` becomes an argument) - -**Fix**: Remove all rewritten test scripts. `@nx/jest/plugin` and `@nx/vite/plugin` infer test targets from config files. - ---- - -### CI Atomization - -`@nx/jest/plugin` supports splitting tests per-file for CI parallelism: - -```json -{ - "plugin": "@nx/jest/plugin", - "options": { - "targetName": "test", - "ciTargetName": "test-ci" - } -} -``` - -This creates `test-ci--src/lib/foo.spec.ts` targets for each test file, enabling Nx Cloud distribution. Not relevant during import, but useful for post-import CI setup. - ---- - -### Common Post-Import Issues - -1. **"Cannot find target 'test'"**: `@nx/jest/plugin` not registered in `nx.json`. Run `npx nx add @nx/jest` or manually add the plugin entry. - -2. **"Cannot find module 'jest-preset'"**: `jest.preset.js` missing at workspace root. Create it (see SKILL.md). - -3. **"Cannot find type definition file for 'jest'"**: Missing `@types/jest` or `tsconfig.spec.json` doesn't have `"types": ["jest", "node"]`. - -4. **Tests fail with "Cannot use import statement outside a module"**: `ts-jest` not installed or not configured as transform. Check `jest.config.ts` transform section. - -5. **Snapshot path mismatches**: After import, `__snapshots__` directories may have paths baked in. Run tests once with `--updateSnapshot` to regenerate. - ---- - -## Fix Order - -### Subdirectory Import (Nx Source) - -1. `npx nx add @nx/jest` — registers plugin in `nx.json` (does NOT create `jest.preset.js`) -2. Create `jest.preset.js` manually (see "Jest Preset" section above) -3. Install deps: `pnpm add -wD jest jest-environment-jsdom ts-jest @types/jest` -4. Install framework test deps: `@testing-library/react @testing-library/jest-dom` (React), `@vue/test-utils` (Vue) -5. Verify `tsconfig.spec.json` has `"types": ["jest", "node"]` -6. `nx run-many -t test` - -### Whole-Repo Import (Non-Nx Source) - -1. Remove rewritten test scripts from `package.json` -2. `npx nx add @nx/jest` — registers plugin (does NOT create preset) -3. Create `jest.preset.js` manually -4. Install deps (same as above) -5. Verify/fix `jest.config.*` — ensure `preset` path points to root `jest.preset.js` -6. Verify/fix `tsconfig.spec.json` — add `types`, `module`, `include` if missing -7. `nx run-many -t test` diff --git a/.gemini/skills/nx-import/references/NEXT.md b/.gemini/skills/nx-import/references/NEXT.md deleted file mode 100644 index d9ec1f0b557..00000000000 --- a/.gemini/skills/nx-import/references/NEXT.md +++ /dev/null @@ -1,214 +0,0 @@ -## Next.js - -Next.js-specific guidance for `nx import`. For generic import issues (pnpm globs, root deps, project references, name collisions, ESLint, frontend tsconfig base settings, `@nx/react` typings, Jest preset, target name prefixing, non-Nx source handling), see `SKILL.md`. - ---- - -### `@nx/next/plugin` Inferred Targets - -`@nx/next/plugin` detects `next.config.{ts,js,cjs,mjs}` and creates these targets: - -- `build` → `next build` (with `dependsOn: ['^build']`) -- `dev` → `next dev` -- `start` → `next start` (depends on `build`) -- `serve-static` → same as `start` -- `build-deps` / `watch-deps` — for TS solution setup - -**No separate typecheck target** — Next.js runs TypeScript checking as part of `next build`. The `@nx/js/typescript` plugin provides a standalone `typecheck` target for non-Next libraries in the workspace. - -**Build target conflict**: Both `@nx/next/plugin` and `@nx/js/typescript` define a `build` target. `@nx/next/plugin` wins for Next.js projects (it detects `next.config.*`), while `@nx/js/typescript` handles libraries with `tsconfig.lib.json`. No rename needed — they coexist. - -### `withNx` in `next.config.js` - -Nx-generated Next.js projects use `composePlugins(withNx)` from `@nx/next`. This wrapper is optional for `next build` via the inferred plugin (which just runs `next build`), but it provides Nx-specific configuration. Keep it if present. - -### Root Dependencies for Next.js - -Beyond the generic root deps issue (see SKILL.md), Next.js projects typically need: - -**Core**: `react`, `react-dom`, `@types/react`, `@types/react-dom`, `@types/node`, `@nx/react` (see SKILL.md for `@nx/react` typings) -**Nx plugins**: `@nx/next` (auto-installed by import), `@nx/eslint`, `@nx/jest` -**Testing**: see SKILL.md "Jest Preset Missing" section -**ESLint**: `@next/eslint-plugin-next` (in addition to generic ESLint deps from SKILL.md) - -### Next.js Auto-Installing Dependencies via Wrong Package Manager - -Next.js detects missing `@types/react` during `next build` and tries to install it using `yarn add` regardless of the actual package manager. In a pnpm workspace, this fails with a "nearest package directory isn't part of the project" error. - -**Root cause**: `@types/react` is missing from root devDependencies. -**Fix**: Install deps at the root before building: `pnpm add -wD @types/react @types/react-dom` - -### Next.js TypeScript Config Specifics - -Next.js app tsconfigs have unique patterns compared to Vite: - -- **`noEmit: true`** with `emitDeclarationOnly: false` — Next.js handles emit, TS just checks types. This conflicts with `composite: true` from the TS solution setup. -- **`"types": ["jest", "node"]`** — includes test types in the main tsconfig (no separate `tsconfig.app.json`) -- **`"plugins": [{ "name": "next" }]`** — for IDE integration -- **`include`** references `.next/types/**/*.ts` for Next.js auto-generated types -- **`"jsx": "preserve"`** — Next.js uses its own JSX transform, not React's - -**Gotcha**: The Next.js tsconfig sets `"noEmit": true` which disables `composite` mode. This is fine because Next.js projects use `next build` for building, not `tsc`. The `@nx/js/typescript` plugin's `typecheck` target is not needed for Next.js apps. - -### `next.config.js` Lint Warning - -Imported Next.js configs may have `// eslint-disable-next-line @typescript-eslint/no-var-requires` but the project ESLint config enables different rule sets. This produces `Unused eslint-disable directive` warnings. Harmless — remove the comment or ignore. - -### `@nx/next:init` Rewrites All npm Scripts (Whole-Repo Import) - -When `@nx/next:init` runs during a whole-repo import, it rewrites the project's `package.json` scripts to prefixed `nx` calls: - -```json -{ - "dev": "nx next:dev", - "build": "nx next:build", - "start": "nx next:start" -} -``` - -This is the standard "npm Script Rewriting" issue from SKILL.md, but triggered by `@nx/next:init` rather than Nx init. **Fix**: Remove all rewritten scripts from `package.json` — `@nx/next/plugin` infers all targets from `next.config.*`. - ---- - -## Non-Nx Source (create-next-app) - -### Whole-Repo Import Recommended - -For single-project `create-next-app` repos, use whole-repo import into a subdirectory: - -```bash -nx import /path/to/source apps/web --ref=main --source=. --no-interactive -``` - -### `next-env.d.ts` - -`next build` auto-generates `next-env.d.ts` at the project root. Add `next-env.d.ts` to the dest root `.gitignore` — it is framework-generated and should not be committed. - -### ESLint: Self-Contained `eslint-config-next` - -`create-next-app` generates a flat ESLint config using `eslint-config-next` (which bundles its own plugins). This is **self-contained** — no root `eslint.config.mjs` needed, no `@nx/eslint-plugin` dependency. The `@nx/eslint/plugin` detects it and creates a lint target. - -### TypeScript: No Changes Needed - -Non-Nx Next.js projects have self-contained tsconfigs with `noEmit: true`, their own `lib`, `module`, `moduleResolution`, and `jsx` settings. Since `next build` handles type checking internally, no tsconfig modifications are needed. The project does NOT need to extend `tsconfig.base.json`. - -**Gotcha**: The `@nx/js/typescript` plugin won't create a `typecheck` target because there's no `tsconfig.lib.json`. This is fine — use `next:build` for type checking. - -### `noEmit: true` and TS Solution Setup - -Non-Nx Next.js projects use `noEmit: true`, which conflicts with Nx's TS solution setup (`composite: true`). If the dest workspace uses project references and you want the Next.js app to participate: - -1. Remove `noEmit: true`, add `composite: true`, `emitDeclarationOnly: true` -2. Add `extends: "../../tsconfig.base.json"` -3. Add `outDir` and `tsBuildInfoFile` - -**However**, this is optional for standalone Next.js apps that don't export types consumed by other workspace projects. - -### Tailwind / PostCSS - -`create-next-app` with Tailwind generates `postcss.config.mjs`. This works as-is after import — no path changes needed since PostCSS resolves relative to the project root. - ---- - -## Mixed Next.js + Vite Coexistence - -When both Next.js and Vite projects exist in the same workspace. - -### Plugin Coexistence - -Both `@nx/next/plugin` and `@nx/vite/plugin` can coexist in `nx.json`. They detect different config files (`next.config.*` vs `vite.config.*`) so there are no conflicts. The `@nx/js/typescript` plugin handles libraries. - -### Vite Standalone Project tsconfig Fixes - -Vite standalone projects (imported as whole-repo) have self-contained tsconfigs without `composite: true`. The `@nx/js/typescript` plugin's typecheck target runs `tsc --build --emitDeclarationOnly` which requires `composite`. - -**Fix**: - -1. Add `extends: "../../tsconfig.base.json"` to the root project tsconfig -2. Add `composite: true`, `declaration: true`, `declarationMap: true`, `tsBuildInfoFile` to `tsconfig.app.json` and `tsconfig.spec.json` -3. Set `moduleResolution: "bundler"` (replace `"node"`) -4. Add source files to `tsconfig.spec.json` `include` — specs import app code, and `composite` mode requires all files to be listed - -### Typecheck Target Names - -- `@nx/vite/plugin` defaults `typecheckTargetName` to `"vite:typecheck"` -- `@nx/js/typescript` uses `"typecheck"` -- Next.js projects have NO standalone typecheck target — Next.js runs type checking during `next build` - -No naming conflicts between frameworks. - ---- - -## Fix Order — Nx Source (Subdirectory Import) - -1. Import Next.js apps into `apps/` (see SKILL.md: "Application vs Library Detection") -2. Generic fixes from SKILL.md (pnpm globs, root deps, `.gitkeep` removal, frontend tsconfig base settings, `@nx/react` typings) -3. Install Next.js-specific deps: `pnpm add -wD @next/eslint-plugin-next` -4. ESLint setup (see SKILL.md: "Root ESLint Config Missing") -5. Jest setup (see SKILL.md: "Jest Preset Missing") -6. `nx reset && nx sync --yes && nx run-many -t typecheck,build,test,lint` - -## Fix Order — Non-Nx Source (create-next-app) - -1. Import into `apps/` (see SKILL.md: "Application vs Library Detection") -2. Generic fixes from SKILL.md (pnpm globs, stale files cleanup, script rewriting, target name prefixing) -3. (Optional) If app needs to export types for other workspace projects: fix `noEmit` → `composite` (see SKILL.md) -4. `nx reset && nx run-many -t next:build,eslint:lint` (or unprefixed names if renamed) - ---- - -## Iteration Log - -### Scenario 1: Basic Nx Next.js App Router + Shared Lib → TS preset (PASS) - -- Source: CNW next preset (Next.js 16, App Router) + `@nx/react:library` shared-ui -- Dest: CNW ts preset (Nx 23) -- Import: subdirectory-at-a-time (apps, libs separately) -- Errors found & fixed: - 1. pnpm-workspace.yaml: `apps`/`libs` → `apps/*`/`libs/*` - 2. Root tsconfig: `nodenext` → `bundler`, add `dom`/`dom.iterable` to `lib`, add `jsx: react-jsx` - 3. Missing `@nx/react` (for CSS module/image type defs in lib) - 4. Missing `@types/react`, `@types/react-dom`, `@types/node` - 5. Next.js trying `yarn add @types/react` — fixed by installing at root - 6. Missing `@nx/eslint`, root `eslint.config.mjs`, ESLint plugins - 7. Missing `@nx/jest`, `jest.preset.js`, `jest-environment-jsdom`, `ts-jest` -- All targets green: typecheck, build, test, lint - -### Scenario 3: Non-Nx create-next-app (App Router + Tailwind) → TS preset (PASS) - -- Source: `create-next-app@latest` (Next.js 16.1.6, App Router, Tailwind v4, flat ESLint config) -- Dest: CNW ts preset (Nx 23) -- Import: whole-repo into `apps/web` -- Errors found & fixed: - 1. pnpm-workspace.yaml: `apps/web` → `apps/*` - 2. Stale files: `node_modules/`, `pnpm-lock.yaml`, `pnpm-workspace.yaml`, `.gitignore` — deleted - 3. Nx-rewritten npm scripts (`"build": "nx next:build"`, etc.) — removed -- No tsconfig changes needed — self-contained config with `noEmit: true` -- ESLint self-contained via `eslint-config-next` — no root config needed -- No test setup (create-next-app doesn't include tests) -- All targets green: next:build, eslint:lint - -### Scenario 4: Non-Nx create-next-app (alongside Vite, React Router 7, TanStack, CRA) → TS preset (PASS) - -- See VITE.md Scenario 6 for the full multi-import scenario -- Next.js-specific findings: - 1. `@nx/next:init` rewrote all scripts to `nx next:*` format — removed all rewritten scripts - 2. Stale files: `node_modules/`, `package-lock.json`, `.gitignore` — deleted (npm workspace, no pnpm files) - 3. ESLint self-contained via `eslint-config-next` — no root config needed - 4. No tsconfig changes needed — `noEmit: true` stays; `next build` handles type checking -- Targets: `next:build`, `next:dev`, `next:start`, `eslint:lint` - -### Scenario 5: Mixed Next.js (Nx) + Vite React (standalone) → TS preset (PASS) - -- Source A: CNW next preset (Next.js 16, App Router) — subdirectory import of `apps/` -- Source B: CNW react-standalone preset (Vite 7, React 19) — whole-repo import into `apps/vite-app` -- Dest: CNW ts preset (Nx 23) -- Errors found & fixed: - 1. All Scenario 1 fixes for the Next.js app - 2. Stale files from Vite source: `node_modules/`, `pnpm-lock.yaml`, `pnpm-workspace.yaml`, `.gitignore`, `nx.json` - 3. Removed rewritten scripts from Vite app's `package.json` - 4. ESLint 8 vs 9 conflict — `@nx/eslint` peer on ESLint 8 resolved wrong version. Fixed with `pnpm.overrides` - 5. Vite tsconfigs missing `composite: true`, `declaration: true` — needed for `tsc --build --emitDeclarationOnly` - 6. Vite `tsconfig.spec.json` `include` missing source files — specs import app code - 7. Vite tsconfig `moduleResolution: "node"` → `"bundler"`, added `extends: "../../tsconfig.base.json"` -- All targets green: typecheck, build, test, lint for both projects diff --git a/.gemini/skills/nx-import/references/TURBOREPO.md b/.gemini/skills/nx-import/references/TURBOREPO.md deleted file mode 100644 index b322b54466a..00000000000 --- a/.gemini/skills/nx-import/references/TURBOREPO.md +++ /dev/null @@ -1,62 +0,0 @@ -## Turborepo - -- Nx replaces Turborepo task orchestration, but a clean migration requires handling Turborepo's config packages. -- Migration guide: https://nx.dev/docs/guides/adopting-nx/from-turborepo#easy-automated-migration-example -- Since Nx replaces Turborepo, all turbo config files and config packages become dead code and should be removed. - -## The Config-as-Package Pattern - -Turborepo monorepos ship with internal workspace packages that share configuration: - -- **`@repo/typescript-config`** (or similar) — tsconfig files (`base.json`, `nextjs.json`, `react-library.json`, etc.) -- **`@repo/eslint-config`** (or similar) — ESLint config files and all ESLint plugin dependencies - -These are not code libraries. They distribute config via Node module resolution (e.g., `"extends": "@repo/typescript-config/nextjs.json"`). This is the **default** Turborepo pattern — expect it in virtually every Turborepo import. Package names vary — check `package.json` files to identify the actual names. - -## Check for Root Config Files First - -**Before doing any config merging, check whether the destination workspace uses shared root configuration.** This decides how to handle the config packages. - -- If the workspace has a root `tsconfig.base.json` and/or root `eslint.config.mjs` that projects extend, merge the config packages into these root configs (see steps below). -- If the workspace does NOT have root config files — each project manages its own configuration independently (similar to Turborepo). In this case, **do not create root config files or merge into them**. Just remove turbo-specific parts (`turbo.json`, `eslint-plugin-turbo`) and leave the config packages in place, or ask the user how they want to handle them. - -If unclear, check for the presence of `tsconfig.base.json` at the root or ask the user. - -## Merging TypeScript Config (Only When Root tsconfig.base.json Exists) - -The config package contains a hierarchy of tsconfig files. Each project extends one via package name. - -1. **Read the config package** — trace the full inheritance chain (e.g., `nextjs.json` extends `base.json`). -2. **Update root `tsconfig.base.json`** — absorb `compilerOptions` from the base config. Add Nx `paths` for cross-project imports (Turborepo doesn't use path aliases, Nx relies on them). -3. **Update each project's `tsconfig.json`**: - - Change `"extends"` from `"@repo/typescript-config/.json"` to the relative path to root `tsconfig.base.json`. - - Inline variant-specific overrides from the intermediate config (e.g., Next.js: `"module": "ESNext"`, `"moduleResolution": "Bundler"`, `"jsx": "preserve"`, `"noEmit": true`; React library: `"jsx": "react-jsx"`). - - Preserve project-specific settings (`outDir`, `include`, `exclude`, etc.). -4. **Delete the config package** and remove it from all `devDependencies`. - -## Merging ESLint Config (Only When Root eslint.config Exists) - -The config package centralizes ESLint plugin dependencies and exports composable flat configs. - -1. **Read the config package** — identify exported configs, plugin dependencies, and inheritance. -2. **Update root `eslint.config.mjs`** — absorb base rules (JS recommended, TypeScript-ESLint, Prettier, etc.). Drop `eslint-plugin-turbo`. -3. **Update each project's `eslint.config.mjs`** — switch from importing `@repo/eslint-config/` to extending the root config, adding framework-specific plugins inline. -4. **Move ESLint plugin dependencies** from the config package to root `devDependencies`. -5. If `@nx/eslint` plugin is configured with inferred targets, remove `"lint"` scripts from project `package.json` files. -6. **Delete the config package** and remove it from all `devDependencies`. - -## General Cleanup - -- Remove turbo-specific dependencies: `turbo`, `eslint-plugin-turbo`. -- Delete all `turbo.json` files (root and per-package). -- Run workspace validation (`nx run-many -t build lint test typecheck`) to confirm nothing broke. - -## Key Pitfalls - -- **Trace the full inheritance chain** before inlining — check what each variant inherits from the base. -- **Module resolution changes** — from Node package resolution (`@repo/...`) to relative paths (`../../tsconfig.base.json`). -- **ESLint configs are JavaScript, not JSON** — handle JS imports, array spreading, and plugin objects when merging. - -Helpful docs: - -- https://nx.dev/docs/guides/adopting-nx/from-turborepo diff --git a/.gemini/skills/nx-import/references/VITE.md b/.gemini/skills/nx-import/references/VITE.md deleted file mode 100644 index 5b3817eba42..00000000000 --- a/.gemini/skills/nx-import/references/VITE.md +++ /dev/null @@ -1,397 +0,0 @@ -## Vite - -Vite-specific guidance for `nx import`. For generic import issues (pnpm globs, root deps, project references, name collisions, ESLint, frontend tsconfig base settings, `@nx/react` typings, Jest preset, non-Nx source handling), see `SKILL.md`. - ---- - -### `@nx/vite/plugin` Typecheck Target - -`@nx/vite/plugin` defaults `typecheckTargetName` to `"vite:typecheck"`. If the workspace expects `"typecheck"`, set it explicitly in `nx.json`. If `@nx/js/typescript` is also registered, rename one target to avoid conflicts (e.g. `"tsc-typecheck"` for the JS plugin). - -Keep both plugins only if the workspace has non-Vite pure TS libraries — `@nx/js/typescript` handles those while `@nx/vite/plugin` handles Vite projects. - -### @nx/vite Plugin Install Failure - -Plugin init loads `vite.config.ts` before deps are available. **Fix**: `pnpm add -wD vite @vitejs/plugin-react` (or `@vitejs/plugin-vue`) first, then `pnpm exec nx add @nx/vite`. - -### Vite `resolve.alias` and `__dirname` (Non-Nx Sources) - -**`__dirname` undefined** (CJS-only): Replace with `fileURLToPath(new URL('./src', import.meta.url))` from `'node:url'`. - -**`@/` path alias**: Vite's `resolve.alias` works at runtime but TS needs matching `"paths"`. Set `"baseUrl": "."` in project tsconfig. - -**PostCSS/Tailwind**: Verify `content` globs resolve correctly after import. - -### Missing TypeScript `types` (Non-Nx Sources) - -Non-Nx tsconfigs may not declare all needed types. Ensure Vite projects include `"types": ["node", "vite/client"]` in their tsconfig. - -### `noEmit` Fix: Vite-Specific Notes - -See SKILL.md for the generic noEmit→composite fix. Vite-specific additions: - -- Non-Nx Vite projects often have **both** `tsconfig.app.json` and `tsconfig.node.json` with `noEmit` — fix both -- Solution-style tsconfigs (`"files": [], "references": [...]`) may lack `extends`. Add `extends` pointing to the dest root `tsconfig.base.json` so base settings (`moduleResolution`, `lib`) apply. -- This is safe — Vite/Vitest ignore TypeScript emit settings. - -### Dependency Version Conflicts - -**Shared Vite deps (both frameworks):** `vite`, `vitest`, `jsdom`, `@types/node`, `typescript` (dev) - -**Vite 6→7**: Typecheck fails (`Plugin` type mismatch); build/serve still works. Fix: align versions. -**Vitest 3→4**: Usually works; type conflicts may surface in shared test utils. - ---- - -## React Router 7 (Vite-Based) - -React Router 7 (`@react-router/dev`) uses Vite under the hood with a `vite.config.ts` and a `react-router.config.ts`. The `@nx/vite/plugin` detects `vite.config.ts` and creates inferred targets. - -### Targets - -`@nx/vite/plugin` creates `build`, `dev`, `serve` targets. The `build` target invokes the script defined in `package.json` (usually `react-router build`), not `vite build` directly. - -**No separate typecheck target from `@nx/vite/plugin`** — React Router 7 typegen is run as part of `typecheck` (e.g. `react-router typegen && tsc`). The `typecheck` target is inferred from the tsconfig. Keep the `typecheck` script in `package.json` if present; it is not rewritten. - -### tsconfig Notes - -React Router 7 uses a single `tsconfig.json` (no `tsconfig.app.json`/`tsconfig.node.json` split). It includes: - -- `"rootDirs": [".", "./.react-router/types"]` — for generated type files; keep as-is -- `"paths": { "~/*": ["./app/*"] }` — self-referential alias; keep as-is -- `"noEmit": true` — replace with composite settings per SKILL.md - -### Build Output - -React Router 7 outputs to `build/` (not `dist/`). Add `build` to the dest root `.gitignore`. - -### Generated Types Directory - -React Router 7 generates `.react-router/` at the project root for route type generation. Add `.react-router` to the dest root `.gitignore`. - ---- - -## TanStack Start (Vite-Based) - -TanStack Start uses Vinxi under the hood, which wraps Vite. Projects have a standard `vite.config.ts` that `@nx/vite/plugin` detects normally. - -### Targets - -`@nx/vite/plugin` creates `build`, `dev`, `preview`, `serve-static`, `typecheck` targets. The `build` target runs `vite build` which invokes the TanStack Start Vinxi pipeline (produces both client and SSR bundles). - -### tsconfig Notes - -TanStack Start uses a single `tsconfig.json` with `"allowImportingTsExtensions": true` and `"noEmit": true`. Apply the standard noEmit → composite fix. `allowImportingTsExtensions` is compatible with `emitDeclarationOnly: true` — no change needed. - -### `paths` Aliases - -TanStack Start commonly uses `"#/*": ["./src/*"]` and `"@/*": ["./src/*"]`. These are self-referential — keep as-is for a single-project app. - -### Uncommitted Source Repo - -`create-tan-stack` initializes a git repo but does NOT make an initial commit. Before importing, commit first: - -```bash -git -C /path/to/source add . && git -C /path/to/source commit -m "Initial commit" -``` - -### Generated and Build Directories - -TanStack Start / Vinxi / Nitro generate several directories that must be added to the dest root `.gitignore`: - -- `.vinxi` — Vinxi build cache -- `.tanstack` — TanStack generated files -- `.nitro` — Nitro build artifacts -- `.output` — server-side build output (SSR/edge) - -These are not covered by `dist` or `build`. - ---- - -## React-Specific - -### React Dependencies - -**Production:** `react`, `react-dom` -**Dev:** `@types/react`, `@types/react-dom`, `@vitejs/plugin-react`, `@testing-library/react`, `@testing-library/jest-dom`, `jsdom` -**ESLint (Nx sources):** `eslint-plugin-import`, `eslint-plugin-jsx-a11y`, `eslint-plugin-react`, `eslint-plugin-react-hooks` -**ESLint (`create-vite`):** `eslint-plugin-react-refresh`, `eslint-plugin-react-hooks` — self-contained flat configs can be left as-is -**Nx plugins:** `@nx/react` (generators), `@nx/vite`, `@nx/vitest`, `@nx/eslint` - -### React TypeScript Configuration - -Add `"jsx": "react-jsx"` — in `tsconfig.base.json` for single-framework workspaces, per-project for mixed (see Mixed section). - -### React ESLint Config - -```js -import nx from "@nx/eslint-plugin"; -import baseConfig from "../../eslint.config.mjs"; -export default [ - ...baseConfig, - ...nx.configs["flat/react"], - { files: ["**/*.ts", "**/*.tsx"], rules: {} }, -]; -``` - -### React Version Conflicts - -React 18 (source) + React 19 (dest): pnpm may hoist mismatched `react-dom`, causing `TypeError: Cannot read properties of undefined (reading 'S')`. **Fix**: Align versions with `pnpm.overrides`. - -### `@testing-library/jest-dom` with Vitest - -If source used Jest: change import to `@testing-library/jest-dom/vitest` in test-setup.ts, add to tsconfig `types`. - ---- - -## Vue-Specific - -### Vue Dependencies - -**Production:** `vue` (plus `vue-router`, `pinia` if used) -**Dev:** `@vitejs/plugin-vue`, `vue-tsc`, `@vue/test-utils`, `jsdom` -**ESLint:** `eslint-plugin-vue`, `vue-eslint-parser`, `@vue/eslint-config-typescript`, `@vue/eslint-config-prettier` -**Nx plugins:** `@nx/vue` (generators), `@nx/vite`, `@nx/vitest`, `@nx/eslint` (install AFTER deps — see below) - -### Vue TypeScript Configuration - -Add to `tsconfig.base.json` (single-framework) or per-project (mixed): - -```json -{ "jsx": "preserve", "jsxImportSource": "vue", "resolveJsonModule": true } -``` - -### `vue-shims.d.ts` - -Vue SFC files need a type declaration. Usually exists in each project's `src/` and imports cleanly. If missing: - -```ts -declare module "*.vue" { - import { defineComponent } from "vue"; - const component: ReturnType; - export default component; -} -``` - -### `vue-tsc` Auto-Detection - -Both `@nx/js/typescript` and `@nx/vite/plugin` auto-detect `vue-tsc` when installed — no manual config needed. Remove source scripts like `"typecheck": "vue-tsc --noEmit"`. - -### ESLint Plugin Installation Order (Critical) - -`@nx/eslint` init **crashes** if Vue ESLint deps aren't installed first (it loads all config files). - -**Correct order:** - -1. `pnpm add -wD eslint@^9 eslint-plugin-vue vue-eslint-parser @vue/eslint-config-typescript @typescript-eslint/parser @nx/eslint-plugin typescript-eslint` -2. Create root `eslint.config.mjs` -3. Then `npx nx add @nx/eslint` - -### Vue ESLint Config Pattern - -```js -import vue from "eslint-plugin-vue"; -import vueParser from "vue-eslint-parser"; -import tsParser from "@typescript-eslint/parser"; -import baseConfig from "../../eslint.config.mjs"; -export default [ - ...baseConfig, - ...vue.configs["flat/recommended"], - { - files: ["**/*.vue"], - languageOptions: { parser: vueParser, parserOptions: { parser: tsParser } }, - }, - { - files: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.vue"], - rules: { "vue/multi-word-component-names": "off" }, - }, -]; -``` - -**Important**: `vue-eslint-parser` override must come **AFTER** base config — `flat/typescript` sets the TS parser globally without a `files` filter, breaking `.vue` parsing. - -`vue-eslint-parser` must be an explicit pnpm dependency (strict resolution prevents transitive import). - -**Known issue**: Some generated Vue ESLint configs omit `vue-eslint-parser`. Use the pattern above instead. - ---- - -## Mixed React + Vue - -When both frameworks coexist, several settings become per-project. - -### tsconfig `jsx` — Per-Project Only - -- React: `"jsx": "react-jsx"` in project tsconfig -- Vue: `"jsx": "preserve"`, `"jsxImportSource": "vue"` in project tsconfig -- Root: **NO** `jsx` setting - -### Typecheck — Auto-Detects Framework - -`@nx/vite/plugin` uses `vue-tsc` for Vue projects and `tsc` for React automatically. - -```json -{ - "plugins": [ - { "plugin": "@nx/eslint/plugin", "options": { "targetName": "lint" } }, - { - "plugin": "@nx/vite/plugin", - "options": { - "buildTargetName": "build", - "typecheckTargetName": "typecheck", - "testTargetName": "test" - } - } - ] -} -``` - -Remove `@nx/js/typescript` if all projects use Vite. Keep it (renamed to `"tsc-typecheck"`) only for non-Vite pure TS libs. - -### ESLint — Three-Tier Config - -1. **Root**: Base rules only, no framework-specific rules -2. **React projects**: Extend root + `nx.configs['flat/react']` -3. **Vue projects**: Extend root + `vue.configs['flat/recommended']` + `vue-eslint-parser` - -**Required packages**: Shared (`eslint@^9`, `@nx/eslint-plugin`, `typescript-eslint`, `@typescript-eslint/parser`), React (`eslint-plugin-import`, `eslint-plugin-jsx-a11y`, `eslint-plugin-react`, `eslint-plugin-react-hooks`), Vue (`eslint-plugin-vue`, `vue-eslint-parser`) - -`@nx/react`/`@nx/vue` are for generators only — no target conflicts. - ---- - -## Redundant npm Scripts After Import - -`nx import` copies `package.json` verbatim, so npm scripts come along. For Vite-based projects `@nx/vite/plugin` already infers the same targets from `vite.config.ts` — the npm scripts just shadow the plugin with weaker `nx:run-script` wrappers (no first-class caching inputs/outputs). Remove them after import. - -### Standalone Vite App (`create-vite`) - -Remove the following scripts — every one is redundant: - -| Script | Plugin replacement | -| ----------------------------- | ---------------------------------------------------------------------------- | -| `dev: vite` | `@nx/vite/plugin` → `dev` | -| `build: tsc -b && vite build` | `@nx/vite/plugin` → `build`; `typecheck` via `@nx/js/typescript` handles tsc | -| `preview: vite preview` | `@nx/vite/plugin` → `preview` | -| `lint: eslint .` | `@nx/eslint/plugin` → `eslint:lint` | - -### TanStack Start - -Remove `build`, `dev`, `preview`, and `test` scripts, but move any hardcoded `--port` flag to `vite.config.ts` first: - -```ts -// vite.config.ts -export default defineConfig({ - server: { port: 3000 }, // replaces `vite dev --port 3000` - ... -}) -``` - -### React Router 7 — Keep ALL scripts - -Do **not** remove React Router 7 scripts. They use the framework CLI (`react-router build`, `react-router dev`, `react-router-serve`) which is not interchangeable with plain `vite`: - -- `typecheck` runs `react-router typegen && tsc` — typegen must precede `tsc` or it fails on missing route types -- `start` serves the SSR bundle — no plugin equivalent - ---- - -## Fix Orders - -### Nx Source - -1. Generic fixes from SKILL.md (pnpm globs, root deps, executor paths, frontend tsconfig base settings, `@nx/react` typings) -2. Configure `@nx/vite/plugin` typecheck target -3. **React**: `jsx: "react-jsx"` (root or per-project) -4. **Vue**: `jsx: "preserve"` + `jsxImportSource: "vue"`; verify `vue-shims.d.ts`; install ESLint deps before `@nx/eslint` -5. **Mixed**: `jsx` per-project; remove/rename `@nx/js/typescript` -6. `nx sync --yes && nx reset && nx run-many -t typecheck,build,test,lint` - -### Non-Nx Source (additional steps) - -0. Import into `apps/` (see SKILL.md: "Application vs Library Detection") -1. Generic fixes from SKILL.md (stale files cleanup, pnpm globs, rewritten scripts, target name prefixing, noEmit→composite, ESLint handling) -2. Fix `noEmit` in **all** tsconfigs (app, node, etc. — non-Nx projects often have multiple) -3. Add `extends` to solution-style tsconfigs so root settings apply -4. Fix `resolve.alias` / `__dirname` / `baseUrl` -5. Ensure `types` include `vite/client` and `node` -6. Install `@nx/vite` manually if it failed during import -7. Remove redundant npm scripts so `@nx/vite/plugin` infers them natively (see "Redundant npm Scripts" section) -8. **Vue**: Add `outDir` + `**/*.vue.d.ts` to ESLint ignores -9. Full verification - -### Multiple-Source Imports - -See SKILL.md for generic multi-import (name collisions, dep refs). Vite-specific: fix tsconfig `references` paths for alternate directories (`../../libs/` → `../../libs-beta/`). - -### Non-Nx Source: React Router 7 - -1. Ensure source has at least one commit (see SKILL.md: "Source Repo Has No Commits") -2. `nx import` whole-repo into `apps/` (see SKILL.md: "Application vs Library Detection") → auto-installs `@nx/vite`, `@nx/react` -3. Stale file cleanup: `node_modules/`, `package-lock.json`, `.gitignore` -4. Fix `tsconfig.json`: `noEmit` → `composite + emitDeclarationOnly + outDir + tsBuildInfoFile` -5. Add `build` and `.react-router` to dest root `.gitignore` -6. **Keep all npm scripts** — React Router 7 uses framework CLI (`react-router build/dev`), not plain vite (see "Redundant npm Scripts" above) -7. `npm install && nx reset && nx sync --yes` - -### Non-Nx Source: TanStack Start - -1. Ensure source has at least one commit — `create-tan-stack` does NOT auto-commit (see SKILL.md) -2. `nx import` whole-repo into `apps/` (see SKILL.md: "Application vs Library Detection") → auto-installs `@nx/vite`, `@nx/vitest` -3. Stale file cleanup: `node_modules/`, `package-lock.json`, `.gitignore` -4. Fix `tsconfig.json`: `noEmit` → `composite + emitDeclarationOnly + outDir + tsBuildInfoFile` -5. Keep `allowImportingTsExtensions` — compatible with `emitDeclarationOnly: true` -6. Add `.vinxi`, `.tanstack`, `.nitro`, `.output` to dest root `.gitignore` -7. Move hardcoded `--port` from `dev` script into `vite.config.ts` (`server: { port: N }`) -8. Remove redundant npm scripts — `@nx/vite/plugin` infers `build`, `dev`, `preview`, `test` (see "Redundant npm Scripts" above) -9. `npm install && nx reset && nx sync --yes` - -### Quick Reference: React vs Vue - -| Aspect | React | Vue | -| ------------- | ------------------------ | ----------------------------------------- | -| Vite plugin | `@vitejs/plugin-react` | `@vitejs/plugin-vue` | -| Type checker | `tsc` | `vue-tsc` (auto-detected) | -| SFC support | N/A | `vue-shims.d.ts` needed | -| tsconfig jsx | `"react-jsx"` | `"preserve"` + `"jsxImportSource": "vue"` | -| ESLint parser | Standard TS | `vue-eslint-parser` + TS sub-parser | -| ESLint setup | Straightforward | Must install deps before `@nx/eslint` | -| Test utils | `@testing-library/react` | `@vue/test-utils` | - -### Quick Reference: Vite-Based React Frameworks - -| Aspect | Vite (standalone) | React Router 7 | TanStack Start | -| ------------------ | ----------------- | ----------------------- | ------------------------ | -| Build config | `vite.config.ts` | `vite.config.ts` | `vite.config.ts` | -| Build output | `dist/` | `build/` | `dist/` | -| SSR bundle | No | Yes (`build/server/`) | Yes (`dist/server/`) | -| tsconfig layout | app + node split | Single tsconfig | Single tsconfig | -| Auto-committed | Depends on tool | Usually yes | **No — commit first** | -| `nx import` plugin | `@nx/vite` | `@nx/vite`, `@nx/react` | `@nx/vite`, `@nx/vitest` | - ---- - -## Iteration Log - -### Scenario 6: Multiple non-Nx React apps (CRA, Next.js, React Router 7, TanStack Start, Vite) → TS preset (PASS) - -- Sources: 5 standalone non-Nx repos with different build tools -- Dest: CNW ts preset (Nx 22.5.1), npm workspaces, `packages/*` -- Import: whole-repo for each, sequential into `packages/` -- Pre-import fixes: - 1. Removed `packages/.gitkeep` and committed - 2. `git init && git add . && git commit` in Vite app (no git at all) - 3. `git add . && git commit` in TanStack app (git init'd but no commits) -- Import: `npm exec nx -- import packages/ --source=. --ref=main --no-interactive` - - Next.js import auto-installed `@nx/eslint`, `@nx/next` - - React Router 7 import auto-installed `@nx/vite`, `@nx/react`, `@nx/docker` (Dockerfile present) - - TanStack import auto-installed `@nx/vitest` -- Post-import fixes: - 1. Removed stale `node_modules/`, `package-lock.json`, `.gitignore` from each package - 2. Removed Nx-rewritten scripts from `board-games-nextjs/package.json` (had `"build": "nx next:build"`, etc.) - 3. Updated root `tsconfig.base.json`: `nodenext` → `bundler`, added `dom`/`dom.iterable` to lib, added `jsx: react-jsx` - 4. Added `build` to dest root `.gitignore` (CRA and React Router 7 output there) - 5. Fixed `noEmit` → `composite + emitDeclarationOnly` in: `board-games-vite/tsconfig.app.json`, `board-games-vite/tsconfig.node.json`, `board-games-react-router/tsconfig.json`, `board-games-tanstack/tsconfig.json` - 6. Fixed `tsBuildInfoFile` paths from `./node_modules/.tmp/...` to `./dist/...` - 7. Installed root `@types/react`, `@types/react-dom`, `@types/node` -- All targets green: `build` for all 5 projects; `typecheck` for Vite/React Router/TanStack; `next:build` for Next.js diff --git a/.gemini/skills/nx-import/skill.md b/.gemini/skills/nx-import/skill.md deleted file mode 100644 index b1cd381d3dd..00000000000 --- a/.gemini/skills/nx-import/skill.md +++ /dev/null @@ -1,238 +0,0 @@ ---- -name: nx-import -description: Import, merge, or combine repositories into an Nx workspace using nx import. USE WHEN the user asks to adopt Nx across repos, move projects into a monorepo, or bring code/history from another repository. ---- - -## Quick Start - -- `nx import` brings code from a source repository or folder into the current workspace, preserving commit history. -- After nx `22.6.0`, `nx import` responds with .ndjson outputs and follow-up questions. For earlier versions, always run with `--no-interactive` and specify all flags directly. -- Run `nx import --help` for available options. -- Make sure the destination directory is empty before importing. - EXAMPLE: target has `libs/utils` and `libs/models`; source has `libs/ui` and `libs/data-access` — you cannot import `libs/` into `libs/` directly. Import each source library individually. - -Primary docs: - -- https://nx.dev/docs/guides/adopting-nx/import-project -- https://nx.dev/docs/guides/adopting-nx/preserving-git-histories - -Read the nx docs if you have the tools for it. - -## Import Strategy - -**Subdirectory-at-a-time** (`nx import apps --source=apps`): - -- **Recommended for monorepo sources** — files land at top level, no redundant config -- Caveats: multiple import commands (separate merge commits each); dest must not have conflicting directories; root configs (deps, plugins, targetDefaults) not imported -- **Directory conflicts**: Import into alternate-named dir (e.g. `imported-apps/`), then rename - -**Whole repo** (`nx import imported --source=.`): - -- **Only for non-monorepo sources** (single-project repos) -- For monorepos, creates messy nested config (`imported/nx.json`, `imported/tsconfig.base.json`, etc.) -- If you must: keep imported `tsconfig.base.json` (projects extend it), prefix workspace globs and executor paths - -### Directory Conventions - -- **Always prefer the destination's existing conventions.** Source uses `libs/`but dest uses `packages/`? Import into `packages/` (`nx import packages/foo --source=libs/foo`). -- If dest has no convention (empty workspace), ask the user. - -### Application vs Library Detection - -Before importing, identify whether the source is an **application** or a **library**: - -- **Applications**: Deployable end products. Common indicators: - - _Frontend_: `next.config.*`, `vite.config.*` with a build entry point, framework-specific app scaffolding (CRA, Angular CLI app, etc.) - - _Backend (Node.js)_: Express/Fastify/NestJS server entrypoint, no `"exports"` field in `package.json` - - _JVM_: Maven `pom.xml` with `jar` or `war` and a `main` class; Gradle `application` plugin or `mainClass` setting - - _.NET_: `.csproj`/`.fsproj` with `Exe` or `WinExe` - - _General_: Dockerfile, a runnable entrypoint, no public API surface intended for import by other projects -- **Libraries**: Reusable packages consumed by other projects. Common indicators: `"main"`/`"exports"` in `package.json`, Maven/Gradle packaging as a library jar, .NET `Library`, named exports intended for import by other packages. - -**Destination directory rules**: - -- Applications → `apps/`. Check workspace globs (e.g. `pnpm-workspace.yaml`, `workspaces` in root `package.json`) for an existing `apps/*` entry. - - If `apps/*` is **not** present, add it before importing: update the workspace glob config and commit (or stage) the change. - - Example: `nx import apps/my-app --source=packages/my-app` -- Libraries → follow the dest's existing convention (`packages/`, `libs/`, etc.). - -## Common Issues - -### pnpm Workspace Globs (Critical) - -`nx import` adds the imported directory itself (e.g. `apps`) to `pnpm-workspace.yaml`, **NOT** glob patterns for packages within it. Cross-package imports will fail with `Cannot find module`. - -**Fix**: Replace with proper globs from the source config (e.g. `apps/*`, `libs/shared/*`), then `pnpm install`. - -### Root Dependencies and Config Not Imported (Critical) - -`nx import` does **NOT** merge from the source's root: - -- `dependencies`/`devDependencies` from `package.json` -- `targetDefaults` from `nx.json` (e.g. `"@nx/esbuild:esbuild": { "dependsOn": ["^build"] }` — critical for build ordering) -- `namedInputs` from `nx.json` (e.g. `production` exclusion patterns for test files) -- Plugin configurations from `nx.json` - -**Fix**: Diff source and dest `package.json` + `nx.json`. Add missing deps, merge relevant `targetDefaults` and `namedInputs`. - -### TypeScript Project References - -After import, run `nx sync --yes`. If it reports nothing but typecheck still fails, `nx reset` first, then `nx sync --yes` again. - -### Explicit Executor Path Fixups - -Inferred targets (via Nx plugins) resolve config relative to project root — no changes needed. Explicit executor targets (e.g. `@nx/esbuild:esbuild`) have workspace-root-relative paths (`main`, `outputPath`, `tsConfig`, `assets`, `sourceRoot`) that must be prefixed with the import destination directory. - -### Plugin Detection - -- **Whole-repo import**: `nx import` detects and offers to install plugins. Accept them. -- **Subdirectory import**: Plugins NOT auto-detected. Manually add with `npx nx add @nx/PLUGIN`. Check `include`/`exclude` patterns — defaults won't match alternate directories (e.g. `apps-beta/`). -- Run `npx nx reset` after any plugin config changes. - -### Redundant Root Files (Whole-Repo Only) - -Whole-repo import brings ALL source root files into the dest subdirectory. Clean up: - -- `pnpm-lock.yaml` — stale; dest has its own lockfile -- `pnpm-workspace.yaml` — source workspace config; conflicts with dest -- `node_modules/` — stale symlinks pointing to source filesystem -- `.gitignore` — redundant with dest root `.gitignore` -- `nx.json` — source Nx config; dest has its own -- `README.md` — optional; keep or remove - -**Don't blindly delete** `tsconfig.base.json` — imported projects may extend it via relative paths. - -### Root ESLint Config Missing (Subdirectory Import) - -Subdirectory import doesn't bring the source's root `eslint.config.mjs`, but project configs reference `../../eslint.config.mjs`. - -**Fix order**: - -1. Install ESLint deps first: `pnpm add -wD eslint@^9 @nx/eslint-plugin typescript-eslint` (plus framework-specific plugins) -2. Create root `eslint.config.mjs` (copy from source or create with `@nx/eslint-plugin` base rules) -3. Then `npx nx add @nx/eslint` to register the plugin in `nx.json` - -Install `typescript-eslint` explicitly — pnpm's strict hoisting won't auto-resolve this transitive dep of `@nx/eslint-plugin`. - -### ESLint Version Pinning (Critical) - -**Pin ESLint to v9** (`eslint@^9.0.0`). ESLint 10 breaks `@nx/eslint` and many plugins with cryptic errors like `Cannot read properties of undefined (reading 'version')`. - -`@nx/eslint` may peer-depend on ESLint 8, causing the wrong version to resolve. If lint fails with `Cannot read properties of undefined (reading 'allow')`, add `pnpm.overrides`: - -```json -{ "pnpm": { "overrides": { "eslint": "^9.0.0" } } } -``` - -### Dependency Version Conflicts - -After import, compare key deps (`typescript`, `eslint`, framework-specific). If dest uses newer versions, upgrade imported packages to match (usually safe). If source is newer, may need to upgrade dest first. Use `pnpm.overrides` to enforce single-version policy if desired. - -### Module Boundaries - -Imported projects may lack `tags`. Add tags or update `@nx/enforce-module-boundaries` rules. - -### Project Name Collisions (Multi-Import) - -Same `name` in `package.json` across source and dest causes `MultipleProjectsWithSameNameError`. **Fix**: Rename conflicting names (e.g. `@org/api` → `@org/teama-api`), update all dep references and import statements, `pnpm install`. The root `package.json` of each imported repo also becomes a project — rename those too. - -### Workspace Dep Import Ordering - -`pnpm install` fails during `nx import` if a `"workspace:*"` dependency hasn't been imported yet. File operations still succeed. **Fix**: Import all projects first, then `pnpm install --no-frozen-lockfile`. - -### `.gitkeep` Blocking Subdirectory Import - -The TS preset creates `packages/.gitkeep`. Remove it and commit before importing. - -### Frontend tsconfig Base Settings (Critical) - -The TS preset defaults (`module: "nodenext"`, `moduleResolution: "nodenext"`, `lib: ["es2022"]`) are incompatible with frontend frameworks (React, Next.js, Vue, Vite). After importing frontend projects, verify the dest root `tsconfig.base.json`: - -- **`moduleResolution`**: Must be `"bundler"` (not `"nodenext"`) -- **`module`**: Must be `"esnext"` (not `"nodenext"`) -- **`lib`**: Must include `"dom"` and `"dom.iterable"` (frontend projects need these) -- **`jsx`**: `"react-jsx"` for React-only workspaces, per-project for mixed frameworks - -For **subdirectory imports**, the dest root tsconfig is authoritative — update it. For **whole-repo imports**, imported projects may extend their own nested `tsconfig.base.json`, making this less critical. - -If the dest also has backend projects needing `nodenext`, use per-project overrides instead of changing the root. - -**Gotcha**: TypeScript does NOT merge `lib` arrays — a project-level override **replaces** the base array entirely. Always include all needed entries (e.g. `es2022`, `dom`, `dom.iterable`) in any project-level `lib`. - -### `@nx/react` Typings for Libraries - -React libraries generated with `@nx/react:library` reference `@nx/react/typings/cssmodule.d.ts` and `@nx/react/typings/image.d.ts` in their tsconfig `types`. These fail with `Cannot find type definition file` unless `@nx/react` is installed in the dest workspace. - -**Fix**: `pnpm add -wD @nx/react` - -### Jest Preset Missing (Subdirectory Import) - -Nx presets create `jest.preset.js` at the workspace root, and project jest configs reference it (e.g. `../../jest.preset.js`). Subdirectory import does NOT bring this file. - -**Fix**: - -1. Run `npx nx add @nx/jest` — registers `@nx/jest/plugin` in `nx.json` and updates `namedInputs` -2. Create `jest.preset.js` at workspace root (see `references/JEST.md` for content) — `nx add` only creates this when a generator runs, not on bare `nx add` -3. Install test runner deps: `pnpm add -wD jest jest-environment-jsdom ts-jest @types/jest` -4. Install framework-specific test deps as needed (see `references/JEST.md`) - -For deeper Jest issues (tsconfig.spec.json, Babel transforms, CI atomization, Jest vs Vitest coexistence), see `references/JEST.md`. - -### Target Name Prefixing (Whole-Repo Import) - -When importing a project with existing npm scripts (`build`, `dev`, `start`, `lint`), Nx plugins auto-prefix inferred target names to avoid conflicts: e.g. `next:build`, `vite:build`, `eslint:lint`. - -**Fix**: Remove the Nx-rewritten npm scripts from the imported `package.json`, then either: - -- Accept the prefixed names (e.g. `nx run app:next:build`) -- Rename plugin target names in `nx.json` to use unprefixed names - -## Non-Nx Source Issues - -When the source is a plain pnpm/npm workspace without `nx.json`. - -### npm Script Rewriting (Critical) - -Nx rewrites `package.json` scripts during init, creating broken commands (e.g. `vitest run` → `nx test run`). **Fix**: Remove all rewritten scripts — Nx plugins infer targets from config files. - -### `noEmit` → `composite` + `emitDeclarationOnly` (Critical) - -Plain TS projects use `"noEmit": true`, incompatible with Nx project references. - -**Symptoms**: "typecheck target is disabled because one or more project references set 'noEmit: true'" or TS6310. - -**Fix** in **all** imported tsconfigs: - -1. Remove `"noEmit": true`. If inherited via extends chain, set `"noEmit": false` explicitly. -2. Add `"composite": true`, `"emitDeclarationOnly": true`, `"declarationMap": true` -3. Add `"outDir": "dist"` and `"tsBuildInfoFile": "dist/tsconfig.tsbuildinfo"` -4. Add `"extends": "../../tsconfig.base.json"` if missing. Remove settings now inherited from base. - -### Stale node_modules and Lockfiles - -`nx import` may bring `node_modules/` (pnpm symlinks pointing to the source filesystem) and `pnpm-lock.yaml` from the source. Both are stale. - -**Fix**: `rm -rf imported/node_modules imported/pnpm-lock.yaml imported/pnpm-workspace.yaml imported/.gitignore`, then `pnpm install`. - -### ESLint Config Handling - -- **Legacy `.eslintrc.json` (ESLint 8)**: Delete all `.eslintrc.*`, remove v8 deps, create flat `eslint.config.mjs`. -- **Flat config (`eslint.config.js`)**: Self-contained configs can often be left as-is. -- **No ESLint**: Create both root and project-level configs from scratch. - -### TypeScript `paths` Aliases - -Nx uses `package.json` `"exports"` + pnpm workspace linking instead of tsconfig `"paths"`. If packages have proper `"exports"`, paths are redundant. Otherwise, update paths for the new directory structure. - -## Technology-specific Guidance - -Identify technologies in the source repo, then read and apply the matching reference file(s). - -Available references: - -- `references/ESLINT.md` — ESLint projects: duplicate `lint`/`eslint:lint` targets, legacy `.eslintrc.*` linting generated files, flat config `.cjs` self-linting, `typescript-eslint` v7/v9 peer dep conflict, mixed ESLint v8+v9 in one workspace. -- `references/GRADLE.md` -- `references/JEST.md` — Jest testing: `@nx/jest/plugin` setup, jest.preset.js, testing deps by framework, tsconfig.spec.json, Jest vs Vitest coexistence, Babel transforms, CI atomization. -- `references/NEXT.md` — Next.js projects: `@nx/next/plugin` targets, `withNx`, Next.js TS config (`noEmit`, `jsx: "preserve"`), auto-installing deps via wrong PM, non-Nx `create-next-app` imports, mixed Next.js+Vite coexistence. -- `references/TURBOREPO.md` -- `references/VITE.md` — Vite projects (React, Vue, or both): `@nx/vite/plugin` typecheck target, `resolve.alias`/`__dirname` fixes, framework deps, Vue-specific setup, mixed React+Vue coexistence. diff --git a/.gemini/skills/nx-plugins/skill.md b/.gemini/skills/nx-plugins/skill.md deleted file mode 100644 index 89223c7f2ab..00000000000 --- a/.gemini/skills/nx-plugins/skill.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -name: nx-plugins -description: Find and add Nx plugins. USE WHEN user wants to discover available plugins, install a new plugin, or add support for a specific framework or technology to the workspace. ---- - -## Finding and Installing new plugins - -- List plugins: `pnpm nx list` -- Install plugins `pnpm nx add `. Example: `pnpm nx add @nx/react`. diff --git a/.gemini/skills/nx-run-tasks/skill.md b/.gemini/skills/nx-run-tasks/skill.md deleted file mode 100644 index 7f1263a5725..00000000000 --- a/.gemini/skills/nx-run-tasks/skill.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -name: nx-run-tasks -description: Helps with running tasks in an Nx workspace. USE WHEN the user wants to execute build, test, lint, serve, or run any other tasks defined in the workspace. ---- - -You can run tasks with Nx in the following way. - -Keep in mind that you might have to prefix things with npx/pnpx/yarn if the user doesn't have nx installed globally. Look at the package.json or lockfile to determine which package manager is in use. - -For more details on any command, run it with `--help` (e.g. `nx run-many --help`, `nx affected --help`). - -## Understand which tasks can be run - -You can check those via `nx show project --json`, for example `nx show project myapp --json`. It contains a `targets` section which has information about targets that can be run. You can also just look at the `package.json` scripts or `project.json` targets, but you might miss out on inferred tasks by Nx plugins. - -## Run a single task - -``` -nx run : -``` - -where `project` is the project name defined in `package.json` or `project.json` (if present). - -## Run multiple tasks - -``` -nx run-many -t build test lint typecheck -``` - -You can pass a `-p` flag to filter to specific projects, otherwise it runs on all projects. You can also use `--exclude` to exclude projects, and `--parallel` to control the number of parallel processes (default is 3). - -Examples: - -- `nx run-many -t test -p proj1 proj2` — test specific projects -- `nx run-many -t test --projects=*-app --exclude=excluded-app` — test projects matching a pattern -- `nx run-many -t test --projects=tag:api-*` — test projects by tag - -## Run tasks for affected projects - -Use `nx affected` to only run tasks on projects that have been changed and projects that depend on changed projects. This is especially useful in CI and for large workspaces. - -``` -nx affected -t build test lint -``` - -By default it compares against the base branch. You can customize this: - -- `nx affected -t test --base=main --head=HEAD` — compare against a specific base and head -- `nx affected -t test --files=libs/mylib/src/index.ts` — specify changed files directly - -## Useful flags - -These flags work with `run`, `run-many`, and `affected`: - -- `--skipNxCache` — rerun tasks even when results are cached -- `--verbose` — print additional information such as stack traces -- `--nxBail` — stop execution after the first failed task -- `--configuration=` — use a specific configuration (e.g. `production`) diff --git a/.gemini/skills/nx-workspace/references/AFFECTED.md b/.gemini/skills/nx-workspace/references/AFFECTED.md deleted file mode 100644 index e30f18f6a44..00000000000 --- a/.gemini/skills/nx-workspace/references/AFFECTED.md +++ /dev/null @@ -1,27 +0,0 @@ -## Affected Projects - -Find projects affected by changes in the current branch. - -```bash -# Affected since base branch (auto-detected) -nx show projects --affected - -# Affected with explicit base -nx show projects --affected --base=main -nx show projects --affected --base=origin/main - -# Affected between two commits -nx show projects --affected --base=abc123 --head=def456 - -# Affected apps only -nx show projects --affected --type app - -# Affected excluding e2e projects -nx show projects --affected --exclude="*-e2e" - -# Affected by uncommitted changes -nx show projects --affected --uncommitted - -# Affected by untracked files -nx show projects --affected --untracked -``` diff --git a/.gemini/skills/nx-workspace/skill.md b/.gemini/skills/nx-workspace/skill.md deleted file mode 100644 index 2b01d45353e..00000000000 --- a/.gemini/skills/nx-workspace/skill.md +++ /dev/null @@ -1,285 +0,0 @@ ---- -name: nx-workspace -description: "Explore and understand Nx workspaces. USE WHEN answering questions about the workspace, projects, or tasks. ALSO USE WHEN an nx command fails or you need to check available targets/configuration before running a task. EXAMPLES: 'What projects are in this workspace?', 'How is project X configured?', 'What depends on library Y?', 'What targets can I run?', 'Cannot find configuration for task', 'debug nx task failure'." ---- - -# Nx Workspace Exploration - -This skill provides read-only exploration of Nx workspaces. Use it to understand workspace structure, project configuration, available targets, and dependencies. - -Keep in mind that you might have to prefix commands with `npx`/`pnpx`/`yarn` if nx isn't installed globally. Check the lockfile to determine the package manager in use. - -## Listing Projects - -Use `nx show projects` to list projects in the workspace. - -The project filtering syntax (`-p`/`--projects`) works across many Nx commands including `nx run-many`, `nx release`, `nx show projects`, and more. Filters support explicit names, glob patterns, tag references (e.g. `tag:name`), directories, and negation (e.g. `!project-name`). - -```bash -# List all projects -nx show projects - -# Filter by pattern (glob) -nx show projects --projects "apps/*" -nx show projects --projects "shared-*" - -# Filter by tag -nx show projects --projects "tag:publishable" -nx show projects -p 'tag:publishable,!tag:internal' - -# Filter by target (projects that have a specific target) -nx show projects --withTarget build - -# Combine filters -nx show projects --type lib --withTarget test -nx show projects --affected --exclude="*-e2e" -nx show projects -p "tag:scope:client,packages/*" - -# Negate patterns -nx show projects -p '!tag:private' -nx show projects -p '!*-e2e' - -# Output as JSON -nx show projects --json -``` - -## Project Configuration - -Use `nx show project --json` to get the full resolved configuration for a project. - -**Important**: Do NOT read `project.json` directly - it only contains partial configuration. The `nx show project --json` command returns the full resolved config including inferred targets from plugins. - -You can read the full project schema at `node_modules/nx/schemas/project-schema.json` to understand nx project configuration options. - -```bash -# Get full project configuration -nx show project my-app --json - -# Extract specific parts from the JSON -nx show project my-app --json | jq '.targets' -nx show project my-app --json | jq '.targets.build' -nx show project my-app --json | jq '.targets | keys' - -# Check project metadata -nx show project my-app --json | jq '{name, root, sourceRoot, projectType, tags}' -``` - -## Target Information - -Targets define what tasks can be run on a project. - -```bash -# List all targets for a project -nx show project my-app --json | jq '.targets | keys' - -# Get full target configuration -nx show project my-app --json | jq '.targets.build' - -# Check target executor/command -nx show project my-app --json | jq '.targets.build.executor' -nx show project my-app --json | jq '.targets.build.command' - -# View target options -nx show project my-app --json | jq '.targets.build.options' - -# Check target inputs/outputs (for caching) -nx show project my-app --json | jq '.targets.build.inputs' -nx show project my-app --json | jq '.targets.build.outputs' - -# Find projects with a specific target -nx show projects --withTarget serve -nx show projects --withTarget e2e -``` - -## Workspace Configuration - -Read `nx.json` directly for workspace-level configuration. -You can read the full project schema at `node_modules/nx/schemas/nx-schema.json` to understand nx project configuration options. - -```bash -# Read the full nx.json -cat nx.json - -# Or use jq for specific sections -cat nx.json | jq '.targetDefaults' -cat nx.json | jq '.namedInputs' -cat nx.json | jq '.plugins' -cat nx.json | jq '.generators' -``` - -Key nx.json sections: - -- `targetDefaults` - Default configuration applied to all targets of a given name -- `namedInputs` - Reusable input definitions for caching -- `plugins` - Nx plugins and their configuration -- ...and much more, read the schema or nx.json for details - -## Affected Projects - -If the user is asking about affected projects, read the [affected projects reference](references/AFFECTED.md) for detailed commands and examples. - -## Common Exploration Patterns - -### "What's in this workspace?" - -```bash -nx show projects -nx show projects --type app -nx show projects --type lib -``` - -### "How do I build/test/lint project X?" - -```bash -nx show project X --json | jq '.targets | keys' -nx show project X --json | jq '.targets.build' -``` - -### "What depends on library Y?" - -```bash -# Use the project graph to find dependents -nx graph --print | jq '.graph.dependencies | to_entries[] | select(.value[].target == "Y") | .key' -``` - -## Programmatic Answers - -When processing nx CLI results, use command-line tools to compute the answer programmatically rather than counting or parsing output manually. Always use `--json` flags to get structured output that can be processed with `jq`, `grep`, or other tools you have installed locally. - -### Listing Projects - -```bash -nx show projects --json -``` - -Example output: - -```json -["my-app", "my-app-e2e", "shared-ui", "shared-utils", "api"] -``` - -Common operations: - -```bash -# Count projects -nx show projects --json | jq 'length' - -# Filter by pattern -nx show projects --json | jq '.[] | select(startswith("shared-"))' - -# Get affected projects as array -nx show projects --affected --json | jq '.' -``` - -### Project Details - -```bash -nx show project my-app --json -``` - -Example output: - -```json -{ - "root": "apps/my-app", - "name": "my-app", - "sourceRoot": "apps/my-app/src", - "projectType": "application", - "tags": ["type:app", "scope:client"], - "targets": { - "build": { - "executor": "@nx/vite:build", - "options": { "outputPath": "dist/apps/my-app" } - }, - "serve": { - "executor": "@nx/vite:dev-server", - "options": { "buildTarget": "my-app:build" } - }, - "test": { - "executor": "@nx/vite:test", - "options": {} - } - }, - "implicitDependencies": [] -} -``` - -Common operations: - -```bash -# Get target names -nx show project my-app --json | jq '.targets | keys' - -# Get specific target config -nx show project my-app --json | jq '.targets.build' - -# Get tags -nx show project my-app --json | jq '.tags' - -# Get project root -nx show project my-app --json | jq -r '.root' -``` - -### Project Graph - -```bash -nx graph --print -``` - -Example output: - -```json -{ - "graph": { - "nodes": { - "my-app": { - "name": "my-app", - "type": "app", - "data": { "root": "apps/my-app", "tags": ["type:app"] } - }, - "shared-ui": { - "name": "shared-ui", - "type": "lib", - "data": { "root": "libs/shared-ui", "tags": ["type:ui"] } - } - }, - "dependencies": { - "my-app": [ - { "source": "my-app", "target": "shared-ui", "type": "static" }], - "shared-ui": [] - } - } -} -``` - -Common operations: - -```bash -# Get all project names from graph -nx graph --print | jq '.graph.nodes | keys' - -# Find dependencies of a project -nx graph --print | jq '.graph.dependencies["my-app"]' - -# Find projects that depend on a library -nx graph --print | jq '.graph.dependencies | to_entries[] | select(.value[].target == "shared-ui") | .key' -``` - -## Troubleshooting - -### "Cannot find configuration for task X:target" - -```bash -# Check what targets exist on the project -nx show project X --json | jq '.targets | keys' - -# Check if any projects have that target -nx show projects --withTarget target -``` - -### "The workspace is out of sync" - -```bash -nx sync -nx reset # if sync doesn't fix stale cache -``` diff --git a/.github/prompts/monitor-ci.prompt.md b/.github/prompts/monitor-ci.prompt.md index 6778b5c4a8c..7b0ad0e31e2 100644 --- a/.github/prompts/monitor-ci.prompt.md +++ b/.github/prompts/monitor-ci.prompt.md @@ -111,7 +111,7 @@ The decision script returns one of the following statuses. This table defines th | `cipe_canceled` | Exit, CI was canceled | | `cipe_timed_out` | Exit, CI timed out | | `polling_timeout` | Exit, polling timeout reached | -| `circuit_breaker` | Exit, no progress after 5 consecutive polls | +| `circuit_breaker` | Exit, no progress after 13 consecutive polls | | `environment_rerun_cap` | Exit, environment reruns exhausted | | `fix_auto_applying` | Self-healing is handling it — just record `last_cipe_url`, enter wait mode. No MCP call or local git ops needed. | | `error` | Wait 60s and loop | diff --git a/.github/skills/monitor-ci/SKILL.md b/.github/skills/monitor-ci/SKILL.md index a4af6cbb556..3330adb7d42 100644 --- a/.github/skills/monitor-ci/SKILL.md +++ b/.github/skills/monitor-ci/SKILL.md @@ -111,7 +111,7 @@ The decision script returns one of the following statuses. This table defines th | `cipe_canceled` | Exit, CI was canceled | | `cipe_timed_out` | Exit, CI timed out | | `polling_timeout` | Exit, polling timeout reached | -| `circuit_breaker` | Exit, no progress after 5 consecutive polls | +| `circuit_breaker` | Exit, no progress after 13 consecutive polls | | `environment_rerun_cap` | Exit, environment reruns exhausted | | `fix_auto_applying` | Self-healing is handling it — just record `last_cipe_url`, enter wait mode. No MCP call or local git ops needed. | | `error` | Wait 60s and loop | diff --git a/.github/skills/monitor-ci/scripts/ci-poll-decide.mjs b/.github/skills/monitor-ci/scripts/ci-poll-decide.mjs index 5a296493320..5560aa564a5 100644 --- a/.github/skills/monitor-ci/scripts/ci-poll-decide.mjs +++ b/.github/skills/monitor-ci/scripts/ci-poll-decide.mjs @@ -106,7 +106,7 @@ function categorizeTasks() { } function backoff(count) { - const delays = [60, 90, 120]; + const delays = [60, 90, 120, 180]; return delays[Math.min(count, delays.length - 1)]; } @@ -145,7 +145,7 @@ function isNewCipe() { // 3. still waiting → wait (waiting_for_cipe) // NORMAL MODE: // 4. polling timeout → done (polling_timeout) -// 5. circuit breaker (5 polls) → done (circuit_breaker) +// 5. circuit breaker (13 polls) → done (circuit_breaker) // 6. CI succeeded → done (ci_success) // 7. CI canceled → done (cipe_canceled) // 8. CI timed out → done (cipe_timed_out) @@ -177,7 +177,7 @@ function classify() { // --- Guards --- if (isTimedOut()) return { action: "done", code: "polling_timeout" }; - if (noProgressCount >= 5) return { action: "done", code: "circuit_breaker" }; + if (noProgressCount >= 13) return { action: "done", code: "circuit_breaker" }; // --- Terminal CI states --- if (cipeStatus === "SUCCEEDED") return { action: "done", code: "ci_success" }; @@ -267,7 +267,7 @@ const messages = { // guards polling_timeout: () => "Polling timeout exceeded.", - circuit_breaker: () => "No progress after 5 consecutive polls. Stopping.", + circuit_breaker: () => "No progress after 13 consecutive polls. Stopping.", // terminal ci_success: () => "CI passed successfully!", diff --git a/.github/workflows/deploy-confetti.yml b/.github/workflows/deploy-confetti.yml new file mode 100644 index 00000000000..79b298b17d3 --- /dev/null +++ b/.github/workflows/deploy-confetti.yml @@ -0,0 +1,67 @@ +name: Deploy Confetti + +on: + schedule: + - cron: '0 0 * * *' + push: + branches: + - main + paths: + - 'websites/confetti/**' + workflow_dispatch: + +concurrency: + group: deploy-confetti-${{ github.ref }} + cancel-in-progress: true + +permissions: + contents: read + +jobs: + build-and-deploy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - uses: pnpm/action-setup@v5 + with: + version: 10 + + - uses: actions/setup-node@v4 + with: + node-version: '24' + cache: 'pnpm' + cache-dependency-path: websites/confetti/pnpm-lock.yaml + + - name: Install dependencies + working-directory: websites/confetti + run: pnpm install + + - name: Build + working-directory: websites/confetti + run: pnpm run build:ci + + - name: Generate GitHub App token + id: app-token + uses: actions/create-github-app-token@v1 + with: + app-id: ${{ secrets.PAGES_APP_ID }} + private-key: ${{ secrets.PAGES_APP_PRIVATE_KEY }} + owner: tsparticles + repositories: | + confetti + + - name: Deploy to tsparticles/confetti main + uses: peaceiris/actions-gh-pages@v4 + with: + token: ${{ steps.app-token.outputs.token }} + external_repository: tsparticles/confetti + publish_branch: main + publish_dir: websites/confetti/public + cname: confetti.js.org + user_name: 'github-actions-bot' + user_email: 'support+actions@github.com' + commit_message: 'build: website updated' + force_orphan: true diff --git a/.github/workflows/deploy-website.yml b/.github/workflows/deploy-website.yml new file mode 100644 index 00000000000..198435d9984 --- /dev/null +++ b/.github/workflows/deploy-website.yml @@ -0,0 +1,71 @@ +name: Deploy Website + +on: + schedule: + - cron: '0 0 * * *' + push: + branches: + - main + paths: + - 'websites/website/**' + workflow_dispatch: + +concurrency: + group: deploy-website-${{ github.ref }} + cancel-in-progress: true + +permissions: + contents: read + +jobs: + build-and-deploy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - uses: pnpm/action-setup@v5 + with: + version: 10 + + - uses: actions/setup-node@v4 + with: + node-version: '22' + cache: 'pnpm' + cache-dependency-path: websites/website/pnpm-lock.yaml + + - name: Install dependencies + working-directory: websites/website + run: pnpm install --frozen-lockfile + + - name: Lint + working-directory: websites/website + run: pnpm run lint + + - name: Build + working-directory: websites/website + run: pnpm run docs:build + + - name: Generate GitHub App token + id: app-token + uses: actions/create-github-app-token@v1 + with: + app-id: ${{ secrets.PAGES_APP_ID }} + private-key: ${{ secrets.PAGES_APP_PRIVATE_KEY }} + owner: tsparticles + repositories: | + website + + - name: Deploy to tsparticles/website main + uses: peaceiris/actions-gh-pages@v4 + with: + token: ${{ steps.app-token.outputs.token }} + external_repository: tsparticles/website + publish_branch: main + publish_dir: websites/website/docs/.vitepress/dist + cname: particles.js.org + user_name: 'github-actions-bot' + user_email: 'support+actions@github.com' + commit_message: 'build: website updated' + force_orphan: true diff --git a/.github/workflows/npm-publish.yml b/.github/workflows/npm-publish.yml index c1412ec2046..c7a2b8fa149 100644 --- a/.github/workflows/npm-publish.yml +++ b/.github/workflows/npm-publish.yml @@ -92,6 +92,8 @@ jobs: else $BASE_CMD fi + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} # 🧠 Create release (raw GitHub notes) - name: Create Release (raw) diff --git a/.gitignore b/.gitignore index d39ff16e54e..6905d751e32 100644 --- a/.gitignore +++ b/.gitignore @@ -193,6 +193,7 @@ PublishScripts/ **/[Pp]ackages/* # except build/, which is used as an MSBuild target. !**/[Pp]ackages/build/ +!cli/packages/** # Uncomment if necessary however generally it will be regenerated when needed #!**/[Pp]ackages/repositories.config # NuGet v3's project.json files produces more ignorable files @@ -356,7 +357,13 @@ MigrationBackup/ dist/ tmp/ build/ +!cli/commands/build/ +!cli/commands/build/** +!cli/commands/build/package.json +!cli/commands/build/project.json docs/ +!websites/website/docs/ +!websites/website/docs/** demo/vanilla/report.html demo/vanilla/report.htm demo/vanilla/report.*.html @@ -387,4 +394,4 @@ docs.json .nx/polygraph .claude/worktrees -.claude/settings.local.json \ No newline at end of file +.claude/settings.local.json diff --git a/.gitpod.yml b/.gitpod.yml index 439862d0a3d..b502d8f0990 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -1,2 +1,2 @@ tasks: - - init: pnpm i && npx lerna run build + - init: pnpm i && pnpm run build diff --git a/.opencode/commands/monitor-ci.md b/.opencode/commands/monitor-ci.md index 2a9d8719d63..bbf691ef7d4 100644 --- a/.opencode/commands/monitor-ci.md +++ b/.opencode/commands/monitor-ci.md @@ -111,7 +111,7 @@ The decision script returns one of the following statuses. This table defines th | `cipe_canceled` | Exit, CI was canceled | | `cipe_timed_out` | Exit, CI timed out | | `polling_timeout` | Exit, polling timeout reached | -| `circuit_breaker` | Exit, no progress after 5 consecutive polls | +| `circuit_breaker` | Exit, no progress after 13 consecutive polls | | `environment_rerun_cap` | Exit, environment reruns exhausted | | `fix_auto_applying` | Self-healing is handling it — just record `last_cipe_url`, enter wait mode. No MCP call or local git ops needed. | | `error` | Wait 60s and loop | diff --git a/.opencode/skills/monitor-ci/SKILL.md b/.opencode/skills/monitor-ci/SKILL.md index a4af6cbb556..3330adb7d42 100644 --- a/.opencode/skills/monitor-ci/SKILL.md +++ b/.opencode/skills/monitor-ci/SKILL.md @@ -111,7 +111,7 @@ The decision script returns one of the following statuses. This table defines th | `cipe_canceled` | Exit, CI was canceled | | `cipe_timed_out` | Exit, CI timed out | | `polling_timeout` | Exit, polling timeout reached | -| `circuit_breaker` | Exit, no progress after 5 consecutive polls | +| `circuit_breaker` | Exit, no progress after 13 consecutive polls | | `environment_rerun_cap` | Exit, environment reruns exhausted | | `fix_auto_applying` | Self-healing is handling it — just record `last_cipe_url`, enter wait mode. No MCP call or local git ops needed. | | `error` | Wait 60s and loop | diff --git a/.opencode/skills/monitor-ci/scripts/ci-poll-decide.mjs b/.opencode/skills/monitor-ci/scripts/ci-poll-decide.mjs index 5a296493320..5560aa564a5 100644 --- a/.opencode/skills/monitor-ci/scripts/ci-poll-decide.mjs +++ b/.opencode/skills/monitor-ci/scripts/ci-poll-decide.mjs @@ -106,7 +106,7 @@ function categorizeTasks() { } function backoff(count) { - const delays = [60, 90, 120]; + const delays = [60, 90, 120, 180]; return delays[Math.min(count, delays.length - 1)]; } @@ -145,7 +145,7 @@ function isNewCipe() { // 3. still waiting → wait (waiting_for_cipe) // NORMAL MODE: // 4. polling timeout → done (polling_timeout) -// 5. circuit breaker (5 polls) → done (circuit_breaker) +// 5. circuit breaker (13 polls) → done (circuit_breaker) // 6. CI succeeded → done (ci_success) // 7. CI canceled → done (cipe_canceled) // 8. CI timed out → done (cipe_timed_out) @@ -177,7 +177,7 @@ function classify() { // --- Guards --- if (isTimedOut()) return { action: "done", code: "polling_timeout" }; - if (noProgressCount >= 5) return { action: "done", code: "circuit_breaker" }; + if (noProgressCount >= 13) return { action: "done", code: "circuit_breaker" }; // --- Terminal CI states --- if (cipeStatus === "SUCCEEDED") return { action: "done", code: "ci_success" }; @@ -267,7 +267,7 @@ const messages = { // guards polling_timeout: () => "Polling timeout exceeded.", - circuit_breaker: () => "No progress after 5 consecutive polls. Stopping.", + circuit_breaker: () => "No progress after 13 consecutive polls. Stopping.", // terminal ci_success: () => "CI passed successfully!", diff --git a/.planning/codebase/INTEGRATIONS.md b/.planning/codebase/INTEGRATIONS.md index da76cf0f69e..411ac3b9b07 100644 --- a/.planning/codebase/INTEGRATIONS.md +++ b/.planning/codebase/INTEGRATIONS.md @@ -19,7 +19,7 @@ - SDK/Client: `FirebaseExtended/action-hosting-deploy@v0` in `.github/workflows/nodejs.yml` - Auth: `FIREBASE_SERVICE_ACCOUNT_TSPARTICLES` - npm Registry - publishes monorepo packages on tag pushes - - SDK/Client: `pnpm lerna publish` in `.github/workflows/npm-publish.yml` + - SDK/Client: `pnpm exec nx release publish --skip-version` in `.github/workflows/npm-publish.yml` - Auth: OIDC trusted publishing (workflow requests `id-token: write` in `.github/workflows/npm-publish.yml`) **Documentation Publishing:** diff --git a/.planning/codebase/STACK.md b/.planning/codebase/STACK.md index 28d4ac0cb17..bd5c3862960 100644 --- a/.planning/codebase/STACK.md +++ b/.planning/codebase/STACK.md @@ -31,7 +31,6 @@ **Core:** - Nx 22.6.4 - monorepo task orchestration and affected builds (`package.json`, `nx.json`). -- Lerna 9.0.7 with Nx integration - versioning/publishing orchestration (`lerna.json`, root `package.json` scripts). - tsParticles CLI (`@tsparticles/cli`) - package build pipeline invoked by package scripts (`engine/package.json`, `bundles/full/package.json`). **Testing:** @@ -70,7 +69,7 @@ **Build:** -- Workspace build orchestration: `package.json`, `nx.json`, `pnpm-workspace.yaml`, `lerna.json`. +- Workspace build orchestration: `package.json`, `nx.json`, `pnpm-workspace.yaml`. - Compiler and docs config: `tsconfig.json`, package-local tsconfig files (example `demo/vanilla/tsconfig.json`), `typedoc.json`. - Bundling config: package-level `webpack.config.js` files (example `engine/webpack.config.js`, `bundles/full/webpack.config.js`). diff --git a/CHANGELOG.md b/CHANGELOG.md index 5150a986330..e8325b48d88 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/workspace + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) ### Bug Fixes diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9b43999467c..709bbafc0e4 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,8 +1,8 @@ -*This file is still Work in Progress* +_This file is still Work in Progress_ # Start development -Before you can start making changes, it's mandatory to run a `lerna bootstrap` for installing all the dependencies. +Before you can start making changes, run `pnpm i` to install all workspace dependencies. After that, you can start coding. Here is the folder layout @@ -16,7 +16,7 @@ After that, you can start coding. Here is the folder layout The `plugins` folder contains all external presets and shapes. -Once done editing, you can check if everything builds running `lerna run build`. +Once done editing, you can check if everything builds running `pnpm run build`. The difference is, the first does not create the docs folder, and it might be unnecessary while coding. @@ -25,14 +25,14 @@ For building the first time: Unix ```shell -pnpm i && npx lerna run build +pnpm i && pnpm run build ``` Windows ```shell pnpm i -npx lerna run build +pnpm run build ``` For building local packages it's possible to run only `pnpm run build` in every folder with a package.json file @@ -59,40 +59,42 @@ There's a `demo` folder where you can find some demo apps used for testing confi # Pull Requests -**Before opening any pull request, check that `lerna run build` completes** +**Before opening any pull request, check that `pnpm run build` completes** -*The build task will be performed automatically by the CI\CD, but a first local check should be done* +_The build task will be performed automatically by the CI\CD, but a first local check should be done_ -If you want to contribute to the project, please use *v2* or *v3* as the base branch, *v2* is the current release, *v3* is what is coming in *v3*. +If you want to contribute to the project, please use _v2_ or _v3_ as the base branch, _v2_ is the current release, _v3_ is what is coming in _v3_. -Use *main* branch **ONLY** for critical bug fixes. +Use _main_ branch **ONLY** for critical bug fixes. -Once done, create the **Pull Request** to *v2* or *v3* branch. If it's a critical bug fix, use *main*. +Once done, create the **Pull Request** to _v2_ or _v3_ branch. If it's a critical bug fix, use _main_. ## Branches -### *v1* +### _v1_ This branch is the version 1 branch, it's not active, it's there only for historical purpose. -### *v2* +### _v2_ This branch is the version 2 branch, the actual release. It will be closed once version 3 will be released. -### *v3* +### _v3_ This branch is the main development branch, and it has the lowest priority branch under CI. This branch should always build. Sometimes it can be necessary to break this rule. This is why it is **should** and not **must**. -### *main* +### _main_ + This is the production branch. **This must be used for PR only for critical bug fixes** and always **MUST** build. -Changes to README.md or other markdown files are not priorities. So for these changes, use *dev* or *staging*, and they will be implemented in the next release. +Changes to README.md or other markdown files are not priorities. So for these changes, use _dev_ or _staging_, and they will be implemented in the next release. + +### _every other branch_ except _gh-pages_ -### *every other branch* except *gh-pages* You can create any branch you want to push & any kind of commits. There are no rules in the CI for all the other branches. diff --git a/README.md b/README.md index c17cf924f82..39baef87972 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,6 @@ React.js, Vue.js (2.x and 3.x), Angular, Svelte, jQuery, Preact, Inferno, Riot.j [![Cdnjs](https://img.shields.io/cdnjs/v/@tsparticles/engine?style=for-the-badge)](https://cdnjs.com/libraries/tsparticles) [![npm](https://img.shields.io/npm/v/@tsparticles/engine?style=for-the-badge)](https://www.npmjs.com/package/tsparticles) [![npm](https://img.shields.io/npm/dm/tsparticles?style=for-the-badge)](https://www.npmjs.com/package/tsparticles) -[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff?style=for-the-badge)](https://lerna.js.org/) [![CodeFactor](https://www.codefactor.io/repository/github/tsparticles/tsparticles/badge)](https://www.codefactor.io/repository/github/tsparticles/tsparticles) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/b983aaf3461a4c48b1e2eecce1ff1d74)](https://www.codacy.com/manual/ar3s/tsparticles?utm_source=github.com&utm_medium=referral&utm_content=tsparticles/tsparticles&utm_campaign=Badge_Grade) [![Rate this package](https://badges.openbase.com/js/rating/tsparticles.svg?style=openbase&token=A9jHQ1nkb6fnCndKM7O2w4hx3OD8PVCuqHtSpw8mMOg=)](https://openbase.com/js/tsparticles?utm_source=embedded&utm_medium=badge&utm_campaign=rating-badge&utm_term=js/tsparticles) @@ -209,6 +208,7 @@ Useful docs for the next step: #### jsDelivr [![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/confetti/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/confetti) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/particles/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/particles) [![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/engine/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/engine) [![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/fireworks/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/fireworks) [![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/basic/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/basic) @@ -222,7 +222,7 @@ Useful docs for the next step: #### unpkg - + --- @@ -232,6 +232,10 @@ _tsParticles Confetti_ [![npm](https://img.shields.io/npm/v/@tsparticles/confetti?style=for-the-badge)](https://www.npmjs.com/package/@tsparticles/confetti) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/confetti?style=for-the-badge)](https://www.npmjs.com/package/@tsparticles/confetti) +_tsParticles Particles_ + +[![npm](https://img.shields.io/npm/v/@tsparticles/particles?style=for-the-badge)](https://www.npmjs.com/package/@tsparticles/particles) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/particles?style=for-the-badge)](https://www.npmjs.com/package/@tsparticles/particles) + _tsParticles Engine_ [![npm](https://img.shields.io/npm/v/@tsparticles/engine?style=for-the-badge)](https://www.npmjs.com/package/@tsparticles/engine) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/engine?style=for-the-badge)](https://www.npmjs.com/package/@tsparticles/engine) @@ -312,10 +316,10 @@ tsParticles id: "tsparticles", url: "presets/default.json", }) - .then(container => { + .then((container) => { console.log("callback - tsparticles config loaded"); }) - .catch(error => { + .catch((error) => { console.error(error); }); @@ -796,7 +800,7 @@ _More videos are coming soon! Check every day if there are some new contents._ **particles.json** -You can find some config samples [here](https://github.com/tsparticles/website/tree/main/presets) 📖 +You can find some config samples [here](https://particles.js.org/demos/presets/) 📖 --- @@ -832,6 +836,8 @@ $ pnpm start **Boom! 💥** and you can check out other demos. +Note: `demo/wordpress` contains documentation only. The WordPress wrapper runs as a plugin inside a WordPress installation, not as a standalone demo app. + _If you are brave enough_ you can switch to the `dev` branch for trying the features under development. --- @@ -840,7 +846,7 @@ _If you are brave enough_ you can switch to the `dev` branch for trying the feat **tsParticles** has a package that makes this library 100% compatible with the _particles.js_ configuration. -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/particles.js/badge?style=rounded)](https://www.jsdelivr.com/package/npm/@tsparticles/particles.js) [![npmjs](https://badge.fury.io/js/@tsparticles/particles.js.svg)](https://www.npmjs.com/package/@tsparticles/particles.js) [![npm](https://img.shields.io/npm/dm/@tsparticles/particles.js)](https://www.npmjs.com/package/@tsparticles/particles.js) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/pjs/badge?style=rounded)](https://www.jsdelivr.com/package/npm/@tsparticles/pjs) [![npmjs](https://badge.fury.io/js/@tsparticles/pjs.svg)](https://www.npmjs.com/package/@tsparticles/pjs) [![npm](https://img.shields.io/npm/dm/@tsparticles/pjs)](https://www.npmjs.com/package/@tsparticles/pjs) Seriously, you just need to change the script from particles.js to the bundled compatibility package, et-voilà, **you're ready** 🧙! diff --git a/bundles/all/CHANGELOG.md b/bundles/all/CHANGELOG.md index ee6d198835a..90d75a4d2c1 100644 --- a/bundles/all/CHANGELOG.md +++ b/bundles/all/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/all + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/all diff --git a/bundles/all/README.md b/bundles/all/README.md index a3ad01a9324..72dfab9b3be 100644 --- a/bundles/all/README.md +++ b/bundles/all/README.md @@ -11,10 +11,12 @@ - [tsparticles (and all its dependencies)](https://github.com/tsparticles/tsparticles/tree/main/bundles/full) - [@tsparticles/engine](https://github.com/tsparticles/tsparticles/tree/main/engine) - [@tsparticles/effect-bubble](https://github.com/tsparticles/tsparticles/tree/main/effects/bubble) +- [@tsparticles/effect-filter](https://github.com/tsparticles/tsparticles/tree/main/effects/filter) - [@tsparticles/effect-particles](https://github.com/tsparticles/tsparticles/tree/main/effects/particles) - [@tsparticles/effect-shadow](https://github.com/tsparticles/tsparticles/tree/main/effects/shadow) - [@tsparticles/effect-trail](https://github.com/tsparticles/tsparticles/tree/main/effects/trail) - [@tsparticles/interaction-external-particle](https://github.com/tsparticles/tsparticles/tree/main/interactions/external/particle) +- [@tsparticles/interaction-external-cannon](https://github.com/tsparticles/tsparticles/tree/main/interactions/external/cannon) - [@tsparticles/interaction-external-pop](https://github.com/tsparticles/tsparticles/tree/main/interactions/external/pop) - [@tsparticles/interaction-light](https://github.com/tsparticles/tsparticles/tree/main/interactions/light) - [@tsparticles/interaction-particles-repulse](https://github.com/tsparticles/tsparticles/tree/main/interactions/particles/repulse) @@ -31,7 +33,7 @@ - [@tsparticles/path-simplex-noise](https://github.com/tsparticles/tsparticles/tree/main/paths/simplexNoise) - [@tsparticles/path-spiral](https://github.com/tsparticles/tsparticles/tree/main/paths/spiral) - [@tsparticles/path-svg](https://github.com/tsparticles/tsparticles/tree/main/paths/svg) -- [@tsparticles/path-zig-zag](https://github.com/tsparticles/tsparticles/tree/main/paths/zigZag) +- [@tsparticles/path-zig-zag](https://github.com/tsparticles/tsparticles/tree/main/paths/zigzag) - [@tsparticles/plugin-background-mask](https://github.com/tsparticles/tsparticles/tree/main/plugins/backgroundMask) - [@tsparticles/plugin-blend](https://github.com/tsparticles/tsparticles/tree/main/plugins/blend) - [@tsparticles/plugin-canvas-mask](https://github.com/tsparticles/tsparticles/tree/main/plugins/canvasMask) @@ -48,23 +50,23 @@ - [@tsparticles/plugin-easing-sigmoid](https://github.com/tsparticles/tsparticles/tree/main/plugins/easings/sigmoid) - [@tsparticles/plugin-easing-sine](https://github.com/tsparticles/tsparticles/tree/main/plugins/easings/sine) - [@tsparticles/plugin-easing-smoothstep](https://github.com/tsparticles/tsparticles/tree/main/plugins/easings/smoothstep) -- [@tsparticles/plugin-emitters-shape-canvas](https://github.com/tsparticles/tsparticles/tree/main/plugins/emitters/shape/canvas) -- [@tsparticles/plugin-emitters-shape-path](https://github.com/tsparticles/tsparticles/tree/main/plugins/emitters/shape/path) -- [@tsparticles/plugin-emitters-shape-polygon](https://github.com/tsparticles/tsparticles/tree/main/plugins/emitters/shape/polygon) +- [@tsparticles/plugin-emitters-shape-canvas](https://github.com/tsparticles/tsparticles/tree/main/plugins/emittersShapes/canvas) +- [@tsparticles/plugin-emitters-shape-path](https://github.com/tsparticles/tsparticles/tree/main/plugins/emittersShapes/path) +- [@tsparticles/plugin-emitters-shape-polygon](https://github.com/tsparticles/tsparticles/tree/main/plugins/emittersShapes/polygon) - [@tsparticles/plugin-export-image](https://github.com/tsparticles/tsparticles/tree/main/plugins/exports/image) - [@tsparticles/plugin-export-json](https://github.com/tsparticles/tsparticles/tree/main/plugins/exports/json) - [@tsparticles/plugin-export-video](https://github.com/tsparticles/tsparticles/tree/main/plugins/exports/video) -- [@tsparticles/plugin-hsv-color](https://github.com/tsparticles/tsparticles/tree/main/plugins/colors/hsvColor) -- [@tsparticles/plugin-hwb-color](https://github.com/tsparticles/tsparticles/tree/main/plugins/colors/hwbColor) +- [@tsparticles/plugin-hsv-color](https://github.com/tsparticles/tsparticles/tree/main/plugins/colors/hsv) +- [@tsparticles/plugin-hwb-color](https://github.com/tsparticles/tsparticles/tree/main/plugins/colors/hwb) - [@tsparticles/plugin-infection](https://github.com/tsparticles/tsparticles/tree/main/plugins/infection) -- [@tsparticles/plugin-lab-color](https://github.com/tsparticles/tsparticles/tree/main/plugins/colors/labColor) -- [@tsparticles/plugin-lch-color](https://github.com/tsparticles/tsparticles/tree/main/plugins/colors/lchColor) +- [@tsparticles/plugin-lab-color](https://github.com/tsparticles/tsparticles/tree/main/plugins/colors/lab) +- [@tsparticles/plugin-lch-color](https://github.com/tsparticles/tsparticles/tree/main/plugins/colors/lch) - [@tsparticles/plugin-manual-particles](https://github.com/tsparticles/tsparticles/tree/main/plugins/manualParticles) - [@tsparticles/plugin-motion](https://github.com/tsparticles/tsparticles/tree/main/plugins/motion) -- [@tsparticles/plugin-named-color](https://github.com/tsparticles/tsparticles/tree/main/plugins/colors/namedColor) -- [@tsparticles/plugin-oklab-color](https://github.com/tsparticles/tsparticles/tree/main/plugins/colors/oklabColor) -- [@tsparticles/plugin-oklch-color](https://github.com/tsparticles/tsparticles/tree/main/plugins/colors/oklchColor) -- [@tsparticles/plugin-poisson-disc](https://github.com/tsparticles/tsparticles/tree/main/plugins/poissonDisc) +- [@tsparticles/plugin-named-color](https://github.com/tsparticles/tsparticles/tree/main/plugins/colors/named) +- [@tsparticles/plugin-oklab-color](https://github.com/tsparticles/tsparticles/tree/main/plugins/colors/oklab) +- [@tsparticles/plugin-oklch-color](https://github.com/tsparticles/tsparticles/tree/main/plugins/colors/oklch) +- [@tsparticles/plugin-poisson-disc](https://github.com/tsparticles/tsparticles/tree/main/plugins/poisson) - [@tsparticles/plugin-polygon-mask](https://github.com/tsparticles/tsparticles/tree/main/plugins/polygonMask) - [@tsparticles/plugin-responsive](https://github.com/tsparticles/tsparticles/tree/main/plugins/responsive) - [@tsparticles/plugin-sounds](https://github.com/tsparticles/tsparticles/tree/main/plugins/sounds) @@ -78,8 +80,8 @@ - [@tsparticles/shape-infinity](https://github.com/tsparticles/tsparticles/tree/main/shapes/infinity) - [@tsparticles/shape-matrix](https://github.com/tsparticles/tsparticles/tree/main/shapes/matrix) - [@tsparticles/shape-path](https://github.com/tsparticles/tsparticles/tree/main/shapes/path) -- [@tsparticles/shape-rounded-polygon](https://github.com/tsparticles/tsparticles/tree/main/shapes/polygon) -- [@tsparticles/shape-rounded-rect](https://github.com/tsparticles/tsparticles/tree/main/shapes/rect) +- [@tsparticles/shape-rounded-polygon](https://github.com/tsparticles/tsparticles/tree/main/shapes/rounded-polygon) +- [@tsparticles/shape-rounded-rect](https://github.com/tsparticles/tsparticles/tree/main/shapes/rounded-rect) - [@tsparticles/shape-spiral](https://github.com/tsparticles/tsparticles/tree/main/shapes/spiral) - [@tsparticles/shape-squircle](https://github.com/tsparticles/tsparticles/tree/main/shapes/squircle) - [@tsparticles/updater-gradient](https://github.com/tsparticles/tsparticles/tree/main/updaters/gradient) @@ -101,12 +103,14 @@ end subgraph e [Effects] eb[tsparticles/effect-bubble] + ef[tsparticles/effect-filter] ep[tsparticles/effect-particles] es[tsparticles/effect-shadow] et[tsparticles/effect-trail] end subgraph i [Interactions] + iec[tsparticles/interaction-external-cannon] iep[tsparticles/interaction-external-particle] iepo[tsparticles/interaction-external-pop] il[tsparticles/interaction-light] diff --git a/bundles/all/package.dist.json b/bundles/all/package.dist.json index f5a19dbbd59..1ac0b68ee8a 100644 --- a/bundles/all/package.dist.json +++ b/bundles/all/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/all", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "Easily create highly customizable particle animations and use them as animated backgrounds for your website. Ready to use components available also for React, Vue.js (2.x and 3.x), Angular, Svelte, jQuery, Preact, Riot.js, Inferno.", "homepage": "https://particles.js.org", "repository": { @@ -95,87 +95,94 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "dependencies": { - "@tsparticles/effect-bubble": "4.0.0-beta.12", - "@tsparticles/effect-filter": "4.0.0-beta.12", - "@tsparticles/effect-particles": "4.0.0-beta.12", - "@tsparticles/effect-shadow": "4.0.0-beta.12", - "@tsparticles/effect-trail": "4.0.0-beta.12", - "@tsparticles/engine": "4.0.0-beta.12", - "@tsparticles/interaction-external-cannon": "4.0.0-beta.12", - "@tsparticles/interaction-external-particle": "4.0.0-beta.12", - "@tsparticles/interaction-external-pop": "4.0.0-beta.12", - "@tsparticles/interaction-light": "4.0.0-beta.12", - "@tsparticles/interaction-particles-repulse": "4.0.0-beta.12", - "@tsparticles/path-branches": "4.0.0-beta.12", - "@tsparticles/path-brownian": "4.0.0-beta.12", - "@tsparticles/path-curl-noise": "4.0.0-beta.12", - "@tsparticles/path-curves": "4.0.0-beta.12", - "@tsparticles/path-fractal-noise": "4.0.0-beta.12", - "@tsparticles/path-grid": "4.0.0-beta.12", - "@tsparticles/path-levy": "4.0.0-beta.12", - "@tsparticles/path-perlin-noise": "4.0.0-beta.12", - "@tsparticles/path-polygon": "4.0.0-beta.12", - "@tsparticles/path-random": "4.0.0-beta.12", - "@tsparticles/path-simplex-noise": "4.0.0-beta.12", - "@tsparticles/path-spiral": "4.0.0-beta.12", - "@tsparticles/path-svg": "4.0.0-beta.12", - "@tsparticles/path-zig-zag": "4.0.0-beta.12", - "@tsparticles/plugin-background-mask": "4.0.0-beta.12", - "@tsparticles/plugin-blend": "4.0.0-beta.12", - "@tsparticles/plugin-canvas-mask": "4.0.0-beta.12", - "@tsparticles/plugin-easing-back": "4.0.0-beta.12", - "@tsparticles/plugin-easing-bounce": "4.0.0-beta.12", - "@tsparticles/plugin-easing-circ": "4.0.0-beta.12", - "@tsparticles/plugin-easing-cubic": "4.0.0-beta.12", - "@tsparticles/plugin-easing-elastic": "4.0.0-beta.12", - "@tsparticles/plugin-easing-expo": "4.0.0-beta.12", - "@tsparticles/plugin-easing-gaussian": "4.0.0-beta.12", - "@tsparticles/plugin-easing-linear": "4.0.0-beta.12", - "@tsparticles/plugin-easing-quart": "4.0.0-beta.12", - "@tsparticles/plugin-easing-quint": "4.0.0-beta.12", - "@tsparticles/plugin-easing-sigmoid": "4.0.0-beta.12", - "@tsparticles/plugin-easing-sine": "4.0.0-beta.12", - "@tsparticles/plugin-easing-smoothstep": "4.0.0-beta.12", - "@tsparticles/plugin-emitters-shape-canvas": "4.0.0-beta.12", - "@tsparticles/plugin-emitters-shape-path": "4.0.0-beta.12", - "@tsparticles/plugin-emitters-shape-polygon": "4.0.0-beta.12", - "@tsparticles/plugin-export-image": "4.0.0-beta.12", - "@tsparticles/plugin-export-json": "4.0.0-beta.12", - "@tsparticles/plugin-export-video": "4.0.0-beta.12", - "@tsparticles/plugin-hsv-color": "4.0.0-beta.12", - "@tsparticles/plugin-hwb-color": "4.0.0-beta.12", - "@tsparticles/plugin-infection": "4.0.0-beta.12", - "@tsparticles/plugin-lab-color": "4.0.0-beta.12", - "@tsparticles/plugin-lch-color": "4.0.0-beta.12", - "@tsparticles/plugin-manual-particles": "4.0.0-beta.12", - "@tsparticles/plugin-motion": "4.0.0-beta.12", - "@tsparticles/plugin-named-color": "4.0.0-beta.12", - "@tsparticles/plugin-oklab-color": "4.0.0-beta.12", - "@tsparticles/plugin-oklch-color": "4.0.0-beta.12", - "@tsparticles/plugin-poisson-disc": "4.0.0-beta.12", - "@tsparticles/plugin-polygon-mask": "4.0.0-beta.12", - "@tsparticles/plugin-responsive": "4.0.0-beta.12", - "@tsparticles/plugin-sounds": "4.0.0-beta.12", - "@tsparticles/plugin-themes": "4.0.0-beta.12", - "@tsparticles/plugin-trail": "4.0.0-beta.12", - "@tsparticles/plugin-zoom": "4.0.0-beta.12", - "@tsparticles/shape-arrow": "4.0.0-beta.12", - "@tsparticles/shape-cards": "4.0.0-beta.12", - "@tsparticles/shape-cog": "4.0.0-beta.12", - "@tsparticles/shape-heart": "4.0.0-beta.12", - "@tsparticles/shape-infinity": "4.0.0-beta.12", - "@tsparticles/shape-matrix": "4.0.0-beta.12", - "@tsparticles/shape-path": "4.0.0-beta.12", - "@tsparticles/shape-rounded-polygon": "4.0.0-beta.12", - "@tsparticles/shape-rounded-rect": "4.0.0-beta.12", - "@tsparticles/shape-spiral": "4.0.0-beta.12", - "@tsparticles/shape-squircle": "4.0.0-beta.12", - "@tsparticles/updater-gradient": "4.0.0-beta.12", - "@tsparticles/updater-orbit": "4.0.0-beta.12", - "tsparticles": "4.0.0-beta.12" + "@tsparticles/effect-bubble": "4.0.0-beta.15", + "@tsparticles/effect-filter": "4.0.0-beta.15", + "@tsparticles/effect-particles": "4.0.0-beta.15", + "@tsparticles/effect-shadow": "4.0.0-beta.15", + "@tsparticles/effect-trail": "4.0.0-beta.15", + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/interaction-external-cannon": "4.0.0-beta.15", + "@tsparticles/interaction-external-particle": "4.0.0-beta.15", + "@tsparticles/interaction-external-pop": "4.0.0-beta.15", + "@tsparticles/interaction-light": "4.0.0-beta.15", + "@tsparticles/interaction-particles-repulse": "4.0.0-beta.15", + "@tsparticles/path-branches": "4.0.0-beta.15", + "@tsparticles/path-brownian": "4.0.0-beta.15", + "@tsparticles/path-curl-noise": "4.0.0-beta.15", + "@tsparticles/path-curves": "4.0.0-beta.15", + "@tsparticles/path-fractal-noise": "4.0.0-beta.15", + "@tsparticles/path-grid": "4.0.0-beta.15", + "@tsparticles/path-levy": "4.0.0-beta.15", + "@tsparticles/path-perlin-noise": "4.0.0-beta.15", + "@tsparticles/path-polygon": "4.0.0-beta.15", + "@tsparticles/path-random": "4.0.0-beta.15", + "@tsparticles/path-simplex-noise": "4.0.0-beta.15", + "@tsparticles/path-spiral": "4.0.0-beta.15", + "@tsparticles/path-svg": "4.0.0-beta.15", + "@tsparticles/path-zig-zag": "4.0.0-beta.15", + "@tsparticles/plugin-background-mask": "4.0.0-beta.15", + "@tsparticles/plugin-blend": "4.0.0-beta.15", + "@tsparticles/plugin-canvas-mask": "4.0.0-beta.15", + "@tsparticles/plugin-easing-back": "4.0.0-beta.15", + "@tsparticles/plugin-easing-bounce": "4.0.0-beta.15", + "@tsparticles/plugin-easing-circ": "4.0.0-beta.15", + "@tsparticles/plugin-easing-cubic": "4.0.0-beta.15", + "@tsparticles/plugin-easing-elastic": "4.0.0-beta.15", + "@tsparticles/plugin-easing-expo": "4.0.0-beta.15", + "@tsparticles/plugin-easing-gaussian": "4.0.0-beta.15", + "@tsparticles/plugin-easing-linear": "4.0.0-beta.15", + "@tsparticles/plugin-easing-quart": "4.0.0-beta.15", + "@tsparticles/plugin-easing-quint": "4.0.0-beta.15", + "@tsparticles/plugin-easing-sigmoid": "4.0.0-beta.15", + "@tsparticles/plugin-easing-sine": "4.0.0-beta.15", + "@tsparticles/plugin-easing-smoothstep": "4.0.0-beta.15", + "@tsparticles/plugin-emitters-shape-canvas": "4.0.0-beta.15", + "@tsparticles/plugin-emitters-shape-path": "4.0.0-beta.15", + "@tsparticles/plugin-emitters-shape-polygon": "4.0.0-beta.15", + "@tsparticles/plugin-export-image": "4.0.0-beta.15", + "@tsparticles/plugin-export-json": "4.0.0-beta.15", + "@tsparticles/plugin-export-video": "4.0.0-beta.15", + "@tsparticles/plugin-hsv-color": "4.0.0-beta.15", + "@tsparticles/plugin-hwb-color": "4.0.0-beta.15", + "@tsparticles/plugin-infection": "4.0.0-beta.15", + "@tsparticles/plugin-lab-color": "4.0.0-beta.15", + "@tsparticles/plugin-lch-color": "4.0.0-beta.15", + "@tsparticles/plugin-manual-particles": "4.0.0-beta.15", + "@tsparticles/plugin-motion": "4.0.0-beta.15", + "@tsparticles/plugin-named-color": "4.0.0-beta.15", + "@tsparticles/plugin-oklab-color": "4.0.0-beta.15", + "@tsparticles/plugin-oklch-color": "4.0.0-beta.15", + "@tsparticles/plugin-poisson-disc": "4.0.0-beta.15", + "@tsparticles/plugin-polygon-mask": "4.0.0-beta.15", + "@tsparticles/plugin-responsive": "4.0.0-beta.15", + "@tsparticles/plugin-sounds": "4.0.0-beta.15", + "@tsparticles/plugin-themes": "4.0.0-beta.15", + "@tsparticles/plugin-trail": "4.0.0-beta.15", + "@tsparticles/plugin-zoom": "4.0.0-beta.15", + "@tsparticles/shape-arrow": "4.0.0-beta.15", + "@tsparticles/shape-cards": "4.0.0-beta.15", + "@tsparticles/shape-cog": "4.0.0-beta.15", + "@tsparticles/shape-heart": "4.0.0-beta.15", + "@tsparticles/shape-infinity": "4.0.0-beta.15", + "@tsparticles/shape-matrix": "4.0.0-beta.15", + "@tsparticles/shape-path": "4.0.0-beta.15", + "@tsparticles/shape-rounded-polygon": "4.0.0-beta.15", + "@tsparticles/shape-rounded-rect": "4.0.0-beta.15", + "@tsparticles/shape-spiral": "4.0.0-beta.15", + "@tsparticles/shape-squircle": "4.0.0-beta.15", + "@tsparticles/updater-gradient": "4.0.0-beta.15", + "@tsparticles/updater-orbit": "4.0.0-beta.15", + "tsparticles": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/bundles/all/package.json b/bundles/all/package.json index 6cfad19059b..eac3d3d9835 100644 --- a/bundles/all/package.json +++ b/bundles/all/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/all", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "Easily create highly customizable particle animations and use them as animated backgrounds for your website. Ready to use components available also for React, Vue.js (2.x and 3.x), Angular, Svelte, jQuery, Preact, Riot.js, Inferno.", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -89,7 +89,10 @@ "files": [ "dist" ], - "sideEffects": false, + "sideEffects": [ + "dist/browser/browser.js", + "dist/browser/index.js" + ], "browser": "dist/browser/index.js", "main": "dist/cjs/index.js", "module": "dist/esm/index.js", @@ -102,6 +105,13 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "dependencies": { @@ -189,5 +199,9 @@ "directory": "dist", "linkDirectory": true }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/bundles/all/rollup.config.js b/bundles/all/rollup.config.js new file mode 100644 index 00000000000..c908b21b3b2 --- /dev/null +++ b/bundles/all/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesBundle } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesBundle({ + moduleName: "all", + bundleName: "All", + version, + dir: __dirname, + progress: false, +}); diff --git a/bundles/all/src/browser.ts b/bundles/all/src/browser.ts new file mode 100644 index 00000000000..edfd60a4d14 --- /dev/null +++ b/bundles/all/src/browser.ts @@ -0,0 +1,10 @@ +import { loadAll } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadAll?: typeof loadAll; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadAll = loadAll; + +export * from "./index.js"; diff --git a/bundles/all/src/bundle.ts b/bundles/all/src/bundle.ts index fb4f1f806f7..2869f9590de 100644 --- a/bundles/all/src/bundle.ts +++ b/bundles/all/src/bundle.ts @@ -1,2 +1,12 @@ +import { loadAll } from "./index.js"; + export * from "@tsparticles/engine"; export { loadAll } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadAll?: typeof loadAll; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; + +globalObject.loadAll = loadAll; diff --git a/bundles/all/src/index.lazy.ts b/bundles/all/src/index.lazy.ts new file mode 100644 index 00000000000..caf48e70a54 --- /dev/null +++ b/bundles/all/src/index.lazy.ts @@ -0,0 +1,291 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * Loads the slime bundle with all plugins needed for running the tsParticles All package. + * This function must be called to make tsParticles All work. + * This function is not mandatory, the plugins can be loaded manually, or using other plugin bundles. + * If this function is not called, the \@tsparticles/all package/dependency can be safely removed. + * This function is called automatically using CDN bundle files. + * @param engine - the engine to use for loading all plugins + */ +export async function loadAll(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const [ + { loadFull }, + + { loadHsvColorPlugin }, + { loadHwbColorPlugin }, + { loadLabColorPlugin }, + { loadLchColorPlugin }, + { loadOklabColorPlugin }, + { loadOklchColorPlugin }, + { loadNamedColorPlugin }, + + { loadEasingBackPlugin }, + { loadEasingBouncePlugin }, + { loadEasingCircPlugin }, + { loadEasingCubicPlugin }, + { loadEasingElasticPlugin }, + { loadEasingExpoPlugin }, + { loadEasingGaussianPlugin }, + { loadEasingLinearPlugin }, + { loadEasingQuartPlugin }, + { loadEasingQuintPlugin }, + { loadEasingSigmoidPlugin }, + { loadEasingSinePlugin }, + { loadEasingSmoothstepPlugin }, + + { loadBackgroundMaskPlugin }, + { loadBlendPlugin }, + { loadCanvasMaskPlugin }, + { loadInfectionPlugin }, + { loadManualParticlesPlugin }, + { loadMotionPlugin }, + { loadPoissonDiscPlugin }, + { loadPolygonMaskPlugin }, + { loadResponsivePlugin }, + { loadSoundsPlugin }, + { loadThemesPlugin }, + { loadTrailPlugin }, + { loadZoomPlugin }, + + { loadExportImagePlugin }, + { loadExportJSONPlugin }, + { loadExportVideoPlugin }, + + { loadExternalCannonInteraction }, + { loadExternalParticleInteraction }, + { loadExternalPopInteraction }, + { loadLightInteraction }, + { loadParticlesRepulseInteraction }, + + { loadGradientUpdater }, + { loadOrbitUpdater }, + + { loadBranchesPath }, + { loadBrownianPath }, + { loadCurlNoisePath }, + { loadCurvesPath }, + { loadFractalNoisePath }, + { loadGridPath }, + { loadLevyPath }, + { loadPerlinNoisePath }, + { loadPolygonPath }, + { loadRandomPath }, + { loadSimplexNoisePath }, + { loadSpiralPath }, + { loadSVGPath }, + { loadZigZagPath }, + + { loadBubbleEffect }, + { loadFilterEffect }, + { loadParticlesEffect }, + { loadShadowEffect }, + { loadTrailEffect }, + + { loadArrowShape }, + { loadCardsShape }, + { loadCogShape }, + { loadHeartShape }, + { loadInfinityShape }, + { loadMatrixShape }, + { loadPathShape }, + { loadRoundedPolygonShape }, + { loadRoundedRectShape }, + { loadSpiralShape }, + { loadSquircleShape }, + + { loadEmittersShapeCanvas }, + { loadEmittersShapePath }, + { loadEmittersShapePolygon }, + ] = await Promise.all([ + import("tsparticles/lazy"), + + import("@tsparticles/plugin-hsv-color/lazy"), + import("@tsparticles/plugin-hwb-color/lazy"), + import("@tsparticles/plugin-lab-color/lazy"), + import("@tsparticles/plugin-lch-color/lazy"), + import("@tsparticles/plugin-oklab-color/lazy"), + import("@tsparticles/plugin-oklch-color/lazy"), + import("@tsparticles/plugin-named-color/lazy"), + + import("@tsparticles/plugin-easing-back/lazy"), + import("@tsparticles/plugin-easing-bounce/lazy"), + import("@tsparticles/plugin-easing-circ/lazy"), + import("@tsparticles/plugin-easing-cubic/lazy"), + import("@tsparticles/plugin-easing-elastic/lazy"), + import("@tsparticles/plugin-easing-expo/lazy"), + import("@tsparticles/plugin-easing-gaussian/lazy"), + import("@tsparticles/plugin-easing-linear/lazy"), + import("@tsparticles/plugin-easing-quart/lazy"), + import("@tsparticles/plugin-easing-quint/lazy"), + import("@tsparticles/plugin-easing-sigmoid/lazy"), + import("@tsparticles/plugin-easing-sine/lazy"), + import("@tsparticles/plugin-easing-smoothstep/lazy"), + + import("@tsparticles/plugin-background-mask/lazy"), + import("@tsparticles/plugin-blend/lazy"), + import("@tsparticles/plugin-canvas-mask/lazy"), + import("@tsparticles/plugin-infection/lazy"), + import("@tsparticles/plugin-manual-particles/lazy"), + import("@tsparticles/plugin-motion/lazy"), + import("@tsparticles/plugin-poisson-disc/lazy"), + import("@tsparticles/plugin-polygon-mask/lazy"), + import("@tsparticles/plugin-responsive/lazy"), + import("@tsparticles/plugin-sounds/lazy"), + import("@tsparticles/plugin-themes/lazy"), + import("@tsparticles/plugin-trail/lazy"), + import("@tsparticles/plugin-zoom/lazy"), + + import("@tsparticles/plugin-export-image/lazy"), + import("@tsparticles/plugin-export-json/lazy"), + import("@tsparticles/plugin-export-video/lazy"), + + import("@tsparticles/interaction-external-cannon/lazy"), + import("@tsparticles/interaction-external-particle/lazy"), + import("@tsparticles/interaction-external-pop/lazy"), + import("@tsparticles/interaction-light/lazy"), + import("@tsparticles/interaction-particles-repulse/lazy"), + + import("@tsparticles/updater-gradient/lazy"), + import("@tsparticles/updater-orbit/lazy"), + + import("@tsparticles/path-branches/lazy"), + import("@tsparticles/path-brownian/lazy"), + import("@tsparticles/path-curl-noise/lazy"), + import("@tsparticles/path-curves/lazy"), + import("@tsparticles/path-fractal-noise/lazy"), + import("@tsparticles/path-grid/lazy"), + import("@tsparticles/path-levy/lazy"), + import("@tsparticles/path-perlin-noise/lazy"), + import("@tsparticles/path-polygon/lazy"), + import("@tsparticles/path-random/lazy"), + import("@tsparticles/path-simplex-noise/lazy"), + import("@tsparticles/path-spiral/lazy"), + import("@tsparticles/path-svg/lazy"), + import("@tsparticles/path-zig-zag/lazy"), + + import("@tsparticles/effect-bubble/lazy"), + import("@tsparticles/effect-filter/lazy"), + import("@tsparticles/effect-particles/lazy"), + import("@tsparticles/effect-shadow/lazy"), + import("@tsparticles/effect-trail/lazy"), + + import("@tsparticles/shape-arrow/lazy"), + import("@tsparticles/shape-cards/lazy"), + import("@tsparticles/shape-cog/lazy"), + import("@tsparticles/shape-heart/lazy"), + import("@tsparticles/shape-infinity/lazy"), + import("@tsparticles/shape-matrix/lazy"), + import("@tsparticles/shape-path/lazy"), + import("@tsparticles/shape-rounded-polygon/lazy"), + import("@tsparticles/shape-rounded-rect/lazy"), + import("@tsparticles/shape-spiral/lazy"), + import("@tsparticles/shape-squircle/lazy"), + + import("@tsparticles/plugin-emitters-shape-canvas/lazy"), + import("@tsparticles/plugin-emitters-shape-path/lazy"), + import("@tsparticles/plugin-emitters-shape-polygon/lazy"), + ]), + loadInteractionsForAll = async (e: Engine): Promise => { + await loadFull(e); + + await Promise.all([ + loadExternalCannonInteraction(e), + loadExternalParticleInteraction(e), + loadExternalPopInteraction(e), + loadLightInteraction(e), + loadParticlesRepulseInteraction(e), + + loadInfectionPlugin(e), + + loadEmittersShapeCanvas(e), + loadEmittersShapePath(e), + loadEmittersShapePolygon(e), + + loadBranchesPath(e), + loadBrownianPath(e), + loadCurlNoisePath(e), + loadCurvesPath(e), + loadFractalNoisePath(e), + loadGridPath(e), + loadLevyPath(e), + loadPerlinNoisePath(e), + loadPolygonPath(e), + loadRandomPath(e), + loadSVGPath(e), + loadSpiralPath(e), + loadZigZagPath(e), + loadSimplexNoisePath(e), + ]); + }; + + await Promise.all([ + loadInteractionsForAll(e), + + loadHsvColorPlugin(e), + loadHwbColorPlugin(e), + loadLabColorPlugin(e), + loadLchColorPlugin(e), + loadOklabColorPlugin(e), + loadOklchColorPlugin(e), + loadNamedColorPlugin(e), + + loadEasingBackPlugin(e), + loadEasingBouncePlugin(e), + loadEasingCircPlugin(e), + loadEasingCubicPlugin(e), + loadEasingElasticPlugin(e), + loadEasingExpoPlugin(e), + loadEasingGaussianPlugin(e), + loadEasingLinearPlugin(e), + loadEasingQuartPlugin(e), + loadEasingQuintPlugin(e), + loadEasingSigmoidPlugin(e), + loadEasingSinePlugin(e), + loadEasingSmoothstepPlugin(e), + + loadBackgroundMaskPlugin(e), + loadBlendPlugin(e), + loadCanvasMaskPlugin(e), + loadManualParticlesPlugin(e), + loadMotionPlugin(e), + loadPoissonDiscPlugin(e), + loadPolygonMaskPlugin(e), + loadResponsivePlugin(e), + loadSoundsPlugin(e), + loadThemesPlugin(e), + loadTrailPlugin(e), + loadZoomPlugin(e), + + loadExportImagePlugin(e), + loadExportJSONPlugin(e), + loadExportVideoPlugin(e), + + loadGradientUpdater(e), + loadOrbitUpdater(e), + + loadBubbleEffect(e), + loadFilterEffect(e), + loadParticlesEffect(e), + loadShadowEffect(e), + loadTrailEffect(e), + + loadArrowShape(e), + loadCardsShape(e), + loadCogShape(e), + loadHeartShape(e), + loadInfinityShape(e), + loadMatrixShape(e), + loadPathShape(e), + loadRoundedPolygonShape(e), + loadRoundedRectShape(e), + loadSpiralShape(e), + loadSquircleShape(e), + ]); + }); +} diff --git a/bundles/all/src/index.ts b/bundles/all/src/index.ts index 3c071f9d423..a18b5abc7bb 100644 --- a/bundles/all/src/index.ts +++ b/bundles/all/src/index.ts @@ -1,4 +1,81 @@ import { type Engine } from "@tsparticles/engine"; +import { loadArrowShape } from "@tsparticles/shape-arrow"; +import { loadBackgroundMaskPlugin } from "@tsparticles/plugin-background-mask"; +import { loadBlendPlugin } from "@tsparticles/plugin-blend"; +import { loadBranchesPath } from "@tsparticles/path-branches"; +import { loadBrownianPath } from "@tsparticles/path-brownian"; +import { loadBubbleEffect } from "@tsparticles/effect-bubble"; +import { loadCanvasMaskPlugin } from "@tsparticles/plugin-canvas-mask"; +import { loadCardsShape } from "@tsparticles/shape-cards"; +import { loadCogShape } from "@tsparticles/shape-cog"; +import { loadCurlNoisePath } from "@tsparticles/path-curl-noise"; +import { loadCurvesPath } from "@tsparticles/path-curves"; +import { loadEasingBackPlugin } from "@tsparticles/plugin-easing-back"; +import { loadEasingBouncePlugin } from "@tsparticles/plugin-easing-bounce"; +import { loadEasingCircPlugin } from "@tsparticles/plugin-easing-circ"; +import { loadEasingCubicPlugin } from "@tsparticles/plugin-easing-cubic"; +import { loadEasingElasticPlugin } from "@tsparticles/plugin-easing-elastic"; +import { loadEasingExpoPlugin } from "@tsparticles/plugin-easing-expo"; +import { loadEasingGaussianPlugin } from "@tsparticles/plugin-easing-gaussian"; +import { loadEasingLinearPlugin } from "@tsparticles/plugin-easing-linear"; +import { loadEasingQuartPlugin } from "@tsparticles/plugin-easing-quart"; +import { loadEasingQuintPlugin } from "@tsparticles/plugin-easing-quint"; +import { loadEasingSigmoidPlugin } from "@tsparticles/plugin-easing-sigmoid"; +import { loadEasingSinePlugin } from "@tsparticles/plugin-easing-sine"; +import { loadEasingSmoothstepPlugin } from "@tsparticles/plugin-easing-smoothstep"; +import { loadEmittersShapeCanvas } from "@tsparticles/plugin-emitters-shape-canvas"; +import { loadEmittersShapePath } from "@tsparticles/plugin-emitters-shape-path"; +import { loadEmittersShapePolygon } from "@tsparticles/plugin-emitters-shape-polygon"; +import { loadExportImagePlugin } from "@tsparticles/plugin-export-image"; +import { loadExportJSONPlugin } from "@tsparticles/plugin-export-json"; +import { loadExportVideoPlugin } from "@tsparticles/plugin-export-video"; +import { loadExternalCannonInteraction } from "@tsparticles/interaction-external-cannon"; +import { loadExternalParticleInteraction } from "@tsparticles/interaction-external-particle"; +import { loadExternalPopInteraction } from "@tsparticles/interaction-external-pop"; +import { loadFilterEffect } from "@tsparticles/effect-filter"; +import { loadFractalNoisePath } from "@tsparticles/path-fractal-noise"; +import { loadFull } from "tsparticles"; +import { loadGradientUpdater } from "@tsparticles/updater-gradient"; +import { loadGridPath } from "@tsparticles/path-grid"; +import { loadHeartShape } from "@tsparticles/shape-heart"; +import { loadHsvColorPlugin } from "@tsparticles/plugin-hsv-color"; +import { loadHwbColorPlugin } from "@tsparticles/plugin-hwb-color"; +import { loadInfectionPlugin } from "@tsparticles/plugin-infection"; +import { loadInfinityShape } from "@tsparticles/shape-infinity"; +import { loadLabColorPlugin } from "@tsparticles/plugin-lab-color"; +import { loadLchColorPlugin } from "@tsparticles/plugin-lch-color"; +import { loadLevyPath } from "@tsparticles/path-levy"; +import { loadLightInteraction } from "@tsparticles/interaction-light"; +import { loadManualParticlesPlugin } from "@tsparticles/plugin-manual-particles"; +import { loadMatrixShape } from "@tsparticles/shape-matrix"; +import { loadMotionPlugin } from "@tsparticles/plugin-motion"; +import { loadNamedColorPlugin } from "@tsparticles/plugin-named-color"; +import { loadOklabColorPlugin } from "@tsparticles/plugin-oklab-color"; +import { loadOklchColorPlugin } from "@tsparticles/plugin-oklch-color"; +import { loadOrbitUpdater } from "@tsparticles/updater-orbit"; +import { loadParticlesEffect } from "@tsparticles/effect-particles"; +import { loadParticlesRepulseInteraction } from "@tsparticles/interaction-particles-repulse"; +import { loadPathShape } from "@tsparticles/shape-path"; +import { loadPerlinNoisePath } from "@tsparticles/path-perlin-noise"; +import { loadPoissonDiscPlugin } from "@tsparticles/plugin-poisson-disc"; +import { loadPolygonMaskPlugin } from "@tsparticles/plugin-polygon-mask"; +import { loadPolygonPath } from "@tsparticles/path-polygon"; +import { loadRandomPath } from "@tsparticles/path-random"; +import { loadResponsivePlugin } from "@tsparticles/plugin-responsive"; +import { loadRoundedPolygonShape } from "@tsparticles/shape-rounded-polygon"; +import { loadRoundedRectShape } from "@tsparticles/shape-rounded-rect"; +import { loadSVGPath } from "@tsparticles/path-svg"; +import { loadShadowEffect } from "@tsparticles/effect-shadow"; +import { loadSimplexNoisePath } from "@tsparticles/path-simplex-noise"; +import { loadSoundsPlugin } from "@tsparticles/plugin-sounds"; +import { loadSpiralPath } from "@tsparticles/path-spiral"; +import { loadSpiralShape } from "@tsparticles/shape-spiral"; +import { loadSquircleShape } from "@tsparticles/shape-squircle"; +import { loadThemesPlugin } from "@tsparticles/plugin-themes"; +import { loadTrailEffect } from "@tsparticles/effect-trail"; +import { loadTrailPlugin } from "@tsparticles/plugin-trail"; +import { loadZigZagPath } from "@tsparticles/path-zig-zag"; +import { loadZoomPlugin } from "@tsparticles/plugin-zoom"; declare const __VERSION__: string; @@ -14,217 +91,41 @@ export async function loadAll(engine: Engine): Promise { engine.checkVersion(__VERSION__); await engine.pluginManager.register(async e => { - const [ - { loadFull }, - - { loadHsvColorPlugin }, - { loadHwbColorPlugin }, - { loadLabColorPlugin }, - { loadLchColorPlugin }, - { loadOklabColorPlugin }, - { loadOklchColorPlugin }, - { loadNamedColorPlugin }, - - { loadEasingBackPlugin }, - { loadEasingBouncePlugin }, - { loadEasingCircPlugin }, - { loadEasingCubicPlugin }, - { loadEasingElasticPlugin }, - { loadEasingExpoPlugin }, - { loadEasingGaussianPlugin }, - { loadEasingLinearPlugin }, - { loadEasingQuartPlugin }, - { loadEasingQuintPlugin }, - { loadEasingSigmoidPlugin }, - { loadEasingSinePlugin }, - { loadEasingSmoothstepPlugin }, - - { loadBackgroundMaskPlugin }, - { loadBlendPlugin }, - { loadCanvasMaskPlugin }, - { loadInfectionPlugin }, - { loadManualParticlesPlugin }, - { loadMotionPlugin }, - { loadPoissonDiscPlugin }, - { loadPolygonMaskPlugin }, - { loadResponsivePlugin }, - { loadSoundsPlugin }, - { loadThemesPlugin }, - { loadTrailPlugin }, - { loadZoomPlugin }, - - { loadExportImagePlugin }, - { loadExportJSONPlugin }, - { loadExportVideoPlugin }, - - { loadExternalCannonInteraction }, - { loadExternalParticleInteraction }, - { loadExternalPopInteraction }, - { loadLightInteraction }, - { loadParticlesRepulseInteraction }, - - { loadGradientUpdater }, - { loadOrbitUpdater }, - - { loadBranchesPath }, - { loadBrownianPath }, - { loadCurlNoisePath }, - { loadCurvesPath }, - { loadFractalNoisePath }, - { loadGridPath }, - { loadLevyPath }, - { loadPerlinNoisePath }, - { loadPolygonPath }, - { loadRandomPath }, - { loadSVGPath }, - { loadSpiralPath }, - { loadZigZagPath }, - { loadSimplexNoisePath }, - - { loadBubbleEffect }, - { loadFilterEffect }, - { loadParticlesEffect }, - { loadShadowEffect }, - { loadTrailEffect }, - - { loadArrowShape }, - { loadCardsShape }, - { loadCogShape }, - { loadHeartShape }, - { loadInfinityShape }, - { loadMatrixShape }, - { loadPathShape }, - { loadRoundedPolygonShape }, - { loadRoundedRectShape }, - { loadSpiralShape }, - { loadSquircleShape }, - - { loadEmittersShapeCanvas }, - { loadEmittersShapePath }, - { loadEmittersShapePolygon }, - ] = await Promise.all([ - import("tsparticles"), - - import("@tsparticles/plugin-hsv-color"), - import("@tsparticles/plugin-hwb-color"), - import("@tsparticles/plugin-lab-color"), - import("@tsparticles/plugin-lch-color"), - import("@tsparticles/plugin-oklab-color"), - import("@tsparticles/plugin-oklch-color"), - import("@tsparticles/plugin-named-color"), - - import("@tsparticles/plugin-easing-back"), - import("@tsparticles/plugin-easing-bounce"), - import("@tsparticles/plugin-easing-circ"), - import("@tsparticles/plugin-easing-cubic"), - import("@tsparticles/plugin-easing-elastic"), - import("@tsparticles/plugin-easing-expo"), - import("@tsparticles/plugin-easing-gaussian"), - import("@tsparticles/plugin-easing-linear"), - import("@tsparticles/plugin-easing-quart"), - import("@tsparticles/plugin-easing-quint"), - import("@tsparticles/plugin-easing-sigmoid"), - import("@tsparticles/plugin-easing-sine"), - import("@tsparticles/plugin-easing-smoothstep"), - - import("@tsparticles/plugin-background-mask"), - import("@tsparticles/plugin-blend"), - import("@tsparticles/plugin-canvas-mask"), - import("@tsparticles/plugin-infection"), - import("@tsparticles/plugin-manual-particles"), - import("@tsparticles/plugin-motion"), - import("@tsparticles/plugin-poisson-disc"), - import("@tsparticles/plugin-polygon-mask"), - import("@tsparticles/plugin-responsive"), - import("@tsparticles/plugin-sounds"), - import("@tsparticles/plugin-themes"), - import("@tsparticles/plugin-trail"), - import("@tsparticles/plugin-zoom"), - - import("@tsparticles/plugin-export-image"), - import("@tsparticles/plugin-export-json"), - import("@tsparticles/plugin-export-video"), - - import("@tsparticles/interaction-external-cannon"), - import("@tsparticles/interaction-external-particle"), - import("@tsparticles/interaction-external-pop"), - import("@tsparticles/interaction-light"), - import("@tsparticles/interaction-particles-repulse"), - - import("@tsparticles/updater-gradient"), - import("@tsparticles/updater-orbit"), - - import("@tsparticles/path-branches"), - import("@tsparticles/path-brownian"), - import("@tsparticles/path-curl-noise"), - import("@tsparticles/path-curves"), - import("@tsparticles/path-fractal-noise"), - import("@tsparticles/path-grid"), - import("@tsparticles/path-levy"), - import("@tsparticles/path-perlin-noise"), - import("@tsparticles/path-polygon"), - import("@tsparticles/path-random"), - import("@tsparticles/path-svg"), - import("@tsparticles/path-spiral"), - import("@tsparticles/path-zig-zag"), - import("@tsparticles/path-simplex-noise"), - - import("@tsparticles/effect-bubble"), - import("@tsparticles/effect-filter"), - import("@tsparticles/effect-particles"), - import("@tsparticles/effect-shadow"), - import("@tsparticles/effect-trail"), - - import("@tsparticles/shape-arrow"), - import("@tsparticles/shape-cards"), - import("@tsparticles/shape-cog"), - import("@tsparticles/shape-heart"), - import("@tsparticles/shape-infinity"), - import("@tsparticles/shape-matrix"), - import("@tsparticles/shape-path"), - import("@tsparticles/shape-rounded-polygon"), - import("@tsparticles/shape-rounded-rect"), - import("@tsparticles/shape-spiral"), - import("@tsparticles/shape-squircle"), - - import("@tsparticles/plugin-emitters-shape-canvas"), - import("@tsparticles/plugin-emitters-shape-path"), - import("@tsparticles/plugin-emitters-shape-polygon"), - ]); + const loadInteractionsForAll = async (e: Engine): Promise => { + await loadFull(e); + + await Promise.all([ + loadExternalCannonInteraction(e), + loadExternalParticleInteraction(e), + loadExternalPopInteraction(e), + loadLightInteraction(e), + loadParticlesRepulseInteraction(e), + + loadInfectionPlugin(e), + + loadEmittersShapeCanvas(e), + loadEmittersShapePath(e), + loadEmittersShapePolygon(e), + + loadBranchesPath(e), + loadBrownianPath(e), + loadCurlNoisePath(e), + loadCurvesPath(e), + loadFractalNoisePath(e), + loadGridPath(e), + loadLevyPath(e), + loadPerlinNoisePath(e), + loadPolygonPath(e), + loadRandomPath(e), + loadSVGPath(e), + loadSpiralPath(e), + loadZigZagPath(e), + loadSimplexNoisePath(e), + ]); + }; await Promise.all([ - (async (): Promise => { - await loadFull(e); - - await Promise.all([ - loadExternalCannonInteraction(e), - loadExternalParticleInteraction(e), - loadExternalPopInteraction(e), - loadLightInteraction(e), - loadParticlesRepulseInteraction(e), - - loadInfectionPlugin(e), - - loadEmittersShapeCanvas(e), - loadEmittersShapePath(e), - loadEmittersShapePolygon(e), - - loadBranchesPath(e), - loadBrownianPath(e), - loadCurlNoisePath(e), - loadCurvesPath(e), - loadFractalNoisePath(e), - loadGridPath(e), - loadLevyPath(e), - loadPerlinNoisePath(e), - loadPolygonPath(e), - loadRandomPath(e), - loadSVGPath(e), - loadSpiralPath(e), - loadZigZagPath(e), - loadSimplexNoisePath(e), - ]); - })(), + loadInteractionsForAll(e), loadHsvColorPlugin(e), loadHwbColorPlugin(e), diff --git a/bundles/all/webpack.config.js b/bundles/all/webpack.config.js deleted file mode 100644 index 0fc20b1cfa5..00000000000 --- a/bundles/all/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesBundle } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesBundle({ - moduleName: "all", - bundleName: "All", - version, - dir: __dirname, - progress: false, -}); diff --git a/bundles/basic/CHANGELOG.md b/bundles/basic/CHANGELOG.md index 0db735b16b1..a595c9a0bb2 100644 --- a/bundles/basic/CHANGELOG.md +++ b/bundles/basic/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/basic + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/basic diff --git a/bundles/basic/README.md b/bundles/basic/README.md index efb8de78ba9..02db931bdd6 100644 --- a/bundles/basic/README.md +++ b/bundles/basic/README.md @@ -9,10 +9,10 @@ **Included Packages** - [@tsparticles/engine](https://github.com/tsparticles/tsparticles/tree/main/engine) -- [@tsparticles/plugin-move](https://github.com/tsparticles/tsparticles/tree/main/plugin/move) -- [@tsparticles/plugin-hex-color](https://github.com/tsparticles/tsparticles/tree/main/plugins/colors/hexColor) -- [@tsparticles/plugin-hsl-color](https://github.com/tsparticles/tsparticles/tree/main/plugins/colors/hslColor) -- [@tsparticles/plugin-rgb-color](https://github.com/tsparticles/tsparticles/tree/main/plugins/colors/rgbColor) +- [@tsparticles/plugin-move](https://github.com/tsparticles/tsparticles/tree/main/plugins/move) +- [@tsparticles/plugin-hex-color](https://github.com/tsparticles/tsparticles/tree/main/plugins/colors/hex) +- [@tsparticles/plugin-hsl-color](https://github.com/tsparticles/tsparticles/tree/main/plugins/colors/hsl) +- [@tsparticles/plugin-rgb-color](https://github.com/tsparticles/tsparticles/tree/main/plugins/colors/rgb) - [@tsparticles/shape-circle](https://github.com/tsparticles/tsparticles/tree/main/shapes/circle) - [@tsparticles/updater-paint](https://github.com/tsparticles/tsparticles/tree/main/updaters/paint) - [@tsparticles/updater-opacity](https://github.com/tsparticles/tsparticles/tree/main/updaters/opacity) diff --git a/bundles/basic/package.dist.json b/bundles/basic/package.dist.json index 63110053d47..b1b13e17311 100644 --- a/bundles/basic/package.dist.json +++ b/bundles/basic/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/basic", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "Easily create highly customizable particle animations and use them as animated backgrounds for your website. Ready to use components available also for React, Vue.js (2.x and 3.x), Angular, Svelte, jQuery, Preact, Riot.js, Inferno.", "homepage": "https://particles.js.org", "repository": { @@ -95,19 +95,26 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12", - "@tsparticles/plugin-hex-color": "4.0.0-beta.12", - "@tsparticles/plugin-hsl-color": "4.0.0-beta.12", - "@tsparticles/plugin-move": "4.0.0-beta.12", - "@tsparticles/plugin-rgb-color": "4.0.0-beta.12", - "@tsparticles/shape-circle": "4.0.0-beta.12", - "@tsparticles/updater-opacity": "4.0.0-beta.12", - "@tsparticles/updater-out-modes": "4.0.0-beta.12", - "@tsparticles/updater-paint": "4.0.0-beta.12", - "@tsparticles/updater-size": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/plugin-hex-color": "4.0.0-beta.15", + "@tsparticles/plugin-hsl-color": "4.0.0-beta.15", + "@tsparticles/plugin-move": "4.0.0-beta.15", + "@tsparticles/plugin-rgb-color": "4.0.0-beta.15", + "@tsparticles/shape-circle": "4.0.0-beta.15", + "@tsparticles/updater-opacity": "4.0.0-beta.15", + "@tsparticles/updater-out-modes": "4.0.0-beta.15", + "@tsparticles/updater-paint": "4.0.0-beta.15", + "@tsparticles/updater-size": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/bundles/basic/package.json b/bundles/basic/package.json index 2d6da009012..fc5ba59bfec 100644 --- a/bundles/basic/package.json +++ b/bundles/basic/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/basic", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "Easily create highly customizable particle animations and use them as animated backgrounds for your website. Ready to use components available also for React, Vue.js (2.x and 3.x), Angular, Svelte, jQuery, Preact, Riot.js, Inferno.", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -89,7 +89,10 @@ "files": [ "dist" ], - "sideEffects": false, + "sideEffects": [ + "dist/browser/browser.js", + "dist/browser/index.js" + ], "browser": "dist/browser/index.js", "main": "dist/cjs/index.js", "module": "dist/esm/index.js", @@ -102,6 +105,13 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "dependencies": { @@ -121,5 +131,9 @@ "directory": "dist", "linkDirectory": true }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/bundles/basic/rollup.config.js b/bundles/basic/rollup.config.js new file mode 100644 index 00000000000..e97e5f505d0 --- /dev/null +++ b/bundles/basic/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesBundle } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesBundle({ + moduleName: "basic", + bundleName: "Basic", + version, + dir: __dirname, + progress: false, +}); diff --git a/bundles/basic/src/browser.ts b/bundles/basic/src/browser.ts new file mode 100644 index 00000000000..3fa3de13a4b --- /dev/null +++ b/bundles/basic/src/browser.ts @@ -0,0 +1,10 @@ +import { loadBasic } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadBasic?: typeof loadBasic; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadBasic = loadBasic; + +export * from "./index.js"; diff --git a/bundles/basic/src/bundle.ts b/bundles/basic/src/bundle.ts index 1458e2fc12a..f2dc17f92c1 100644 --- a/bundles/basic/src/bundle.ts +++ b/bundles/basic/src/bundle.ts @@ -1,2 +1,12 @@ +import { loadBasic } from "./index.js"; + export * from "@tsparticles/engine"; export { loadBasic } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadBasic?: typeof loadBasic; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; + +globalObject.loadBasic = loadBasic; diff --git a/bundles/basic/src/index.lazy.ts b/bundles/basic/src/index.lazy.ts new file mode 100644 index 00000000000..426467e9870 --- /dev/null +++ b/bundles/basic/src/index.lazy.ts @@ -0,0 +1,55 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * Loads the slime bundle with all plugins needed for running the tsParticles Basic package. + * This function must be called to make tsParticles Basic work. + * This function is not mandatory, the plugins can be loaded manually, or using other plugin bundles. + * If this function is not called, the \@tsparticles/basic package/dependency can be safely removed. + * This function is called automatically using CDN bundle files. + * @param engine - the engine to use for loading all plugins + */ +export async function loadBasic(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const [ + { loadHexColorPlugin }, + { loadHslColorPlugin }, + { loadRgbColorPlugin }, + { loadMovePlugin }, + + { loadCircleShape }, + + { loadOpacityUpdater }, + { loadOutModesUpdater }, + { loadPaintUpdater }, + { loadSizeUpdater }, + ] = await Promise.all([ + import("@tsparticles/plugin-hex-color/lazy"), + import("@tsparticles/plugin-hsl-color/lazy"), + import("@tsparticles/plugin-rgb-color/lazy"), + import("@tsparticles/plugin-move/lazy"), + + import("@tsparticles/shape-circle/lazy"), + + import("@tsparticles/updater-opacity/lazy"), + import("@tsparticles/updater-out-modes/lazy"), + import("@tsparticles/updater-paint/lazy"), + import("@tsparticles/updater-size/lazy"), + ]); + + await Promise.all([ + loadHexColorPlugin(e), + loadHslColorPlugin(e), + loadRgbColorPlugin(e), + loadMovePlugin(e), + loadCircleShape(e), + loadPaintUpdater(e), + loadOpacityUpdater(e), + loadOutModesUpdater(e), + loadSizeUpdater(e), + ]); + }); +} diff --git a/bundles/basic/src/index.ts b/bundles/basic/src/index.ts index c20870e9e45..311c94ba4df 100644 --- a/bundles/basic/src/index.ts +++ b/bundles/basic/src/index.ts @@ -1,4 +1,13 @@ import { type Engine } from "@tsparticles/engine"; +import { loadCircleShape } from "@tsparticles/shape-circle"; +import { loadHexColorPlugin } from "@tsparticles/plugin-hex-color"; +import { loadHslColorPlugin } from "@tsparticles/plugin-hsl-color"; +import { loadMovePlugin } from "@tsparticles/plugin-move"; +import { loadOpacityUpdater } from "@tsparticles/updater-opacity"; +import { loadOutModesUpdater } from "@tsparticles/updater-out-modes"; +import { loadPaintUpdater } from "@tsparticles/updater-paint"; +import { loadRgbColorPlugin } from "@tsparticles/plugin-rgb-color"; +import { loadSizeUpdater } from "@tsparticles/updater-size"; declare const __VERSION__: string; @@ -14,32 +23,6 @@ export async function loadBasic(engine: Engine): Promise { engine.checkVersion(__VERSION__); await engine.pluginManager.register(async e => { - const [ - { loadHexColorPlugin }, - { loadHslColorPlugin }, - { loadRgbColorPlugin }, - { loadMovePlugin }, - - { loadCircleShape }, - - { loadPaintUpdater }, - { loadOpacityUpdater }, - { loadOutModesUpdater }, - { loadSizeUpdater }, - ] = await Promise.all([ - import("@tsparticles/plugin-hex-color"), - import("@tsparticles/plugin-hsl-color"), - import("@tsparticles/plugin-rgb-color"), - import("@tsparticles/plugin-move"), - - import("@tsparticles/shape-circle"), - - import("@tsparticles/updater-paint"), - import("@tsparticles/updater-opacity"), - import("@tsparticles/updater-out-modes"), - import("@tsparticles/updater-size"), - ]); - await Promise.all([ loadHexColorPlugin(e), loadHslColorPlugin(e), diff --git a/bundles/basic/webpack.config.js b/bundles/basic/webpack.config.js deleted file mode 100644 index e3647ba9ed3..00000000000 --- a/bundles/basic/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesBundle } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesBundle({ - moduleName: "basic", - bundleName: "Basic", - version, - dir: __dirname, - progress: false, -}); diff --git a/bundles/confetti/CHANGELOG.md b/bundles/confetti/CHANGELOG.md index 5cd0cfe6ec2..ef25f10391f 100644 --- a/bundles/confetti/CHANGELOG.md +++ b/bundles/confetti/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/confetti + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/confetti diff --git a/bundles/confetti/README.md b/bundles/confetti/README.md index 3729f46f6e7..cfd7fa67d9f 100644 --- a/bundles/confetti/README.md +++ b/bundles/confetti/README.md @@ -4,8 +4,7 @@ [![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/confetti/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/confetti) [![npmjs](https://badge.fury.io/js/@tsparticles/confetti.svg)](https://www.npmjs.com/package/@tsparticles/confetti) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/confetti)](https://www.npmjs.com/package/@tsparticles/confetti) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) confetti bundle loads all the features necessary to create -beautiful confetti effects with ease. +[tsParticles](https://github.com/tsparticles/tsparticles) confetti bundle to create confetti effects with a single API. **Included Packages** @@ -70,30 +69,84 @@ bc --> s bc --> u ``` -## Quick checklist +## Exposed API -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Call the package loader function(s) before `tsParticles.load(...)` -3. Apply the package options in your `tsParticles.load(...)` config +The package API is centered on `confetti`. + +```ts +import { confetti } from "@tsparticles/confetti"; + +// Main API +await confetti(options); +await confetti("canvas-id", options); + +// Extra helpers +await confetti.init(); +const fireOnCanvas = await confetti.create(canvas, defaultOptions); +await fireOnCanvas(options); + +console.log(confetti.version); +``` + +`@tsparticles/confetti` does not expose `tsParticles` from its main entrypoint. +If you need direct engine APIs, import them from `@tsparticles/engine`. + +## Installation + +```bash +pnpm add @tsparticles/confetti +``` ## How to use it +### ESM / TypeScript + +```ts +import { confetti } from "@tsparticles/confetti"; + +await confetti({ + count: 80, + spread: 60, + position: { x: 50, y: 50 }, + colors: ["#ffffff", "#ff0000"], +}); +``` + +With explicit canvas id: + +```ts +import { confetti } from "@tsparticles/confetti"; + +await confetti("tsparticles", { + count: 50, + angle: 90, + spread: 45, +}); +``` + +### Custom canvas via `confetti.create` + +```ts +import { confetti } from "@tsparticles/confetti"; + +const canvas = document.getElementById("my-canvas") as HTMLCanvasElement; +const localConfetti = await confetti.create(canvas, { count: 30 }); + +await localConfetti({ spread: 70 }); +``` + ### CDN / Vanilla JS / jQuery -The CDN/Vanilla version JS has two different files: +The CDN/Vanilla JS version has two files: - One is a bundle file with all the scripts included in a single file -- One is a file including just the `confetti` function to load the tsParticles confetti bunddle, all dependencies must - be - included manually +- One includes only the `confetti` API, where dependencies must be loaded manually -#### Bundle +After loading the bundle, `confetti` is available on `globalThis`. -Including the `tsparticles.confetti.bundle.min.js` file will out of the box. - -This is the easiest usage, since it's a single file with all the features loaded. +#### Bundle -You can still add additional packages, loading them like all the other packages. +Use the bundle when you want a single script with all required dependencies. #### Not Bundle @@ -102,116 +155,62 @@ specified in the **Included Packages** section. ### Usage -Once the scripts are loaded you can set up `tsParticles` like the following examples: - -** Easiest Way ** - -```javascript -confetti(); +```js +confetti({ count: 60 }); ``` -** Async Way, best practice ** - -```javascript +```js (async () => { - await confetti(); + await confetti({ count: 60, spread: 55 }); })(); ``` -** Confetti Options ** - -```javascript +```js confetti("tsparticles", { - /** - * @deprecated use count property instead - */ - particleCount: 50, - /** - * @deprecated use position property instead - */ - origin: { - x: 0.5, - y: 0.5, - }, - //------------------------------------------ - angle: 90, count: 50, position: { x: 50, y: 50, }, - spread: 45, - startVelocity: 45, - decay: 0.9, - gravity: 1, - drift: 0, - ticks: 200, - colors: ["#ffffff", "#ff0000"], - shapes: ["square", "circle"], - scalar: 1, - zIndex: 100, - disableForReducedMotion: true, }); ``` -#### Options - -The `confetti` first parameter can be an id and the second parameter a single `options` object, or just the single -options object without the id, which will be `confetti` by default. The `options` object has the following properties: - -- `count` _Integer (default: 50)_: The number of confetti to launch. More is always fun... but be cool, there's a lot of - math involved. (`particleCount` can be used too, but it's deprecated) -- `angle` _Number (default: 90)_: The angle in which to launch the confetti, in degrees: 90 is straight up. -- `spread` _Number (default: 45)_: How far off center the confetti can go, in degrees. 45 means the confetti will launch - at the defined `angle` plus or minus 22.5 degrees. -- `startVelocity` _Number (default: 45)_: How fast the confetti will start going, in pixels. -- `decay` _Number (default: 0.9)_: How quickly the confetti will lose speed. Keep this number between 0 and 1, otherwise - the confetti will gain speed. Better yet, just never change it. -- `flat` _Boolean (default: false)_: Optionally turns off the tilt and wobble that three dimensional confetti would have - in the real world. Yeah, they look a little sad, but y'all asked for them, so don't blame me. -- `gravity` _Number (default: 1)_: How quickly the particles are pulled down: 1 is full gravity, 0.5 is half gravity, - etc., but there are no limits. You can even make particles go up if you'd like. -- `drift` _Number (default: 0)_: How much to the side the confetti will drift. The default is 0, meaning that they will - fall straight down. Use a negative number for left and positive number for right. -- `ticks` _Number (default: 200)_: How many times the confetti will move. This is abstract... but play with it if the - confetti disappear too quickly for you. -- `position` _Object_: Where to start firing confetti from. Feel free to launch off-screen if you'd like. (`origin` can - be used too, but it's deprecated) - - `position.x` _Number (default: 50)_: The `x` position on the page, with `0` being the left edge and `100` being - the - right edge. - - `position.y` _Number (default: 50)_: The `y` position on the page, with `0` being the top edge and `100` being the - bottom edge. -- `colors` _Array<String>_: An array of color strings, in the HEX format... you know, like `#bada55`. -- `shapes` _Array<String>_: An array of shapes for the confetti. The possible values are: - - `circle` - - `square` - - `star` - - `polygon` - - `image` - - `heart` - - `hearts` - - `spades` - - `clubs` - - `diamonds` - - `text` - The default is to use both shapes in an even mix. You can even change the mix by providing a value such - as `['circle', 'circle', 'square']` to use two third circles and one third squares. -- `scalar` _Number (default: 1)_: Scale factor for each confetti particle. Use decimals to make the confetti smaller. Go - on, try teeny tiny confetti, they are adorable! -- `zIndex` _Integer (default: 100)_: The confetti should be on top, after all. But if you have a crazy high page, you - can set it even higher. -- `disableForReducedMotion` _Boolean (default: true)_: Disables confetti entirely for users - that [prefer reduced motion](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-motion). - -And for those asking, yes you can paste your canvas-confetti code and migrate to tsParticles Confetti without changing a -thing +### Options + +The `confetti` API accepts: + +- `confetti(options)` +- `confetti(id, options)` + +Main options: + +- `count` _Integer (default: 50)_ +- `angle` _Number (default: 90)_ +- `spread` _Number (default: 45)_ +- `startVelocity` _Number (default: 45)_ +- `decay` _Number (default: 0.9)_ +- `flat` _Boolean (default: false)_ +- `gravity` _Number (default: 1)_ +- `drift` _Number (default: 0)_ +- `ticks` _Number (default: 200)_ +- `position` _Object_ (`x`/`y`, default 50/50) +- `colors` _Array<String>_ +- `shapes` _Array<String>_ +- `shapeOptions` _Record<string, unknown>_ +- `scalar` _Number (default: 1)_ +- `zIndex` _Integer (default: 100)_ +- `disableForReducedMotion` _Boolean (default: true)_ + +Deprecated aliases still accepted: + +- `particleCount` (use `count`) +- `origin` (use `position`) ## Common pitfalls -- Calling `tsParticles.load(...)` before `package loader(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +- Calling `confetti` before scripts are loaded in CDN usage +- Assuming `tsParticles` is exported by `@tsparticles/confetti` main entrypoint +- Passing no first argument in TypeScript (use `confetti(options)` or `confetti(id, options)`) ## Related docs diff --git a/bundles/confetti/package.dist.json b/bundles/confetti/package.dist.json index daeef4ff9a9..52cd68527c6 100644 --- a/bundles/confetti/package.dist.json +++ b/bundles/confetti/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/confetti", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "Easily create highly customizable particle animations and use them as animated backgrounds for your website. Ready to use components available also for React, Vue.js (2.x and 3.x), Angular, Svelte, jQuery, Preact, Riot.js, Inferno.", "homepage": "https://particles.js.org", "repository": { @@ -95,25 +95,32 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "dependencies": { - "@tsparticles/basic": "4.0.0-beta.12", - "@tsparticles/engine": "4.0.0-beta.12", - "@tsparticles/plugin-emitters": "4.0.0-beta.12", - "@tsparticles/plugin-motion": "4.0.0-beta.12", - "@tsparticles/shape-cards": "4.0.0-beta.12", - "@tsparticles/shape-emoji": "4.0.0-beta.12", - "@tsparticles/shape-heart": "4.0.0-beta.12", - "@tsparticles/shape-image": "4.0.0-beta.12", - "@tsparticles/shape-polygon": "4.0.0-beta.12", - "@tsparticles/shape-square": "4.0.0-beta.12", - "@tsparticles/shape-star": "4.0.0-beta.12", - "@tsparticles/updater-life": "4.0.0-beta.12", - "@tsparticles/updater-roll": "4.0.0-beta.12", - "@tsparticles/updater-rotate": "4.0.0-beta.12", - "@tsparticles/updater-tilt": "4.0.0-beta.12", - "@tsparticles/updater-wobble": "4.0.0-beta.12" + "@tsparticles/basic": "4.0.0-beta.15", + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/plugin-emitters": "4.0.0-beta.15", + "@tsparticles/plugin-motion": "4.0.0-beta.15", + "@tsparticles/shape-cards": "4.0.0-beta.15", + "@tsparticles/shape-emoji": "4.0.0-beta.15", + "@tsparticles/shape-heart": "4.0.0-beta.15", + "@tsparticles/shape-image": "4.0.0-beta.15", + "@tsparticles/shape-polygon": "4.0.0-beta.15", + "@tsparticles/shape-square": "4.0.0-beta.15", + "@tsparticles/shape-star": "4.0.0-beta.15", + "@tsparticles/updater-life": "4.0.0-beta.15", + "@tsparticles/updater-roll": "4.0.0-beta.15", + "@tsparticles/updater-rotate": "4.0.0-beta.15", + "@tsparticles/updater-tilt": "4.0.0-beta.15", + "@tsparticles/updater-wobble": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/bundles/confetti/package.json b/bundles/confetti/package.json index 3d0cb87744f..b94f4144eb0 100644 --- a/bundles/confetti/package.json +++ b/bundles/confetti/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/confetti", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "Easily create highly customizable particle animations and use them as animated backgrounds for your website. Ready to use components available also for React, Vue.js (2.x and 3.x), Angular, Svelte, jQuery, Preact, Riot.js, Inferno.", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -102,6 +102,13 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "dependencies": { @@ -127,5 +134,9 @@ "directory": "dist", "linkDirectory": true }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/bundles/confetti/rollup.config.js b/bundles/confetti/rollup.config.js new file mode 100644 index 00000000000..0d825c443af --- /dev/null +++ b/bundles/confetti/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesBundle } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesBundle({ + moduleName: "confetti", + bundleName: "Confetti", + version, + dir: __dirname, + progress: false, +}); diff --git a/bundles/confetti/src/ConfettiParams.ts b/bundles/confetti/src/ConfettiParams.ts new file mode 100644 index 00000000000..e4e67ffc45d --- /dev/null +++ b/bundles/confetti/src/ConfettiParams.ts @@ -0,0 +1,22 @@ +import type { IConfettiOptions } from "./IConfettiOptions.js"; +import type { RecursivePartial } from "@tsparticles/engine"; + +/** + * The {@link confetti} parameter object definition + */ +export interface ConfettiParams { + /** + * + */ + canvas?: HTMLCanvasElement; + + /** + * + */ + id: string; + + /** + * + */ + options: RecursivePartial; +} diff --git a/bundles/confetti/src/browser.ts b/bundles/confetti/src/browser.ts new file mode 100644 index 00000000000..7472c40a9c0 --- /dev/null +++ b/bundles/confetti/src/browser.ts @@ -0,0 +1,10 @@ +import { confetti } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + confetti?: typeof confetti; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.confetti = confetti; + +export * from "./index.js"; diff --git a/bundles/confetti/src/bundle.ts b/bundles/confetti/src/bundle.ts index 943bd743796..6f30991933f 100644 --- a/bundles/confetti/src/bundle.ts +++ b/bundles/confetti/src/bundle.ts @@ -1,2 +1,12 @@ +import { confetti } from "./index.js"; + export * from "./index.js"; export * from "@tsparticles/engine"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + confetti?: typeof confetti; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; + +globalObject.confetti = confetti; diff --git a/bundles/confetti/src/confetti.lazy.ts b/bundles/confetti/src/confetti.lazy.ts new file mode 100644 index 00000000000..fd1ee64b4fa --- /dev/null +++ b/bundles/confetti/src/confetti.lazy.ts @@ -0,0 +1,198 @@ +import type { ConfettiFirstParam, ConfettiFunc } from "./types.js"; +import { type Container, type Engine, type RecursivePartial, isString, tsParticles } from "@tsparticles/engine/lazy"; +import type { IConfettiOptions } from "./IConfettiOptions.js"; +import { setConfetti } from "./utils.js"; + +declare const __VERSION__: string; + +declare global { + /** + * + */ + var confetti: ConfettiFunc & { + /** + * + * @param canvas - + * @param options - + * @returns the confetti function + */ + create: (canvas?: HTMLCanvasElement | null, options?: RecursivePartial) => Promise; + + init: () => Promise; + + /** + * the confetti version number + */ + version: string; + }; +} + +let initPromise: Promise | null = null; + +/** + * @param engine - + * @returns the init plugins promise + * @internal + */ +async function doInitPlugins(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const [ + { loadBasic }, + { loadEmittersPluginSimple }, + { loadMotionPlugin }, + + { loadCardSuitsShape }, + { loadEmojiShape }, + { loadHeartShape }, + { loadImageShape }, + { loadPolygonShape }, + { loadSquareShape }, + { loadStarShape }, + + { loadRotateUpdater }, + { loadLifeUpdater }, + { loadRollUpdater }, + { loadTiltUpdater }, + { loadWobbleUpdater }, + ] = await Promise.all([ + import("@tsparticles/basic/lazy"), + import("@tsparticles/plugin-emitters/plugin/lazy"), + import("@tsparticles/plugin-motion/lazy"), + + import("@tsparticles/shape-cards/suits/lazy"), + import("@tsparticles/shape-emoji/lazy"), + import("@tsparticles/shape-heart/lazy"), + import("@tsparticles/shape-image/lazy"), + import("@tsparticles/shape-polygon/lazy"), + import("@tsparticles/shape-square/lazy"), + import("@tsparticles/shape-star/lazy"), + + import("@tsparticles/updater-rotate/lazy"), + import("@tsparticles/updater-life/lazy"), + import("@tsparticles/updater-roll/lazy"), + import("@tsparticles/updater-tilt/lazy"), + import("@tsparticles/updater-wobble/lazy"), + ]); + + await Promise.all([ + loadBasic(e), + + loadMotionPlugin(e), + loadEmittersPluginSimple(e), + + loadCardSuitsShape(e), + loadHeartShape(e), + loadImageShape(e), + loadPolygonShape(e), + loadSquareShape(e), + loadStarShape(e), + loadEmojiShape(e), + + loadRotateUpdater(e), + loadLifeUpdater(e), + loadRollUpdater(e), + loadTiltUpdater(e), + loadWobbleUpdater(e), + ]); + }); +} + +/** + * This function prepares all the plugins needed by the confetti bundle + * @param engine - + * @returns the init plugins promise + * @internal + */ +async function initPlugins(engine: Engine): Promise { + if (initPromise) { + return initPromise; + } + + initPromise = doInitPlugins(engine); + + return initPromise; +} + +/** + * @param idOrOptions - the id used for the canvas, or if not using two parameters, the animation configuration object + * @param confettiOptions - the animation configuration object, this parameter is mandatory only if providing an id + * @returns the container of the animation, or undefined if no canvas was found + */ +export async function confetti( + idOrOptions: ConfettiFirstParam, + confettiOptions?: RecursivePartial, +): Promise { + await initPlugins(tsParticles); + + let options: RecursivePartial, id: string; + + if (isString(idOrOptions)) { + id = idOrOptions; + options = confettiOptions ?? {}; + } else { + id = "confetti"; + options = idOrOptions; + } + + return setConfetti(tsParticles, { + id, + options, + }); +} + +/** + * + * @param canvas - + * @param options - + * @returns the confetti function to use for the given canvas animations + */ +confetti.create = async ( + canvas?: HTMLCanvasElement | null, + options: RecursivePartial = {}, +): Promise => { + await initPlugins(tsParticles); + + const id = canvas?.getAttribute("id") ?? "confetti"; + + canvas?.setAttribute("id", id); + + await setConfetti(tsParticles, { + id, + canvas: canvas ?? undefined, + options, + }); + + return async ( + idOrOptions: ConfettiFirstParam, + confettiOptions?: RecursivePartial, + ): Promise => { + let subOptions: RecursivePartial, subId: string; + + if (isString(idOrOptions)) { + subId = idOrOptions; + subOptions = confettiOptions ?? options; + } else { + subId = id; + subOptions = idOrOptions; + } + + return setConfetti(tsParticles, { + id: subId, + canvas: canvas ?? undefined, + options: subOptions, + }); + }; +}; + +confetti.init = async (): Promise => { + await initPlugins(tsParticles); +}; + +/** + * + */ +confetti.version = __VERSION__; + +globalThis.confetti = confetti; diff --git a/bundles/confetti/src/confetti.ts b/bundles/confetti/src/confetti.ts index 7dd1028df8e..d493b2a6cb4 100644 --- a/bundles/confetti/src/confetti.ts +++ b/bundles/confetti/src/confetti.ts @@ -1,15 +1,22 @@ -import { - type Container, - type Engine, - type ISourceOptions, - type RecursivePartial, - isString, - millisecondsToSeconds, - tsParticles, -} from "@tsparticles/engine"; -import { ConfettiOptions } from "./ConfettiOptions.js"; -import type { EmitterContainer } from "@tsparticles/plugin-emitters"; +import type { ConfettiFirstParam, ConfettiFunc } from "./types.js"; +import { type Container, type Engine, type RecursivePartial, isString, tsParticles } from "@tsparticles/engine"; import type { IConfettiOptions } from "./IConfettiOptions.js"; +import { loadBasic } from "@tsparticles/basic"; +import { loadCardSuitsShape } from "@tsparticles/shape-cards/suits"; +import { loadEmittersPluginSimple } from "@tsparticles/plugin-emitters/plugin"; +import { loadEmojiShape } from "@tsparticles/shape-emoji"; +import { loadHeartShape } from "@tsparticles/shape-heart"; +import { loadImageShape } from "@tsparticles/shape-image"; +import { loadLifeUpdater } from "@tsparticles/updater-life"; +import { loadMotionPlugin } from "@tsparticles/plugin-motion"; +import { loadPolygonShape } from "@tsparticles/shape-polygon"; +import { loadRollUpdater } from "@tsparticles/updater-roll"; +import { loadRotateUpdater } from "@tsparticles/updater-rotate"; +import { loadSquareShape } from "@tsparticles/shape-square"; +import { loadStarShape } from "@tsparticles/shape-star"; +import { loadTiltUpdater } from "@tsparticles/updater-tilt"; +import { loadWobbleUpdater } from "@tsparticles/updater-wobble"; +import { setConfetti } from "./utils.js"; declare const __VERSION__: string; @@ -24,7 +31,7 @@ declare global { * @param options - * @returns the confetti function */ - create: (canvas: HTMLCanvasElement, options: RecursivePartial) => Promise; + create: (canvas?: HTMLCanvasElement | null, options?: RecursivePartial) => Promise; init: () => Promise; @@ -35,109 +42,17 @@ declare global { }; } -/** - * - */ -export type ConfettiFirstParam = string | RecursivePartial; - -let initialized = false, - initializing = false; - -const ids = new Map(), - defaultGravity = 9.81, - sizeFactor = 5, - speedFactor = 3, - decayOffset = 1, - disableRotate = 0, - disableTilt = 0; - -/** - * The {@link confetti} parameter object definition - */ -export interface ConfettiParams { - /** - * - */ - canvas?: HTMLCanvasElement; - - /** - * - */ - id: string; - - /** - * - */ - options: RecursivePartial; -} +let initPromise: Promise | null = null; /** - * This function prepares all the plugins needed by the confetti bundle * @param engine - + * @returns the init plugins promise + * @internal */ -async function initPlugins(engine: Engine): Promise { - if (initialized) { - return; - } - - if (initializing) { - return new Promise(resolve => { - const timeout = 100, - interval = setInterval(() => { - if (!initialized) { - return; - } - - clearInterval(interval); - - resolve(); - }, timeout); - }); - } - - initializing = true; - +async function doInitPlugins(engine: Engine): Promise { engine.checkVersion(__VERSION__); await engine.pluginManager.register(async e => { - const [ - { loadBasic }, - { loadEmittersPluginSimple }, - { loadMotionPlugin }, - - { loadCardSuitsShape }, - { loadHeartShape }, - { loadImageShape }, - { loadPolygonShape }, - { loadSquareShape }, - { loadStarShape }, - { loadEmojiShape }, - - { loadRotateUpdater }, - { loadLifeUpdater }, - { loadRollUpdater }, - { loadTiltUpdater }, - { loadWobbleUpdater }, - ] = await Promise.all([ - import("@tsparticles/basic"), - import("@tsparticles/plugin-emitters/plugin"), - import("@tsparticles/plugin-motion"), - - import("@tsparticles/shape-cards/suits"), - import("@tsparticles/shape-heart"), - import("@tsparticles/shape-image"), - import("@tsparticles/shape-polygon"), - import("@tsparticles/shape-square"), - import("@tsparticles/shape-star"), - import("@tsparticles/shape-emoji"), - - import("@tsparticles/updater-rotate"), - import("@tsparticles/updater-life"), - import("@tsparticles/updater-roll"), - import("@tsparticles/updater-tilt"), - import("@tsparticles/updater-wobble"), - ]); - await Promise.all([ loadBasic(e), loadMotionPlugin(e), @@ -157,297 +72,24 @@ async function initPlugins(engine: Engine): Promise { loadWobbleUpdater(e), ]); }); - - initializing = false; - initialized = true; } /** - * @param params - the parameters object used for the confetti animation - * @returns the tsParticles Container for more customizations + * This function prepares all the plugins needed by the confetti bundle + * @param engine - + * @returns the init plugins promise + * @internal */ -async function setConfetti(params: ConfettiParams): Promise { - const actualOptions = new ConfettiOptions(); - - actualOptions.load(params.options); - - let container; - - const fpsLimit = 120, - fpsLimitFactor = 3.6, - opacitySpeed = (actualOptions.ticks * millisecondsToSeconds) / (fpsLimitFactor * millisecondsToSeconds * fpsLimit); - - if (ids.has(params.id)) { - container = ids.get(params.id); - - if (container && !container.destroyed) { - const alias = container as EmitterContainer; - - if ("addEmitter" in alias) { - await alias.addEmitter?.({ - startCount: actualOptions.count, - position: actualOptions.position, - size: { - width: 0, - height: 0, - }, - rate: { - delay: 0, - quantity: 0, - }, - life: { - duration: 0.1, - count: 1, - }, - particles: { - fill: { - color: { - value: actualOptions.colors, - }, - enable: true, - }, - shape: { - type: actualOptions.shapes, - options: actualOptions.shapeOptions, - }, - life: { - count: 1, - }, - opacity: { - value: { min: 0, max: 1 }, - animation: { - enable: true, - sync: true, - speed: opacitySpeed, - startValue: "max", - destroy: "min", - count: 1, - }, - }, - size: { - value: sizeFactor * actualOptions.scalar, - }, - move: { - angle: { - value: actualOptions.spread, - offset: 0, - }, - drift: { - min: -actualOptions.drift, - max: actualOptions.drift, - }, - gravity: { - acceleration: actualOptions.gravity * defaultGravity, - }, - speed: actualOptions.startVelocity * speedFactor, - decay: decayOffset - actualOptions.decay, - direction: -actualOptions.angle, - }, - rotate: { - value: actualOptions.flat - ? disableRotate - : { - min: 0, - max: 360, - }, - direction: "random", - animation: { - enable: !actualOptions.flat, - speed: 60, - }, - }, - tilt: { - direction: "random", - enable: !actualOptions.flat, - value: actualOptions.flat - ? disableTilt - : { - min: 0, - max: 360, - }, - animation: { - enable: true, - speed: 60, - }, - }, - roll: { - darken: { - enable: true, - value: 25, - }, - enable: !actualOptions.flat, - speed: { - min: 15, - max: 25, - }, - }, - wobble: { - distance: 30, - enable: !actualOptions.flat, - speed: { - min: -15, - max: 15, - }, - }, - }, - }); - - return; - } - } +async function initPlugins(engine: Engine): Promise { + if (initPromise) { + return initPromise; } - const particlesOptions: ISourceOptions = { - fullScreen: { - enable: !params.canvas, - zIndex: actualOptions.zIndex, - }, - fpsLimit: 120, - particles: { - number: { - value: 0, - }, - fill: { - color: { - value: actualOptions.colors, - }, - enable: true, - }, - shape: { - type: actualOptions.shapes, - options: actualOptions.shapeOptions, - }, - opacity: { - value: { min: 0, max: 1 }, - animation: { - enable: true, - sync: true, - speed: opacitySpeed, - startValue: "max", - destroy: "min", - count: 1, - }, - }, - size: { - value: sizeFactor * actualOptions.scalar, - }, - links: { - enable: false, - }, - life: { - count: 1, - }, - move: { - angle: { - value: actualOptions.spread, - offset: 0, - }, - drift: { - min: -actualOptions.drift, - max: actualOptions.drift, - }, - enable: true, - gravity: { - enable: true, - acceleration: actualOptions.gravity * defaultGravity, - }, - speed: actualOptions.startVelocity * speedFactor, - decay: decayOffset - actualOptions.decay, - direction: -actualOptions.angle, - random: true, - straight: false, - outModes: { - default: "none", - bottom: "destroy", - }, - }, - rotate: { - value: actualOptions.flat - ? disableRotate - : { - min: 0, - max: 360, - }, - direction: "random", - animation: { - enable: !actualOptions.flat, - speed: 60, - }, - }, - tilt: { - direction: "random", - enable: !actualOptions.flat, - value: actualOptions.flat - ? disableTilt - : { - min: 0, - max: 360, - }, - animation: { - enable: true, - speed: 60, - }, - }, - roll: { - darken: { - enable: true, - value: 25, - }, - enable: !actualOptions.flat, - speed: { - min: 15, - max: 25, - }, - }, - wobble: { - distance: 30, - enable: !actualOptions.flat, - speed: { - min: -15, - max: 15, - }, - }, - }, - motion: { - disable: actualOptions.disableForReducedMotion, - }, - emitters: { - name: "confetti", - startCount: actualOptions.count, - position: actualOptions.position, - size: { - width: 0, - height: 0, - }, - rate: { - delay: 0, - quantity: 0, - }, - life: { - duration: 0.1, - count: 1, - }, - }, - }; - - container = await tsParticles.load({ id: params.id, element: params.canvas, options: particlesOptions }); + initPromise = doInitPlugins(engine); - ids.set(params.id, container); - - return container; + return initPromise; } -/** - * - * @param idOrOptions - the id used for the canvas, or if not using two parameters, the animation configuration object - * @param confettiOptions - the animation configuration object, this parameter is mandatory only if providing an id - * @returns the container of the animation, or undefined if no canvas was found - */ -type ConfettiFunc = ( - idOrOptions: ConfettiFirstParam, - confettiOptions?: RecursivePartial, -) => Promise; - /** * @param idOrOptions - the id used for the canvas, or if not using two parameters, the animation configuration object * @param confettiOptions - the animation configuration object, this parameter is mandatory only if providing an id @@ -469,7 +111,7 @@ export async function confetti( options = idOrOptions; } - return setConfetti({ + return setConfetti(tsParticles, { id, options, }); @@ -482,14 +124,20 @@ export async function confetti( * @returns the confetti function to use for the given canvas animations */ confetti.create = async ( - canvas: HTMLCanvasElement, - options: RecursivePartial, + canvas?: HTMLCanvasElement | null, + options: RecursivePartial = {}, ): Promise => { await initPlugins(tsParticles); - const id = canvas.getAttribute("id") ?? "confetti"; + const id = canvas?.getAttribute("id") ?? "confetti"; - canvas.setAttribute("id", id); + canvas?.setAttribute("id", id); + + await setConfetti(tsParticles, { + id, + canvas: canvas ?? undefined, + options, + }); return async ( idOrOptions: ConfettiFirstParam, @@ -505,9 +153,9 @@ confetti.create = async ( subOptions = idOrOptions; } - return setConfetti({ + return setConfetti(tsParticles, { id: subId, - canvas, + canvas: canvas ?? undefined, options: subOptions, }); }; diff --git a/bundles/confetti/src/index.lazy.ts b/bundles/confetti/src/index.lazy.ts new file mode 100644 index 00000000000..60ed4cf0bed --- /dev/null +++ b/bundles/confetti/src/index.lazy.ts @@ -0,0 +1,10 @@ +import type { IConfettiOptions } from "./IConfettiOptions.js"; +import type { RecursivePartial } from "@tsparticles/engine/lazy"; + +/** + * + */ +export type ConfettiOptions = RecursivePartial; + +export * from "./confetti.lazy.js"; +export type * from "./ConfettiParams.js"; diff --git a/bundles/confetti/src/index.ts b/bundles/confetti/src/index.ts index 6ff148ea2d2..dae33531c8c 100644 --- a/bundles/confetti/src/index.ts +++ b/bundles/confetti/src/index.ts @@ -7,3 +7,4 @@ import type { RecursivePartial } from "@tsparticles/engine"; export type ConfettiOptions = RecursivePartial; export * from "./confetti.js"; +export type * from "./ConfettiParams.js"; diff --git a/bundles/confetti/src/types.ts b/bundles/confetti/src/types.ts new file mode 100644 index 00000000000..bb5db7c6f72 --- /dev/null +++ b/bundles/confetti/src/types.ts @@ -0,0 +1,18 @@ +import type { Container, RecursivePartial } from "@tsparticles/engine"; +import type { IConfettiOptions } from "./IConfettiOptions.js"; + +/** + * + */ +export type ConfettiFirstParam = string | RecursivePartial; + +/** + * + * @param idOrOptions - the id used for the canvas, or if not using two parameters, the animation configuration object + * @param confettiOptions - the animation configuration object, this parameter is mandatory only if providing an id + * @returns the container of the animation, or undefined if no canvas was found + */ +export type ConfettiFunc = ( + idOrOptions: ConfettiFirstParam, + confettiOptions?: RecursivePartial, +) => Promise; diff --git a/bundles/confetti/src/utils.ts b/bundles/confetti/src/utils.ts new file mode 100644 index 00000000000..34b67b8ff6a --- /dev/null +++ b/bundles/confetti/src/utils.ts @@ -0,0 +1,338 @@ +import { type Container, type Engine, type ISourceOptions, millisecondsToSeconds } from "@tsparticles/engine"; +import { ConfettiOptions } from "./ConfettiOptions.js"; +import type { ConfettiParams } from "./ConfettiParams.js"; +import type { EmitterContainer } from "@tsparticles/plugin-emitters"; + +const defaultGravity = 9.81, + sizeFactor = 5, + speedFactor = 3, + decayOffset = 1, + disableRotate = 0, + disableTilt = 0, + ids = new Map | undefined>(); + +/** + * @param container - + * @param actualOptions - + * @param opacitySpeed - + */ +export async function addEmitter( + container: EmitterContainer, + actualOptions: ConfettiOptions, + opacitySpeed: number, +): Promise { + await container.addEmitter?.({ + startCount: actualOptions.count, + position: actualOptions.position, + size: { + width: 0, + height: 0, + }, + rate: { + delay: 0, + quantity: 0, + }, + life: { + duration: 0.1, + count: 1, + }, + particles: { + paint: { + fill: { + color: { + value: actualOptions.colors, + }, + enable: true, + }, + }, + shape: { + type: actualOptions.shapes, + options: actualOptions.shapeOptions, + }, + life: { + count: 1, + }, + opacity: { + value: { min: 0, max: 1 }, + animation: { + enable: true, + sync: true, + speed: opacitySpeed, + startValue: "max", + destroy: "min", + count: 1, + }, + }, + size: { + value: sizeFactor * actualOptions.scalar, + }, + move: { + angle: { + value: actualOptions.spread, + offset: 0, + }, + drift: { + min: -actualOptions.drift, + max: actualOptions.drift, + }, + gravity: { + acceleration: actualOptions.gravity * defaultGravity, + }, + speed: actualOptions.startVelocity * speedFactor, + decay: decayOffset - actualOptions.decay, + direction: -actualOptions.angle, + }, + rotate: { + value: actualOptions.flat + ? disableRotate + : { + min: 0, + max: 360, + }, + direction: "random", + animation: { + enable: !actualOptions.flat, + speed: 60, + }, + }, + tilt: { + direction: "random", + enable: !actualOptions.flat, + value: actualOptions.flat + ? disableTilt + : { + min: 0, + max: 360, + }, + animation: { + enable: true, + speed: 60, + }, + }, + roll: { + darken: { + enable: true, + value: 25, + }, + enable: !actualOptions.flat, + speed: { + min: 15, + max: 25, + }, + }, + wobble: { + distance: 30, + enable: !actualOptions.flat, + speed: { + min: -15, + max: 15, + }, + }, + }, + }); +} + +/** + * @param actualOptions - + * @param params - + * @param opacitySpeed - + * @returns the converted options + */ +export function convertOptions( + actualOptions: ConfettiOptions, + params: ConfettiParams, + opacitySpeed: number, +): ISourceOptions { + return { + fullScreen: { + enable: !params.canvas, + zIndex: actualOptions.zIndex, + }, + fpsLimit: 120, + particles: { + number: { + value: 0, + }, + paint: { + fill: { + color: { + value: actualOptions.colors, + }, + enable: true, + }, + }, + shape: { + type: actualOptions.shapes, + options: actualOptions.shapeOptions, + }, + opacity: { + value: { min: 0, max: 1 }, + animation: { + enable: true, + sync: true, + speed: opacitySpeed, + startValue: "max", + destroy: "min", + count: 1, + }, + }, + size: { + value: sizeFactor * actualOptions.scalar, + }, + links: { + enable: false, + }, + life: { + count: 1, + }, + move: { + angle: { + value: actualOptions.spread, + offset: 0, + }, + drift: { + min: -actualOptions.drift, + max: actualOptions.drift, + }, + enable: true, + gravity: { + enable: true, + acceleration: actualOptions.gravity * defaultGravity, + }, + speed: actualOptions.startVelocity * speedFactor, + decay: decayOffset - actualOptions.decay, + direction: -actualOptions.angle, + random: true, + straight: false, + outModes: { + default: "none", + bottom: "destroy", + }, + }, + rotate: { + value: actualOptions.flat + ? disableRotate + : { + min: 0, + max: 360, + }, + direction: "random", + animation: { + enable: !actualOptions.flat, + speed: 60, + }, + }, + tilt: { + direction: "random", + enable: !actualOptions.flat, + value: actualOptions.flat + ? disableTilt + : { + min: 0, + max: 360, + }, + animation: { + enable: true, + speed: 60, + }, + }, + roll: { + darken: { + enable: true, + value: 25, + }, + enable: !actualOptions.flat, + speed: { + min: 15, + max: 25, + }, + }, + wobble: { + distance: 30, + enable: !actualOptions.flat, + speed: { + min: -15, + max: 15, + }, + }, + }, + motion: { + disable: actualOptions.disableForReducedMotion, + }, + emitters: { + name: "confetti", + startCount: actualOptions.count, + position: actualOptions.position, + size: { + width: 0, + height: 0, + }, + rate: { + delay: 0, + quantity: 0, + }, + life: { + duration: 0.1, + count: 1, + }, + }, + }; +} + +/** + * @param engine - the engine object + * @param params - the parameters object used for the confetti animation + * @returns the tsParticles Container for more customizations + */ +export async function setConfetti(engine: Engine, params: ConfettiParams): Promise { + const actualOptions = new ConfettiOptions(); + + actualOptions.load(params.options); + + const fpsLimit = 120, + fpsLimitFactor = 3.6, + opacitySpeed = (actualOptions.ticks * millisecondsToSeconds) / (fpsLimitFactor * millisecondsToSeconds * fpsLimit); + + /* Check if there is already an entry for this ID */ + let containerOrPromise = ids.get(params.id); + + /* If it's a Promise, another call is currently initializing this container. Wait for it. */ + if (containerOrPromise instanceof Promise) { + await containerOrPromise; + containerOrPromise = ids.get(params.id); + } + + const container = containerOrPromise as Container | undefined; + + /* If the container exists and is active, we just add a new emitter (fast path) */ + if (container && !container.destroyed) { + const alias = container as EmitterContainer; + + if ("addEmitter" in alias) { + await addEmitter(alias, actualOptions, opacitySpeed); + + return container; + } + } + + /* If no container exists, we create a initialization promise to lock other calls */ + const create = async (): Promise => { + const particlesOptions = convertOptions(actualOptions, params, opacitySpeed), + newContainer = await engine.load({ + id: params.id, + element: params.canvas, + options: particlesOptions, + }); + + /* Replace the promise with the actual container in the map */ + ids.set(params.id, newContainer); + + return newContainer; + }, + createPromise = create(); + + /* Set the promise in the map immediately to block concurrent calls */ + ids.set(params.id, createPromise); + + return createPromise; +} diff --git a/bundles/confetti/webpack.config.js b/bundles/confetti/webpack.config.js deleted file mode 100644 index 65d4b543f99..00000000000 --- a/bundles/confetti/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesBundle } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesBundle({ - moduleName: "confetti", - bundleName: "Confetti", - version, - dir: __dirname, - progress: false, -}); diff --git a/bundles/fireworks/CHANGELOG.md b/bundles/fireworks/CHANGELOG.md index 52c3f6f9d3e..f4ce5ddb4f1 100644 --- a/bundles/fireworks/CHANGELOG.md +++ b/bundles/fireworks/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/fireworks + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/fireworks diff --git a/bundles/fireworks/README.md b/bundles/fireworks/README.md index 52d6c29e376..750393d097c 100644 --- a/bundles/fireworks/README.md +++ b/bundles/fireworks/README.md @@ -4,8 +4,7 @@ [![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/fireworks/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/fireworks) [![npmjs](https://badge.fury.io/js/@tsparticles/fireworks.svg)](https://www.npmjs.com/package/@tsparticles/fireworks) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/fireworks)](https://www.npmjs.com/package/@tsparticles/fireworks) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) fireworks bundle loads all the features necessary to create -beautiful fireworks effects with ease. +[tsParticles](https://github.com/tsparticles/tsparticles) fireworks bundle to create fireworks effects with a focused API. **Included Packages** @@ -13,10 +12,12 @@ beautiful fireworks effects with ease. - [@tsparticles/engine](https://github.com/tsparticles/tsparticles/tree/main/engine) - [@tsparticles/plugin-blend](https://github.com/tsparticles/tsparticles/tree/main/plugins/blend) - [@tsparticles/plugin-emitters](https://github.com/tsparticles/tsparticles/tree/main/plugins/emitters) -- [@tsparticles/plugin-emitters-shape-square](https://github.com/tsparticles/tsparticles/tree/main/plugins/emitters/shape/square) +- [@tsparticles/plugin-emitters-shape-square](https://github.com/tsparticles/tsparticles/tree/main/plugins/emittersShapes/square) - [@tsparticles/plugin-sounds](https://github.com/tsparticles/tsparticles/tree/main/plugins/sounds) +- [@tsparticles/shape-line](https://github.com/tsparticles/tsparticles/tree/main/shapes/line) - [@tsparticles/updater-destroy](https://github.com/tsparticles/tsparticles/tree/main/updaters/destroy) - [@tsparticles/updater-life](https://github.com/tsparticles/tsparticles/tree/main/updaters/life) +- [@tsparticles/updater-paint](https://github.com/tsparticles/tsparticles/tree/main/updaters/paint) - [@tsparticles/updater-rotate](https://github.com/tsparticles/tsparticles/tree/main/updaters/rotate) ## Dependency Graph @@ -43,40 +44,98 @@ end subgraph u [Updaters] ud[tsparticles/updater-destroy] ul[tsparticles/updater-life] + up[tsparticles/updater-paint] ur[tsparticles/updater-rotate] end +subgraph s [Shapes] + sl[tsparticles/shape-line] +end + bf --> bb bf --> ce -bf --> e bf --> p +bf --> s bf --> u ``` -## Quick checklist +## Exposed API + +The package API is centered on `fireworks`. + +```ts +import { fireworks } from "@tsparticles/fireworks"; -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Call the package loader function(s) before `tsParticles.load(...)` -3. Apply the package options in your `tsParticles.load(...)` config +// Main API +const instance = await fireworks(); +const byId = await fireworks("canvas-id", options); +const byOptions = await fireworks(options); + +// Extra helpers +await fireworks.init(); +const custom = await fireworks.create(canvas, options); + +console.log(fireworks.version); +``` + +`@tsparticles/fireworks` does not expose `tsParticles` from its main entrypoint. +If you need direct engine APIs, import them from `@tsparticles/engine`. + +## Installation + +```bash +pnpm add @tsparticles/fireworks +``` ## How to use it +### ESM / TypeScript + +```ts +import { fireworks } from "@tsparticles/fireworks"; + +const instance = await fireworks({ + colors: ["#ffffff", "#ff0000"], + sounds: false, +}); + +instance?.pause(); +instance?.play(); +instance?.stop(); +``` + +With explicit canvas id: + +```ts +import { fireworks } from "@tsparticles/fireworks"; + +await fireworks("tsparticles", { + rate: 3, + speed: { min: 10, max: 25 }, +}); +``` + +### Custom canvas via `fireworks.create` + +```ts +import { fireworks } from "@tsparticles/fireworks"; + +const canvas = document.getElementById("my-canvas") as HTMLCanvasElement; +await fireworks.create(canvas, { sounds: true }); +``` + ### CDN / Vanilla JS / jQuery -The CDN/Vanilla version JS has two different files: +The CDN/Vanilla JS version has two files: - One is a bundle file with all the scripts included in a single file -- One is a file including just the `fireworks` function to load the tsParticles fireworks bunddle, all dependencies must - be - included manually - -#### Bundle +- One includes only the `fireworks` API, where dependencies must be loaded manually -Including the `tsparticles.fireworks.bundle.min.js` file will out of the box. +After loading the bundle, `fireworks` is available on `globalThis`. -This is the easiest usage, since it's a single file with all the features loaded. +#### Bundle -You can still add additional packages, loading them like all the other packages. +Use the bundle when you want a single script with all required dependencies. #### Not Bundle @@ -85,47 +144,33 @@ specified in the **Included Packages** section. ### Usage -Once the scripts are loaded you can set up `tsParticles` like the following examples: - -** Easiest Way ** - ```javascript fireworks(); ``` -** Async Way, best practice ** - ```javascript (async () => { - await fireworks(); + const instance = await fireworks(); + + instance?.pause(); + instance?.play(); + instance?.stop(); })(); ``` -** Custom Canvas ** - ```javascript fireworks.create(document.getElementById("custom-id")); ``` -** Fireworks Options ** - -```javascript -fireworks({ - colors: ["#ffffff", "#ff0000"], -}); -``` - -** Custom Canvas with Options ** +#### Options -```javascript -fireworks.create(document.getElementById("custom-id"), { - colors: ["#ffffff", "#ff0000"], -}); -``` +`fireworks` supports these call signatures: -#### Options +- `fireworks()` +- `fireworks(options)` +- `fireworks(id, options)` -The `fireworks` has only a single `options` object parameter, with the following properties: +Main options: - `background` String: The background color of the canvas, it can be any valid CSS color, can be transparent as well. - `brightness` Number or { min: number; max: number; }: The brightness offset applied to the particles color, from -100 @@ -141,11 +186,19 @@ The `fireworks` has only a single `options` object parameter, with the following - `speed` Number or { min: number; max: number; }: The speed of the fireworks particles. - `splitCount` Number or { min: number; max: number; }: The number of particles to split the emitter in. +### Returned instance methods + +The resolved `FireworksInstance` exposes: + +- `pause()` +- `play()` +- `stop()` + ## Common pitfalls -- Calling `tsParticles.load(...)` before `package loader(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +- Calling `fireworks` before scripts are loaded in CDN usage +- Assuming `tsParticles` is exported by `@tsparticles/fireworks` main entrypoint +- Reusing the same `id` unintentionally (the package caches instances by id) ## Related docs diff --git a/bundles/fireworks/package.dist.json b/bundles/fireworks/package.dist.json index cfe3264e3f6..2c78a817aef 100644 --- a/bundles/fireworks/package.dist.json +++ b/bundles/fireworks/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/fireworks", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "Easily create highly customizable particle animations and use them as animated backgrounds for your website. Ready to use components available also for React, Vue.js (2.x and 3.x), Angular, Svelte, jQuery, Preact, Riot.js, Inferno.", "homepage": "https://particles.js.org", "repository": { @@ -95,20 +95,27 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "dependencies": { - "@tsparticles/basic": "4.0.0-beta.12", - "@tsparticles/engine": "4.0.0-beta.12", - "@tsparticles/plugin-blend": "4.0.0-beta.12", - "@tsparticles/plugin-emitters": "4.0.0-beta.12", - "@tsparticles/plugin-emitters-shape-square": "4.0.0-beta.12", - "@tsparticles/plugin-sounds": "4.0.0-beta.12", - "@tsparticles/shape-line": "4.0.0-beta.12", - "@tsparticles/updater-destroy": "4.0.0-beta.12", - "@tsparticles/updater-life": "4.0.0-beta.12", - "@tsparticles/updater-paint": "4.0.0-beta.12", - "@tsparticles/updater-rotate": "4.0.0-beta.12" + "@tsparticles/basic": "4.0.0-beta.15", + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/plugin-blend": "4.0.0-beta.15", + "@tsparticles/plugin-emitters": "4.0.0-beta.15", + "@tsparticles/plugin-emitters-shape-square": "4.0.0-beta.15", + "@tsparticles/plugin-sounds": "4.0.0-beta.15", + "@tsparticles/shape-line": "4.0.0-beta.15", + "@tsparticles/updater-destroy": "4.0.0-beta.15", + "@tsparticles/updater-life": "4.0.0-beta.15", + "@tsparticles/updater-paint": "4.0.0-beta.15", + "@tsparticles/updater-rotate": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/bundles/fireworks/package.json b/bundles/fireworks/package.json index 528722ffd0d..9e41fda5627 100644 --- a/bundles/fireworks/package.json +++ b/bundles/fireworks/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/fireworks", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "Easily create highly customizable particle animations and use them as animated backgrounds for your website. Ready to use components available also for React, Vue.js (2.x and 3.x), Angular, Svelte, jQuery, Preact, Riot.js, Inferno.", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -102,6 +102,13 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "dependencies": { @@ -122,5 +129,9 @@ "directory": "dist", "linkDirectory": true }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/bundles/fireworks/rollup.config.js b/bundles/fireworks/rollup.config.js new file mode 100644 index 00000000000..667c86459b2 --- /dev/null +++ b/bundles/fireworks/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesBundle } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesBundle({ + moduleName: "fireworks", + bundleName: "Fireworks", + version, + dir: __dirname, + progress: false, +}); diff --git a/bundles/fireworks/src/browser.ts b/bundles/fireworks/src/browser.ts new file mode 100644 index 00000000000..5671524f145 --- /dev/null +++ b/bundles/fireworks/src/browser.ts @@ -0,0 +1,10 @@ +import { fireworks } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + fireworks?: typeof fireworks; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.fireworks = fireworks; + +export * from "./index.js"; diff --git a/bundles/fireworks/src/bundle.ts b/bundles/fireworks/src/bundle.ts index 943bd743796..6cb77a162b9 100644 --- a/bundles/fireworks/src/bundle.ts +++ b/bundles/fireworks/src/bundle.ts @@ -1,2 +1,12 @@ +import { fireworks } from "./index.js"; + export * from "./index.js"; export * from "@tsparticles/engine"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + fireworks?: typeof fireworks; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; + +globalObject.fireworks = fireworks; diff --git a/bundles/fireworks/src/fireworks.lazy.ts b/bundles/fireworks/src/fireworks.lazy.ts new file mode 100644 index 00000000000..d87f9ee1db7 --- /dev/null +++ b/bundles/fireworks/src/fireworks.lazy.ts @@ -0,0 +1,130 @@ +import { type Engine, type RecursivePartial, isString, tsParticles } from "@tsparticles/engine/lazy"; +import type { FireworksFunc } from "./types.js"; +import type { FireworksInstance } from "./FireworksInstance.js"; +import type { IFireworkOptions } from "./IFireworkOptions.js"; +import { getFireworksInstance } from "./utils.js"; + +declare const __VERSION__: string; + +let initPromise: Promise | null = null; + +declare global { + var fireworks: FireworksFunc & { + create: ( + canvas?: HTMLCanvasElement | null, + options?: RecursivePartial, + ) => Promise; + init: () => Promise; + version: string; + }; +} + +/** + * @param engine - the engine to use for loading all plugins + * @returns the promise of initialization + * @internal + */ +async function doInitPlugins(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const [ + { loadBasic }, + { loadLineShape }, + { loadBlendPlugin }, + { loadEmittersPluginSimple }, + { loadEmittersShapeSquare }, + { loadSoundsPlugin }, + { loadRotateUpdater }, + { loadDestroyUpdater }, + { loadLifeUpdater }, + { loadPaintUpdater }, + ] = await Promise.all([ + import("@tsparticles/basic/lazy"), + import("@tsparticles/shape-line"), + import("@tsparticles/plugin-blend"), + import("@tsparticles/plugin-emitters/plugin"), + import("@tsparticles/plugin-emitters-shape-square"), + import("@tsparticles/plugin-sounds"), + import("@tsparticles/updater-rotate/lazy"), + import("@tsparticles/updater-destroy/lazy"), + import("@tsparticles/updater-life/lazy"), + import("@tsparticles/updater-paint/lazy"), + ]), + loadEmittersForFireworks = async (e: Engine): Promise => { + await loadEmittersPluginSimple(e); + + await loadEmittersShapeSquare(e); + }; + + await Promise.all([ + loadBasic(e), + loadLineShape(e), + loadBlendPlugin(e), + loadEmittersForFireworks(e), + loadSoundsPlugin(e), + loadRotateUpdater(e), + loadDestroyUpdater(e), + loadLifeUpdater(e), + loadPaintUpdater(e), + ]); + }); +} + +/** + * @param engine - the engine to use for loading all plugins + * @returns the promise of initialization + * @internal + */ +async function initPlugins(engine: Engine): Promise { + if (initPromise) { + return initPromise; + } + + initPromise = doInitPlugins(engine); + + return initPromise; +} + +/** + * @param idOrOptions - the id used for displaying the animation, or the animation configuration if an id is not necessary + * @param sourceOptions - the animation configuration if an id is provided + * @returns the loaded instance + */ +export async function fireworks( + idOrOptions?: string | RecursivePartial, + sourceOptions?: RecursivePartial, +): Promise { + await initPlugins(tsParticles); + + let id: string, options: RecursivePartial; + + if (isString(idOrOptions)) { + id = idOrOptions; + options = sourceOptions ?? {}; + } else { + id = "fireworks"; + options = idOrOptions ?? {}; + } + + return getFireworksInstance(tsParticles, id, options); +} + +fireworks.create = async ( + canvas?: HTMLCanvasElement | null, + options?: RecursivePartial, +): Promise => { + await initPlugins(tsParticles); + + const id = canvas?.id ?? "fireworks"; + + return getFireworksInstance(tsParticles, id, options ?? {}, canvas ?? undefined); +}; + +fireworks.init = async (): Promise => { + await initPlugins(tsParticles); +}; + +fireworks.version = __VERSION__; + +globalThis.fireworks = fireworks; diff --git a/bundles/fireworks/src/fireworks.ts b/bundles/fireworks/src/fireworks.ts index 0d65d5339df..c1e37d310ba 100644 --- a/bundles/fireworks/src/fireworks.ts +++ b/bundles/fireworks/src/fireworks.ts @@ -1,109 +1,48 @@ -import { - type CustomEventArgs, - DestroyType, - type Engine, - EventType, - type ISourceOptions, - MoveDirection, - OutMode, - type Particle, - type RecursivePartial, - StartValueType, - getRangeMax, - getRangeMin, - isNumber, - isString, - setRangeValue, - tsParticles, -} from "@tsparticles/engine"; -import { FireworkOptions } from "./FireworkOptions.js"; +import { type Engine, type RecursivePartial, isString, tsParticles } from "@tsparticles/engine"; +import type { FireworksFunc } from "./types.js"; import type { FireworksInstance } from "./FireworksInstance.js"; import type { IFireworkOptions } from "./IFireworkOptions.js"; +import { getFireworksInstance } from "./utils.js"; +import { loadBasic } from "@tsparticles/basic"; +import { loadBlendPlugin } from "@tsparticles/plugin-blend"; +import { loadDestroyUpdater } from "@tsparticles/updater-destroy"; +import { loadEmittersPluginSimple } from "@tsparticles/plugin-emitters/plugin"; +import { loadEmittersShapeSquare } from "@tsparticles/plugin-emitters-shape-square"; +import { loadLifeUpdater } from "@tsparticles/updater-life"; +import { loadLineShape } from "@tsparticles/shape-line"; +import { loadPaintUpdater } from "@tsparticles/updater-paint"; +import { loadRotateUpdater } from "@tsparticles/updater-rotate"; +import { loadSoundsPlugin } from "@tsparticles/plugin-sounds"; declare const __VERSION__: string; -let initialized = false, - initializing = false; - -type FireworksFunc = (( - idOrOptions: string | RecursivePartial, - sourceOptions?: RecursivePartial, -) => Promise) & { - version: string; -}; +let initPromise: Promise | null = null; declare global { var fireworks: FireworksFunc & { create: ( - canvas: HTMLCanvasElement, - options: RecursivePartial, + canvas?: HTMLCanvasElement | null, + options?: RecursivePartial, ) => Promise; init: () => Promise; version: string; }; } -const explodeSoundCheck = (args: CustomEventArgs): boolean => { - const data = args.data as { particle?: Particle } | undefined; - - return data?.particle?.options.move.gravity.enable ?? false; -}; - /** * @param engine - the engine to use for loading all plugins + * @returns the promise of initialization + * @internal */ -async function initPlugins(engine: Engine): Promise { - if (initialized) { - return; - } - - if (initializing) { - return new Promise(resolve => { - const timeout = 100, - interval = setInterval(() => { - if (!initialized) { - return; - } - - clearInterval(interval); - resolve(); - }, timeout); - }); - } - - initializing = true; - +async function doInitPlugins(engine: Engine): Promise { engine.checkVersion(__VERSION__); await engine.pluginManager.register(async e => { - const [ - { loadBasic }, - { loadLineShape }, - { loadBlendPlugin }, - { loadEmittersPluginSimple }, - { loadEmittersShapeSquare }, - { loadSoundsPlugin }, - { loadRotateUpdater }, - { loadDestroyUpdater }, - { loadLifeUpdater }, - { loadPaintUpdater }, - ] = await Promise.all([ - import("@tsparticles/basic"), - import("@tsparticles/shape-line"), - import("@tsparticles/plugin-blend"), - import("@tsparticles/plugin-emitters/plugin"), - import("@tsparticles/plugin-emitters-shape-square"), - import("@tsparticles/plugin-sounds"), - import("@tsparticles/updater-rotate"), - import("@tsparticles/updater-destroy"), - import("@tsparticles/updater-life"), - import("@tsparticles/updater-paint"), - ]), - loadEmittersForFireworks = async (e: Engine): Promise => { - await loadEmittersPluginSimple(e); + const loadEmittersForFireworks = async (e: Engine): Promise => { + await loadEmittersPluginSimple(e); - await loadEmittersShapeSquare(e); - }; + await loadEmittersShapeSquare(e); + }; await Promise.all([ loadBasic(e), @@ -117,209 +56,21 @@ async function initPlugins(engine: Engine): Promise { loadPaintUpdater(e), ]); }); - - initializing = false; - initialized = true; } /** - * - * @param options - - * @param canvas - - * @returns the options for the tsParticles instance - */ -function getOptions(options: IFireworkOptions, canvas?: HTMLCanvasElement): ISourceOptions { - const identity = 1; - - return { - detectRetina: true, - background: { - color: options.background, - }, - blend: { - enable: true, - mode: "lighter", - }, - fullScreen: { - enable: !canvas, - }, - fpsLimit: 60, - emitters: { - direction: MoveDirection.top, - life: { - count: 0, - duration: 0.1, - delay: 0.1, - }, - rate: { - delay: isNumber(options.rate) - ? identity / options.rate - : { min: identity / getRangeMin(options.rate), max: identity / getRangeMax(options.rate) }, - quantity: 1, - }, - size: { - width: 100, - height: 0, - }, - position: { - y: 100, - x: 50, - }, - }, - particles: { - number: { - value: 0, - }, - paint: { - stroke: { - color: { - value: options.colors, - }, - width: 2, - }, - }, - destroy: { - mode: "split", - bounds: { - top: setRangeValue(options.minHeight), - }, - split: { - count: 1, - factor: { - value: 0.333333, - }, - rate: { - value: options.splitCount, - }, - strokeColorOffset: { - s: options.saturation, - l: options.brightness, - }, - particles: { - group: "split", - number: { - value: 0, - }, - opacity: { - value: { - min: 0.1, - max: 1, - }, - animation: { - enable: true, - speed: { min: 2, max: 4 }, - sync: true, - startValue: StartValueType.max, - destroy: DestroyType.min, - count: 1, - }, - }, - size: { - value: { min: 5, max: 10 }, - }, - life: { - count: 1, - duration: { - value: { - min: 0.5, - max: 1, - }, - }, - }, - move: { - decay: 0.05, - enable: true, - gravity: { - enable: false, - }, - speed: { - min: 10, - max: 25, - }, - direction: "outside", - outModes: OutMode.destroy, - }, - }, - }, - }, - life: { - count: 1, - }, - shape: { - type: "line", - options: { - line: { - cap: "round", - }, - }, - }, - size: { - value: { min: 10, max: 20 }, - }, - rotate: { - path: true, - }, - move: { - enable: true, - gravity: { - acceleration: setRangeValue(options.gravity), - enable: true, - inverse: true, - maxSpeed: 150, - }, - speed: setRangeValue(options.speed), - outModes: { - default: OutMode.destroy, - top: OutMode.none, - }, - }, - }, - sounds: { - enable: options.sounds, - events: [ - { - event: EventType.particleRemoved, - filter: explodeSoundCheck, - audio: [ - "https://particles.js.org/audio/explosion0.mp3", - "https://particles.js.org/audio/explosion1.mp3", - "https://particles.js.org/audio/explosion2.mp3", - ], - }, - ], - volume: 50, - }, - }; -} - -/** - * - * @param id - - * @param sourceOptions - - * @param canvas - - * @returns the loaded instance + * @param engine - the engine to use for loading all plugins + * @returns the promise of initialization + * @internal */ -async function getFireworksInstance( - id: string, - sourceOptions: RecursivePartial, - canvas?: HTMLCanvasElement, -): Promise { - await initPlugins(tsParticles); - - const options = new FireworkOptions(); - - options.load(sourceOptions); - - const particlesOptions = getOptions(options, canvas), - container = await tsParticles.load({ id, element: canvas, options: particlesOptions }); - - if (!container) { - return; +async function initPlugins(engine: Engine): Promise { + if (initPromise) { + return initPromise; } - const { FireworksInstance } = await import("./FireworksInstance.js"); + initPromise = doInitPlugins(engine); - return new FireworksInstance(container); + return initPromise; } /** @@ -331,6 +82,8 @@ export async function fireworks( idOrOptions?: string | RecursivePartial, sourceOptions?: RecursivePartial, ): Promise { + await initPlugins(tsParticles); + let id: string, options: RecursivePartial; if (isString(idOrOptions)) { @@ -341,16 +94,18 @@ export async function fireworks( options = idOrOptions ?? {}; } - return getFireworksInstance(id, options); + return getFireworksInstance(tsParticles, id, options); } fireworks.create = async ( - canvas: HTMLCanvasElement, + canvas?: HTMLCanvasElement | null, options?: RecursivePartial, ): Promise => { - const id = canvas.id || "fireworks"; + await initPlugins(tsParticles); + + const id = canvas?.id ?? "fireworks"; - return getFireworksInstance(id, options ?? {}, canvas); + return getFireworksInstance(tsParticles, id, options ?? {}, canvas ?? undefined); }; fireworks.init = async (): Promise => { diff --git a/bundles/fireworks/src/index.lazy.ts b/bundles/fireworks/src/index.lazy.ts new file mode 100644 index 00000000000..d0281d9a772 --- /dev/null +++ b/bundles/fireworks/src/index.lazy.ts @@ -0,0 +1,6 @@ +import type { IFireworkOptions } from "./IFireworkOptions.js"; +import type { RecursivePartial } from "@tsparticles/engine/lazy"; + +export type FireworkOptions = RecursivePartial; + +export * from "./fireworks.lazy.js"; diff --git a/bundles/fireworks/src/types.ts b/bundles/fireworks/src/types.ts new file mode 100644 index 00000000000..d39a7857deb --- /dev/null +++ b/bundles/fireworks/src/types.ts @@ -0,0 +1,10 @@ +import type { FireworksInstance } from "./FireworksInstance.js"; +import type { IFireworkOptions } from "./IFireworkOptions.js"; +import type { RecursivePartial } from "@tsparticles/engine"; + +export type FireworksFunc = (( + idOrOptions: string | RecursivePartial, + sourceOptions?: RecursivePartial, +) => Promise) & { + version: string; +}; diff --git a/bundles/fireworks/src/utils.ts b/bundles/fireworks/src/utils.ts new file mode 100644 index 00000000000..b90d9f495c9 --- /dev/null +++ b/bundles/fireworks/src/utils.ts @@ -0,0 +1,255 @@ +import { + type CustomEventArgs, + DestroyType, + type Engine, + EventType, + type ISourceOptions, + MoveDirection, + OutMode, + type Particle, + type RecursivePartial, + StartValueType, + getRangeMax, + getRangeMin, + isNumber, + setRangeValue, +} from "@tsparticles/engine"; +import { FireworkOptions } from "./FireworkOptions.js"; +import type { FireworksInstance } from "./FireworksInstance.js"; +import type { IFireworkOptions } from "./IFireworkOptions.js"; + +const instances = new Map>(); + +export const explodeSoundCheck = (args: CustomEventArgs): boolean => { + const data = args.data as { particle?: Particle } | undefined; + + return data?.particle?.options.move.gravity.enable ?? false; +}; + +/** + * + * @param options - + * @param canvas - + * @returns the options for the tsParticles instance + */ +export function getOptions(options: IFireworkOptions, canvas?: HTMLCanvasElement): ISourceOptions { + const identity = 1; + + return { + detectRetina: true, + background: { + color: options.background, + }, + blend: { + enable: true, + mode: "lighter", + }, + fullScreen: { + enable: !canvas, + }, + fpsLimit: 60, + emitters: { + direction: MoveDirection.top, + life: { + count: 0, + duration: 0.1, + delay: 0.1, + }, + rate: { + delay: isNumber(options.rate) + ? identity / options.rate + : { min: identity / getRangeMin(options.rate), max: identity / getRangeMax(options.rate) }, + quantity: 1, + }, + size: { + width: 100, + height: 0, + }, + position: { + y: 100, + x: 50, + }, + }, + particles: { + number: { + value: 0, + }, + paint: { + fill: { + enable: false, + }, + stroke: { + color: { + value: options.colors, + }, + width: 2, + }, + }, + destroy: { + mode: "split", + bounds: { + top: setRangeValue(options.minHeight), + }, + split: { + count: 1, + factor: { + value: 0.333333, + }, + rate: { + value: options.splitCount, + }, + strokeColorOffset: { + s: options.saturation, + l: options.brightness, + }, + particles: { + group: "split", + number: { + value: 0, + }, + opacity: { + value: { + min: 0.1, + max: 1, + }, + animation: { + enable: true, + speed: { min: 2, max: 4 }, + sync: true, + startValue: StartValueType.max, + destroy: DestroyType.min, + count: 1, + }, + }, + size: { + value: { min: 5, max: 10 }, + }, + life: { + count: 1, + duration: { + value: { + min: 0.5, + max: 1, + }, + }, + }, + move: { + decay: 0.05, + enable: true, + gravity: { + enable: false, + }, + speed: { + min: 10, + max: 25, + }, + direction: "outside", + outModes: OutMode.destroy, + }, + }, + }, + }, + life: { + count: 1, + }, + shape: { + type: "line", + options: { + line: { + cap: "round", + }, + }, + }, + size: { + value: { min: 10, max: 20 }, + }, + rotate: { + path: true, + }, + move: { + enable: true, + gravity: { + acceleration: setRangeValue(options.gravity), + enable: true, + inverse: true, + maxSpeed: 150, + }, + speed: setRangeValue(options.speed), + outModes: { + default: OutMode.destroy, + top: OutMode.none, + }, + }, + }, + sounds: { + enable: options.sounds, + events: [ + { + event: EventType.particleRemoved, + filter: explodeSoundCheck, + audio: [ + "https://particles.js.org/audio/explosion0.mp3", + "https://particles.js.org/audio/explosion1.mp3", + "https://particles.js.org/audio/explosion2.mp3", + ], + }, + ], + volume: 50, + }, + }; +} + +/** + * @param engine - + * @param id - + * @param sourceOptions - + * @param canvas - + * @returns the loaded instance + */ +export async function getFireworksInstance( + engine: Engine, + id: string, + sourceOptions: RecursivePartial, + canvas?: HTMLCanvasElement, +): Promise { + /* Check if an instance or a loading promise already exists */ + const existing = instances.get(id); + + if (existing instanceof Promise) { + return existing; // Wait for the ongoing initialization + } + + if (existing) { + return existing; // Return existing instance + } + + /* Create a locking promise */ + const create = async (): Promise => { + const options = new FireworkOptions(); + + options.load(sourceOptions); + + const particlesOptions = getOptions(options, canvas), + // Load the container + container = await engine.load({ id, element: canvas, options: particlesOptions }); + + if (!container) { + instances.delete(id); // Clean up on failure + return; + } + + const { FireworksInstance } = await import("./FireworksInstance.js"), + instance = new FireworksInstance(container); + + /* Swap the promise for the actual instance */ + instances.set(id, instance); + + return instance; + }, + createPromise = create(); + + /* Set the promise in the map immediately to block concurrent calls */ + instances.set(id, createPromise); + + return createPromise; +} diff --git a/bundles/fireworks/webpack.config.js b/bundles/fireworks/webpack.config.js deleted file mode 100644 index ee22550af89..00000000000 --- a/bundles/fireworks/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesBundle } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesBundle({ - moduleName: "fireworks", - bundleName: "Fireworks", - version, - dir: __dirname, - progress: false, -}); diff --git a/bundles/full/CHANGELOG.md b/bundles/full/CHANGELOG.md index d43709240aa..446dc036f7e 100644 --- a/bundles/full/CHANGELOG.md +++ b/bundles/full/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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 + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package tsparticles diff --git a/bundles/full/README.md b/bundles/full/README.md index 911d3b25598..6bb09fb90bc 100644 --- a/bundles/full/README.md +++ b/bundles/full/README.md @@ -11,11 +11,12 @@ a `@tsparticles/engine` instance. - [@tsparticles/slim (and all its dependencies)](https://github.com/tsparticles/tsparticles/tree/main/bundles/slim) - [@tsparticles/engine](https://github.com/tsparticles/tsparticles/tree/main/engine) +- [@tsparticles/interaction-external-drag](https://github.com/tsparticles/tsparticles/tree/main/interactions/external/drag) - [@tsparticles/interaction-external-trail](https://github.com/tsparticles/tsparticles/tree/main/interactions/external/trail) - [@tsparticles/plugin-absorbers](https://github.com/tsparticles/tsparticles/tree/main/plugins/absorbers) - [@tsparticles/plugin-emitters](https://github.com/tsparticles/tsparticles/tree/main/plugins/emitters) -- [@tsparticles/plugin-emitters-shape-circle](https://github.com/tsparticles/tsparticles/tree/main/plugins/emitters/shape/circle) -- [@tsparticles/plugin-emitters-shape-square](https://github.com/tsparticles/tsparticles/tree/main/plugins/emitters/shape/square) +- [@tsparticles/plugin-emitters-shape-circle](https://github.com/tsparticles/tsparticles/tree/main/plugins/emittersShapes/circle) +- [@tsparticles/plugin-emitters-shape-square](https://github.com/tsparticles/tsparticles/tree/main/plugins/emittersShapes/square) - [@tsparticles/shape-text](https://github.com/tsparticles/tsparticles/tree/main/shapes/text) - [@tsparticles/updater-destroy](https://github.com/tsparticles/tsparticles/tree/main/updaters/destroy) - [@tsparticles/updater-roll](https://github.com/tsparticles/tsparticles/tree/main/updaters/roll) @@ -38,6 +39,7 @@ subgraph c [Core] end subgraph i [Interactions] + ied[tsparticles/interaction-external-drag] iet[tsparticles/interaction-external-trail] end diff --git a/bundles/full/package.dist.json b/bundles/full/package.dist.json index ad33fc6cc52..0c1da2a3b34 100644 --- a/bundles/full/package.dist.json +++ b/bundles/full/package.dist.json @@ -1,6 +1,6 @@ { "name": "tsparticles", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "Easily create highly customizable particle animations and use them as animated backgrounds for your website. Ready to use components available also for React, Vue.js (2.x and 3.x), Angular, Svelte, jQuery, Preact, Riot.js, Inferno.", "homepage": "https://particles.js.org", "repository": { @@ -95,23 +95,30 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12", - "@tsparticles/interaction-external-drag": "4.0.0-beta.12", - "@tsparticles/interaction-external-trail": "4.0.0-beta.12", - "@tsparticles/plugin-absorbers": "4.0.0-beta.12", - "@tsparticles/plugin-emitters": "4.0.0-beta.12", - "@tsparticles/plugin-emitters-shape-circle": "4.0.0-beta.12", - "@tsparticles/plugin-emitters-shape-square": "4.0.0-beta.12", - "@tsparticles/shape-text": "4.0.0-beta.12", - "@tsparticles/slim": "4.0.0-beta.12", - "@tsparticles/updater-destroy": "4.0.0-beta.12", - "@tsparticles/updater-roll": "4.0.0-beta.12", - "@tsparticles/updater-tilt": "4.0.0-beta.12", - "@tsparticles/updater-twinkle": "4.0.0-beta.12", - "@tsparticles/updater-wobble": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/interaction-external-drag": "4.0.0-beta.15", + "@tsparticles/interaction-external-trail": "4.0.0-beta.15", + "@tsparticles/plugin-absorbers": "4.0.0-beta.15", + "@tsparticles/plugin-emitters": "4.0.0-beta.15", + "@tsparticles/plugin-emitters-shape-circle": "4.0.0-beta.15", + "@tsparticles/plugin-emitters-shape-square": "4.0.0-beta.15", + "@tsparticles/shape-text": "4.0.0-beta.15", + "@tsparticles/slim": "4.0.0-beta.15", + "@tsparticles/updater-destroy": "4.0.0-beta.15", + "@tsparticles/updater-roll": "4.0.0-beta.15", + "@tsparticles/updater-tilt": "4.0.0-beta.15", + "@tsparticles/updater-twinkle": "4.0.0-beta.15", + "@tsparticles/updater-wobble": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/bundles/full/package.json b/bundles/full/package.json index 892c18412af..3e66cbce6e7 100644 --- a/bundles/full/package.json +++ b/bundles/full/package.json @@ -1,11 +1,11 @@ { "name": "tsparticles", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "Easily create highly customizable particle animations and use them as animated backgrounds for your website. Ready to use components available also for React, Vue.js (2.x and 3.x), Angular, Svelte, jQuery, Preact, Riot.js, Inferno.", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -89,7 +89,10 @@ "files": [ "dist" ], - "sideEffects": false, + "sideEffects": [ + "dist/browser/browser.js", + "dist/browser/index.js" + ], "browser": "dist/browser/index.js", "main": "dist/cjs/index.js", "module": "dist/esm/index.js", @@ -102,6 +105,13 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "dependencies": { @@ -125,5 +135,9 @@ "directory": "dist", "linkDirectory": true }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/bundles/full/rollup.config.js b/bundles/full/rollup.config.js new file mode 100644 index 00000000000..1a408df1c2b --- /dev/null +++ b/bundles/full/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesBundle } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesBundle({ + moduleName: "", + bundleName: "", + version, + dir: __dirname, + progress: false, +}); diff --git a/bundles/full/src/browser.ts b/bundles/full/src/browser.ts new file mode 100644 index 00000000000..2fc0f92d2b7 --- /dev/null +++ b/bundles/full/src/browser.ts @@ -0,0 +1,10 @@ +import { loadFull } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadFull?: typeof loadFull; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadFull = loadFull; + +export * from "./index.js"; diff --git a/bundles/full/src/bundle.ts b/bundles/full/src/bundle.ts index 4eb9d25cd38..006080bdf0f 100644 --- a/bundles/full/src/bundle.ts +++ b/bundles/full/src/bundle.ts @@ -1,2 +1,12 @@ +import { loadFull } from "./index.js"; + export * from "@tsparticles/engine"; export { loadFull } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadFull?: typeof loadFull; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; + +globalObject.loadFull = loadFull; diff --git a/bundles/full/src/index.lazy.ts b/bundles/full/src/index.lazy.ts new file mode 100644 index 00000000000..e8c39beeee7 --- /dev/null +++ b/bundles/full/src/index.lazy.ts @@ -0,0 +1,82 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * Loads the full bundle with all plugins needed for running the tsParticles package. + * This function must be called to make tsParticles work. + * This function is not mandatory, the plugins can be loaded manually, or using other plugin bundles. + * If this function is not called, the tsparticles package/dependency can be safely removed. + * This function is called automatically using CDN bundle files. + * @param engine - the engine to use for loading all plugins + */ +export async function loadFull(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const [ + { loadSlim }, + { loadExternalDragInteraction }, + { loadExternalTrailInteraction }, + { loadAbsorbersPlugin }, + { loadEmittersPlugin }, + { loadEmittersShapeCircle }, + { loadEmittersShapeSquare }, + { loadTextShape }, + { loadDestroyUpdater }, + { loadRollUpdater }, + { loadTiltUpdater }, + { loadTwinkleUpdater }, + { loadWobbleUpdater }, + ] = await Promise.all([ + import("@tsparticles/slim/lazy"), + + import("@tsparticles/interaction-external-drag/lazy"), + import("@tsparticles/interaction-external-trail/lazy"), + + import("@tsparticles/plugin-absorbers/lazy"), + import("@tsparticles/plugin-emitters/lazy"), + import("@tsparticles/plugin-emitters-shape-circle/lazy"), + import("@tsparticles/plugin-emitters-shape-square/lazy"), + + import("@tsparticles/shape-text/lazy"), + + import("@tsparticles/updater-destroy/lazy"), + import("@tsparticles/updater-roll/lazy"), + import("@tsparticles/updater-tilt/lazy"), + import("@tsparticles/updater-twinkle/lazy"), + import("@tsparticles/updater-wobble/lazy"), + ]), + loadEmittersPluginBundle = async (e: Engine): Promise => { + await loadEmittersPlugin(e); + + await Promise.all([ + loadEmittersShapeCircle(e), + loadEmittersShapeSquare(e), + ]); + }, + loadInteractivityForFull = async (e: Engine): Promise => { + await loadSlim(e); + + await Promise.all([ + loadExternalDragInteraction(e), + loadExternalTrailInteraction(e), + + loadAbsorbersPlugin(e), + loadEmittersPluginBundle(e), + ]); + }; + + await Promise.all([ + loadInteractivityForFull(e), + + loadDestroyUpdater(e), + loadRollUpdater(e), + loadTiltUpdater(e), + loadTwinkleUpdater(e), + loadWobbleUpdater(e), + + loadTextShape(e), + ]); + }); +} diff --git a/bundles/full/src/index.ts b/bundles/full/src/index.ts index 3508a3b0bb1..23874e18e9c 100644 --- a/bundles/full/src/index.ts +++ b/bundles/full/src/index.ts @@ -1,4 +1,17 @@ import { type Engine } from "@tsparticles/engine"; +import { loadAbsorbersPlugin } from "@tsparticles/plugin-absorbers"; +import { loadDestroyUpdater } from "@tsparticles/updater-destroy"; +import { loadEmittersPlugin } from "@tsparticles/plugin-emitters"; +import { loadEmittersShapeCircle } from "@tsparticles/plugin-emitters-shape-circle"; +import { loadEmittersShapeSquare } from "@tsparticles/plugin-emitters-shape-square"; +import { loadExternalDragInteraction } from "@tsparticles/interaction-external-drag"; +import { loadExternalTrailInteraction } from "@tsparticles/interaction-external-trail"; +import { loadRollUpdater } from "@tsparticles/updater-roll"; +import { loadSlim } from "@tsparticles/slim"; +import { loadTextShape } from "@tsparticles/shape-text"; +import { loadTiltUpdater } from "@tsparticles/updater-tilt"; +import { loadTwinkleUpdater } from "@tsparticles/updater-twinkle"; +import { loadWobbleUpdater } from "@tsparticles/updater-wobble"; declare const __VERSION__: string; @@ -14,42 +27,15 @@ export async function loadFull(engine: Engine): Promise { engine.checkVersion(__VERSION__); await engine.pluginManager.register(async e => { - const [ - { loadSlim }, - { loadExternalDragInteraction }, - { loadExternalTrailInteraction }, - { loadAbsorbersPlugin }, - { loadEmittersPlugin }, - { loadEmittersShapeCircle }, - { loadEmittersShapeSquare }, - { loadTextShape }, - { loadDestroyUpdater }, - { loadRollUpdater }, - { loadTiltUpdater }, - { loadTwinkleUpdater }, - { loadWobbleUpdater }, - ] = await Promise.all([ - import("@tsparticles/slim"), + const loadEmittersPluginBundle = async (e: Engine): Promise => { + await loadEmittersPlugin(e); - import("@tsparticles/interaction-external-drag"), - import("@tsparticles/interaction-external-trail"), - - import("@tsparticles/plugin-absorbers"), - import("@tsparticles/plugin-emitters"), - import("@tsparticles/plugin-emitters-shape-circle"), - import("@tsparticles/plugin-emitters-shape-square"), - - import("@tsparticles/shape-text"), - - import("@tsparticles/updater-destroy"), - import("@tsparticles/updater-roll"), - import("@tsparticles/updater-tilt"), - import("@tsparticles/updater-twinkle"), - import("@tsparticles/updater-wobble"), - ]); - - await Promise.all([ - (async (): Promise => { + await Promise.all([ + loadEmittersShapeCircle(e), + loadEmittersShapeSquare(e), + ]); + }, + loadInteractivityForFull = async (e: Engine): Promise => { await loadSlim(e); await Promise.all([ @@ -57,16 +43,12 @@ export async function loadFull(engine: Engine): Promise { loadExternalTrailInteraction(e), loadAbsorbersPlugin(e), - (async (): Promise => { - await loadEmittersPlugin(e); - - await Promise.all([ - loadEmittersShapeCircle(e), - loadEmittersShapeSquare(e), - ]); - })(), + loadEmittersPluginBundle(e), ]); - })(), + }; + + await Promise.all([ + loadInteractivityForFull(e), loadDestroyUpdater(e), loadRollUpdater(e), diff --git a/bundles/full/webpack.config.js b/bundles/full/webpack.config.js deleted file mode 100644 index f25ddb25195..00000000000 --- a/bundles/full/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesBundle } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesBundle({ - moduleName: "", - bundleName: "", - version, - dir: __dirname, - progress: false, -}); diff --git a/bundles/particles/.browserslistrc b/bundles/particles/.browserslistrc new file mode 100644 index 00000000000..bb56937de22 --- /dev/null +++ b/bundles/particles/.browserslistrc @@ -0,0 +1,2 @@ +extends @tsparticles/browserslist-config + diff --git a/bundles/particles/CHANGELOG.md b/bundles/particles/CHANGELOG.md new file mode 100644 index 00000000000..8c8df66bb1c --- /dev/null +++ b/bundles/particles/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/particles diff --git a/palettes/pastel/pastelCool/LICENSE b/bundles/particles/LICENSE similarity index 100% rename from palettes/pastel/pastelCool/LICENSE rename to bundles/particles/LICENSE diff --git a/bundles/particles/README.md b/bundles/particles/README.md new file mode 100644 index 00000000000..5e03c8b463c --- /dev/null +++ b/bundles/particles/README.md @@ -0,0 +1,112 @@ +[![banner](https://particles.js.org/images/banner2.png)](https://particles.js.org) + +# tsParticles Particles Bundle + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/particles/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/particles) [![npmjs](https://badge.fury.io/js/@tsparticles/particles.svg)](https://www.npmjs.com/package/@tsparticles/particles) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/particles)](https://www.npmjs.com/package/@tsparticles/particles) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +tsParticles `particles` bundle to create simple particle effects with a focused API. + +**Included Packages** + +- [@tsparticles/basic (and all its dependencies)](https://github.com/tsparticles/tsparticles/tree/main/bundles/basic) +- [@tsparticles/engine](https://github.com/tsparticles/tsparticles/tree/main/engine) +- [@tsparticles/plugin-interactivity](https://github.com/tsparticles/tsparticles/tree/main/plugins/interactivity) +- [@tsparticles/interaction-particles-collisions](https://github.com/tsparticles/tsparticles/tree/main/interactions/particles/collisions) +- [@tsparticles/interaction-particles-links](https://github.com/tsparticles/tsparticles/tree/main/interactions/particles/links) + +## Exposed API + +The package API is centered on `particles`. + +```ts +import { particles } from "@tsparticles/particles"; + +// Main API +const instance = await particles(); +const byId = await particles("canvas-id", options); +const byOptions = await particles(options); + +// Extra helpers +await particles.init(); +const custom = await particles.create(canvas, options); + +console.log(particles.version); +``` + +`@tsparticles/particles` does not expose `tsParticles` from its main entrypoint. +If you need direct engine APIs, import them from `@tsparticles/engine`. + +## Installation + +```bash +pnpm add @tsparticles/particles +``` + +Lazy entrypoint (loads dependencies on demand): + +```ts +import { particles } from "@tsparticles/particles/lazy"; +``` + +## How to use it + +```ts +import { particles } from "@tsparticles/particles"; + +const instance = await particles({ + count: 120, + color: "#00f", + links: true, + linksColor: "#0ff", + linksLength: 140, + radius: 4, + shape: ["circle", "square"], +}); + +instance?.pause(); +instance?.play(); +instance?.stop(); +``` + +### Custom canvas via `particles.create` + +```ts +import { particles } from "@tsparticles/particles"; + +const canvas = document.getElementById("my-canvas") as HTMLCanvasElement; +await particles.create(canvas, { links: true }); +``` + +### Options + +Main options (shallow overview): + +- `count` Number: particles amount (default: 80) +- `radius` Number or RangeValue: particle radius (default: 3) +- `links` Boolean: enable links between particles +- `linksLength` Number: maximum link distance +- `speed` Number or RangeValue: particle movement speed +- `collisions` Boolean: enable particle collisions +- `opacity` Number: particle opacity +- `shape` String or Array<String>: particle shape type(s) +- `color` String: particle color +- `linksColor` String: link color + +### Returned instance methods + +The resolved `ParticlesInstance` exposes: + +- `pause()` +- `play()` +- `stop()` + +## Common pitfalls + +- Calling `particles` before scripts are loaded in CDN usage +- Assuming `tsParticles` is exported by `@tsparticles/particles` main entrypoint +- Reusing the same `id` unintentionally (the package caches instances by id) + +## Related docs + +- All packages catalog: +- Main docs: diff --git a/palettes/pastel/pastelCool/eslint.config.js b/bundles/particles/eslint.config.js similarity index 100% rename from palettes/pastel/pastelCool/eslint.config.js rename to bundles/particles/eslint.config.js diff --git a/bundles/particles/package.dist.json b/bundles/particles/package.dist.json new file mode 100644 index 00000000000..84c08a8b736 --- /dev/null +++ b/bundles/particles/package.dist.json @@ -0,0 +1,53 @@ +{ + "name": "@tsparticles/particles", + "version": "4.0.0-beta.15", + "description": "Easily create highly customizable particle animations and use them as animated backgrounds for your website. Ready to use components available also for React, Vue.js (2.x and 3.x), Angular, Svelte, jQuery, Preact, Riot.js, Inferno.", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "bundles/particles" + }, + "keywords": [ + "particles", + "tsparticles", + "canvas" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "sideEffects": false, + "jsdelivr": "tsparticles.particles.bundle.min.js", + "unpkg": "tsparticles.particles.bundle.min.js", + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "default": "./esm/index.js" + }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, + "./package.json": "./package.json" + }, + "dependencies": { + "@tsparticles/basic": "4.0.0-beta.15", + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/interaction-particles-collisions": "4.0.0-beta.15", + "@tsparticles/interaction-particles-links": "4.0.0-beta.15", + "@tsparticles/plugin-interactivity": "4.0.0-beta.15" + }, + "publishConfig": { + "access": "public" + }, + "type": "module" +} diff --git a/bundles/particles/package.json b/bundles/particles/package.json new file mode 100644 index 00000000000..35760e382e1 --- /dev/null +++ b/bundles/particles/package.json @@ -0,0 +1,125 @@ +{ + "name": "@tsparticles/particles", + "version": "4.0.0-beta.15", + "description": "Easily create highly customizable particle animations and use them as animated backgrounds for your website. Ready to use components available also for React, Vue.js (2.x and 3.x), Angular, Svelte, jQuery, Preact, Riot.js, Inferno.", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "bundles/particles" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "canvas", + "particles" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "prettier": "@tsparticles/prettier-config", + "files": [ + "dist" + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "default": "./dist/esm/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "dependencies": { + "@tsparticles/basic": "workspace:*", + "@tsparticles/engine": "workspace:*", + "@tsparticles/interaction-particles-collisions": "workspace:*", + "@tsparticles/interaction-particles-links": "workspace:*", + "@tsparticles/plugin-interactivity": "workspace:*" + }, + "publishConfig": { + "access": "public", + "directory": "dist", + "linkDirectory": true + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/bundles/particles/rollup.config.js b/bundles/particles/rollup.config.js new file mode 100644 index 00000000000..079d9d7001d --- /dev/null +++ b/bundles/particles/rollup.config.js @@ -0,0 +1,19 @@ +import { loadParticlesBundle } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesBundle({ + moduleName: "particles", + bundleName: "Particles", + version, + dir: __dirname, + progress: false, +}); + diff --git a/bundles/particles/src/IParticlesOptions.ts b/bundles/particles/src/IParticlesOptions.ts new file mode 100644 index 00000000000..25b30dccbd7 --- /dev/null +++ b/bundles/particles/src/IParticlesOptions.ts @@ -0,0 +1,14 @@ +import type { RangeValue, SingleOrMultiple } from "@tsparticles/engine"; + +export interface IParticlesOptions { + collisions?: boolean; + color?: string; + count?: number; + links?: boolean; + linksColor?: string; + linksLength?: number; + opacity?: number; + radius?: RangeValue; + shape?: SingleOrMultiple; + speed?: RangeValue; +} diff --git a/bundles/particles/src/ParticlesInstance.ts b/bundles/particles/src/ParticlesInstance.ts new file mode 100644 index 00000000000..938233376ec --- /dev/null +++ b/bundles/particles/src/ParticlesInstance.ts @@ -0,0 +1,21 @@ +import type { Container } from "@tsparticles/engine"; + +export class ParticlesInstance { + private readonly _container: Container; + + constructor(container: Container) { + this._container = container; + } + + pause(): void { + this._container.pause(); + } + + play(): void { + this._container.play(); + } + + stop(): void { + this._container.stop(); + } +} diff --git a/bundles/particles/src/browser.ts b/bundles/particles/src/browser.ts new file mode 100644 index 00000000000..383bb03fcd2 --- /dev/null +++ b/bundles/particles/src/browser.ts @@ -0,0 +1,12 @@ +import { particles } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + particles?: typeof particles; +}; + +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; + +globalObject.particles = particles; + +export * from "./index.js"; diff --git a/bundles/particles/src/bundle.ts b/bundles/particles/src/bundle.ts new file mode 100644 index 00000000000..686aa35162d --- /dev/null +++ b/bundles/particles/src/bundle.ts @@ -0,0 +1,14 @@ +import { particles } from "./index.js"; + +export { particles } from "./index.js"; +export type { ParticlesOptions } from "./index.js"; +export * from "@tsparticles/engine"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + particles?: typeof particles; +}; + +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; + +globalObject.particles = particles; diff --git a/bundles/particles/src/index.lazy.ts b/bundles/particles/src/index.lazy.ts new file mode 100644 index 00000000000..a8dcc79dfc6 --- /dev/null +++ b/bundles/particles/src/index.lazy.ts @@ -0,0 +1,6 @@ +import type { IParticlesOptions } from "./IParticlesOptions.js"; +import type { RecursivePartial } from "@tsparticles/engine/lazy"; + +export type ParticlesOptions = RecursivePartial; + +export * from "./particles.lazy.js"; diff --git a/bundles/particles/src/index.ts b/bundles/particles/src/index.ts new file mode 100644 index 00000000000..d86d76c1170 --- /dev/null +++ b/bundles/particles/src/index.ts @@ -0,0 +1,6 @@ +import type { IParticlesOptions } from "./IParticlesOptions.js"; +import type { RecursivePartial } from "@tsparticles/engine"; + +export type ParticlesOptions = RecursivePartial; + +export * from "./particles.js"; diff --git a/bundles/particles/src/particles.lazy.ts b/bundles/particles/src/particles.lazy.ts new file mode 100644 index 00000000000..7f932684370 --- /dev/null +++ b/bundles/particles/src/particles.lazy.ts @@ -0,0 +1,112 @@ +import { type Engine, type RecursivePartial, isString, tsParticles } from "@tsparticles/engine/lazy"; +import type { IParticlesOptions } from "./IParticlesOptions.js"; +import type { ParticlesFunc } from "./types.js"; +import type { ParticlesInstance } from "./ParticlesInstance.js"; +import { getParticlesInstance } from "./utils.js"; + +declare const __VERSION__: string; + +let initPromise: Promise | null = null; + +declare global { + var particles: ParticlesFunc & { + create: ( + canvas?: HTMLCanvasElement | null, + options?: RecursivePartial, + ) => Promise; + init: () => Promise; + version: string; + }; +} + +/** + * @param engine - + * @returns - + */ +async function doInitPlugins(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const [ + { loadBasic }, + { loadInteractivityPlugin }, + { loadParticlesCollisionsInteraction }, + { loadParticlesLinksInteraction }, + ] = await Promise.all([ + import("@tsparticles/basic/lazy"), + import("@tsparticles/plugin-interactivity/lazy"), + import("@tsparticles/interaction-particles-collisions/lazy"), + import("@tsparticles/interaction-particles-links/lazy"), + ]), + loadParticlesInteractivity = async (e: Engine): Promise => { + await loadInteractivityPlugin(e); + + await Promise.all([ + loadParticlesCollisionsInteraction(e), + loadParticlesLinksInteraction(e), + ]); + }; + + await Promise.all([ + loadBasic(e), + loadParticlesInteractivity(e), + ]); + }); +} + +/** + * @param engine - + * @returns - + */ +async function initPlugins(engine: Engine): Promise { + if (initPromise) { + return initPromise; + } + + initPromise = doInitPlugins(engine); + + return initPromise; +} + +/** + * @param idOrOptions - + * @param sourceOptions - + * @returns - + */ +export async function particles( + idOrOptions?: string | RecursivePartial, + sourceOptions?: RecursivePartial, +): Promise { + await initPlugins(tsParticles); + + let id: string, options: RecursivePartial; + + if (isString(idOrOptions)) { + id = idOrOptions; + options = sourceOptions ?? {}; + } else { + id = "particles"; + options = idOrOptions ?? {}; + } + + return getParticlesInstance(tsParticles, id, options); +} + +particles.create = async ( + canvas?: HTMLCanvasElement | null, + options?: RecursivePartial, +): Promise => { + await initPlugins(tsParticles); + + const id = canvas?.id ?? "particles"; + + return getParticlesInstance(tsParticles, id, options ?? {}, canvas ?? undefined); +}; + +particles.init = async (): Promise => { + await initPlugins(tsParticles); +}; + +particles.version = __VERSION__; + +globalThis.particles = particles; diff --git a/bundles/particles/src/particles.ts b/bundles/particles/src/particles.ts new file mode 100644 index 00000000000..f49829e5aa6 --- /dev/null +++ b/bundles/particles/src/particles.ts @@ -0,0 +1,105 @@ +import { type Engine, type RecursivePartial, isString, tsParticles } from "@tsparticles/engine"; +import type { IParticlesOptions } from "./IParticlesOptions.js"; +import type { ParticlesFunc } from "./types.js"; +import type { ParticlesInstance } from "./ParticlesInstance.js"; +import { getParticlesInstance } from "./utils.js"; +import { loadBasic } from "@tsparticles/basic"; +import { loadInteractivityPlugin } from "@tsparticles/plugin-interactivity"; +import { loadParticlesCollisionsInteraction } from "@tsparticles/interaction-particles-collisions"; +import { loadParticlesLinksInteraction } from "@tsparticles/interaction-particles-links"; + +declare const __VERSION__: string; + +let initPromise: Promise | null = null; + +declare global { + var particles: ParticlesFunc & { + create: ( + canvas?: HTMLCanvasElement | null, + options?: RecursivePartial, + ) => Promise; + init: () => Promise; + version: string; + }; +} + +/** + * @param engine - + * @returns - + */ +async function doInitPlugins(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const loadParticlesInteractivity = async (e: Engine): Promise => { + await loadInteractivityPlugin(e); + + await Promise.all([ + loadParticlesCollisionsInteraction(e), + loadParticlesLinksInteraction(e), + ]); + }; + + await Promise.all([ + loadBasic(e), + loadParticlesInteractivity(e), + ]); + }); +} + +/** + * @param engine - + * @returns - + */ +async function initPlugins(engine: Engine): Promise { + if (initPromise) { + return initPromise; + } + + initPromise = doInitPlugins(engine); + + return initPromise; +} + +/** + * @param idOrOptions - + * @param sourceOptions - + * @returns - + */ +export async function particles( + idOrOptions?: string | RecursivePartial, + sourceOptions?: RecursivePartial, +): Promise { + await initPlugins(tsParticles); + + let id: string, options: RecursivePartial; + + if (isString(idOrOptions)) { + id = idOrOptions; + options = sourceOptions ?? {}; + } else { + id = "particles"; + options = idOrOptions ?? {}; + } + + return getParticlesInstance(tsParticles, id, options); +} + +particles.create = async ( + canvas?: HTMLCanvasElement | null, + options?: RecursivePartial, +): Promise => { + await initPlugins(tsParticles); + + const id = canvas?.id ?? "particles"; + + return getParticlesInstance(tsParticles, id, options ?? {}, canvas ?? undefined); +}; + +particles.init = async (): Promise => { + await initPlugins(tsParticles); +}; + +particles.version = __VERSION__; + +globalThis.particles = particles; diff --git a/bundles/particles/src/types.ts b/bundles/particles/src/types.ts new file mode 100644 index 00000000000..eaa6a40ce5f --- /dev/null +++ b/bundles/particles/src/types.ts @@ -0,0 +1,10 @@ +import type { IParticlesOptions } from "./IParticlesOptions.js"; +import type { ParticlesInstance } from "./ParticlesInstance.js"; +import type { RecursivePartial } from "@tsparticles/engine"; + +export type ParticlesFunc = (( + idOrOptions?: string | RecursivePartial, + sourceOptions?: RecursivePartial, +) => Promise) & { + version: string; +}; diff --git a/bundles/particles/src/utils.ts b/bundles/particles/src/utils.ts new file mode 100644 index 00000000000..950be0fcd7e --- /dev/null +++ b/bundles/particles/src/utils.ts @@ -0,0 +1,101 @@ +import type { Engine, ISourceOptions, RecursivePartial } from "@tsparticles/engine"; +import type { IParticlesOptions } from "./IParticlesOptions.js"; +import type { ParticlesInstance } from "./ParticlesInstance.js"; + +const instances = new Map>(), + defaultCount = 80, + defaultLinksWidth = 100, + defaultSpeed = 3, + defaultOpacity = 1, + defaultRadius = 3; + +/** + * Creates engine source options from high-level particles options. + * @param options - Public particles options used to build engine options. + * @param canvas - The custom canvas element to use, if present. If set, fullScreen will be disabled. + * @returns The normalized source options for engine.load. + */ +function getDefaultOptions(options: RecursivePartial, canvas?: HTMLCanvasElement): ISourceOptions { + return { + fullScreen: { + enable: !canvas, + }, + particles: { + number: { + value: options.count ?? defaultCount, + }, + color: { + value: options.color ?? "#fff", + }, + links: { + enable: options.links ?? false, + color: options.linksColor ?? "#fff", + distance: options.linksLength ?? defaultLinksWidth, + }, + collisions: { + enable: options.collisions ?? false, + }, + move: { + enable: true, + speed: options.speed ?? defaultSpeed, + }, + opacity: { + value: options.opacity ?? defaultOpacity, + }, + shape: { + type: options.shape ?? "circle", + }, + size: { + value: options.radius ?? defaultRadius, + }, + }, + }; +} + +/** + * Gets or creates a cached particles instance. + * @param engine - Engine instance used to load the container. + * @param id - Unique instance id used as cache key. + * @param sourceOptions - User options for particles initialization. + * @param canvas - Optional target canvas element. + * @returns The cached or newly created particles instance. + */ +export async function getParticlesInstance( + engine: Engine, + id: string, + sourceOptions: RecursivePartial, + canvas?: HTMLCanvasElement, +): Promise { + const existing = instances.get(id); + + if (existing instanceof Promise) { + return existing; + } + + if (existing) { + return existing; + } + + const create = async (): Promise => { + const particlesOptions = getDefaultOptions(sourceOptions, canvas), + container = await engine.load({ id, element: canvas, options: particlesOptions }); + + if (!container) { + instances.delete(id); + + return; + } + + const { ParticlesInstance } = await import("./ParticlesInstance.js"), + instance = new ParticlesInstance(container); + + instances.set(id, instance); + + return instance; + }, + createPromise = create(); + + instances.set(id, createPromise); + + return createPromise; +} diff --git a/palettes/pastel/pastelCool/tsconfig.base.json b/bundles/particles/tsconfig.base.json similarity index 100% rename from palettes/pastel/pastelCool/tsconfig.base.json rename to bundles/particles/tsconfig.base.json diff --git a/palettes/pastel/pastelCool/tsconfig.browser.json b/bundles/particles/tsconfig.browser.json similarity index 100% rename from palettes/pastel/pastelCool/tsconfig.browser.json rename to bundles/particles/tsconfig.browser.json diff --git a/palettes/pastel/pastelCool/tsconfig.json b/bundles/particles/tsconfig.json similarity index 100% rename from palettes/pastel/pastelCool/tsconfig.json rename to bundles/particles/tsconfig.json diff --git a/palettes/pastel/pastelCool/tsconfig.module.json b/bundles/particles/tsconfig.module.json similarity index 100% rename from palettes/pastel/pastelCool/tsconfig.module.json rename to bundles/particles/tsconfig.module.json diff --git a/palettes/pastel/pastelCool/tsconfig.types.json b/bundles/particles/tsconfig.types.json similarity index 100% rename from palettes/pastel/pastelCool/tsconfig.types.json rename to bundles/particles/tsconfig.types.json diff --git a/bundles/particles/typedoc.json b/bundles/particles/typedoc.json new file mode 100644 index 00000000000..2392129bf3d --- /dev/null +++ b/bundles/particles/typedoc.json @@ -0,0 +1,16 @@ +{ + "projectDocuments": ["../markdown/**/*.md"], + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Particles Bundle", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} + diff --git a/bundles/pjs/CHANGELOG.md b/bundles/pjs/CHANGELOG.md index 40e257b32f7..8ff39e74f59 100644 --- a/bundles/pjs/CHANGELOG.md +++ b/bundles/pjs/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/pjs + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/pjs diff --git a/bundles/pjs/README.md b/bundles/pjs/README.md index 994c9e86d2a..a8543e26ad0 100644 --- a/bundles/pjs/README.md +++ b/bundles/pjs/README.md @@ -2,10 +2,15 @@ # tsParticles Particles.js Compatibility Package -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/particles.js/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/particles.js) [![npmjs](https://badge.fury.io/js/@tsparticles/particles.js.svg)](https://www.npmjs.com/package/@tsparticles/particles.js) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/particles.js)](https://www.npmjs.com/package/@tsparticles/particles.js) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/pjs/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/pjs) [![npmjs](https://badge.fury.io/js/@tsparticles/pjs.svg)](https://www.npmjs.com/package/@tsparticles/pjs) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/pjs)](https://www.npmjs.com/package/@tsparticles/pjs) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) [tsParticles](https://github.com/tsparticles/tsparticles) particles.js compatibility library. +> [!WARNING] +> This package is legacy compatibility glue for particles.js-style APIs. +> It is considered obsolete, and it may be removed in v5. +> Prefer direct `tsParticles` APIs for new code. + **Included Packages** - [tsparticles (and all its dependencies)](https://github.com/tsparticles/tsparticles/tree/main/bundles/full) @@ -35,26 +40,69 @@ bp --> ce bp --> p ``` -## Quick checklist +## Exposed API + +The package exports only one API from its main entrypoint: + +```ts +import { initPjs } from "@tsparticles/pjs"; +``` + +Signature: + +```ts +initPjs(engine: Engine): Promise +``` + +`initPjs` does not return compatibility objects directly. +It initializes compatibility and populates global objects. -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Call the package loader function(s) before `tsParticles.load(...)` -3. Apply the package options in your `tsParticles.load(...)` config +## Installation + +```bash +pnpm add @tsparticles/pjs @tsparticles/engine +``` + +## How it works + +Calling `initPjs(engine)` performs these steps: + +1. Checks runtime version compatibility. +2. Registers required plugins (`tsparticles` full bundle + responsive plugin). +3. Creates and exposes legacy globals: + - `globalThis.particlesJS` + - `globalThis.pJSDom` + - `globalThis.Particles` + +After initialization, you can use particles.js-compatible APIs. ## How to use it +### ESM / TypeScript + +```ts +import { tsParticles } from "@tsparticles/engine"; +import { initPjs } from "@tsparticles/pjs"; + +await initPjs(tsParticles); + +await globalThis.particlesJS("tsparticles", { + /* particles.js-style options */ +}); +``` + ### CDN / Vanilla JS / jQuery -The CDN/Vanilla version JS has two different files: +The CDN/Vanilla JS version has two files: - One is a bundle file with all the scripts included in a single file -- One is a file including just the `initPjs` function to load the tsParticles/particles.js compatibility +- One includes only `initPjs`, where dependencies must be loaded manually + +After loading the bundle, call `initPjs(tsParticles)` once, then use legacy globals. #### Bundle -Including the `tsparticles.pjs.bundle.min.js` file will also include the tsParticles engine exports. -You need to call initPjs function awaiting it like in the samples, after that the `particlesJS` instance, -or the `Particles` object are ready to be used in the same way. +Use the bundle when you want a single script with all required dependencies. #### Not Bundle @@ -63,7 +111,7 @@ specified in the **Included Packages** section. ### Usage -Once the scripts are loaded you can set up `particlesJS` like this: +Using `particlesJS` compatibility: ```javascript (async engine => { @@ -75,15 +123,11 @@ Once the scripts are loaded you can set up `particlesJS` like this: })(tsParticles); ``` -#### Options - -Here you can use ParticlesJS options. - -### Alternative Usage +Using `Particles` compatibility: ```javascript (async engine => { - initPjs(engine); + await initPjs(engine); Particles.init({ /* options */ @@ -91,6 +135,22 @@ Here you can use ParticlesJS options. })(tsParticles); ``` +## Compatibility globals (after `initPjs`) + +| Global | Description | Modern equivalent | +| ------------- | ---------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | +| `particlesJS` | particles.js-compatible loader function (plus `.load` and `.setOnClickHandler`) | `tsParticles.load`, `tsParticles.loadJSON`, `tsParticles.setOnClickHandler` | +| `pJSDom` | array of loaded containers | `tsParticles.dom` | +| `Particles` | `marcbruederlin/particles.js` style wrapper (`init`, `pauseAnimation`, `resumeAnimation`, `destroy`) | direct `tsParticles.load` + container methods | + +If you need explicit references in TS/JS code: + +```ts +const particlesJSCompat = globalThis.particlesJS; +const pJSDomCompat = globalThis.pJSDom; +const particlesCompat = globalThis.Particles; +``` + #### Particles Options (only for Particles.init) | Option | Type | Default | Description | @@ -119,11 +179,19 @@ Here you can use ParticlesJS options. | `resumeAnimation` | Continues the particle animation | | `destroy` | Destroys the plugin | +## Deprecation status + +- `particlesJS`, `pJSDom`, and `Particles` are deprecated compatibility APIs. +- This package is obsolete and maintained for legacy integration only. +- It may be removed in v5, so migration to direct `tsParticles` APIs is strongly recommended. + +See migration guide: [`markdown/pjsMigration.md`](../../markdown/pjsMigration.md) + ## Common pitfalls -- Calling `tsParticles.load(...)` before `package loader(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +- Calling legacy globals before awaiting `initPjs(...)` +- Expecting `initPjs` to return `particlesJS`/`Particles` directly +- Mixing new `tsParticles` and legacy particles.js options in one config object ## Related docs diff --git a/bundles/pjs/package.dist.json b/bundles/pjs/package.dist.json index a6ac724f085..a0290904dc0 100644 --- a/bundles/pjs/package.dist.json +++ b/bundles/pjs/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/pjs", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "Easily create highly customizable particle animations and use them as animated backgrounds for your website. Ready to use components available also for React, Vue.js (2.x and 3.x), Angular, Svelte, jQuery, Preact, Riot.js, Inferno.", "homepage": "https://particles.js.org", "repository": { @@ -98,9 +98,9 @@ "./package.json": "./package.json" }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12", - "@tsparticles/plugin-responsive": "4.0.0-beta.12", - "tsparticles": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/plugin-responsive": "4.0.0-beta.15", + "tsparticles": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/bundles/pjs/package.json b/bundles/pjs/package.json index 69675baa70d..b3ed2f3ebb5 100644 --- a/bundles/pjs/package.json +++ b/bundles/pjs/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/pjs", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "Easily create highly customizable particle animations and use them as animated backgrounds for your website. Ready to use components available also for React, Vue.js (2.x and 3.x), Angular, Svelte, jQuery, Preact, Riot.js, Inferno.", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -110,6 +110,8 @@ "tsparticles": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/plugin-interactivity": "workspace:*" }, "publishConfig": { diff --git a/bundles/pjs/rollup.config.js b/bundles/pjs/rollup.config.js new file mode 100644 index 00000000000..0b98048f0c9 --- /dev/null +++ b/bundles/pjs/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesBundle } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesBundle({ + moduleName: "pjs", + bundleName: "Particles.js", + version, + dir: __dirname, + progress: false, +}); diff --git a/bundles/pjs/src/browser.ts b/bundles/pjs/src/browser.ts new file mode 100644 index 00000000000..662bbe5ecca --- /dev/null +++ b/bundles/pjs/src/browser.ts @@ -0,0 +1,10 @@ +import { initPjs } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + initPjs?: typeof initPjs; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.initPjs = initPjs; + +export * from "./index.js"; diff --git a/bundles/pjs/src/bundle.ts b/bundles/pjs/src/bundle.ts index abc62c8ebec..949f0de81cb 100644 --- a/bundles/pjs/src/bundle.ts +++ b/bundles/pjs/src/bundle.ts @@ -1,2 +1,12 @@ +import { initPjs } from "./index.js"; + export * from "@tsparticles/engine"; export { initPjs } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + initPjs?: typeof initPjs; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; + +globalObject.initPjs = initPjs; diff --git a/bundles/pjs/src/index.lazy.ts b/bundles/pjs/src/index.lazy.ts new file mode 100644 index 00000000000..266a288373f --- /dev/null +++ b/bundles/pjs/src/index.lazy.ts @@ -0,0 +1,62 @@ +/** + * [[include:pjsMigration.md]] + */ +import { type Container, type Engine } from "@tsparticles/engine/lazy"; +import type { IParticlesJS } from "./VincentGarreau/IParticlesJS.js"; +import { MBParticles } from "./marcbruederlin/Particles.js"; +import { initParticlesJS } from "./VincentGarreau/particles.js"; + +declare const __VERSION__: string; + +declare global { + /** + * @deprecated this method is obsolete, please use the new `tsParticles.load` + * The particles.js compatibility object + */ + var Particles: typeof MBParticles, + /** + * @deprecated this method is obsolete, please use the new `tsParticles.dom` + * The particles.js compatibility dom array + */ + pJSDom: Container[], + /** + * @deprecated this method is obsolete, please use the new `tsParticles.load` + * The particles.js compatibility instance + */ + particlesJS: IParticlesJS; +} + +/** + * Initializes particles.js compatibility to the given engine + * @param engine - the engine that requires particles.js compatibility + * @returns the particles.js compatibility object + */ +const initPjs = async (engine: Engine): Promise => { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const [ + { loadFull }, + { loadResponsivePlugin }, + ] = await Promise.all([ + import("tsparticles"), + import("@tsparticles/plugin-responsive"), + ]); + + await loadFull(e); + + await loadResponsivePlugin(e); + }); + + // eslint-disable-next-line @typescript-eslint/no-deprecated + const { particlesJS, pJSDom } = initParticlesJS(engine); + + // eslint-disable-next-line @typescript-eslint/no-deprecated + globalThis.particlesJS = particlesJS; + // eslint-disable-next-line @typescript-eslint/no-deprecated + globalThis.pJSDom = pJSDom; + // eslint-disable-next-line @typescript-eslint/no-deprecated + globalThis.Particles = MBParticles; +}; + +export { initPjs }; diff --git a/bundles/pjs/src/index.ts b/bundles/pjs/src/index.ts index 2b992c52e88..97c352402bc 100644 --- a/bundles/pjs/src/index.ts +++ b/bundles/pjs/src/index.ts @@ -5,6 +5,8 @@ import { type Container, type Engine } from "@tsparticles/engine"; import type { IParticlesJS } from "./VincentGarreau/IParticlesJS.js"; import { MBParticles } from "./marcbruederlin/Particles.js"; import { initParticlesJS } from "./VincentGarreau/particles.js"; +import { loadFull } from "tsparticles"; +import { loadResponsivePlugin } from "@tsparticles/plugin-responsive"; declare const __VERSION__: string; @@ -35,17 +37,7 @@ const initPjs = async (engine: Engine): Promise => { engine.checkVersion(__VERSION__); await engine.pluginManager.register(async e => { - const [ - { loadFull }, - { loadResponsivePlugin }, - ] = await Promise.all([ - import("tsparticles"), - import("@tsparticles/plugin-responsive"), - ]); - - await loadFull(e); - - await loadResponsivePlugin(e); + await Promise.all([loadFull(e), loadResponsivePlugin(e)]); }); // eslint-disable-next-line @typescript-eslint/no-deprecated diff --git a/bundles/pjs/webpack.config.js b/bundles/pjs/webpack.config.js deleted file mode 100644 index 3f7a11452eb..00000000000 --- a/bundles/pjs/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesBundle } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesBundle({ - moduleName: "pjs", - bundleName: "Particles.js", - version, - dir: __dirname, - progress: false, -}); diff --git a/bundles/slim/CHANGELOG.md b/bundles/slim/CHANGELOG.md index cce1898b5a7..81265d82e51 100644 --- a/bundles/slim/CHANGELOG.md +++ b/bundles/slim/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/slim + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) ### Features diff --git a/bundles/slim/README.md b/bundles/slim/README.md index ab45b70e9d2..8eb4778dedd 100644 --- a/bundles/slim/README.md +++ b/bundles/slim/README.md @@ -15,6 +15,7 @@ a `@tsparticles/engine` instance. - [@tsparticles/interaction-external-bounce](https://github.com/tsparticles/tsparticles/tree/main/interactions/external/bounce) - [@tsparticles/interaction-external-bubble](https://github.com/tsparticles/tsparticles/tree/main/interactions/external/bubble) - [@tsparticles/interaction-external-connect](https://github.com/tsparticles/tsparticles/tree/main/interactions/external/connect) +- [@tsparticles/interaction-external-destroy](https://github.com/tsparticles/tsparticles/tree/main/interactions/external/destroy) - [@tsparticles/interaction-external-grab](https://github.com/tsparticles/tsparticles/tree/main/interactions/external/grab) - [@tsparticles/interaction-external-parallax](https://github.com/tsparticles/tsparticles/tree/main/interactions/external/parallax) - [@tsparticles/interaction-external-pause](https://github.com/tsparticles/tsparticles/tree/main/interactions/external/pause) @@ -56,6 +57,7 @@ subgraph i [Interactions] ieb[tsparticles/interaction-external-bounce] iebu[tsparticles/interaction-external-bubble] iec[tsparticles/interaction-external-connect] + ied[tsparticles/interaction-external-destroy] ieg[tsparticles/interaction-external-grab] iepa[tsparticles/interaction-external-parallax] iepau[tsparticles/interaction-external-pause] diff --git a/bundles/slim/package.dist.json b/bundles/slim/package.dist.json index e16a80f2d32..232c0640d3c 100644 --- a/bundles/slim/package.dist.json +++ b/bundles/slim/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/slim", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "Easily create highly customizable particle animations and use them as animated backgrounds for your website. Ready to use components available also for React, Vue.js (2.x and 3.x), Angular, Svelte, jQuery, Preact, Riot.js, Inferno.", "homepage": "https://particles.js.org", "repository": { @@ -95,37 +95,44 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "dependencies": { - "@tsparticles/basic": "4.0.0-beta.12", - "@tsparticles/engine": "4.0.0-beta.12", - "@tsparticles/interaction-external-attract": "4.0.0-beta.12", - "@tsparticles/interaction-external-bounce": "4.0.0-beta.12", - "@tsparticles/interaction-external-bubble": "4.0.0-beta.12", - "@tsparticles/interaction-external-connect": "4.0.0-beta.12", - "@tsparticles/interaction-external-destroy": "4.0.0-beta.12", - "@tsparticles/interaction-external-grab": "4.0.0-beta.12", - "@tsparticles/interaction-external-parallax": "4.0.0-beta.12", - "@tsparticles/interaction-external-pause": "4.0.0-beta.12", - "@tsparticles/interaction-external-push": "4.0.0-beta.12", - "@tsparticles/interaction-external-remove": "4.0.0-beta.12", - "@tsparticles/interaction-external-repulse": "4.0.0-beta.12", - "@tsparticles/interaction-external-slow": "4.0.0-beta.12", - "@tsparticles/interaction-particles-attract": "4.0.0-beta.12", - "@tsparticles/interaction-particles-collisions": "4.0.0-beta.12", - "@tsparticles/interaction-particles-links": "4.0.0-beta.12", - "@tsparticles/plugin-easing-quad": "4.0.0-beta.12", - "@tsparticles/plugin-interactivity": "4.0.0-beta.12", - "@tsparticles/shape-emoji": "4.0.0-beta.12", - "@tsparticles/shape-image": "4.0.0-beta.12", - "@tsparticles/shape-line": "4.0.0-beta.12", - "@tsparticles/shape-polygon": "4.0.0-beta.12", - "@tsparticles/shape-square": "4.0.0-beta.12", - "@tsparticles/shape-star": "4.0.0-beta.12", - "@tsparticles/updater-life": "4.0.0-beta.12", - "@tsparticles/updater-paint": "4.0.0-beta.12", - "@tsparticles/updater-rotate": "4.0.0-beta.12" + "@tsparticles/basic": "4.0.0-beta.15", + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/interaction-external-attract": "4.0.0-beta.15", + "@tsparticles/interaction-external-bounce": "4.0.0-beta.15", + "@tsparticles/interaction-external-bubble": "4.0.0-beta.15", + "@tsparticles/interaction-external-connect": "4.0.0-beta.15", + "@tsparticles/interaction-external-destroy": "4.0.0-beta.15", + "@tsparticles/interaction-external-grab": "4.0.0-beta.15", + "@tsparticles/interaction-external-parallax": "4.0.0-beta.15", + "@tsparticles/interaction-external-pause": "4.0.0-beta.15", + "@tsparticles/interaction-external-push": "4.0.0-beta.15", + "@tsparticles/interaction-external-remove": "4.0.0-beta.15", + "@tsparticles/interaction-external-repulse": "4.0.0-beta.15", + "@tsparticles/interaction-external-slow": "4.0.0-beta.15", + "@tsparticles/interaction-particles-attract": "4.0.0-beta.15", + "@tsparticles/interaction-particles-collisions": "4.0.0-beta.15", + "@tsparticles/interaction-particles-links": "4.0.0-beta.15", + "@tsparticles/plugin-easing-quad": "4.0.0-beta.15", + "@tsparticles/plugin-interactivity": "4.0.0-beta.15", + "@tsparticles/shape-emoji": "4.0.0-beta.15", + "@tsparticles/shape-image": "4.0.0-beta.15", + "@tsparticles/shape-line": "4.0.0-beta.15", + "@tsparticles/shape-polygon": "4.0.0-beta.15", + "@tsparticles/shape-square": "4.0.0-beta.15", + "@tsparticles/shape-star": "4.0.0-beta.15", + "@tsparticles/updater-life": "4.0.0-beta.15", + "@tsparticles/updater-paint": "4.0.0-beta.15", + "@tsparticles/updater-rotate": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/bundles/slim/package.json b/bundles/slim/package.json index e8fe618399a..2040a23e0ef 100644 --- a/bundles/slim/package.json +++ b/bundles/slim/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/slim", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "Easily create highly customizable particle animations and use them as animated backgrounds for your website. Ready to use components available also for React, Vue.js (2.x and 3.x), Angular, Svelte, jQuery, Preact, Riot.js, Inferno.", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -89,7 +89,10 @@ "files": [ "dist" ], - "sideEffects": false, + "sideEffects": [ + "dist/browser/browser.js", + "dist/browser/index.js" + ], "browser": "dist/browser/index.js", "main": "dist/cjs/index.js", "module": "dist/esm/index.js", @@ -102,6 +105,13 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "dependencies": { @@ -139,5 +149,9 @@ "directory": "dist", "linkDirectory": true }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/bundles/slim/rollup.config.js b/bundles/slim/rollup.config.js new file mode 100644 index 00000000000..fa6fe6121e7 --- /dev/null +++ b/bundles/slim/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesBundle } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesBundle({ + moduleName: "slim", + bundleName: "Slim", + version, + dir: __dirname, + progress: false, +}); diff --git a/bundles/slim/src/browser.ts b/bundles/slim/src/browser.ts new file mode 100644 index 00000000000..9bd8078026d --- /dev/null +++ b/bundles/slim/src/browser.ts @@ -0,0 +1,10 @@ +import { loadSlim } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadSlim?: typeof loadSlim; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadSlim = loadSlim; + +export * from "./index.js"; diff --git a/bundles/slim/src/bundle.ts b/bundles/slim/src/bundle.ts index a8a43969cc3..7d9c7378467 100644 --- a/bundles/slim/src/bundle.ts +++ b/bundles/slim/src/bundle.ts @@ -1,2 +1,12 @@ +import { loadSlim } from "./index.js"; + export * from "@tsparticles/engine"; export { loadSlim } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadSlim?: typeof loadSlim; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; + +globalObject.loadSlim = loadSlim; diff --git a/bundles/slim/src/index.lazy.ts b/bundles/slim/src/index.lazy.ts new file mode 100644 index 00000000000..f19c6d52ee3 --- /dev/null +++ b/bundles/slim/src/index.lazy.ts @@ -0,0 +1,127 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * Loads the slime bundle with all plugins needed for running the tsParticles Slim package. + * This function must be called to make tsParticles Slim work. + * This function is not mandatory, the plugins can be loaded manually, or using other plugin bundles. + * If this function is not called, the \@tsparticles/slim package/dependency can be safely removed. + * This function is called automatically using CDN bundle files. + * @param engine - the engine to use for loading all plugins + */ +export async function loadSlim(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + // Promise.all on dynamic imports returns a tuple of module namespaces. + // Provide an explicit tuple type to avoid unsafe `any` warnings from ESLint + // when destructuring the result. + const [ + { loadBasic }, + + { loadExternalParallaxInteraction }, + { loadExternalAttractInteraction }, + { loadExternalBounceInteraction }, + { loadExternalBubbleInteraction }, + { loadExternalConnectInteraction }, + { loadExternalDestroyInteraction }, + { loadExternalGrabInteraction }, + { loadExternalPauseInteraction }, + { loadExternalPushInteraction }, + { loadExternalRemoveInteraction }, + { loadExternalRepulseInteraction }, + { loadExternalSlowInteraction }, + { loadParticlesAttractInteraction }, + { loadParticlesCollisionsInteraction }, + { loadParticlesLinksInteraction }, + + { loadEasingQuadPlugin }, + { loadInteractivityPlugin }, + + { loadEmojiShape }, + { loadImageShape }, + { loadLineShape }, + { loadPolygonShape }, + { loadSquareShape }, + { loadStarShape }, + + { loadLifeUpdater }, + { loadPaintUpdater }, + { loadRotateUpdater }, + ] = await Promise.all([ + import("@tsparticles/basic/lazy"), + + import("@tsparticles/interaction-external-parallax/lazy"), + import("@tsparticles/interaction-external-attract/lazy"), + import("@tsparticles/interaction-external-bounce/lazy"), + import("@tsparticles/interaction-external-bubble/lazy"), + import("@tsparticles/interaction-external-connect/lazy"), + import("@tsparticles/interaction-external-destroy/lazy"), + import("@tsparticles/interaction-external-grab/lazy"), + import("@tsparticles/interaction-external-pause/lazy"), + import("@tsparticles/interaction-external-push/lazy"), + import("@tsparticles/interaction-external-remove/lazy"), + import("@tsparticles/interaction-external-repulse/lazy"), + import("@tsparticles/interaction-external-slow/lazy"), + import("@tsparticles/interaction-particles-attract/lazy"), + import("@tsparticles/interaction-particles-collisions/lazy"), + import("@tsparticles/interaction-particles-links/lazy"), + + import("@tsparticles/plugin-easing-quad/lazy"), + import("@tsparticles/plugin-interactivity/lazy"), + + import("@tsparticles/shape-emoji/lazy"), + import("@tsparticles/shape-image/lazy"), + import("@tsparticles/shape-line/lazy"), + import("@tsparticles/shape-polygon/lazy"), + import("@tsparticles/shape-square/lazy"), + import("@tsparticles/shape-star/lazy"), + + import("@tsparticles/updater-life/lazy"), + import("@tsparticles/updater-paint/lazy"), + import("@tsparticles/updater-rotate/lazy"), + ]), + loadInteractivityForSlim = async (e: Engine): Promise => { + await loadInteractivityPlugin(e); + + await Promise.all([ + loadExternalParallaxInteraction(e), + loadExternalAttractInteraction(e), + loadExternalBounceInteraction(e), + loadExternalBubbleInteraction(e), + loadExternalConnectInteraction(e), + loadExternalDestroyInteraction(e), + loadExternalGrabInteraction(e), + loadExternalPauseInteraction(e), + loadExternalPushInteraction(e), + loadExternalRemoveInteraction(e), + loadExternalRepulseInteraction(e), + loadExternalSlowInteraction(e), + + loadParticlesAttractInteraction(e), + loadParticlesCollisionsInteraction(e), + loadParticlesLinksInteraction(e), + ]); + }; + + await Promise.all([ + loadBasic(e), + + loadInteractivityForSlim(e), + + loadEasingQuadPlugin(e), + + loadEmojiShape(e), + loadImageShape(e), + loadLineShape(e), + loadPolygonShape(e), + loadSquareShape(e), + loadStarShape(e), + + loadLifeUpdater(e), + loadPaintUpdater(e), + loadRotateUpdater(e), + ]); + }); +} diff --git a/bundles/slim/src/index.ts b/bundles/slim/src/index.ts index 03e405fd8ee..bd9263b6d9f 100644 --- a/bundles/slim/src/index.ts +++ b/bundles/slim/src/index.ts @@ -1,4 +1,31 @@ import { type Engine } from "@tsparticles/engine"; +import { loadBasic } from "@tsparticles/basic"; +import { loadEasingQuadPlugin } from "@tsparticles/plugin-easing-quad"; +import { loadEmojiShape } from "@tsparticles/shape-emoji"; +import { loadExternalAttractInteraction } from "@tsparticles/interaction-external-attract"; +import { loadExternalBounceInteraction } from "@tsparticles/interaction-external-bounce"; +import { loadExternalBubbleInteraction } from "@tsparticles/interaction-external-bubble"; +import { loadExternalConnectInteraction } from "@tsparticles/interaction-external-connect"; +import { loadExternalDestroyInteraction } from "@tsparticles/interaction-external-destroy"; +import { loadExternalGrabInteraction } from "@tsparticles/interaction-external-grab"; +import { loadExternalParallaxInteraction } from "@tsparticles/interaction-external-parallax"; +import { loadExternalPauseInteraction } from "@tsparticles/interaction-external-pause"; +import { loadExternalPushInteraction } from "@tsparticles/interaction-external-push"; +import { loadExternalRemoveInteraction } from "@tsparticles/interaction-external-remove"; +import { loadExternalRepulseInteraction } from "@tsparticles/interaction-external-repulse"; +import { loadExternalSlowInteraction } from "@tsparticles/interaction-external-slow"; +import { loadImageShape } from "@tsparticles/shape-image"; +import { loadInteractivityPlugin } from "@tsparticles/plugin-interactivity"; +import { loadLifeUpdater } from "@tsparticles/updater-life"; +import { loadLineShape } from "@tsparticles/shape-line"; +import { loadPaintUpdater } from "@tsparticles/updater-paint"; +import { loadParticlesAttractInteraction } from "@tsparticles/interaction-particles-attract"; +import { loadParticlesCollisionsInteraction } from "@tsparticles/interaction-particles-collisions"; +import { loadParticlesLinksInteraction } from "@tsparticles/interaction-particles-links"; +import { loadPolygonShape } from "@tsparticles/shape-polygon"; +import { loadRotateUpdater } from "@tsparticles/updater-rotate"; +import { loadSquareShape } from "@tsparticles/shape-square"; +import { loadStarShape } from "@tsparticles/shape-star"; declare const __VERSION__: string; @@ -14,93 +41,28 @@ export async function loadSlim(engine: Engine): Promise { engine.checkVersion(__VERSION__); await engine.pluginManager.register(async e => { - const [ - { loadBasic }, - - { loadExternalParallaxInteraction }, - { loadExternalAttractInteraction }, - { loadExternalBounceInteraction }, - { loadExternalBubbleInteraction }, - { loadExternalConnectInteraction }, - { loadExternalDestroyInteraction }, - { loadExternalGrabInteraction }, - { loadExternalPauseInteraction }, - { loadExternalPushInteraction }, - { loadExternalRemoveInteraction }, - { loadExternalRepulseInteraction }, - { loadExternalSlowInteraction }, - { loadParticlesAttractInteraction }, - { loadParticlesCollisionsInteraction }, - { loadParticlesLinksInteraction }, - - { loadEasingQuadPlugin }, - { loadInteractivityPlugin }, - - { loadEmojiShape }, - { loadImageShape }, - { loadLineShape }, - { loadPolygonShape }, - { loadSquareShape }, - { loadStarShape }, - - { loadLifeUpdater }, - { loadPaintUpdater }, - { loadRotateUpdater }, - ] = await Promise.all([ - import("@tsparticles/basic"), - - import("@tsparticles/interaction-external-parallax"), - import("@tsparticles/interaction-external-attract"), - import("@tsparticles/interaction-external-bounce"), - import("@tsparticles/interaction-external-bubble"), - import("@tsparticles/interaction-external-connect"), - import("@tsparticles/interaction-external-destroy"), - import("@tsparticles/interaction-external-grab"), - import("@tsparticles/interaction-external-pause"), - import("@tsparticles/interaction-external-push"), - import("@tsparticles/interaction-external-remove"), - import("@tsparticles/interaction-external-repulse"), - import("@tsparticles/interaction-external-slow"), - import("@tsparticles/interaction-particles-attract"), - import("@tsparticles/interaction-particles-collisions"), - import("@tsparticles/interaction-particles-links"), - - import("@tsparticles/plugin-easing-quad"), - import("@tsparticles/plugin-interactivity"), - - import("@tsparticles/shape-emoji"), - import("@tsparticles/shape-image"), - import("@tsparticles/shape-line"), - import("@tsparticles/shape-polygon"), - import("@tsparticles/shape-square"), - import("@tsparticles/shape-star"), - - import("@tsparticles/updater-life"), - import("@tsparticles/updater-paint"), - import("@tsparticles/updater-rotate"), - ]), - loadInteractivityForSlim = async (e: Engine): Promise => { - await loadInteractivityPlugin(e); - - await Promise.all([ - loadExternalParallaxInteraction(e), - loadExternalAttractInteraction(e), - loadExternalBounceInteraction(e), - loadExternalBubbleInteraction(e), - loadExternalConnectInteraction(e), - loadExternalDestroyInteraction(e), - loadExternalGrabInteraction(e), - loadExternalPauseInteraction(e), - loadExternalPushInteraction(e), - loadExternalRemoveInteraction(e), - loadExternalRepulseInteraction(e), - loadExternalSlowInteraction(e), - - loadParticlesAttractInteraction(e), - loadParticlesCollisionsInteraction(e), - loadParticlesLinksInteraction(e), - ]); - }; + const loadInteractivityForSlim = async (e: Engine): Promise => { + await loadInteractivityPlugin(e); + + await Promise.all([ + loadExternalParallaxInteraction(e), + loadExternalAttractInteraction(e), + loadExternalBounceInteraction(e), + loadExternalBubbleInteraction(e), + loadExternalConnectInteraction(e), + loadExternalDestroyInteraction(e), + loadExternalGrabInteraction(e), + loadExternalPauseInteraction(e), + loadExternalPushInteraction(e), + loadExternalRemoveInteraction(e), + loadExternalRepulseInteraction(e), + loadExternalSlowInteraction(e), + + loadParticlesAttractInteraction(e), + loadParticlesCollisionsInteraction(e), + loadParticlesLinksInteraction(e), + ]); + }; await Promise.all([ loadBasic(e), diff --git a/bundles/slim/webpack.config.js b/bundles/slim/webpack.config.js deleted file mode 100644 index ec8076eef80..00000000000 --- a/bundles/slim/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesBundle } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesBundle({ - moduleName: "slim", - bundleName: "Slim", - version, - dir: __dirname, - progress: false, -}); diff --git a/cli/.gitignore b/cli/.gitignore new file mode 100644 index 00000000000..dcc50ae1b01 --- /dev/null +++ b/cli/.gitignore @@ -0,0 +1,14 @@ +dist +node_modules +.DS_Store +test-cli +.idea +.nyc_output +.eslintcache +*.tsbuildinfo +**/*.tsbuildinfo + + + +.nx/cache +.nx/workspace-data \ No newline at end of file diff --git a/cli/README.md b/cli/README.md new file mode 100644 index 00000000000..8aec2fb1fbd --- /dev/null +++ b/cli/README.md @@ -0,0 +1,193 @@ +[![banner](https://particles.js.org/images/banner2.png)](https://particles.js.org) + +# tsParticles CLI + +## Installation + +### NPM + +```bash +npm install -g @tsparticles/cli-build +``` + +### Yarn + +```bash +yarn global add @tsparticles/cli-build +``` + +### PNPM + +```bash +pnpm global add @tsparticles/cli-build +``` + +## Usage + +### Help + +```bash +npx @tsparticles/cli-build --help +``` + +or + +```bash +tsparticles-build --help +``` + +### Build + +```bash +npx @tsparticles/cli-build +``` + +or + +```bash +tsparticles-build +``` + +### Build options + +```bash +tsparticles-build +tsparticles-build --clean --lint --tsc +tsparticles-build --bundle-webpack +tsparticles-build --bundle-rollup +``` + +Inside this repository, the local plugin `@tsparticles/cli-nx-plugin` augments package projects under `cli/commands/*`, `cli/packages/*`, and `cli/utils/*` with canonical aliases like `clean`, `prettify`, `prettify:ci`, `tsc`, `bundle`, and `distfiles`. + +## Workspace commands (development) + +From the `cli` root: + +```bash +pnpm run show:projects +pnpm run build +pnpm run build:affected +pnpm run build:ci +pnpm run lint +pnpm run lint:ci +pnpm run test +pnpm run test:ci +``` + +### Focused Nx commands + +```bash +pnpm nx show project @tsparticles/cli-command-build --json +pnpm nx run @tsparticles/cli-command-build:build +pnpm nx run @tsparticles/cli-nx-plugin:build +``` + +### Create + +#### Bundle + +```bash +npx @tsparticles/cli-create bundle +``` + +or + +```bash +tsparticles-create bundle +``` + +#### Effect + +```bash +npx @tsparticles/cli-create effect +``` + +or + +```bash +tsparticles-create effect +``` + +#### Interaction + +```bash +npx @tsparticles/cli-create interaction +``` + +or + +```bash +tsparticles-create interaction +``` + +#### Palette + +```bash +npx @tsparticles/cli-create palette +``` + +or + +```bash +tsparticles-create palette +``` + +#### Path + +```bash +npx @tsparticles/cli-create path +``` + +or + +```bash +tsparticles-create path +``` + +#### Plugin + +```bash +npx @tsparticles/cli-create plugin +``` + +or + +```bash +tsparticles-create plugin +``` + +#### Preset + +```bash +npx @tsparticles/cli-create preset +``` + +or + +```bash +tsparticles-create preset +``` + +#### Shape + +```bash +npx @tsparticles/cli-create shape +``` + +or + +```bash +tsparticles-create shape +``` + +#### Updater + +```bash +npx @tsparticles/cli-create updater +``` + +or + +```bash +tsparticles-create updater +``` diff --git a/cli/commands/build-bundle-rollup/.dependency-cruiser.cjs b/cli/commands/build-bundle-rollup/.dependency-cruiser.cjs new file mode 100644 index 00000000000..bdff3287d06 --- /dev/null +++ b/cli/commands/build-bundle-rollup/.dependency-cruiser.cjs @@ -0,0 +1 @@ +module.exports = require("../build-bundle-webpack/.dependency-cruiser.cjs"); diff --git a/cli/commands/build-bundle-rollup/CHANGELOG.md b/cli/commands/build-bundle-rollup/CHANGELOG.md new file mode 100644 index 00000000000..321a99808d4 --- /dev/null +++ b/cli/commands/build-bundle-rollup/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/cli-command-build-bundle-rollup diff --git a/cli/commands/build-bundle-rollup/README.md b/cli/commands/build-bundle-rollup/README.md new file mode 100644 index 00000000000..cf6e29aefb2 --- /dev/null +++ b/cli/commands/build-bundle-rollup/README.md @@ -0,0 +1,13 @@ +[![banner](https://particles.js.org/images/banner2.png)](https://particles.js.org) + +# tsParticles CLI - Build Bundle Rollup + +Internal command package used by `@tsparticles/cli-command-build` to run Rollup-based bundle steps. + +## Usage + +From the CLI workspace root: + +```bash +pnpm nx run @tsparticles/cli-command-build-bundle-rollup:build +``` diff --git a/cli/commands/build-bundle-rollup/eslint.config.js b/cli/commands/build-bundle-rollup/eslint.config.js new file mode 100644 index 00000000000..afce92b1774 --- /dev/null +++ b/cli/commands/build-bundle-rollup/eslint.config.js @@ -0,0 +1,23 @@ +import path from "path"; +import {fileURLToPath} from "url"; +import {defineConfig} from "eslint/config"; +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default defineConfig([ + tsParticlesESLintConfig, + { + languageOptions: { + parserOptions: { + project: [path.join(__dirname, "src", "tsconfig.json")], + tsconfigRootDir: __dirname, + sourceType: "module" + } + }, + rules: { + "no-console": "off" + } + } +]); + diff --git a/cli/commands/build-bundle-rollup/package.json b/cli/commands/build-bundle-rollup/package.json new file mode 100644 index 00000000000..7a8b491ceff --- /dev/null +++ b/cli/commands/build-bundle-rollup/package.json @@ -0,0 +1,76 @@ +{ + "name": "@tsparticles/cli-command-build-bundle-rollup", + "version": "4.0.0-beta.15", + "license": "MIT", + "type": "module", + "publishConfig": { + "access": "public", + "tagVersionPrefix": "v" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "cli/commands/build-bundle-rollup" + }, + "prettier": "@tsparticles/prettier-config", + "scripts": { + "prettify:ci:src": "prettier --check ./src/*", + "prettify:ci:readme": "prettier --check ./README.md", + "prettify:src": "prettier --write ./src/*", + "prettify:readme": "prettier --write ./README.md", + "lint": "eslint src --ext .js,.jsx,.ts,.tsx --cache --cache-location .cache/eslint/.eslintcache --cache-strategy metadata --fix", + "lint:ci": "eslint src --ext .js,.jsx,.ts,.tsx --cache --cache-location .cache/eslint/.eslintcache --cache-strategy metadata", + "circular-deps": "depcruise src --include-only '^src' --validate --output-type err-long", + "compile": "pnpm run build:ts", + "compile:ci": "pnpm run build:ts", + "build:ts": "pnpm run build:ts:cjs", + "build:ts:cjs": "tsc -p src", + "build": "pnpm run clear:dist && pnpm run prettify:src && pnpm run lint && pnpm run compile && pnpm run circular-deps && pnpm run prettify:readme", + "build:ci": "pnpm run clear:dist && pnpm run prettify:ci:src && pnpm run lint:ci && pnpm run compile:ci && pnpm run prettify:ci:readme", + "clear:dist": "rimraf ./dist", + "prepack": "pnpm run build" + }, + "peerDependencies": { + "commander": "^14" + }, + "dependencies": { + "@swc/core": "^1.15.33", + "@tsparticles/depcruise-config": "workspace:^", + "@tsparticles/eslint-config": "workspace:^", + "@tsparticles/prettier-config": "workspace:^", + "@tsparticles/rollup-plugin": "workspace:^", + "@tsparticles/tsconfig": "workspace:^", + "dependency-cruiser": "^17.4.0", + "eslint": "^10.3.0", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-jsdoc": "^62.9.0", + "eslint-plugin-prettier": "^5.5.5", + "eslint-plugin-tsdoc": "^0.5.2", + "klaw": "^4.1.0", + "lookpath": "^1.2.3", + "path-scurry": "^2.0.2", + "prettier": "^3.8.3", + "prettier-plugin-multiline-arrays": "^4.1.8", + "prompts": "^2.4.2", + "rimraf": "^6.1.3", + "rollup": "^4.60.3", + "swc-loader": "^0.2.7", + "typescript": "^6.0.3", + "typescript-eslint": "^8.59.2" + }, + "devDependencies": { + "@types/estree": "^1.0.9", + "@types/klaw": "^3.0.7", + "@types/node": "^25.6.2", + "@types/prompts": "^2.4.9", + "browserslist": "^4.28.2", + "commander": "^14.0.3", + "copyfiles": "^2.4.1", + "cross-env": "^10.1.0", + "ts-node": "^10.9.2", + "vitest": "^4.1.5" + }, + "description": "tsParticles CLI", + "main": "dist/bundle-rollup.js", + "author": "Matteo Bruni " +} diff --git a/cli/commands/build-bundle-rollup/renovate.json b/cli/commands/build-bundle-rollup/renovate.json new file mode 100644 index 00000000000..6e382a18512 --- /dev/null +++ b/cli/commands/build-bundle-rollup/renovate.json @@ -0,0 +1,10 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "baseBranches": [ + "dev" + ], + "extends": [ + "config:base" + ] +} + diff --git a/cli/commands/build-bundle-rollup/src/bundle-rollup.ts b/cli/commands/build-bundle-rollup/src/bundle-rollup.ts new file mode 100644 index 00000000000..42d7cbbf166 --- /dev/null +++ b/cli/commands/build-bundle-rollup/src/bundle-rollup.ts @@ -0,0 +1,37 @@ +import { Command } from "commander"; +import { bundleRollup } from "./utils.js"; +import { existsSync } from "node:fs"; + +const bundleRollupCommand = new Command("bundle:rollup"); + +bundleRollupCommand.description("Bundle the tsParticles library using Rollup"); +bundleRollupCommand.option( + "--ci", + "Do all build steps for CI, no fixing files, only checking if they are formatted correctly, sets silent to true by default", + false, +); +bundleRollupCommand.option( + "-s, --silent ", + "Reduce the amount of output during the build, defaults to false, except when --ci is set", + false, +); + +bundleRollupCommand.action(async () => { + const opts = bundleRollupCommand.opts(), + ci = !!opts["ci"], + silentOpt = opts["silent"] as string | boolean, + silent = silentOpt === "false" ? false : !!silentOpt || ci, + basePath = process.cwd(); + + if (!existsSync(basePath)) { + throw new Error("Provided path does not exist"); + } + + if (!(await bundleRollup(basePath, silent))) { + throw new Error("Rollup bundling failed"); + } + + console.info("Rollup bundling completed successfully!"); +}); + +export { bundleRollup, bundleRollupCommand }; diff --git a/cli/commands/build-bundle-rollup/src/tsconfig.json b/cli/commands/build-bundle-rollup/src/tsconfig.json new file mode 100644 index 00000000000..a86b208cb31 --- /dev/null +++ b/cli/commands/build-bundle-rollup/src/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "rootDir": ".", + "outDir": "../dist" + }, + "references": [{ "path": "../" }], + "include": ["**/*"] +} diff --git a/cli/commands/build-bundle-rollup/src/utils.ts b/cli/commands/build-bundle-rollup/src/utils.ts new file mode 100644 index 00000000000..72c561dd6ab --- /dev/null +++ b/cli/commands/build-bundle-rollup/src/utils.ts @@ -0,0 +1,118 @@ +/* eslint-disable sort-imports */ +import { existsSync } from "node:fs"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; +import { pathToFileURL } from "node:url"; +import { loadParticlesBundle } from "@tsparticles/rollup-plugin"; +import { type OutputOptions, type RollupOptions, rollup } from "rollup"; + +const rollupConfigCandidates = ["rollup.config.mjs", "rollup.config.js", "rollup.config.cjs"] as const, + emptyCount = 0; + +/** + * @param configData - + * @returns - + */ +function normalizeRollupConfigs(configData: RollupOptions | RollupOptions[]): RollupOptions[] { + return Array.isArray(configData) ? configData : [configData]; +} + +/** + * @param basePath - + * @returns - + */ +async function loadRollupConfig(basePath: string): Promise { + for (const configName of rollupConfigCandidates) { + const configPath = path.join(basePath, configName); + + if (!existsSync(configPath)) { + continue; + } + + const importedConfig = (await import(pathToFileURL(configPath).href)) as { + default?: RollupOptions | RollupOptions[]; + }; + + if (importedConfig.default) { + return normalizeRollupConfigs(importedConfig.default); + } + } + + const packageJsonPath = path.join(basePath, "package.json"); + + if (!existsSync(packageJsonPath)) { + throw new Error("No rollup config file found and package.json is missing"); + } + + const packageJson = JSON.parse(await readFile(packageJsonPath, "utf8")) as { + version?: string; + }, + version = packageJson.version ?? "0.0.0"; + + return loadParticlesBundle({ + dir: basePath, + version, + }); +} + +/** + * @param bundleResult - + * @param output - + * @returns - + */ +async function writeRollupOutput( + bundleResult: Awaited>, + output: OutputOptions, +): Promise { + if (output.file || output.dir) { + await bundleResult.write(output); + + return; + } + + await bundleResult.generate(output); +} + +/** + * @param basePath - + * @param silent - + * @returns true if the bundle was created + */ +export async function bundleRollup(basePath: string, silent: boolean): Promise { + if (!silent) { + console.info("Rollup bundling started"); + } + + try { + const configs = await loadRollupConfig(basePath); + + for (const config of configs) { + const bundleResult = await rollup(config); + let outputs: OutputOptions[] = []; + + if (config.output) { + outputs = Array.isArray(config.output) ? config.output : [config.output]; + } + + if (outputs.length === emptyCount) { + throw new Error("Rollup config is missing output settings"); + } + + for (const output of outputs) { + await writeRollupOutput(bundleResult, output); + } + + await bundleResult.close(); + } + } catch (e) { + console.error(e); + + return false; + } + + if (!silent) { + console.info("Rollup bundling completed"); + } + + return true; +} diff --git a/cli/commands/build-bundle-rollup/tsconfig.json b/cli/commands/build-bundle-rollup/tsconfig.json new file mode 100644 index 00000000000..e0ed61e5a40 --- /dev/null +++ b/cli/commands/build-bundle-rollup/tsconfig.json @@ -0,0 +1,55 @@ +{ + "compilerOptions": { + "rootDir": ".", + "outDir": ".", + "resolveJsonModule": true, + "composite": true, + "target": "ESNext", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "lib": [ + "ESNext", + "ES2024", + "ES2023", + "ES2022", + "ES2021", + "ES2020", + "ES2019", + "ES2018", + "ES2017", + "ES2016", + "ES2015" + ], + "types": [ + "node", + "klaw", + "prompts", + "eslint" + ], + "strict": true, + "noImplicitAny": true, + "strictNullChecks": true, + "strictFunctionTypes": true, + "strictBindCallApply": true, + "strictPropertyInitialization": true, + "noImplicitThis": true, + "useUnknownInCatchVariables": true, + "alwaysStrict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "exactOptionalPropertyTypes": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedIndexedAccess": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "skipLibCheck": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "allowSyntheticDefaultImports": true + }, + "include": [ + "src/**/*" + ] +} + diff --git a/cli/commands/build-bundle-webpack/.dependency-cruiser.cjs b/cli/commands/build-bundle-webpack/.dependency-cruiser.cjs new file mode 100644 index 00000000000..93e0d55a39d --- /dev/null +++ b/cli/commands/build-bundle-webpack/.dependency-cruiser.cjs @@ -0,0 +1,382 @@ +/** @type {import('dependency-cruiser').IConfiguration} */ +module.exports = { + forbidden: [ + { + name: 'no-circular', + severity: 'warn', + comment: + "This dependency is part of a circular relationship. You might want to revise " + + "your solution (i.e. use dependency inversion, make sure the modules have a single responsibility) ", + from: {}, + to: { + circular: true + } + }, + { + name: 'no-orphans', + comment: + "This is an orphan module - it's likely not used (anymore?). Either use it or " + + "remove it. If it's logical this module is an orphan (i.e. it's a config file), " + + "add an exception for it in your dependency-cruiser configuration. By default " + + "this rule does not scrutinize dot-files (e.g. .eslintrc.js), TypeScript declaration " + + "files (.d.ts), tsconfig.json and some of the babel and webpack configs.", + severity: 'warn', + from: { + orphan: true, + pathNot: [ + '(^|/)[.][^/]+[.](?:js|cjs|mjs|ts|cts|mts|json)$', // dot files + '[.]d[.]ts$', // TypeScript declaration files + '(^|/)tsconfig[.]json$', // TypeScript config + '(^|/)(?:babel|webpack)[.]config[.](?:js|cjs|mjs|ts|cts|mts|json)$' // other configs + ] + }, + to: {}, + }, + { + name: 'no-deprecated-core', + comment: + 'A module depends on a node core module that has been deprecated. Find an alternative - these are ' + + "bound to exist - node doesn't deprecate lightly.", + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'core' + ], + path: [ + '^v8/tools/codemap$', + '^v8/tools/consarray$', + '^v8/tools/csvparser$', + '^v8/tools/logreader$', + '^v8/tools/profile_view$', + '^v8/tools/profile$', + '^v8/tools/SourceMap$', + '^v8/tools/splaytree$', + '^v8/tools/tickprocessor-driver$', + '^v8/tools/tickprocessor$', + '^node-inspect/lib/_inspect$', + '^node-inspect/lib/internal/inspect_client$', + '^node-inspect/lib/internal/inspect_repl$', + '^async_hooks$', + '^punycode$', + '^domain$', + '^constants$', + '^sys$', + '^_linklist$', + '^_stream_wrap$' + ], + } + }, + { + name: 'not-to-deprecated', + comment: + 'This module uses a (version of an) npm module that has been deprecated. Either upgrade to a later ' + + 'version of that module, or find an alternative. Deprecated modules are a security risk.', + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'deprecated' + ] + } + }, + { + name: 'no-non-package-json', + severity: 'error', + comment: + "This module depends on an npm package that isn't in the 'dependencies' section of your package.json. " + + "That's problematic as the package either (1) won't be available on live (2 - worse) will be " + + "available on live with an non-guaranteed version. Fix it by adding the package to the dependencies " + + "in your package.json.", + from: {}, + to: { + dependencyTypes: [ + 'npm-no-pkg', + 'npm-unknown' + ] + } + }, + { + name: 'not-to-unresolvable', + comment: + "This module depends on a module that cannot be found ('resolved to disk'). If it's an npm " + + 'module: add it to your package.json. In all other cases you likely already know what to do.', + severity: 'error', + from: {}, + to: { + couldNotResolve: true + } + }, + { + name: 'no-duplicate-dep-types', + comment: + "Likely this module depends on an external ('npm') package that occurs more than once " + + "in your package.json i.e. bot as a devDependencies and in dependencies. This will cause " + + "maintenance problems later on.", + severity: 'warn', + from: {}, + to: { + moreThanOneDependencyType: true, + // as it's common to use a devDependency for type-only imports: don't + // consider type-only dependencyTypes for this rule + dependencyTypesNot: ["type-only"] + } + }, + + // rules you might want to tweak for your specific situation: + { + name: 'not-to-test', + comment: + "This module depends on code within a folder that should only contain tests. As tests don't " + + "implement functionality this is odd. Either you're writing a test outside the test folder " + + "or there's something in the test folder that isn't a test.", + severity: 'error', + from: { + pathNot: '^(tests)' + }, + to: { + path: '^(tests)' + } + }, + { + name: 'not-to-spec', + comment: + 'This module depends on a spec (test) file. The responsibility of a spec file is to test code. ' + + "If there's something in a spec that's of use to other modules, it doesn't have that single " + + 'responsibility anymore. Factor it out into (e.g.) a separate utility/ helper or a mock.', + severity: 'error', + from: {}, + to: { + path: '[.](?:spec|test)[.](?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$' + } + }, + { + name: 'not-to-dev-dep', + severity: 'error', + comment: + "This module depends on an npm package from the 'devDependencies' section of your " + + 'package.json. It looks like something that ships to production, though. To prevent problems ' + + "with npm packages that aren't there on production declare it (only!) in the 'dependencies'" + + 'section of your package.json. If this module is development only - add it to the ' + + 'from.pathNot re of the not-to-dev-dep rule in the dependency-cruiser configuration', + from: { + path: '^(src)', + pathNot: '[.](?:spec|test)[.](?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$' + }, + to: { + dependencyTypes: [ + 'npm-dev', + ], + // type only dependencies are not a problem as they don't end up in the + // production code or are ignored by the runtime. + dependencyTypesNot: [ + 'type-only' + ], + pathNot: [ + 'node_modules/@types/' + ] + } + }, + { + name: 'optional-deps-used', + severity: 'info', + comment: + "This module depends on an npm package that is declared as an optional dependency " + + "in your package.json. As this makes sense in limited situations only, it's flagged here. " + + "If you use an optional dependency here by design - add an exception to your" + + "dependency-cruiser configuration.", + from: {}, + to: { + dependencyTypes: [ + 'npm-optional' + ] + } + }, + { + name: 'peer-deps-used', + comment: + "This module depends on an npm package that is declared as a peer dependency " + + "in your package.json. This makes sense if your package is e.g. a plugin, but in " + + "other cases - maybe not so much. If the use of a peer dependency is intentional " + + "add an exception to your dependency-cruiser configuration.", + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'npm-peer' + ] + } + } + ], + options: { + // Which modules not to follow further when encountered + doNotFollow: { + // path: an array of regular expressions in strings to match against + path: ['node_modules'] + }, + + // Which modules to exclude + // exclude : { + // // path: an array of regular expressions in strings to match against + // path: '', + // }, + + // Which modules to exclusively include (array of regular expressions in strings) + // dependency-cruiser will skip everything that doesn't match this pattern + // includeOnly : [''], + + // List of module systems to cruise. + // When left out dependency-cruiser will fall back to the list of _all_ + // module systems it knows of ('amd', 'cjs', 'es6', 'tsd']). It's the + // default because it's the safe option. It comes at a performance penalty, though + // As in practice only commonjs ('cjs') and ecmascript modules ('es6') + // are in wide use, you can limit the moduleSystems to those. + // moduleSystems: ['cjs', 'es6'], + + // false: don't look at JSDoc imports (the default) + // true: detect dependencies in JSDoc-style import statements. + // Implies parser: 'tsc', which a.o. means the typescript compiler will need + // to be installed in the same spot you run dependency-cruiser from. + // detectJSDocImports: true, + + // false: don't look at process.getBuiltinModule calls (the default) + // true: dependency-cruiser will detect calls to process.getBuiltinModule/ + // globalThis.process.getBuiltinModule as imports. + // detectProcessBuiltinModuleCalls: true, + + // prefix for links in html, d2, mermaid and dot/ svg output (e.g. 'https://github.com/you/yourrepo/blob/main/' + // to open it on your online repo or `vscode://file/${process.cwd()}/` to + // open it in visual studio code), + // prefix: `vscode://file/${process.cwd()}/`, + + // suffix for links in output. E.g. put .html here if you use it to link to + // your coverage reports. + // suffix: '.html', + + // false (the default): ignore dependencies that only exist before typescript-to-javascript compilation + // true: also detect dependencies that only exist before typescript-to-javascript compilation + // 'specify': for each dependency identify whether it only exists before compilation or also after + // tsPreCompilationDeps: false, + + // list of extensions to scan that aren't javascript or compile-to-javascript. + // Empty by default. Only put extensions in here that you want to take into + // account that are _not_ parsable. + // extraExtensionsToScan: ['.json', '.jpg', '.png', '.svg', '.webp'], + + // if true combines the package.jsons found from the module up to the base + // folder the cruise is initiated from. Useful for how (some) mono-repos + // manage dependencies & dependency definitions. + // combinedDependencies: false, + + // if true leave symlinks untouched, otherwise use the realpath + // preserveSymlinks: false, + + // TypeScript project file ('tsconfig.json') to use for + // (1) compilation and + // (2) resolution (e.g. with the paths property) + // + // The (optional) fileName attribute specifies which file to take (relative to + // dependency-cruiser's current working directory). When not provided + // defaults to './tsconfig.json'. + tsConfig: { + fileName: 'src/tsconfig.json' + }, + + // Webpack configuration to use to get resolve options from. + // + // The (optional) fileName attribute specifies which file to take (relative + // to dependency-cruiser's current working directory. When not provided defaults + // to './webpack.conf.js'. + // + // The (optional) 'env' and 'arguments' attributes contain the parameters + // to be passed if your webpack config is a function and takes them (see + // webpack documentation for details) + // webpackConfig: { + // fileName: 'webpack.config.js', + // env: {}, + // arguments: {} + // }, + + // Babel config ('.babelrc', '.babelrc.json', '.babelrc.json5', ...) to use + // for compilation + // babelConfig: { + // fileName: '.babelrc', + // }, + + // List of strings you have in use in addition to cjs/ es6 requires + // & imports to declare module dependencies. Use this e.g. if you've + // re-declared require, use a require-wrapper or use window.require as + // a hack. + // exoticRequireStrings: [], + + // options to pass on to enhanced-resolve, the package dependency-cruiser + // uses to resolve module references to disk. The values below should be + // suitable for most situations + // + // If you use webpack: you can also set these in webpack.conf.js. The set + // there will override the ones specified here. + enhancedResolveOptions: { + // What to consider as an 'exports' field in package.jsons + exportsFields: ['exports'], + + // List of conditions to check for in the exports field. + // Only works when the 'exportsFields' array is non-empty. + conditionNames: ['import', 'require', 'node', 'default', 'types'], + + // The extensions, by default are the same as the ones dependency-cruiser + // can access (run `npx depcruise --info` to see which ones that are in + // _your_ environment). If that list is larger than you need you can pass + // the extensions you actually use (e.g. ['.js', '.jsx']). This can speed + // up module resolution, which is the most expensive step. + // extensions: [".js", ".jsx", ".ts", ".tsx", ".d.ts"], + + // What to consider a 'main' field in package.json + mainFields: ["module", "main", "types", "typings"], + + // A list of alias fields in package.jsons + // See https://github.com/defunctzombie/package-browser-field-spec and + // the webpack [resolve.alias](https://webpack.js.org/configuration/resolve/#resolvealiasfields) + // documentation. + // Defaults to an empty array (= don't use alias fields). + // aliasFields: ['browser'], + }, + + // skipAnalysisNotInRules will make dependency-cruiser execute + // analysis strictly necessary for checking the rule set only. + // See https://github.com/sverweij/dependency-cruiser/blob/main/doc/options-reference.md#skipanalysisnotinrules + skipAnalysisNotInRules: true, + + reporterOptions: { + dot: { + // Pattern of modules to consolidate to. The default pattern in this configuration + // collapses everything in node_modules to one folder deep so you see + // the external modules, but not their innards. + collapsePattern: 'node_modules/(?:@[^/]+/[^/]+|[^/]+)', + + // Options to tweak the appearance of your graph. See + // https://github.com/sverweij/dependency-cruiser/blob/main/doc/options-reference.md#reporteroptions + // If you don't specify a theme dependency-cruiser falls back to a built-in one. + // theme: { + // graph: { + // // splines: 'ortho' - straight lines; slow on big graphs + // // splines: 'true' - bezier curves; fast but not as nice as ortho + // splines: 'true' + // }, + // }, + }, + archi: { + // Pattern of modules to consolidate to. + collapsePattern: '^(?:packages|src|lib(s?)|app(s?)|bin|test(s?)|spec(s?))/[^/]+|node_modules/(?:@[^/]+/[^/]+|[^/]+)', + + // Options to tweak the appearance of your graph. If you don't specify a + // theme for 'archi' dependency-cruiser will use the one specified in the + // dot section above and otherwise use the default one. + // theme: { }, + }, + text: { + highlightFocused: true + }, + } + } +}; +// generated: dependency-cruiser@17.3.7 on 2026-01-28T14:30:16.611Z diff --git a/cli/commands/build-bundle-webpack/CHANGELOG.md b/cli/commands/build-bundle-webpack/CHANGELOG.md new file mode 100644 index 00000000000..e97b36e83cf --- /dev/null +++ b/cli/commands/build-bundle-webpack/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/cli-command-build-bundle-webpack diff --git a/cli/commands/build-bundle-webpack/README.md b/cli/commands/build-bundle-webpack/README.md new file mode 100644 index 00000000000..52fc05e00c5 --- /dev/null +++ b/cli/commands/build-bundle-webpack/README.md @@ -0,0 +1,49 @@ +[![banner](https://particles.js.org/images/banner2.png)](https://particles.js.org) + +# tsParticles CLI + +## Installation + +### NPM + +```bash +npm install -g @tsparticles/cli-build +``` + +### Yarn + +```bash +yarn global add @tsparticles/cli-build +``` + +### PNPM + +```bash +pnpm global add @tsparticles/cli-build +``` + +## Usage + +### Help + +```bash +npx @tsparticles/cli-build --help +``` + +or + +```bash +tsparticles-build --help +``` + +### Build + +```bash +npx @tsparticles/cli-build +``` + +or + +```bash +tsparticles-build +``` diff --git a/cli/commands/build-bundle-webpack/eslint.config.js b/cli/commands/build-bundle-webpack/eslint.config.js new file mode 100644 index 00000000000..7dc85e779b6 --- /dev/null +++ b/cli/commands/build-bundle-webpack/eslint.config.js @@ -0,0 +1,22 @@ +import path from "path"; +import {fileURLToPath} from "url"; +import {defineConfig} from "eslint/config"; +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default defineConfig([ + tsParticlesESLintConfig, + { + languageOptions: { + parserOptions: { + project: [path.join(__dirname, "src", "tsconfig.json")], + tsconfigRootDir: __dirname, + sourceType: "module" + } + }, + rules: { + "no-console": "off" + } + } +]); diff --git a/cli/commands/build-bundle-webpack/package.json b/cli/commands/build-bundle-webpack/package.json new file mode 100644 index 00000000000..b1d1a93a31b --- /dev/null +++ b/cli/commands/build-bundle-webpack/package.json @@ -0,0 +1,80 @@ +{ + "name": "@tsparticles/cli-command-build-bundle-webpack", + "version": "4.0.0-beta.15", + "license": "MIT", + "type": "module", + "publishConfig": { + "access": "public", + "tagVersionPrefix": "v" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "cli/commands/build-bundle-webpack" + }, + "prettier": "@tsparticles/prettier-config", + "scripts": { + "prettify:ci:src": "prettier --check ./src/*", + "prettify:ci:readme": "prettier --check ./README.md", + "prettify:src": "prettier --write ./src/*", + "prettify:readme": "prettier --write ./README.md", + "lint": "eslint src --ext .js,.jsx,.ts,.tsx --cache --cache-location .cache/eslint/.eslintcache --cache-strategy metadata --fix", + "lint:ci": "eslint src --ext .js,.jsx,.ts,.tsx --cache --cache-location .cache/eslint/.eslintcache --cache-strategy metadata", + "circular-deps": "depcruise src --include-only '^src' --validate --output-type err-long", + "compile": "pnpm run build:ts", + "compile:ci": "pnpm run build:ts", + "build:ts": "pnpm run build:ts:cjs", + "build:ts:cjs": "tsc -p src", + "build": "pnpm run clear:dist && pnpm run prettify:src && pnpm run lint && pnpm run compile && pnpm run circular-deps && pnpm run prettify:readme", + "build:ci": "pnpm run clear:dist && pnpm run prettify:ci:src && pnpm run lint:ci && pnpm run compile:ci && pnpm run prettify:ci:readme", + "clear:dist": "rimraf ./dist", + "prepack": "pnpm run build" + }, + "peerDependencies": { + "commander": "^14" + }, + "dependencies": { + "@swc/core": "^1.15.33", + "@tsparticles/depcruise-config": "workspace:^", + "@tsparticles/eslint-config": "workspace:^", + "@tsparticles/prettier-config": "workspace:^", + "@tsparticles/tsconfig": "workspace:^", + "@tsparticles/webpack-plugin": "workspace:^", + "dependency-cruiser": "^17.4.0", + "eslint": "^10.3.0", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-jsdoc": "^62.9.0", + "eslint-plugin-prettier": "^5.5.5", + "eslint-plugin-tsdoc": "^0.5.2", + "klaw": "^4.1.0", + "lookpath": "^1.2.3", + "path-scurry": "^2.0.2", + "prettier": "^3.8.3", + "prettier-plugin-multiline-arrays": "^4.1.8", + "prompts": "^2.4.2", + "rimraf": "^6.1.3", + "swc-loader": "^0.2.7", + "typescript": "^6.0.3", + "typescript-eslint": "^8.59.2", + "webpack": "^5.106.2" + }, + "devDependencies": { + "@types/estree": "^1.0.9", + "@types/klaw": "^3.0.7", + "@types/node": "^25.6.2", + "@types/prompts": "^2.4.9", + "@types/webpack-env": "^1.18.8", + "browserslist": "^4.28.2", + "commander": "^14.0.3", + "copyfiles": "^2.4.1", + "cross-env": "^10.1.0", + "terser-webpack-plugin": "^5.5.0", + "ts-node": "^10.9.2", + "vitest": "^4.1.5", + "webpack-bundle-analyzer": "^5.3.0", + "webpack-cli": "^7.0.2" + }, + "description": "tsParticles CLI", + "main": "dist/bundle-webpack.js", + "author": "Matteo Bruni " +} diff --git a/cli/commands/build-bundle-webpack/renovate.json b/cli/commands/build-bundle-webpack/renovate.json new file mode 100644 index 00000000000..df30aa6db3e --- /dev/null +++ b/cli/commands/build-bundle-webpack/renovate.json @@ -0,0 +1,9 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "baseBranches": [ + "dev" + ], + "extends": [ + "config:base" + ] +} diff --git a/cli/commands/build-bundle-webpack/src/bundle-webpack.ts b/cli/commands/build-bundle-webpack/src/bundle-webpack.ts new file mode 100644 index 00000000000..b1923726116 --- /dev/null +++ b/cli/commands/build-bundle-webpack/src/bundle-webpack.ts @@ -0,0 +1,37 @@ +import { Command } from "commander"; +import { bundleWebpack } from "./utils.js"; +import { existsSync } from "node:fs"; + +const bundleWebpackCommand = new Command("bundle:webpack"); + +bundleWebpackCommand.description("Bundle the tsParticles library using Webpack"); +bundleWebpackCommand.option( + "--ci", + "Do all build steps for CI, no fixing files, only checking if they are formatted correctly, sets silent to true by default", + false, +); +bundleWebpackCommand.option( + "-s, --silent ", + "Reduce the amount of output during the build, defaults to false, except when --ci is set", + false, +); + +bundleWebpackCommand.action(async () => { + const opts = bundleWebpackCommand.opts(), + ci = !!opts["ci"], + silentOpt = opts["silent"] as string | boolean, + silent = silentOpt === "false" ? false : !!silentOpt || ci, + basePath = process.cwd(); + + if (!existsSync(basePath)) { + throw new Error("Provided path does not exist"); + } + + if (!(await bundleWebpack(basePath, silent))) { + throw new Error("Webpack bundling failed"); + } + + console.info("Webpack bundling completed successfully!"); +}); + +export { bundleWebpack, bundleWebpackCommand }; diff --git a/cli/commands/build-bundle-webpack/src/tsconfig.json b/cli/commands/build-bundle-webpack/src/tsconfig.json new file mode 100644 index 00000000000..a86b208cb31 --- /dev/null +++ b/cli/commands/build-bundle-webpack/src/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "rootDir": ".", + "outDir": "../dist" + }, + "references": [{ "path": "../" }], + "include": ["**/*"] +} diff --git a/cli/commands/build-bundle-webpack/src/utils.ts b/cli/commands/build-bundle-webpack/src/utils.ts new file mode 100644 index 00000000000..5ea6fedc309 --- /dev/null +++ b/cli/commands/build-bundle-webpack/src/utils.ts @@ -0,0 +1,65 @@ +import path from "node:path"; +import webpack from "webpack"; + +/** + * @param basePath - + * @param silent - + * @returns true if the bundle was created + */ +export async function bundleWebpack(basePath: string, silent: boolean): Promise { + if (!silent) { + console.info("Webpack bundling started"); + } + + let res: boolean; + + try { + const options = (await import(path.join(basePath, "webpack.config.js"))) as { default: webpack.Configuration }; + + res = await new Promise((resolve, reject) => { + webpack(options.default, (err, stats) => { + if (err) { + console.error(err.stack ?? err); + + reject(err); + + return; + } + + if (!stats) { + const err = new Error("No stats returned from webpack"); + + console.error(err); + + reject(err); + + return; + } + + const statsInfo = stats.toJson(); + + if (stats.hasErrors()) { + console.error(statsInfo.errors); + + reject(new Error(statsInfo.errors?.map(error => error.message).join("\n"))); + } + + if (stats.hasWarnings()) { + console.warn(statsInfo.warnings); + } + + resolve(true); + }); + }); + } catch (e) { + console.error(e); + + res = false; + } + + if (!silent) { + console.info("Webpack bundling completed"); + } + + return res; +} diff --git a/cli/commands/build-bundle-webpack/tsconfig.json b/cli/commands/build-bundle-webpack/tsconfig.json new file mode 100644 index 00000000000..714efda86b6 --- /dev/null +++ b/cli/commands/build-bundle-webpack/tsconfig.json @@ -0,0 +1,53 @@ +{ + "compilerOptions": { + "rootDir": ".", + "outDir": ".", + "resolveJsonModule": true, + "composite": true, + "target": "ESNext", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "lib": [ + "ESNext", + "ES2024", + "ES2023", + "ES2022", + "ES2021", + "ES2020", + "ES2019", + "ES2018", + "ES2017", + "ES2016", + "ES2015" + ], + "types": [ + "node", + "klaw", + "prompts", + "eslint" + ], + "strict": true, + "noImplicitAny": true, + "strictNullChecks": true, + "strictFunctionTypes": true, + "strictBindCallApply": true, + "strictPropertyInitialization": true, + "noImplicitThis": true, + "useUnknownInCatchVariables": true, + "alwaysStrict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "exactOptionalPropertyTypes": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedIndexedAccess": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "allowSyntheticDefaultImports": true + }, + "include": [ + "src/**/*" + ] +} diff --git a/cli/commands/build-circular-deps/.dependency-cruiser.cjs b/cli/commands/build-circular-deps/.dependency-cruiser.cjs new file mode 100644 index 00000000000..93e0d55a39d --- /dev/null +++ b/cli/commands/build-circular-deps/.dependency-cruiser.cjs @@ -0,0 +1,382 @@ +/** @type {import('dependency-cruiser').IConfiguration} */ +module.exports = { + forbidden: [ + { + name: 'no-circular', + severity: 'warn', + comment: + "This dependency is part of a circular relationship. You might want to revise " + + "your solution (i.e. use dependency inversion, make sure the modules have a single responsibility) ", + from: {}, + to: { + circular: true + } + }, + { + name: 'no-orphans', + comment: + "This is an orphan module - it's likely not used (anymore?). Either use it or " + + "remove it. If it's logical this module is an orphan (i.e. it's a config file), " + + "add an exception for it in your dependency-cruiser configuration. By default " + + "this rule does not scrutinize dot-files (e.g. .eslintrc.js), TypeScript declaration " + + "files (.d.ts), tsconfig.json and some of the babel and webpack configs.", + severity: 'warn', + from: { + orphan: true, + pathNot: [ + '(^|/)[.][^/]+[.](?:js|cjs|mjs|ts|cts|mts|json)$', // dot files + '[.]d[.]ts$', // TypeScript declaration files + '(^|/)tsconfig[.]json$', // TypeScript config + '(^|/)(?:babel|webpack)[.]config[.](?:js|cjs|mjs|ts|cts|mts|json)$' // other configs + ] + }, + to: {}, + }, + { + name: 'no-deprecated-core', + comment: + 'A module depends on a node core module that has been deprecated. Find an alternative - these are ' + + "bound to exist - node doesn't deprecate lightly.", + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'core' + ], + path: [ + '^v8/tools/codemap$', + '^v8/tools/consarray$', + '^v8/tools/csvparser$', + '^v8/tools/logreader$', + '^v8/tools/profile_view$', + '^v8/tools/profile$', + '^v8/tools/SourceMap$', + '^v8/tools/splaytree$', + '^v8/tools/tickprocessor-driver$', + '^v8/tools/tickprocessor$', + '^node-inspect/lib/_inspect$', + '^node-inspect/lib/internal/inspect_client$', + '^node-inspect/lib/internal/inspect_repl$', + '^async_hooks$', + '^punycode$', + '^domain$', + '^constants$', + '^sys$', + '^_linklist$', + '^_stream_wrap$' + ], + } + }, + { + name: 'not-to-deprecated', + comment: + 'This module uses a (version of an) npm module that has been deprecated. Either upgrade to a later ' + + 'version of that module, or find an alternative. Deprecated modules are a security risk.', + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'deprecated' + ] + } + }, + { + name: 'no-non-package-json', + severity: 'error', + comment: + "This module depends on an npm package that isn't in the 'dependencies' section of your package.json. " + + "That's problematic as the package either (1) won't be available on live (2 - worse) will be " + + "available on live with an non-guaranteed version. Fix it by adding the package to the dependencies " + + "in your package.json.", + from: {}, + to: { + dependencyTypes: [ + 'npm-no-pkg', + 'npm-unknown' + ] + } + }, + { + name: 'not-to-unresolvable', + comment: + "This module depends on a module that cannot be found ('resolved to disk'). If it's an npm " + + 'module: add it to your package.json. In all other cases you likely already know what to do.', + severity: 'error', + from: {}, + to: { + couldNotResolve: true + } + }, + { + name: 'no-duplicate-dep-types', + comment: + "Likely this module depends on an external ('npm') package that occurs more than once " + + "in your package.json i.e. bot as a devDependencies and in dependencies. This will cause " + + "maintenance problems later on.", + severity: 'warn', + from: {}, + to: { + moreThanOneDependencyType: true, + // as it's common to use a devDependency for type-only imports: don't + // consider type-only dependencyTypes for this rule + dependencyTypesNot: ["type-only"] + } + }, + + // rules you might want to tweak for your specific situation: + { + name: 'not-to-test', + comment: + "This module depends on code within a folder that should only contain tests. As tests don't " + + "implement functionality this is odd. Either you're writing a test outside the test folder " + + "or there's something in the test folder that isn't a test.", + severity: 'error', + from: { + pathNot: '^(tests)' + }, + to: { + path: '^(tests)' + } + }, + { + name: 'not-to-spec', + comment: + 'This module depends on a spec (test) file. The responsibility of a spec file is to test code. ' + + "If there's something in a spec that's of use to other modules, it doesn't have that single " + + 'responsibility anymore. Factor it out into (e.g.) a separate utility/ helper or a mock.', + severity: 'error', + from: {}, + to: { + path: '[.](?:spec|test)[.](?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$' + } + }, + { + name: 'not-to-dev-dep', + severity: 'error', + comment: + "This module depends on an npm package from the 'devDependencies' section of your " + + 'package.json. It looks like something that ships to production, though. To prevent problems ' + + "with npm packages that aren't there on production declare it (only!) in the 'dependencies'" + + 'section of your package.json. If this module is development only - add it to the ' + + 'from.pathNot re of the not-to-dev-dep rule in the dependency-cruiser configuration', + from: { + path: '^(src)', + pathNot: '[.](?:spec|test)[.](?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$' + }, + to: { + dependencyTypes: [ + 'npm-dev', + ], + // type only dependencies are not a problem as they don't end up in the + // production code or are ignored by the runtime. + dependencyTypesNot: [ + 'type-only' + ], + pathNot: [ + 'node_modules/@types/' + ] + } + }, + { + name: 'optional-deps-used', + severity: 'info', + comment: + "This module depends on an npm package that is declared as an optional dependency " + + "in your package.json. As this makes sense in limited situations only, it's flagged here. " + + "If you use an optional dependency here by design - add an exception to your" + + "dependency-cruiser configuration.", + from: {}, + to: { + dependencyTypes: [ + 'npm-optional' + ] + } + }, + { + name: 'peer-deps-used', + comment: + "This module depends on an npm package that is declared as a peer dependency " + + "in your package.json. This makes sense if your package is e.g. a plugin, but in " + + "other cases - maybe not so much. If the use of a peer dependency is intentional " + + "add an exception to your dependency-cruiser configuration.", + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'npm-peer' + ] + } + } + ], + options: { + // Which modules not to follow further when encountered + doNotFollow: { + // path: an array of regular expressions in strings to match against + path: ['node_modules'] + }, + + // Which modules to exclude + // exclude : { + // // path: an array of regular expressions in strings to match against + // path: '', + // }, + + // Which modules to exclusively include (array of regular expressions in strings) + // dependency-cruiser will skip everything that doesn't match this pattern + // includeOnly : [''], + + // List of module systems to cruise. + // When left out dependency-cruiser will fall back to the list of _all_ + // module systems it knows of ('amd', 'cjs', 'es6', 'tsd']). It's the + // default because it's the safe option. It comes at a performance penalty, though + // As in practice only commonjs ('cjs') and ecmascript modules ('es6') + // are in wide use, you can limit the moduleSystems to those. + // moduleSystems: ['cjs', 'es6'], + + // false: don't look at JSDoc imports (the default) + // true: detect dependencies in JSDoc-style import statements. + // Implies parser: 'tsc', which a.o. means the typescript compiler will need + // to be installed in the same spot you run dependency-cruiser from. + // detectJSDocImports: true, + + // false: don't look at process.getBuiltinModule calls (the default) + // true: dependency-cruiser will detect calls to process.getBuiltinModule/ + // globalThis.process.getBuiltinModule as imports. + // detectProcessBuiltinModuleCalls: true, + + // prefix for links in html, d2, mermaid and dot/ svg output (e.g. 'https://github.com/you/yourrepo/blob/main/' + // to open it on your online repo or `vscode://file/${process.cwd()}/` to + // open it in visual studio code), + // prefix: `vscode://file/${process.cwd()}/`, + + // suffix for links in output. E.g. put .html here if you use it to link to + // your coverage reports. + // suffix: '.html', + + // false (the default): ignore dependencies that only exist before typescript-to-javascript compilation + // true: also detect dependencies that only exist before typescript-to-javascript compilation + // 'specify': for each dependency identify whether it only exists before compilation or also after + // tsPreCompilationDeps: false, + + // list of extensions to scan that aren't javascript or compile-to-javascript. + // Empty by default. Only put extensions in here that you want to take into + // account that are _not_ parsable. + // extraExtensionsToScan: ['.json', '.jpg', '.png', '.svg', '.webp'], + + // if true combines the package.jsons found from the module up to the base + // folder the cruise is initiated from. Useful for how (some) mono-repos + // manage dependencies & dependency definitions. + // combinedDependencies: false, + + // if true leave symlinks untouched, otherwise use the realpath + // preserveSymlinks: false, + + // TypeScript project file ('tsconfig.json') to use for + // (1) compilation and + // (2) resolution (e.g. with the paths property) + // + // The (optional) fileName attribute specifies which file to take (relative to + // dependency-cruiser's current working directory). When not provided + // defaults to './tsconfig.json'. + tsConfig: { + fileName: 'src/tsconfig.json' + }, + + // Webpack configuration to use to get resolve options from. + // + // The (optional) fileName attribute specifies which file to take (relative + // to dependency-cruiser's current working directory. When not provided defaults + // to './webpack.conf.js'. + // + // The (optional) 'env' and 'arguments' attributes contain the parameters + // to be passed if your webpack config is a function and takes them (see + // webpack documentation for details) + // webpackConfig: { + // fileName: 'webpack.config.js', + // env: {}, + // arguments: {} + // }, + + // Babel config ('.babelrc', '.babelrc.json', '.babelrc.json5', ...) to use + // for compilation + // babelConfig: { + // fileName: '.babelrc', + // }, + + // List of strings you have in use in addition to cjs/ es6 requires + // & imports to declare module dependencies. Use this e.g. if you've + // re-declared require, use a require-wrapper or use window.require as + // a hack. + // exoticRequireStrings: [], + + // options to pass on to enhanced-resolve, the package dependency-cruiser + // uses to resolve module references to disk. The values below should be + // suitable for most situations + // + // If you use webpack: you can also set these in webpack.conf.js. The set + // there will override the ones specified here. + enhancedResolveOptions: { + // What to consider as an 'exports' field in package.jsons + exportsFields: ['exports'], + + // List of conditions to check for in the exports field. + // Only works when the 'exportsFields' array is non-empty. + conditionNames: ['import', 'require', 'node', 'default', 'types'], + + // The extensions, by default are the same as the ones dependency-cruiser + // can access (run `npx depcruise --info` to see which ones that are in + // _your_ environment). If that list is larger than you need you can pass + // the extensions you actually use (e.g. ['.js', '.jsx']). This can speed + // up module resolution, which is the most expensive step. + // extensions: [".js", ".jsx", ".ts", ".tsx", ".d.ts"], + + // What to consider a 'main' field in package.json + mainFields: ["module", "main", "types", "typings"], + + // A list of alias fields in package.jsons + // See https://github.com/defunctzombie/package-browser-field-spec and + // the webpack [resolve.alias](https://webpack.js.org/configuration/resolve/#resolvealiasfields) + // documentation. + // Defaults to an empty array (= don't use alias fields). + // aliasFields: ['browser'], + }, + + // skipAnalysisNotInRules will make dependency-cruiser execute + // analysis strictly necessary for checking the rule set only. + // See https://github.com/sverweij/dependency-cruiser/blob/main/doc/options-reference.md#skipanalysisnotinrules + skipAnalysisNotInRules: true, + + reporterOptions: { + dot: { + // Pattern of modules to consolidate to. The default pattern in this configuration + // collapses everything in node_modules to one folder deep so you see + // the external modules, but not their innards. + collapsePattern: 'node_modules/(?:@[^/]+/[^/]+|[^/]+)', + + // Options to tweak the appearance of your graph. See + // https://github.com/sverweij/dependency-cruiser/blob/main/doc/options-reference.md#reporteroptions + // If you don't specify a theme dependency-cruiser falls back to a built-in one. + // theme: { + // graph: { + // // splines: 'ortho' - straight lines; slow on big graphs + // // splines: 'true' - bezier curves; fast but not as nice as ortho + // splines: 'true' + // }, + // }, + }, + archi: { + // Pattern of modules to consolidate to. + collapsePattern: '^(?:packages|src|lib(s?)|app(s?)|bin|test(s?)|spec(s?))/[^/]+|node_modules/(?:@[^/]+/[^/]+|[^/]+)', + + // Options to tweak the appearance of your graph. If you don't specify a + // theme for 'archi' dependency-cruiser will use the one specified in the + // dot section above and otherwise use the default one. + // theme: { }, + }, + text: { + highlightFocused: true + }, + } + } +}; +// generated: dependency-cruiser@17.3.7 on 2026-01-28T14:30:16.611Z diff --git a/cli/commands/build-circular-deps/CHANGELOG.md b/cli/commands/build-circular-deps/CHANGELOG.md new file mode 100644 index 00000000000..e5b6e9d2dfc --- /dev/null +++ b/cli/commands/build-circular-deps/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/cli-command-build-circular-deps diff --git a/cli/commands/build-circular-deps/README.md b/cli/commands/build-circular-deps/README.md new file mode 100644 index 00000000000..52fc05e00c5 --- /dev/null +++ b/cli/commands/build-circular-deps/README.md @@ -0,0 +1,49 @@ +[![banner](https://particles.js.org/images/banner2.png)](https://particles.js.org) + +# tsParticles CLI + +## Installation + +### NPM + +```bash +npm install -g @tsparticles/cli-build +``` + +### Yarn + +```bash +yarn global add @tsparticles/cli-build +``` + +### PNPM + +```bash +pnpm global add @tsparticles/cli-build +``` + +## Usage + +### Help + +```bash +npx @tsparticles/cli-build --help +``` + +or + +```bash +tsparticles-build --help +``` + +### Build + +```bash +npx @tsparticles/cli-build +``` + +or + +```bash +tsparticles-build +``` diff --git a/cli/commands/build-circular-deps/eslint.config.js b/cli/commands/build-circular-deps/eslint.config.js new file mode 100644 index 00000000000..7dc85e779b6 --- /dev/null +++ b/cli/commands/build-circular-deps/eslint.config.js @@ -0,0 +1,22 @@ +import path from "path"; +import {fileURLToPath} from "url"; +import {defineConfig} from "eslint/config"; +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default defineConfig([ + tsParticlesESLintConfig, + { + languageOptions: { + parserOptions: { + project: [path.join(__dirname, "src", "tsconfig.json")], + tsconfigRootDir: __dirname, + sourceType: "module" + } + }, + rules: { + "no-console": "off" + } + } +]); diff --git a/cli/commands/build-circular-deps/package.json b/cli/commands/build-circular-deps/package.json new file mode 100644 index 00000000000..11b9312fd05 --- /dev/null +++ b/cli/commands/build-circular-deps/package.json @@ -0,0 +1,73 @@ +{ + "name": "@tsparticles/cli-command-build-circular-deps", + "version": "4.0.0-beta.15", + "license": "MIT", + "type": "module", + "publishConfig": { + "access": "public", + "tagVersionPrefix": "v" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "cli/commands/build-circular-deps" + }, + "prettier": "@tsparticles/prettier-config", + "scripts": { + "prettify:ci:src": "prettier --check ./src/*", + "prettify:ci:readme": "prettier --check ./README.md", + "prettify:src": "prettier --write ./src/*", + "prettify:readme": "prettier --write ./README.md", + "lint": "eslint src --ext .js,.jsx,.ts,.tsx --cache --cache-location .cache/eslint/.eslintcache --cache-strategy metadata --fix", + "lint:ci": "eslint src --ext .js,.jsx,.ts,.tsx --cache --cache-location .cache/eslint/.eslintcache --cache-strategy metadata", + "circular-deps": "depcruise src --include-only '^src' --validate --output-type err-long", + "compile": "pnpm run build:ts", + "compile:ci": "pnpm run build:ts", + "build:ts": "pnpm run build:ts:cjs", + "build:ts:cjs": "tsc -p src", + "build": "pnpm run clear:dist && pnpm run prettify:src && pnpm run lint && pnpm run compile && pnpm run circular-deps && pnpm run prettify:readme", + "build:ci": "pnpm run clear:dist && pnpm run prettify:ci:src && pnpm run lint:ci && pnpm run compile:ci && pnpm run prettify:ci:readme", + "clear:dist": "rimraf ./dist", + "prepack": "pnpm run build" + }, + "peerDependencies": { + "commander": "^14" + }, + "dependencies": { + "@swc/core": "^1.15.33", + "@tsparticles/depcruise-config": "workspace:^", + "@tsparticles/eslint-config": "workspace:^", + "@tsparticles/prettier-config": "workspace:^", + "@tsparticles/tsconfig": "workspace:^", + "dependency-cruiser": "^17.4.0", + "eslint": "^10.3.0", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-jsdoc": "^62.9.0", + "eslint-plugin-prettier": "^5.5.5", + "eslint-plugin-tsdoc": "^0.5.2", + "klaw": "^4.1.0", + "lookpath": "^1.2.3", + "path-scurry": "^2.0.2", + "prettier": "^3.8.3", + "prettier-plugin-multiline-arrays": "^4.1.8", + "prompts": "^2.4.2", + "rimraf": "^6.1.3", + "swc-loader": "^0.2.7", + "typescript": "^6.0.3", + "typescript-eslint": "^8.59.2" + }, + "devDependencies": { + "@types/estree": "^1.0.9", + "@types/klaw": "^3.0.7", + "@types/node": "^25.6.2", + "@types/prompts": "^2.4.9", + "browserslist": "^4.28.2", + "commander": "^14.0.3", + "copyfiles": "^2.4.1", + "cross-env": "^10.1.0", + "ts-node": "^10.9.2" + }, + "description": "tsParticles CLI", + "main": "dist/circular-deps.js", + "author": "Matteo Bruni " +} diff --git a/cli/commands/build-circular-deps/renovate.json b/cli/commands/build-circular-deps/renovate.json new file mode 100644 index 00000000000..df30aa6db3e --- /dev/null +++ b/cli/commands/build-circular-deps/renovate.json @@ -0,0 +1,9 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "baseBranches": [ + "dev" + ], + "extends": [ + "config:base" + ] +} diff --git a/cli/commands/build-circular-deps/src/circular-deps.ts b/cli/commands/build-circular-deps/src/circular-deps.ts new file mode 100644 index 00000000000..5f031093314 --- /dev/null +++ b/cli/commands/build-circular-deps/src/circular-deps.ts @@ -0,0 +1,37 @@ +import { Command } from "commander"; +import { circularDeps } from "./utils.js"; +import { existsSync } from "node:fs"; + +const circularDepsCommand = new Command("circular-deps"); + +circularDepsCommand.description("Checks the circular dependencies in the tsParticles library"); +circularDepsCommand.option( + "--ci", + "Do all build steps for CI, no fixing files, only checking if they are formatted correctly, sets silent to true by default", + false, +); +circularDepsCommand.option( + "-s, --silent ", + "Reduce the amount of output during the build, defaults to false, except when --ci is set", + false, +); + +circularDepsCommand.action(async () => { + const opts = circularDepsCommand.opts(), + ci = !!opts["ci"], + silentOpt = opts["silent"] as string | boolean, + silent = silentOpt === "false" ? false : !!silentOpt || ci, + basePath = process.cwd(); + + if (!existsSync(basePath)) { + throw new Error("Provided path does not exist"); + } + + if (!(await circularDeps(basePath, silent))) { + throw new Error("Bundle failed"); + } + + console.info("Circular deps check finished successfully!"); +}); + +export { circularDeps, circularDepsCommand }; diff --git a/cli/commands/build-circular-deps/src/tsconfig.json b/cli/commands/build-circular-deps/src/tsconfig.json new file mode 100644 index 00000000000..a86b208cb31 --- /dev/null +++ b/cli/commands/build-circular-deps/src/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "rootDir": ".", + "outDir": "../dist" + }, + "references": [{ "path": "../" }], + "include": ["**/*"] +} diff --git a/cli/commands/build-circular-deps/src/utils.ts b/cli/commands/build-circular-deps/src/utils.ts new file mode 100644 index 00000000000..2d5dd2b504f --- /dev/null +++ b/cli/commands/build-circular-deps/src/utils.ts @@ -0,0 +1,54 @@ +import { type ICruiseResult, type IViolation, cruise } from "dependency-cruiser"; +import { loadDependencyCruiserConfig } from "@tsparticles/depcruise-config"; +import path from "node:path"; + +const ZERO_VIOLATIONS = 0; + +/** + * Checks for circular dependencies using dependency-cruiser + * @param basePath - The project root path + * @param silent - If true, reduces the amount of output during the check + * @returns true if no circular dependencies are found, false otherwise + */ +export async function circularDeps(basePath: string, silent: boolean): Promise { + const srcPath = path.join(basePath, "src"), + cruiseOptions = await loadDependencyCruiserConfig(basePath); + + try { + const result = await cruise([srcPath], { + ...cruiseOptions.options, + ruleSet: { + forbidden: cruiseOptions.forbidden ?? [], + }, + }), + cruiseResult = result as Partial, + violations: IViolation[] = cruiseResult.summary?.violations ?? [], + circularViolations = violations.filter(violation => violation.rule.name === "no-circular"); + + if (circularViolations.length > ZERO_VIOLATIONS) { + console.error("⚠️ Circular dependencies found!"); + + for (const violation of circularViolations) { + const cyclePath = (violation.cycle ?? []).map(step => (step as { name: string }).name); + + console.error(`Cycle detected: ${cyclePath.join(" -> ")}`); + } + + return false; + } + + if (!silent) { + console.info("✅ No circular dependencies found."); + } + + return true; + } catch (e) { + console.error("❌ Error while checking dependencies:", e); + + return false; + } finally { + if (!silent) { + console.info("Finished checking circular dependencies."); + } + } +} diff --git a/cli/commands/build-circular-deps/tsconfig.json b/cli/commands/build-circular-deps/tsconfig.json new file mode 100644 index 00000000000..714efda86b6 --- /dev/null +++ b/cli/commands/build-circular-deps/tsconfig.json @@ -0,0 +1,53 @@ +{ + "compilerOptions": { + "rootDir": ".", + "outDir": ".", + "resolveJsonModule": true, + "composite": true, + "target": "ESNext", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "lib": [ + "ESNext", + "ES2024", + "ES2023", + "ES2022", + "ES2021", + "ES2020", + "ES2019", + "ES2018", + "ES2017", + "ES2016", + "ES2015" + ], + "types": [ + "node", + "klaw", + "prompts", + "eslint" + ], + "strict": true, + "noImplicitAny": true, + "strictNullChecks": true, + "strictFunctionTypes": true, + "strictBindCallApply": true, + "strictPropertyInitialization": true, + "noImplicitThis": true, + "useUnknownInCatchVariables": true, + "alwaysStrict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "exactOptionalPropertyTypes": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedIndexedAccess": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "allowSyntheticDefaultImports": true + }, + "include": [ + "src/**/*" + ] +} diff --git a/cli/commands/build-clear/.dependency-cruiser.cjs b/cli/commands/build-clear/.dependency-cruiser.cjs new file mode 100644 index 00000000000..93e0d55a39d --- /dev/null +++ b/cli/commands/build-clear/.dependency-cruiser.cjs @@ -0,0 +1,382 @@ +/** @type {import('dependency-cruiser').IConfiguration} */ +module.exports = { + forbidden: [ + { + name: 'no-circular', + severity: 'warn', + comment: + "This dependency is part of a circular relationship. You might want to revise " + + "your solution (i.e. use dependency inversion, make sure the modules have a single responsibility) ", + from: {}, + to: { + circular: true + } + }, + { + name: 'no-orphans', + comment: + "This is an orphan module - it's likely not used (anymore?). Either use it or " + + "remove it. If it's logical this module is an orphan (i.e. it's a config file), " + + "add an exception for it in your dependency-cruiser configuration. By default " + + "this rule does not scrutinize dot-files (e.g. .eslintrc.js), TypeScript declaration " + + "files (.d.ts), tsconfig.json and some of the babel and webpack configs.", + severity: 'warn', + from: { + orphan: true, + pathNot: [ + '(^|/)[.][^/]+[.](?:js|cjs|mjs|ts|cts|mts|json)$', // dot files + '[.]d[.]ts$', // TypeScript declaration files + '(^|/)tsconfig[.]json$', // TypeScript config + '(^|/)(?:babel|webpack)[.]config[.](?:js|cjs|mjs|ts|cts|mts|json)$' // other configs + ] + }, + to: {}, + }, + { + name: 'no-deprecated-core', + comment: + 'A module depends on a node core module that has been deprecated. Find an alternative - these are ' + + "bound to exist - node doesn't deprecate lightly.", + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'core' + ], + path: [ + '^v8/tools/codemap$', + '^v8/tools/consarray$', + '^v8/tools/csvparser$', + '^v8/tools/logreader$', + '^v8/tools/profile_view$', + '^v8/tools/profile$', + '^v8/tools/SourceMap$', + '^v8/tools/splaytree$', + '^v8/tools/tickprocessor-driver$', + '^v8/tools/tickprocessor$', + '^node-inspect/lib/_inspect$', + '^node-inspect/lib/internal/inspect_client$', + '^node-inspect/lib/internal/inspect_repl$', + '^async_hooks$', + '^punycode$', + '^domain$', + '^constants$', + '^sys$', + '^_linklist$', + '^_stream_wrap$' + ], + } + }, + { + name: 'not-to-deprecated', + comment: + 'This module uses a (version of an) npm module that has been deprecated. Either upgrade to a later ' + + 'version of that module, or find an alternative. Deprecated modules are a security risk.', + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'deprecated' + ] + } + }, + { + name: 'no-non-package-json', + severity: 'error', + comment: + "This module depends on an npm package that isn't in the 'dependencies' section of your package.json. " + + "That's problematic as the package either (1) won't be available on live (2 - worse) will be " + + "available on live with an non-guaranteed version. Fix it by adding the package to the dependencies " + + "in your package.json.", + from: {}, + to: { + dependencyTypes: [ + 'npm-no-pkg', + 'npm-unknown' + ] + } + }, + { + name: 'not-to-unresolvable', + comment: + "This module depends on a module that cannot be found ('resolved to disk'). If it's an npm " + + 'module: add it to your package.json. In all other cases you likely already know what to do.', + severity: 'error', + from: {}, + to: { + couldNotResolve: true + } + }, + { + name: 'no-duplicate-dep-types', + comment: + "Likely this module depends on an external ('npm') package that occurs more than once " + + "in your package.json i.e. bot as a devDependencies and in dependencies. This will cause " + + "maintenance problems later on.", + severity: 'warn', + from: {}, + to: { + moreThanOneDependencyType: true, + // as it's common to use a devDependency for type-only imports: don't + // consider type-only dependencyTypes for this rule + dependencyTypesNot: ["type-only"] + } + }, + + // rules you might want to tweak for your specific situation: + { + name: 'not-to-test', + comment: + "This module depends on code within a folder that should only contain tests. As tests don't " + + "implement functionality this is odd. Either you're writing a test outside the test folder " + + "or there's something in the test folder that isn't a test.", + severity: 'error', + from: { + pathNot: '^(tests)' + }, + to: { + path: '^(tests)' + } + }, + { + name: 'not-to-spec', + comment: + 'This module depends on a spec (test) file. The responsibility of a spec file is to test code. ' + + "If there's something in a spec that's of use to other modules, it doesn't have that single " + + 'responsibility anymore. Factor it out into (e.g.) a separate utility/ helper or a mock.', + severity: 'error', + from: {}, + to: { + path: '[.](?:spec|test)[.](?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$' + } + }, + { + name: 'not-to-dev-dep', + severity: 'error', + comment: + "This module depends on an npm package from the 'devDependencies' section of your " + + 'package.json. It looks like something that ships to production, though. To prevent problems ' + + "with npm packages that aren't there on production declare it (only!) in the 'dependencies'" + + 'section of your package.json. If this module is development only - add it to the ' + + 'from.pathNot re of the not-to-dev-dep rule in the dependency-cruiser configuration', + from: { + path: '^(src)', + pathNot: '[.](?:spec|test)[.](?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$' + }, + to: { + dependencyTypes: [ + 'npm-dev', + ], + // type only dependencies are not a problem as they don't end up in the + // production code or are ignored by the runtime. + dependencyTypesNot: [ + 'type-only' + ], + pathNot: [ + 'node_modules/@types/' + ] + } + }, + { + name: 'optional-deps-used', + severity: 'info', + comment: + "This module depends on an npm package that is declared as an optional dependency " + + "in your package.json. As this makes sense in limited situations only, it's flagged here. " + + "If you use an optional dependency here by design - add an exception to your" + + "dependency-cruiser configuration.", + from: {}, + to: { + dependencyTypes: [ + 'npm-optional' + ] + } + }, + { + name: 'peer-deps-used', + comment: + "This module depends on an npm package that is declared as a peer dependency " + + "in your package.json. This makes sense if your package is e.g. a plugin, but in " + + "other cases - maybe not so much. If the use of a peer dependency is intentional " + + "add an exception to your dependency-cruiser configuration.", + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'npm-peer' + ] + } + } + ], + options: { + // Which modules not to follow further when encountered + doNotFollow: { + // path: an array of regular expressions in strings to match against + path: ['node_modules'] + }, + + // Which modules to exclude + // exclude : { + // // path: an array of regular expressions in strings to match against + // path: '', + // }, + + // Which modules to exclusively include (array of regular expressions in strings) + // dependency-cruiser will skip everything that doesn't match this pattern + // includeOnly : [''], + + // List of module systems to cruise. + // When left out dependency-cruiser will fall back to the list of _all_ + // module systems it knows of ('amd', 'cjs', 'es6', 'tsd']). It's the + // default because it's the safe option. It comes at a performance penalty, though + // As in practice only commonjs ('cjs') and ecmascript modules ('es6') + // are in wide use, you can limit the moduleSystems to those. + // moduleSystems: ['cjs', 'es6'], + + // false: don't look at JSDoc imports (the default) + // true: detect dependencies in JSDoc-style import statements. + // Implies parser: 'tsc', which a.o. means the typescript compiler will need + // to be installed in the same spot you run dependency-cruiser from. + // detectJSDocImports: true, + + // false: don't look at process.getBuiltinModule calls (the default) + // true: dependency-cruiser will detect calls to process.getBuiltinModule/ + // globalThis.process.getBuiltinModule as imports. + // detectProcessBuiltinModuleCalls: true, + + // prefix for links in html, d2, mermaid and dot/ svg output (e.g. 'https://github.com/you/yourrepo/blob/main/' + // to open it on your online repo or `vscode://file/${process.cwd()}/` to + // open it in visual studio code), + // prefix: `vscode://file/${process.cwd()}/`, + + // suffix for links in output. E.g. put .html here if you use it to link to + // your coverage reports. + // suffix: '.html', + + // false (the default): ignore dependencies that only exist before typescript-to-javascript compilation + // true: also detect dependencies that only exist before typescript-to-javascript compilation + // 'specify': for each dependency identify whether it only exists before compilation or also after + // tsPreCompilationDeps: false, + + // list of extensions to scan that aren't javascript or compile-to-javascript. + // Empty by default. Only put extensions in here that you want to take into + // account that are _not_ parsable. + // extraExtensionsToScan: ['.json', '.jpg', '.png', '.svg', '.webp'], + + // if true combines the package.jsons found from the module up to the base + // folder the cruise is initiated from. Useful for how (some) mono-repos + // manage dependencies & dependency definitions. + // combinedDependencies: false, + + // if true leave symlinks untouched, otherwise use the realpath + // preserveSymlinks: false, + + // TypeScript project file ('tsconfig.json') to use for + // (1) compilation and + // (2) resolution (e.g. with the paths property) + // + // The (optional) fileName attribute specifies which file to take (relative to + // dependency-cruiser's current working directory). When not provided + // defaults to './tsconfig.json'. + tsConfig: { + fileName: 'src/tsconfig.json' + }, + + // Webpack configuration to use to get resolve options from. + // + // The (optional) fileName attribute specifies which file to take (relative + // to dependency-cruiser's current working directory. When not provided defaults + // to './webpack.conf.js'. + // + // The (optional) 'env' and 'arguments' attributes contain the parameters + // to be passed if your webpack config is a function and takes them (see + // webpack documentation for details) + // webpackConfig: { + // fileName: 'webpack.config.js', + // env: {}, + // arguments: {} + // }, + + // Babel config ('.babelrc', '.babelrc.json', '.babelrc.json5', ...) to use + // for compilation + // babelConfig: { + // fileName: '.babelrc', + // }, + + // List of strings you have in use in addition to cjs/ es6 requires + // & imports to declare module dependencies. Use this e.g. if you've + // re-declared require, use a require-wrapper or use window.require as + // a hack. + // exoticRequireStrings: [], + + // options to pass on to enhanced-resolve, the package dependency-cruiser + // uses to resolve module references to disk. The values below should be + // suitable for most situations + // + // If you use webpack: you can also set these in webpack.conf.js. The set + // there will override the ones specified here. + enhancedResolveOptions: { + // What to consider as an 'exports' field in package.jsons + exportsFields: ['exports'], + + // List of conditions to check for in the exports field. + // Only works when the 'exportsFields' array is non-empty. + conditionNames: ['import', 'require', 'node', 'default', 'types'], + + // The extensions, by default are the same as the ones dependency-cruiser + // can access (run `npx depcruise --info` to see which ones that are in + // _your_ environment). If that list is larger than you need you can pass + // the extensions you actually use (e.g. ['.js', '.jsx']). This can speed + // up module resolution, which is the most expensive step. + // extensions: [".js", ".jsx", ".ts", ".tsx", ".d.ts"], + + // What to consider a 'main' field in package.json + mainFields: ["module", "main", "types", "typings"], + + // A list of alias fields in package.jsons + // See https://github.com/defunctzombie/package-browser-field-spec and + // the webpack [resolve.alias](https://webpack.js.org/configuration/resolve/#resolvealiasfields) + // documentation. + // Defaults to an empty array (= don't use alias fields). + // aliasFields: ['browser'], + }, + + // skipAnalysisNotInRules will make dependency-cruiser execute + // analysis strictly necessary for checking the rule set only. + // See https://github.com/sverweij/dependency-cruiser/blob/main/doc/options-reference.md#skipanalysisnotinrules + skipAnalysisNotInRules: true, + + reporterOptions: { + dot: { + // Pattern of modules to consolidate to. The default pattern in this configuration + // collapses everything in node_modules to one folder deep so you see + // the external modules, but not their innards. + collapsePattern: 'node_modules/(?:@[^/]+/[^/]+|[^/]+)', + + // Options to tweak the appearance of your graph. See + // https://github.com/sverweij/dependency-cruiser/blob/main/doc/options-reference.md#reporteroptions + // If you don't specify a theme dependency-cruiser falls back to a built-in one. + // theme: { + // graph: { + // // splines: 'ortho' - straight lines; slow on big graphs + // // splines: 'true' - bezier curves; fast but not as nice as ortho + // splines: 'true' + // }, + // }, + }, + archi: { + // Pattern of modules to consolidate to. + collapsePattern: '^(?:packages|src|lib(s?)|app(s?)|bin|test(s?)|spec(s?))/[^/]+|node_modules/(?:@[^/]+/[^/]+|[^/]+)', + + // Options to tweak the appearance of your graph. If you don't specify a + // theme for 'archi' dependency-cruiser will use the one specified in the + // dot section above and otherwise use the default one. + // theme: { }, + }, + text: { + highlightFocused: true + }, + } + } +}; +// generated: dependency-cruiser@17.3.7 on 2026-01-28T14:30:16.611Z diff --git a/cli/commands/build-clear/CHANGELOG.md b/cli/commands/build-clear/CHANGELOG.md new file mode 100644 index 00000000000..31f82da8f61 --- /dev/null +++ b/cli/commands/build-clear/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/cli-command-build-clear diff --git a/cli/commands/build-clear/README.md b/cli/commands/build-clear/README.md new file mode 100644 index 00000000000..52fc05e00c5 --- /dev/null +++ b/cli/commands/build-clear/README.md @@ -0,0 +1,49 @@ +[![banner](https://particles.js.org/images/banner2.png)](https://particles.js.org) + +# tsParticles CLI + +## Installation + +### NPM + +```bash +npm install -g @tsparticles/cli-build +``` + +### Yarn + +```bash +yarn global add @tsparticles/cli-build +``` + +### PNPM + +```bash +pnpm global add @tsparticles/cli-build +``` + +## Usage + +### Help + +```bash +npx @tsparticles/cli-build --help +``` + +or + +```bash +tsparticles-build --help +``` + +### Build + +```bash +npx @tsparticles/cli-build +``` + +or + +```bash +tsparticles-build +``` diff --git a/cli/commands/build-clear/eslint.config.js b/cli/commands/build-clear/eslint.config.js new file mode 100644 index 00000000000..7dc85e779b6 --- /dev/null +++ b/cli/commands/build-clear/eslint.config.js @@ -0,0 +1,22 @@ +import path from "path"; +import {fileURLToPath} from "url"; +import {defineConfig} from "eslint/config"; +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default defineConfig([ + tsParticlesESLintConfig, + { + languageOptions: { + parserOptions: { + project: [path.join(__dirname, "src", "tsconfig.json")], + tsconfigRootDir: __dirname, + sourceType: "module" + } + }, + rules: { + "no-console": "off" + } + } +]); diff --git a/cli/commands/build-clear/package.json b/cli/commands/build-clear/package.json new file mode 100644 index 00000000000..9d1bbef9859 --- /dev/null +++ b/cli/commands/build-clear/package.json @@ -0,0 +1,73 @@ +{ + "name": "@tsparticles/cli-command-build-clear", + "version": "4.0.0-beta.15", + "license": "MIT", + "type": "module", + "publishConfig": { + "access": "public", + "tagVersionPrefix": "v" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "cli/commands/build-clear" + }, + "prettier": "@tsparticles/prettier-config", + "scripts": { + "prettify:ci:src": "prettier --check ./src/*", + "prettify:ci:readme": "prettier --check ./README.md", + "prettify:src": "prettier --write ./src/*", + "prettify:readme": "prettier --write ./README.md", + "lint": "eslint src --ext .js,.jsx,.ts,.tsx --cache --cache-location .cache/eslint/.eslintcache --cache-strategy metadata --fix", + "lint:ci": "eslint src --ext .js,.jsx,.ts,.tsx --cache --cache-location .cache/eslint/.eslintcache --cache-strategy metadata", + "circular-deps": "depcruise src --include-only '^src' --validate --output-type err-long", + "compile": "pnpm run build:ts", + "compile:ci": "pnpm run build:ts", + "build:ts": "pnpm run build:ts:cjs", + "build:ts:cjs": "tsc -p src", + "build": "pnpm run clear:dist && pnpm run prettify:src && pnpm run lint && pnpm run compile && pnpm run circular-deps && pnpm run prettify:readme", + "build:ci": "pnpm run clear:dist && pnpm run prettify:ci:src && pnpm run lint:ci && pnpm run compile:ci && pnpm run prettify:ci:readme", + "clear:dist": "rimraf ./dist", + "prepack": "pnpm run build" + }, + "peerDependencies": { + "commander": "^14" + }, + "dependencies": { + "@swc/core": "^1.15.33", + "@tsparticles/depcruise-config": "workspace:^", + "@tsparticles/eslint-config": "workspace:^", + "@tsparticles/prettier-config": "workspace:^", + "@tsparticles/tsconfig": "workspace:^", + "dependency-cruiser": "^17.4.0", + "eslint": "^10.3.0", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-jsdoc": "^62.9.0", + "eslint-plugin-prettier": "^5.5.5", + "eslint-plugin-tsdoc": "^0.5.2", + "klaw": "^4.1.0", + "lookpath": "^1.2.3", + "path-scurry": "^2.0.2", + "prettier": "^3.8.3", + "prettier-plugin-multiline-arrays": "^4.1.8", + "prompts": "^2.4.2", + "rimraf": "^6.1.3", + "swc-loader": "^0.2.7", + "typescript": "^6.0.3", + "typescript-eslint": "^8.59.2" + }, + "devDependencies": { + "@types/estree": "^1.0.9", + "@types/klaw": "^3.0.7", + "@types/node": "^25.6.2", + "@types/prompts": "^2.4.9", + "browserslist": "^4.28.2", + "commander": "^14.0.3", + "copyfiles": "^2.4.1", + "cross-env": "^10.1.0", + "ts-node": "^10.9.2" + }, + "description": "tsParticles CLI", + "main": "dist/clear.js", + "author": "Matteo Bruni " +} diff --git a/cli/commands/build-clear/renovate.json b/cli/commands/build-clear/renovate.json new file mode 100644 index 00000000000..df30aa6db3e --- /dev/null +++ b/cli/commands/build-clear/renovate.json @@ -0,0 +1,9 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "baseBranches": [ + "dev" + ], + "extends": [ + "config:base" + ] +} diff --git a/cli/commands/build-clear/src/clear.ts b/cli/commands/build-clear/src/clear.ts new file mode 100644 index 00000000000..e95b452f211 --- /dev/null +++ b/cli/commands/build-clear/src/clear.ts @@ -0,0 +1,37 @@ +import { Command } from "commander"; +import { clearDist } from "./utils.js"; +import { existsSync } from "node:fs"; + +const clearCommand = new Command("clear"); + +clearCommand.description("Clear the build of tsParticles library"); +clearCommand.option( + "--ci", + "Do all build steps for CI, no fixing files, only checking if they are formatted correctly, sets silent to true by default", + false, +); +clearCommand.option( + "-s, --silent ", + "Reduce the amount of output during the build, defaults to false, except when --ci is set", + false, +); + +clearCommand.action(async () => { + const opts = clearCommand.opts(), + ci = !!opts["ci"], + silentOpt = opts["silent"] as string | boolean, + silent = silentOpt === "false" ? false : !!silentOpt || ci, + basePath = process.cwd(); + + if (!existsSync(basePath)) { + throw new Error("Provided path does not exist"); + } + + if (!(await clearDist(basePath, silent))) { + throw new Error("Bundle failed"); + } + + console.log("Cleared files successfully!"); +}); + +export { clearDist, clearCommand }; diff --git a/cli/commands/build-clear/src/tsconfig.json b/cli/commands/build-clear/src/tsconfig.json new file mode 100644 index 00000000000..a86b208cb31 --- /dev/null +++ b/cli/commands/build-clear/src/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "rootDir": ".", + "outDir": "../dist" + }, + "references": [{ "path": "../" }], + "include": ["**/*"] +} diff --git a/cli/commands/build-clear/src/utils.ts b/cli/commands/build-clear/src/utils.ts new file mode 100644 index 00000000000..ba5a4275d61 --- /dev/null +++ b/cli/commands/build-clear/src/utils.ts @@ -0,0 +1,31 @@ +import path from "node:path"; +import { rimraf } from "rimraf"; + +/** + * @param basePath - + * @param silent - + * @returns true if the dist folder was cleared + */ +export async function clearDist(basePath: string, silent: boolean): Promise { + if (!silent) { + console.log("Clearing dist folder"); + } + + let res: boolean; + + try { + await rimraf(path.join(basePath, "dist")); + + res = true; + } catch (e) { + console.error(e); + + res = false; + } + + if (!silent) { + console.log("Clearing dist folder done"); + } + + return res; +} diff --git a/cli/commands/build-clear/tsconfig.json b/cli/commands/build-clear/tsconfig.json new file mode 100644 index 00000000000..714efda86b6 --- /dev/null +++ b/cli/commands/build-clear/tsconfig.json @@ -0,0 +1,53 @@ +{ + "compilerOptions": { + "rootDir": ".", + "outDir": ".", + "resolveJsonModule": true, + "composite": true, + "target": "ESNext", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "lib": [ + "ESNext", + "ES2024", + "ES2023", + "ES2022", + "ES2021", + "ES2020", + "ES2019", + "ES2018", + "ES2017", + "ES2016", + "ES2015" + ], + "types": [ + "node", + "klaw", + "prompts", + "eslint" + ], + "strict": true, + "noImplicitAny": true, + "strictNullChecks": true, + "strictFunctionTypes": true, + "strictBindCallApply": true, + "strictPropertyInitialization": true, + "noImplicitThis": true, + "useUnknownInCatchVariables": true, + "alwaysStrict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "exactOptionalPropertyTypes": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedIndexedAccess": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "allowSyntheticDefaultImports": true + }, + "include": [ + "src/**/*" + ] +} diff --git a/cli/commands/build-distfiles/.dependency-cruiser.cjs b/cli/commands/build-distfiles/.dependency-cruiser.cjs new file mode 100644 index 00000000000..93e0d55a39d --- /dev/null +++ b/cli/commands/build-distfiles/.dependency-cruiser.cjs @@ -0,0 +1,382 @@ +/** @type {import('dependency-cruiser').IConfiguration} */ +module.exports = { + forbidden: [ + { + name: 'no-circular', + severity: 'warn', + comment: + "This dependency is part of a circular relationship. You might want to revise " + + "your solution (i.e. use dependency inversion, make sure the modules have a single responsibility) ", + from: {}, + to: { + circular: true + } + }, + { + name: 'no-orphans', + comment: + "This is an orphan module - it's likely not used (anymore?). Either use it or " + + "remove it. If it's logical this module is an orphan (i.e. it's a config file), " + + "add an exception for it in your dependency-cruiser configuration. By default " + + "this rule does not scrutinize dot-files (e.g. .eslintrc.js), TypeScript declaration " + + "files (.d.ts), tsconfig.json and some of the babel and webpack configs.", + severity: 'warn', + from: { + orphan: true, + pathNot: [ + '(^|/)[.][^/]+[.](?:js|cjs|mjs|ts|cts|mts|json)$', // dot files + '[.]d[.]ts$', // TypeScript declaration files + '(^|/)tsconfig[.]json$', // TypeScript config + '(^|/)(?:babel|webpack)[.]config[.](?:js|cjs|mjs|ts|cts|mts|json)$' // other configs + ] + }, + to: {}, + }, + { + name: 'no-deprecated-core', + comment: + 'A module depends on a node core module that has been deprecated. Find an alternative - these are ' + + "bound to exist - node doesn't deprecate lightly.", + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'core' + ], + path: [ + '^v8/tools/codemap$', + '^v8/tools/consarray$', + '^v8/tools/csvparser$', + '^v8/tools/logreader$', + '^v8/tools/profile_view$', + '^v8/tools/profile$', + '^v8/tools/SourceMap$', + '^v8/tools/splaytree$', + '^v8/tools/tickprocessor-driver$', + '^v8/tools/tickprocessor$', + '^node-inspect/lib/_inspect$', + '^node-inspect/lib/internal/inspect_client$', + '^node-inspect/lib/internal/inspect_repl$', + '^async_hooks$', + '^punycode$', + '^domain$', + '^constants$', + '^sys$', + '^_linklist$', + '^_stream_wrap$' + ], + } + }, + { + name: 'not-to-deprecated', + comment: + 'This module uses a (version of an) npm module that has been deprecated. Either upgrade to a later ' + + 'version of that module, or find an alternative. Deprecated modules are a security risk.', + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'deprecated' + ] + } + }, + { + name: 'no-non-package-json', + severity: 'error', + comment: + "This module depends on an npm package that isn't in the 'dependencies' section of your package.json. " + + "That's problematic as the package either (1) won't be available on live (2 - worse) will be " + + "available on live with an non-guaranteed version. Fix it by adding the package to the dependencies " + + "in your package.json.", + from: {}, + to: { + dependencyTypes: [ + 'npm-no-pkg', + 'npm-unknown' + ] + } + }, + { + name: 'not-to-unresolvable', + comment: + "This module depends on a module that cannot be found ('resolved to disk'). If it's an npm " + + 'module: add it to your package.json. In all other cases you likely already know what to do.', + severity: 'error', + from: {}, + to: { + couldNotResolve: true + } + }, + { + name: 'no-duplicate-dep-types', + comment: + "Likely this module depends on an external ('npm') package that occurs more than once " + + "in your package.json i.e. bot as a devDependencies and in dependencies. This will cause " + + "maintenance problems later on.", + severity: 'warn', + from: {}, + to: { + moreThanOneDependencyType: true, + // as it's common to use a devDependency for type-only imports: don't + // consider type-only dependencyTypes for this rule + dependencyTypesNot: ["type-only"] + } + }, + + // rules you might want to tweak for your specific situation: + { + name: 'not-to-test', + comment: + "This module depends on code within a folder that should only contain tests. As tests don't " + + "implement functionality this is odd. Either you're writing a test outside the test folder " + + "or there's something in the test folder that isn't a test.", + severity: 'error', + from: { + pathNot: '^(tests)' + }, + to: { + path: '^(tests)' + } + }, + { + name: 'not-to-spec', + comment: + 'This module depends on a spec (test) file. The responsibility of a spec file is to test code. ' + + "If there's something in a spec that's of use to other modules, it doesn't have that single " + + 'responsibility anymore. Factor it out into (e.g.) a separate utility/ helper or a mock.', + severity: 'error', + from: {}, + to: { + path: '[.](?:spec|test)[.](?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$' + } + }, + { + name: 'not-to-dev-dep', + severity: 'error', + comment: + "This module depends on an npm package from the 'devDependencies' section of your " + + 'package.json. It looks like something that ships to production, though. To prevent problems ' + + "with npm packages that aren't there on production declare it (only!) in the 'dependencies'" + + 'section of your package.json. If this module is development only - add it to the ' + + 'from.pathNot re of the not-to-dev-dep rule in the dependency-cruiser configuration', + from: { + path: '^(src)', + pathNot: '[.](?:spec|test)[.](?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$' + }, + to: { + dependencyTypes: [ + 'npm-dev', + ], + // type only dependencies are not a problem as they don't end up in the + // production code or are ignored by the runtime. + dependencyTypesNot: [ + 'type-only' + ], + pathNot: [ + 'node_modules/@types/' + ] + } + }, + { + name: 'optional-deps-used', + severity: 'info', + comment: + "This module depends on an npm package that is declared as an optional dependency " + + "in your package.json. As this makes sense in limited situations only, it's flagged here. " + + "If you use an optional dependency here by design - add an exception to your" + + "dependency-cruiser configuration.", + from: {}, + to: { + dependencyTypes: [ + 'npm-optional' + ] + } + }, + { + name: 'peer-deps-used', + comment: + "This module depends on an npm package that is declared as a peer dependency " + + "in your package.json. This makes sense if your package is e.g. a plugin, but in " + + "other cases - maybe not so much. If the use of a peer dependency is intentional " + + "add an exception to your dependency-cruiser configuration.", + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'npm-peer' + ] + } + } + ], + options: { + // Which modules not to follow further when encountered + doNotFollow: { + // path: an array of regular expressions in strings to match against + path: ['node_modules'] + }, + + // Which modules to exclude + // exclude : { + // // path: an array of regular expressions in strings to match against + // path: '', + // }, + + // Which modules to exclusively include (array of regular expressions in strings) + // dependency-cruiser will skip everything that doesn't match this pattern + // includeOnly : [''], + + // List of module systems to cruise. + // When left out dependency-cruiser will fall back to the list of _all_ + // module systems it knows of ('amd', 'cjs', 'es6', 'tsd']). It's the + // default because it's the safe option. It comes at a performance penalty, though + // As in practice only commonjs ('cjs') and ecmascript modules ('es6') + // are in wide use, you can limit the moduleSystems to those. + // moduleSystems: ['cjs', 'es6'], + + // false: don't look at JSDoc imports (the default) + // true: detect dependencies in JSDoc-style import statements. + // Implies parser: 'tsc', which a.o. means the typescript compiler will need + // to be installed in the same spot you run dependency-cruiser from. + // detectJSDocImports: true, + + // false: don't look at process.getBuiltinModule calls (the default) + // true: dependency-cruiser will detect calls to process.getBuiltinModule/ + // globalThis.process.getBuiltinModule as imports. + // detectProcessBuiltinModuleCalls: true, + + // prefix for links in html, d2, mermaid and dot/ svg output (e.g. 'https://github.com/you/yourrepo/blob/main/' + // to open it on your online repo or `vscode://file/${process.cwd()}/` to + // open it in visual studio code), + // prefix: `vscode://file/${process.cwd()}/`, + + // suffix for links in output. E.g. put .html here if you use it to link to + // your coverage reports. + // suffix: '.html', + + // false (the default): ignore dependencies that only exist before typescript-to-javascript compilation + // true: also detect dependencies that only exist before typescript-to-javascript compilation + // 'specify': for each dependency identify whether it only exists before compilation or also after + // tsPreCompilationDeps: false, + + // list of extensions to scan that aren't javascript or compile-to-javascript. + // Empty by default. Only put extensions in here that you want to take into + // account that are _not_ parsable. + // extraExtensionsToScan: ['.json', '.jpg', '.png', '.svg', '.webp'], + + // if true combines the package.jsons found from the module up to the base + // folder the cruise is initiated from. Useful for how (some) mono-repos + // manage dependencies & dependency definitions. + // combinedDependencies: false, + + // if true leave symlinks untouched, otherwise use the realpath + // preserveSymlinks: false, + + // TypeScript project file ('tsconfig.json') to use for + // (1) compilation and + // (2) resolution (e.g. with the paths property) + // + // The (optional) fileName attribute specifies which file to take (relative to + // dependency-cruiser's current working directory). When not provided + // defaults to './tsconfig.json'. + tsConfig: { + fileName: 'src/tsconfig.json' + }, + + // Webpack configuration to use to get resolve options from. + // + // The (optional) fileName attribute specifies which file to take (relative + // to dependency-cruiser's current working directory. When not provided defaults + // to './webpack.conf.js'. + // + // The (optional) 'env' and 'arguments' attributes contain the parameters + // to be passed if your webpack config is a function and takes them (see + // webpack documentation for details) + // webpackConfig: { + // fileName: 'webpack.config.js', + // env: {}, + // arguments: {} + // }, + + // Babel config ('.babelrc', '.babelrc.json', '.babelrc.json5', ...) to use + // for compilation + // babelConfig: { + // fileName: '.babelrc', + // }, + + // List of strings you have in use in addition to cjs/ es6 requires + // & imports to declare module dependencies. Use this e.g. if you've + // re-declared require, use a require-wrapper or use window.require as + // a hack. + // exoticRequireStrings: [], + + // options to pass on to enhanced-resolve, the package dependency-cruiser + // uses to resolve module references to disk. The values below should be + // suitable for most situations + // + // If you use webpack: you can also set these in webpack.conf.js. The set + // there will override the ones specified here. + enhancedResolveOptions: { + // What to consider as an 'exports' field in package.jsons + exportsFields: ['exports'], + + // List of conditions to check for in the exports field. + // Only works when the 'exportsFields' array is non-empty. + conditionNames: ['import', 'require', 'node', 'default', 'types'], + + // The extensions, by default are the same as the ones dependency-cruiser + // can access (run `npx depcruise --info` to see which ones that are in + // _your_ environment). If that list is larger than you need you can pass + // the extensions you actually use (e.g. ['.js', '.jsx']). This can speed + // up module resolution, which is the most expensive step. + // extensions: [".js", ".jsx", ".ts", ".tsx", ".d.ts"], + + // What to consider a 'main' field in package.json + mainFields: ["module", "main", "types", "typings"], + + // A list of alias fields in package.jsons + // See https://github.com/defunctzombie/package-browser-field-spec and + // the webpack [resolve.alias](https://webpack.js.org/configuration/resolve/#resolvealiasfields) + // documentation. + // Defaults to an empty array (= don't use alias fields). + // aliasFields: ['browser'], + }, + + // skipAnalysisNotInRules will make dependency-cruiser execute + // analysis strictly necessary for checking the rule set only. + // See https://github.com/sverweij/dependency-cruiser/blob/main/doc/options-reference.md#skipanalysisnotinrules + skipAnalysisNotInRules: true, + + reporterOptions: { + dot: { + // Pattern of modules to consolidate to. The default pattern in this configuration + // collapses everything in node_modules to one folder deep so you see + // the external modules, but not their innards. + collapsePattern: 'node_modules/(?:@[^/]+/[^/]+|[^/]+)', + + // Options to tweak the appearance of your graph. See + // https://github.com/sverweij/dependency-cruiser/blob/main/doc/options-reference.md#reporteroptions + // If you don't specify a theme dependency-cruiser falls back to a built-in one. + // theme: { + // graph: { + // // splines: 'ortho' - straight lines; slow on big graphs + // // splines: 'true' - bezier curves; fast but not as nice as ortho + // splines: 'true' + // }, + // }, + }, + archi: { + // Pattern of modules to consolidate to. + collapsePattern: '^(?:packages|src|lib(s?)|app(s?)|bin|test(s?)|spec(s?))/[^/]+|node_modules/(?:@[^/]+/[^/]+|[^/]+)', + + // Options to tweak the appearance of your graph. If you don't specify a + // theme for 'archi' dependency-cruiser will use the one specified in the + // dot section above and otherwise use the default one. + // theme: { }, + }, + text: { + highlightFocused: true + }, + } + } +}; +// generated: dependency-cruiser@17.3.7 on 2026-01-28T14:30:16.611Z diff --git a/cli/commands/build-distfiles/CHANGELOG.md b/cli/commands/build-distfiles/CHANGELOG.md new file mode 100644 index 00000000000..2e214f6bed5 --- /dev/null +++ b/cli/commands/build-distfiles/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/cli-command-build-distfiles diff --git a/cli/commands/build-distfiles/README.md b/cli/commands/build-distfiles/README.md new file mode 100644 index 00000000000..52fc05e00c5 --- /dev/null +++ b/cli/commands/build-distfiles/README.md @@ -0,0 +1,49 @@ +[![banner](https://particles.js.org/images/banner2.png)](https://particles.js.org) + +# tsParticles CLI + +## Installation + +### NPM + +```bash +npm install -g @tsparticles/cli-build +``` + +### Yarn + +```bash +yarn global add @tsparticles/cli-build +``` + +### PNPM + +```bash +pnpm global add @tsparticles/cli-build +``` + +## Usage + +### Help + +```bash +npx @tsparticles/cli-build --help +``` + +or + +```bash +tsparticles-build --help +``` + +### Build + +```bash +npx @tsparticles/cli-build +``` + +or + +```bash +tsparticles-build +``` diff --git a/cli/commands/build-distfiles/eslint.config.js b/cli/commands/build-distfiles/eslint.config.js new file mode 100644 index 00000000000..7dc85e779b6 --- /dev/null +++ b/cli/commands/build-distfiles/eslint.config.js @@ -0,0 +1,22 @@ +import path from "path"; +import {fileURLToPath} from "url"; +import {defineConfig} from "eslint/config"; +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default defineConfig([ + tsParticlesESLintConfig, + { + languageOptions: { + parserOptions: { + project: [path.join(__dirname, "src", "tsconfig.json")], + tsconfigRootDir: __dirname, + sourceType: "module" + } + }, + rules: { + "no-console": "off" + } + } +]); diff --git a/cli/commands/build-distfiles/package.json b/cli/commands/build-distfiles/package.json new file mode 100644 index 00000000000..c6133bcedfa --- /dev/null +++ b/cli/commands/build-distfiles/package.json @@ -0,0 +1,73 @@ +{ + "name": "@tsparticles/cli-command-build-distfiles", + "version": "4.0.0-beta.15", + "license": "MIT", + "type": "module", + "publishConfig": { + "access": "public", + "tagVersionPrefix": "v" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "cli/commands/build-distfiles" + }, + "prettier": "@tsparticles/prettier-config", + "scripts": { + "prettify:ci:src": "prettier --check ./src/*", + "prettify:ci:readme": "prettier --check ./README.md", + "prettify:src": "prettier --write ./src/*", + "prettify:readme": "prettier --write ./README.md", + "lint": "eslint src --ext .js,.jsx,.ts,.tsx --cache --cache-location .cache/eslint/.eslintcache --cache-strategy metadata --fix", + "lint:ci": "eslint src --ext .js,.jsx,.ts,.tsx --cache --cache-location .cache/eslint/.eslintcache --cache-strategy metadata", + "circular-deps": "depcruise src --include-only '^src' --validate --output-type err-long", + "compile": "pnpm run build:ts", + "compile:ci": "pnpm run build:ts", + "build:ts": "pnpm run build:ts:cjs", + "build:ts:cjs": "tsc -p src", + "build": "pnpm run clear:dist && pnpm run prettify:src && pnpm run lint && pnpm run compile && pnpm run circular-deps && pnpm run prettify:readme", + "build:ci": "pnpm run clear:dist && pnpm run prettify:ci:src && pnpm run lint:ci && pnpm run compile:ci && pnpm run prettify:ci:readme", + "clear:dist": "rimraf ./dist", + "prepack": "pnpm run build" + }, + "peerDependencies": { + "commander": "^14" + }, + "dependencies": { + "@swc/core": "^1.15.33", + "@tsparticles/depcruise-config": "workspace:^", + "@tsparticles/eslint-config": "workspace:^", + "@tsparticles/prettier-config": "workspace:^", + "@tsparticles/tsconfig": "workspace:^", + "dependency-cruiser": "^17.4.0", + "eslint": "^10.3.0", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-jsdoc": "^62.9.0", + "eslint-plugin-prettier": "^5.5.5", + "eslint-plugin-tsdoc": "^0.5.2", + "klaw": "^4.1.0", + "lookpath": "^1.2.3", + "path-scurry": "^2.0.2", + "prettier": "^3.8.3", + "prettier-plugin-multiline-arrays": "^4.1.8", + "prompts": "^2.4.2", + "rimraf": "^6.1.3", + "swc-loader": "^0.2.7", + "typescript": "^6.0.3", + "typescript-eslint": "^8.59.2" + }, + "devDependencies": { + "@types/estree": "^1.0.9", + "@types/klaw": "^3.0.7", + "@types/node": "^25.6.2", + "@types/prompts": "^2.4.9", + "browserslist": "^4.28.2", + "commander": "^14.0.3", + "copyfiles": "^2.4.1", + "cross-env": "^10.1.0", + "ts-node": "^10.9.2" + }, + "description": "tsParticles CLI", + "main": "dist/distfiles.js", + "author": "Matteo Bruni " +} diff --git a/cli/commands/build-distfiles/renovate.json b/cli/commands/build-distfiles/renovate.json new file mode 100644 index 00000000000..df30aa6db3e --- /dev/null +++ b/cli/commands/build-distfiles/renovate.json @@ -0,0 +1,9 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "baseBranches": [ + "dev" + ], + "extends": [ + "config:base" + ] +} diff --git a/cli/commands/build-distfiles/src/distfiles.ts b/cli/commands/build-distfiles/src/distfiles.ts new file mode 100644 index 00000000000..f740494c6fd --- /dev/null +++ b/cli/commands/build-distfiles/src/distfiles.ts @@ -0,0 +1,37 @@ +import { Command } from "commander"; +import { buildDistFiles } from "./utils.js"; +import { existsSync } from "node:fs"; + +const distFilesCommand = new Command("distfiles"); + +distFilesCommand.description("Prepare the dist files for tsParticles library"); +distFilesCommand.option( + "--ci", + "Do all build steps for CI, no fixing files, only checking if they are formatted correctly, sets silent to true by default", + false, +); +distFilesCommand.option( + "-s, --silent ", + "Reduce the amount of output during the build, defaults to false, except when --ci is set", + false, +); + +distFilesCommand.action(async () => { + const opts = distFilesCommand.opts(), + ci = !!opts["ci"], + silentOpt = opts["silent"] as string | boolean, + silent = silentOpt === "false" ? false : !!silentOpt || ci, + basePath = process.cwd(); + + if (!existsSync(basePath)) { + throw new Error("Provided path does not exist"); + } + + if (!(await buildDistFiles(basePath, silent))) { + throw new Error("Dist files build failed"); + } + + console.info("Bundle finished successfully!"); +}); + +export { buildDistFiles, distFilesCommand }; diff --git a/cli/commands/build-distfiles/src/tsconfig.json b/cli/commands/build-distfiles/src/tsconfig.json new file mode 100644 index 00000000000..a86b208cb31 --- /dev/null +++ b/cli/commands/build-distfiles/src/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "rootDir": ".", + "outDir": "../dist" + }, + "references": [{ "path": "../" }], + "include": ["**/*"] +} diff --git a/cli/commands/build-distfiles/src/utils.ts b/cli/commands/build-distfiles/src/utils.ts new file mode 100644 index 00000000000..5c5f72e6a3d --- /dev/null +++ b/cli/commands/build-distfiles/src/utils.ts @@ -0,0 +1,155 @@ +import { copyFile, mkdir, readFile, writeFile } from "node:fs/promises"; +import { existsSync } from "node:fs"; +import klaw from "klaw"; +import path from "node:path"; + +/** + * @param value - + * @param version - + * @returns - + */ +function resolveWorkspaceVersion(value: string, version: string): string { + if (!value.startsWith("workspace:")) { + return value; + } + + const spec = value.slice("workspace:".length); + + if (!spec || spec === "*") { + return version; + } + + if (spec === "^" || spec === "~") { + return `${spec}${version}`; + } + + return spec; +} + +/** + * @param deps - + * @param version - + * @returns - + */ +function resolveDeps(deps: Record, version: string): Record { + return Object.fromEntries( + Object.entries(deps).map(([name, value]) => [ + name, + resolveWorkspaceVersion(value, version), + ]), + ); +} + +/** + * @param basePath - + * @param silent - + * @returns true if the dist files process was successful + */ +export async function buildDistFiles(basePath: string, silent: boolean): Promise { + if (!silent) { + console.info("Build - started on dist files"); + } + + let res: boolean; + + try { + const pkgInfo = JSON.parse((await readFile(path.join(basePath, "package.json"))).toString()) as { + dependencies?: Record; + peerDependencies?: Record; + publishConfig?: { directory?: string }; + version: string; + }, + libPackage = path.join(basePath, "package.dist.json"), + distPath = path.join(basePath, pkgInfo.publishConfig?.directory ?? "dist"), + data = await readFile(libPackage), + text = data.toString(), + libObj = JSON.parse(text) as Record; + + libObj["version"] = pkgInfo.version; + + if (pkgInfo.dependencies) { + libObj["dependencies"] = resolveDeps(pkgInfo.dependencies, pkgInfo.version); + } + + if (pkgInfo.peerDependencies) { + libObj["peerDependencies"] = resolveDeps(pkgInfo.peerDependencies, pkgInfo.version); + } + + const jsonIndent = 2, + newLibPackageContents = `${JSON.stringify(libObj, undefined, jsonIndent)}\n`; + + if (newLibPackageContents !== text) { + await writeFile(libPackage, newLibPackageContents, "utf8"); + } + + if (!silent) { + console.info(`package.dist.json updated successfully to version ${pkgInfo.version}`); + } + + const rootFilesToCopy = [ + "LICENSE", + "README.md", + { + source: "package.dist.json", + destination: "package.json", + }, + ]; + + for (const file of rootFilesToCopy) { + const src = path.join(basePath, typeof file === "string" ? file : file.source), + dest = path.join(distPath, typeof file === "string" ? file : file.destination); + + await copyFile(src, dest); + } + + const scriptsPath = path.join(basePath, "scripts"), + distScriptsPath = path.join(distPath, "scripts"); + + if (existsSync(scriptsPath) && !existsSync(distScriptsPath)) { + await mkdir(distScriptsPath, { recursive: true }); + + const installPath = path.join(scriptsPath, "install.js"); + + if (existsSync(installPath)) { + await copyFile(installPath, path.join(distScriptsPath, "install.js")); + } + } + + for await (const file of klaw(distPath)) { + if (file.stats.isDirectory()) { + continue; + } + + const contents = await readFile(file.path, "utf8"), + updatedContents = contents.replaceAll("__VERSION__", `"${pkgInfo.version}"`); + + if (updatedContents !== contents) { + await writeFile(file.path, updatedContents, "utf8"); + } + } + + /* for await (const file of klaw(path.join(distPath, "cjs"))) { + await fs.rename(file.path, file.path.replace(/\.js$/, ".cjs")); + } + + for await (const file of klaw(path.join(distPath, "esm"))) { + await fs.rename(file.path, file.path.replace(/\.js$/, ".mjs")); + } */ + + await writeFile(path.join(distPath, "cjs", "package.json"), `{ "type": "commonjs" }`); + await writeFile(path.join(distPath, "esm", "package.json"), `{ "type": "module" }`); + await writeFile(path.join(distPath, "browser", "package.json"), `{ "type": "module" }`); + + res = true; + } catch (e) { + console.error(e); + + res = false; + } + + if (!silent) { + console.info("Build - done on dist files"); + } + + return res; +} diff --git a/cli/commands/build-distfiles/tsconfig.json b/cli/commands/build-distfiles/tsconfig.json new file mode 100644 index 00000000000..714efda86b6 --- /dev/null +++ b/cli/commands/build-distfiles/tsconfig.json @@ -0,0 +1,53 @@ +{ + "compilerOptions": { + "rootDir": ".", + "outDir": ".", + "resolveJsonModule": true, + "composite": true, + "target": "ESNext", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "lib": [ + "ESNext", + "ES2024", + "ES2023", + "ES2022", + "ES2021", + "ES2020", + "ES2019", + "ES2018", + "ES2017", + "ES2016", + "ES2015" + ], + "types": [ + "node", + "klaw", + "prompts", + "eslint" + ], + "strict": true, + "noImplicitAny": true, + "strictNullChecks": true, + "strictFunctionTypes": true, + "strictBindCallApply": true, + "strictPropertyInitialization": true, + "noImplicitThis": true, + "useUnknownInCatchVariables": true, + "alwaysStrict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "exactOptionalPropertyTypes": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedIndexedAccess": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "allowSyntheticDefaultImports": true + }, + "include": [ + "src/**/*" + ] +} diff --git a/cli/commands/build-diststats/.dependency-cruiser.cjs b/cli/commands/build-diststats/.dependency-cruiser.cjs new file mode 100644 index 00000000000..93e0d55a39d --- /dev/null +++ b/cli/commands/build-diststats/.dependency-cruiser.cjs @@ -0,0 +1,382 @@ +/** @type {import('dependency-cruiser').IConfiguration} */ +module.exports = { + forbidden: [ + { + name: 'no-circular', + severity: 'warn', + comment: + "This dependency is part of a circular relationship. You might want to revise " + + "your solution (i.e. use dependency inversion, make sure the modules have a single responsibility) ", + from: {}, + to: { + circular: true + } + }, + { + name: 'no-orphans', + comment: + "This is an orphan module - it's likely not used (anymore?). Either use it or " + + "remove it. If it's logical this module is an orphan (i.e. it's a config file), " + + "add an exception for it in your dependency-cruiser configuration. By default " + + "this rule does not scrutinize dot-files (e.g. .eslintrc.js), TypeScript declaration " + + "files (.d.ts), tsconfig.json and some of the babel and webpack configs.", + severity: 'warn', + from: { + orphan: true, + pathNot: [ + '(^|/)[.][^/]+[.](?:js|cjs|mjs|ts|cts|mts|json)$', // dot files + '[.]d[.]ts$', // TypeScript declaration files + '(^|/)tsconfig[.]json$', // TypeScript config + '(^|/)(?:babel|webpack)[.]config[.](?:js|cjs|mjs|ts|cts|mts|json)$' // other configs + ] + }, + to: {}, + }, + { + name: 'no-deprecated-core', + comment: + 'A module depends on a node core module that has been deprecated. Find an alternative - these are ' + + "bound to exist - node doesn't deprecate lightly.", + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'core' + ], + path: [ + '^v8/tools/codemap$', + '^v8/tools/consarray$', + '^v8/tools/csvparser$', + '^v8/tools/logreader$', + '^v8/tools/profile_view$', + '^v8/tools/profile$', + '^v8/tools/SourceMap$', + '^v8/tools/splaytree$', + '^v8/tools/tickprocessor-driver$', + '^v8/tools/tickprocessor$', + '^node-inspect/lib/_inspect$', + '^node-inspect/lib/internal/inspect_client$', + '^node-inspect/lib/internal/inspect_repl$', + '^async_hooks$', + '^punycode$', + '^domain$', + '^constants$', + '^sys$', + '^_linklist$', + '^_stream_wrap$' + ], + } + }, + { + name: 'not-to-deprecated', + comment: + 'This module uses a (version of an) npm module that has been deprecated. Either upgrade to a later ' + + 'version of that module, or find an alternative. Deprecated modules are a security risk.', + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'deprecated' + ] + } + }, + { + name: 'no-non-package-json', + severity: 'error', + comment: + "This module depends on an npm package that isn't in the 'dependencies' section of your package.json. " + + "That's problematic as the package either (1) won't be available on live (2 - worse) will be " + + "available on live with an non-guaranteed version. Fix it by adding the package to the dependencies " + + "in your package.json.", + from: {}, + to: { + dependencyTypes: [ + 'npm-no-pkg', + 'npm-unknown' + ] + } + }, + { + name: 'not-to-unresolvable', + comment: + "This module depends on a module that cannot be found ('resolved to disk'). If it's an npm " + + 'module: add it to your package.json. In all other cases you likely already know what to do.', + severity: 'error', + from: {}, + to: { + couldNotResolve: true + } + }, + { + name: 'no-duplicate-dep-types', + comment: + "Likely this module depends on an external ('npm') package that occurs more than once " + + "in your package.json i.e. bot as a devDependencies and in dependencies. This will cause " + + "maintenance problems later on.", + severity: 'warn', + from: {}, + to: { + moreThanOneDependencyType: true, + // as it's common to use a devDependency for type-only imports: don't + // consider type-only dependencyTypes for this rule + dependencyTypesNot: ["type-only"] + } + }, + + // rules you might want to tweak for your specific situation: + { + name: 'not-to-test', + comment: + "This module depends on code within a folder that should only contain tests. As tests don't " + + "implement functionality this is odd. Either you're writing a test outside the test folder " + + "or there's something in the test folder that isn't a test.", + severity: 'error', + from: { + pathNot: '^(tests)' + }, + to: { + path: '^(tests)' + } + }, + { + name: 'not-to-spec', + comment: + 'This module depends on a spec (test) file. The responsibility of a spec file is to test code. ' + + "If there's something in a spec that's of use to other modules, it doesn't have that single " + + 'responsibility anymore. Factor it out into (e.g.) a separate utility/ helper or a mock.', + severity: 'error', + from: {}, + to: { + path: '[.](?:spec|test)[.](?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$' + } + }, + { + name: 'not-to-dev-dep', + severity: 'error', + comment: + "This module depends on an npm package from the 'devDependencies' section of your " + + 'package.json. It looks like something that ships to production, though. To prevent problems ' + + "with npm packages that aren't there on production declare it (only!) in the 'dependencies'" + + 'section of your package.json. If this module is development only - add it to the ' + + 'from.pathNot re of the not-to-dev-dep rule in the dependency-cruiser configuration', + from: { + path: '^(src)', + pathNot: '[.](?:spec|test)[.](?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$' + }, + to: { + dependencyTypes: [ + 'npm-dev', + ], + // type only dependencies are not a problem as they don't end up in the + // production code or are ignored by the runtime. + dependencyTypesNot: [ + 'type-only' + ], + pathNot: [ + 'node_modules/@types/' + ] + } + }, + { + name: 'optional-deps-used', + severity: 'info', + comment: + "This module depends on an npm package that is declared as an optional dependency " + + "in your package.json. As this makes sense in limited situations only, it's flagged here. " + + "If you use an optional dependency here by design - add an exception to your" + + "dependency-cruiser configuration.", + from: {}, + to: { + dependencyTypes: [ + 'npm-optional' + ] + } + }, + { + name: 'peer-deps-used', + comment: + "This module depends on an npm package that is declared as a peer dependency " + + "in your package.json. This makes sense if your package is e.g. a plugin, but in " + + "other cases - maybe not so much. If the use of a peer dependency is intentional " + + "add an exception to your dependency-cruiser configuration.", + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'npm-peer' + ] + } + } + ], + options: { + // Which modules not to follow further when encountered + doNotFollow: { + // path: an array of regular expressions in strings to match against + path: ['node_modules'] + }, + + // Which modules to exclude + // exclude : { + // // path: an array of regular expressions in strings to match against + // path: '', + // }, + + // Which modules to exclusively include (array of regular expressions in strings) + // dependency-cruiser will skip everything that doesn't match this pattern + // includeOnly : [''], + + // List of module systems to cruise. + // When left out dependency-cruiser will fall back to the list of _all_ + // module systems it knows of ('amd', 'cjs', 'es6', 'tsd']). It's the + // default because it's the safe option. It comes at a performance penalty, though + // As in practice only commonjs ('cjs') and ecmascript modules ('es6') + // are in wide use, you can limit the moduleSystems to those. + // moduleSystems: ['cjs', 'es6'], + + // false: don't look at JSDoc imports (the default) + // true: detect dependencies in JSDoc-style import statements. + // Implies parser: 'tsc', which a.o. means the typescript compiler will need + // to be installed in the same spot you run dependency-cruiser from. + // detectJSDocImports: true, + + // false: don't look at process.getBuiltinModule calls (the default) + // true: dependency-cruiser will detect calls to process.getBuiltinModule/ + // globalThis.process.getBuiltinModule as imports. + // detectProcessBuiltinModuleCalls: true, + + // prefix for links in html, d2, mermaid and dot/ svg output (e.g. 'https://github.com/you/yourrepo/blob/main/' + // to open it on your online repo or `vscode://file/${process.cwd()}/` to + // open it in visual studio code), + // prefix: `vscode://file/${process.cwd()}/`, + + // suffix for links in output. E.g. put .html here if you use it to link to + // your coverage reports. + // suffix: '.html', + + // false (the default): ignore dependencies that only exist before typescript-to-javascript compilation + // true: also detect dependencies that only exist before typescript-to-javascript compilation + // 'specify': for each dependency identify whether it only exists before compilation or also after + // tsPreCompilationDeps: false, + + // list of extensions to scan that aren't javascript or compile-to-javascript. + // Empty by default. Only put extensions in here that you want to take into + // account that are _not_ parsable. + // extraExtensionsToScan: ['.json', '.jpg', '.png', '.svg', '.webp'], + + // if true combines the package.jsons found from the module up to the base + // folder the cruise is initiated from. Useful for how (some) mono-repos + // manage dependencies & dependency definitions. + // combinedDependencies: false, + + // if true leave symlinks untouched, otherwise use the realpath + // preserveSymlinks: false, + + // TypeScript project file ('tsconfig.json') to use for + // (1) compilation and + // (2) resolution (e.g. with the paths property) + // + // The (optional) fileName attribute specifies which file to take (relative to + // dependency-cruiser's current working directory). When not provided + // defaults to './tsconfig.json'. + tsConfig: { + fileName: 'src/tsconfig.json' + }, + + // Webpack configuration to use to get resolve options from. + // + // The (optional) fileName attribute specifies which file to take (relative + // to dependency-cruiser's current working directory. When not provided defaults + // to './webpack.conf.js'. + // + // The (optional) 'env' and 'arguments' attributes contain the parameters + // to be passed if your webpack config is a function and takes them (see + // webpack documentation for details) + // webpackConfig: { + // fileName: 'webpack.config.js', + // env: {}, + // arguments: {} + // }, + + // Babel config ('.babelrc', '.babelrc.json', '.babelrc.json5', ...) to use + // for compilation + // babelConfig: { + // fileName: '.babelrc', + // }, + + // List of strings you have in use in addition to cjs/ es6 requires + // & imports to declare module dependencies. Use this e.g. if you've + // re-declared require, use a require-wrapper or use window.require as + // a hack. + // exoticRequireStrings: [], + + // options to pass on to enhanced-resolve, the package dependency-cruiser + // uses to resolve module references to disk. The values below should be + // suitable for most situations + // + // If you use webpack: you can also set these in webpack.conf.js. The set + // there will override the ones specified here. + enhancedResolveOptions: { + // What to consider as an 'exports' field in package.jsons + exportsFields: ['exports'], + + // List of conditions to check for in the exports field. + // Only works when the 'exportsFields' array is non-empty. + conditionNames: ['import', 'require', 'node', 'default', 'types'], + + // The extensions, by default are the same as the ones dependency-cruiser + // can access (run `npx depcruise --info` to see which ones that are in + // _your_ environment). If that list is larger than you need you can pass + // the extensions you actually use (e.g. ['.js', '.jsx']). This can speed + // up module resolution, which is the most expensive step. + // extensions: [".js", ".jsx", ".ts", ".tsx", ".d.ts"], + + // What to consider a 'main' field in package.json + mainFields: ["module", "main", "types", "typings"], + + // A list of alias fields in package.jsons + // See https://github.com/defunctzombie/package-browser-field-spec and + // the webpack [resolve.alias](https://webpack.js.org/configuration/resolve/#resolvealiasfields) + // documentation. + // Defaults to an empty array (= don't use alias fields). + // aliasFields: ['browser'], + }, + + // skipAnalysisNotInRules will make dependency-cruiser execute + // analysis strictly necessary for checking the rule set only. + // See https://github.com/sverweij/dependency-cruiser/blob/main/doc/options-reference.md#skipanalysisnotinrules + skipAnalysisNotInRules: true, + + reporterOptions: { + dot: { + // Pattern of modules to consolidate to. The default pattern in this configuration + // collapses everything in node_modules to one folder deep so you see + // the external modules, but not their innards. + collapsePattern: 'node_modules/(?:@[^/]+/[^/]+|[^/]+)', + + // Options to tweak the appearance of your graph. See + // https://github.com/sverweij/dependency-cruiser/blob/main/doc/options-reference.md#reporteroptions + // If you don't specify a theme dependency-cruiser falls back to a built-in one. + // theme: { + // graph: { + // // splines: 'ortho' - straight lines; slow on big graphs + // // splines: 'true' - bezier curves; fast but not as nice as ortho + // splines: 'true' + // }, + // }, + }, + archi: { + // Pattern of modules to consolidate to. + collapsePattern: '^(?:packages|src|lib(s?)|app(s?)|bin|test(s?)|spec(s?))/[^/]+|node_modules/(?:@[^/]+/[^/]+|[^/]+)', + + // Options to tweak the appearance of your graph. If you don't specify a + // theme for 'archi' dependency-cruiser will use the one specified in the + // dot section above and otherwise use the default one. + // theme: { }, + }, + text: { + highlightFocused: true + }, + } + } +}; +// generated: dependency-cruiser@17.3.7 on 2026-01-28T14:30:16.611Z diff --git a/cli/commands/build-diststats/CHANGELOG.md b/cli/commands/build-diststats/CHANGELOG.md new file mode 100644 index 00000000000..f2e0084d83a --- /dev/null +++ b/cli/commands/build-diststats/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/cli-command-build-diststats diff --git a/cli/commands/build-diststats/README.md b/cli/commands/build-diststats/README.md new file mode 100644 index 00000000000..52fc05e00c5 --- /dev/null +++ b/cli/commands/build-diststats/README.md @@ -0,0 +1,49 @@ +[![banner](https://particles.js.org/images/banner2.png)](https://particles.js.org) + +# tsParticles CLI + +## Installation + +### NPM + +```bash +npm install -g @tsparticles/cli-build +``` + +### Yarn + +```bash +yarn global add @tsparticles/cli-build +``` + +### PNPM + +```bash +pnpm global add @tsparticles/cli-build +``` + +## Usage + +### Help + +```bash +npx @tsparticles/cli-build --help +``` + +or + +```bash +tsparticles-build --help +``` + +### Build + +```bash +npx @tsparticles/cli-build +``` + +or + +```bash +tsparticles-build +``` diff --git a/cli/commands/build-diststats/eslint.config.js b/cli/commands/build-diststats/eslint.config.js new file mode 100644 index 00000000000..7dc85e779b6 --- /dev/null +++ b/cli/commands/build-diststats/eslint.config.js @@ -0,0 +1,22 @@ +import path from "path"; +import {fileURLToPath} from "url"; +import {defineConfig} from "eslint/config"; +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default defineConfig([ + tsParticlesESLintConfig, + { + languageOptions: { + parserOptions: { + project: [path.join(__dirname, "src", "tsconfig.json")], + tsconfigRootDir: __dirname, + sourceType: "module" + } + }, + rules: { + "no-console": "off" + } + } +]); diff --git a/cli/commands/build-diststats/package.json b/cli/commands/build-diststats/package.json new file mode 100644 index 00000000000..845c25f0cf5 --- /dev/null +++ b/cli/commands/build-diststats/package.json @@ -0,0 +1,67 @@ +{ + "name": "@tsparticles/cli-command-build-diststats", + "version": "4.0.0-beta.15", + "license": "MIT", + "type": "module", + "publishConfig": { + "access": "public", + "tagVersionPrefix": "v" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "cli/commands/build-diststats" + }, + "prettier": "@tsparticles/prettier-config", + "scripts": { + "prettify:ci:src": "prettier --check ./src/*", + "prettify:ci:readme": "prettier --check ./README.md", + "prettify:src": "prettier --write ./src/*", + "prettify:readme": "prettier --write ./README.md", + "lint": "eslint src --ext .js,.jsx,.ts,.tsx --cache --cache-location .cache/eslint/.eslintcache --cache-strategy metadata --fix", + "lint:ci": "eslint src --ext .js,.jsx,.ts,.tsx --cache --cache-location .cache/eslint/.eslintcache --cache-strategy metadata", + "circular-deps": "depcruise src --include-only '^src' --validate --output-type err-long", + "compile": "pnpm run build:ts", + "compile:ci": "pnpm run build:ts", + "build:ts": "pnpm run build:ts:cjs", + "build:ts:cjs": "tsc -p src", + "build": "pnpm run clear:dist && pnpm run prettify:src && pnpm run lint && pnpm run compile && pnpm run circular-deps && pnpm run prettify:readme", + "build:ci": "pnpm run clear:dist && pnpm run prettify:ci:src && pnpm run lint:ci && pnpm run compile:ci && pnpm run prettify:ci:readme", + "clear:dist": "rimraf ./dist", + "prepack": "pnpm run build" + }, + "dependencies": { + "@swc/core": "^1.15.33", + "@tsparticles/depcruise-config": "workspace:^", + "@tsparticles/eslint-config": "workspace:^", + "@tsparticles/prettier-config": "workspace:^", + "@tsparticles/tsconfig": "workspace:^", + "dependency-cruiser": "^17.4.0", + "eslint": "^10.3.0", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-jsdoc": "^62.9.0", + "eslint-plugin-prettier": "^5.5.5", + "eslint-plugin-tsdoc": "^0.5.2", + "klaw": "^4.1.0", + "lookpath": "^1.2.3", + "path-scurry": "^2.0.2", + "prettier": "^3.8.3", + "prettier-plugin-multiline-arrays": "^4.1.8", + "rimraf": "^6.1.3", + "swc-loader": "^0.2.7", + "typescript": "^6.0.3", + "typescript-eslint": "^8.59.2" + }, + "devDependencies": { + "@types/estree": "^1.0.9", + "@types/klaw": "^3.0.7", + "@types/node": "^25.6.2", + "browserslist": "^4.28.2", + "copyfiles": "^2.4.1", + "cross-env": "^10.1.0", + "ts-node": "^10.9.2" + }, + "description": "tsParticles CLI", + "main": "dist/diststats.js", + "author": "Matteo Bruni " +} diff --git a/cli/commands/build-diststats/renovate.json b/cli/commands/build-diststats/renovate.json new file mode 100644 index 00000000000..df30aa6db3e --- /dev/null +++ b/cli/commands/build-diststats/renovate.json @@ -0,0 +1,9 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "baseBranches": [ + "dev" + ], + "extends": [ + "config:base" + ] +} diff --git a/cli/commands/build-diststats/src/diststats.ts b/cli/commands/build-diststats/src/diststats.ts new file mode 100644 index 00000000000..6edf3585267 --- /dev/null +++ b/cli/commands/build-diststats/src/diststats.ts @@ -0,0 +1,71 @@ +import { opendir, readFile, stat } from "node:fs/promises"; +import { existsSync } from "node:fs"; + +export interface IDistStats { + bundleSize: number; + totalFiles: number; + totalFolders: number; + totalSize: number; +} + +/** + * @param folderPath - the path to the folder to get the stats for + * @param bundlePath - the bundle path to get the bundle size for + * @returns the given folder stats; + */ +async function getFolderStats(folderPath: string, bundlePath?: string): Promise { + const stats: IDistStats = { + bundleSize: 0, + totalFiles: 0, + totalFolders: 0, + totalSize: 0, + }; + + if (!existsSync(folderPath)) { + return stats; + } + + const dir = await opendir(folderPath), + path = await import("path"); + + for await (const dirent of dir) { + const increment = 1; + + if (dirent.isDirectory()) { + const subDirStats = await getFolderStats(path.join(folderPath, dirent.name), bundlePath); + + stats.totalFolders += subDirStats.totalFolders + increment; + stats.totalFiles += subDirStats.totalFiles; + stats.totalSize += subDirStats.totalSize; + } else { + const fileStats = await stat(path.join(folderPath, dirent.name)); + + stats.totalFiles++; + stats.totalSize += fileStats.size; + + if (bundlePath && path.join(folderPath, dirent.name) === bundlePath) { + stats.bundleSize += fileStats.size; + } + } + } + + return stats; +} + +/** + * Gets the stats for the dist folder + * @param basePath - the base path to the project + * @returns the stats for the dist folder + */ +export async function getDistStats(basePath: string): Promise { + const path = await import("path"), + distFolder = path.join(basePath, "dist"), + pkgInfo = existsSync(path.join(distFolder, "package.json")) + ? (JSON.parse((await readFile(path.join(distFolder, "package.json"))).toString()) as { + jsdelivr?: string; + }) + : {}, + bundlePath = existsSync(distFolder) && pkgInfo.jsdelivr ? path.join(distFolder, pkgInfo.jsdelivr) : undefined; + + return await getFolderStats(distFolder, bundlePath); +} diff --git a/cli/commands/build-diststats/src/tsconfig.json b/cli/commands/build-diststats/src/tsconfig.json new file mode 100644 index 00000000000..a86b208cb31 --- /dev/null +++ b/cli/commands/build-diststats/src/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "rootDir": ".", + "outDir": "../dist" + }, + "references": [{ "path": "../" }], + "include": ["**/*"] +} diff --git a/cli/commands/build-diststats/tsconfig.json b/cli/commands/build-diststats/tsconfig.json new file mode 100644 index 00000000000..649db8500f8 --- /dev/null +++ b/cli/commands/build-diststats/tsconfig.json @@ -0,0 +1,52 @@ +{ + "compilerOptions": { + "rootDir": ".", + "outDir": ".", + "resolveJsonModule": true, + "composite": true, + "target": "ESNext", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "lib": [ + "ESNext", + "ES2024", + "ES2023", + "ES2022", + "ES2021", + "ES2020", + "ES2019", + "ES2018", + "ES2017", + "ES2016", + "ES2015" + ], + "types": [ + "node", + "klaw", + "eslint" + ], + "strict": true, + "noImplicitAny": true, + "strictNullChecks": true, + "strictFunctionTypes": true, + "strictBindCallApply": true, + "strictPropertyInitialization": true, + "noImplicitThis": true, + "useUnknownInCatchVariables": true, + "alwaysStrict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "exactOptionalPropertyTypes": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedIndexedAccess": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "allowSyntheticDefaultImports": true + }, + "include": [ + "src/**/*" + ] +} diff --git a/cli/commands/build-eslint/.dependency-cruiser.cjs b/cli/commands/build-eslint/.dependency-cruiser.cjs new file mode 100644 index 00000000000..93e0d55a39d --- /dev/null +++ b/cli/commands/build-eslint/.dependency-cruiser.cjs @@ -0,0 +1,382 @@ +/** @type {import('dependency-cruiser').IConfiguration} */ +module.exports = { + forbidden: [ + { + name: 'no-circular', + severity: 'warn', + comment: + "This dependency is part of a circular relationship. You might want to revise " + + "your solution (i.e. use dependency inversion, make sure the modules have a single responsibility) ", + from: {}, + to: { + circular: true + } + }, + { + name: 'no-orphans', + comment: + "This is an orphan module - it's likely not used (anymore?). Either use it or " + + "remove it. If it's logical this module is an orphan (i.e. it's a config file), " + + "add an exception for it in your dependency-cruiser configuration. By default " + + "this rule does not scrutinize dot-files (e.g. .eslintrc.js), TypeScript declaration " + + "files (.d.ts), tsconfig.json and some of the babel and webpack configs.", + severity: 'warn', + from: { + orphan: true, + pathNot: [ + '(^|/)[.][^/]+[.](?:js|cjs|mjs|ts|cts|mts|json)$', // dot files + '[.]d[.]ts$', // TypeScript declaration files + '(^|/)tsconfig[.]json$', // TypeScript config + '(^|/)(?:babel|webpack)[.]config[.](?:js|cjs|mjs|ts|cts|mts|json)$' // other configs + ] + }, + to: {}, + }, + { + name: 'no-deprecated-core', + comment: + 'A module depends on a node core module that has been deprecated. Find an alternative - these are ' + + "bound to exist - node doesn't deprecate lightly.", + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'core' + ], + path: [ + '^v8/tools/codemap$', + '^v8/tools/consarray$', + '^v8/tools/csvparser$', + '^v8/tools/logreader$', + '^v8/tools/profile_view$', + '^v8/tools/profile$', + '^v8/tools/SourceMap$', + '^v8/tools/splaytree$', + '^v8/tools/tickprocessor-driver$', + '^v8/tools/tickprocessor$', + '^node-inspect/lib/_inspect$', + '^node-inspect/lib/internal/inspect_client$', + '^node-inspect/lib/internal/inspect_repl$', + '^async_hooks$', + '^punycode$', + '^domain$', + '^constants$', + '^sys$', + '^_linklist$', + '^_stream_wrap$' + ], + } + }, + { + name: 'not-to-deprecated', + comment: + 'This module uses a (version of an) npm module that has been deprecated. Either upgrade to a later ' + + 'version of that module, or find an alternative. Deprecated modules are a security risk.', + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'deprecated' + ] + } + }, + { + name: 'no-non-package-json', + severity: 'error', + comment: + "This module depends on an npm package that isn't in the 'dependencies' section of your package.json. " + + "That's problematic as the package either (1) won't be available on live (2 - worse) will be " + + "available on live with an non-guaranteed version. Fix it by adding the package to the dependencies " + + "in your package.json.", + from: {}, + to: { + dependencyTypes: [ + 'npm-no-pkg', + 'npm-unknown' + ] + } + }, + { + name: 'not-to-unresolvable', + comment: + "This module depends on a module that cannot be found ('resolved to disk'). If it's an npm " + + 'module: add it to your package.json. In all other cases you likely already know what to do.', + severity: 'error', + from: {}, + to: { + couldNotResolve: true + } + }, + { + name: 'no-duplicate-dep-types', + comment: + "Likely this module depends on an external ('npm') package that occurs more than once " + + "in your package.json i.e. bot as a devDependencies and in dependencies. This will cause " + + "maintenance problems later on.", + severity: 'warn', + from: {}, + to: { + moreThanOneDependencyType: true, + // as it's common to use a devDependency for type-only imports: don't + // consider type-only dependencyTypes for this rule + dependencyTypesNot: ["type-only"] + } + }, + + // rules you might want to tweak for your specific situation: + { + name: 'not-to-test', + comment: + "This module depends on code within a folder that should only contain tests. As tests don't " + + "implement functionality this is odd. Either you're writing a test outside the test folder " + + "or there's something in the test folder that isn't a test.", + severity: 'error', + from: { + pathNot: '^(tests)' + }, + to: { + path: '^(tests)' + } + }, + { + name: 'not-to-spec', + comment: + 'This module depends on a spec (test) file. The responsibility of a spec file is to test code. ' + + "If there's something in a spec that's of use to other modules, it doesn't have that single " + + 'responsibility anymore. Factor it out into (e.g.) a separate utility/ helper or a mock.', + severity: 'error', + from: {}, + to: { + path: '[.](?:spec|test)[.](?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$' + } + }, + { + name: 'not-to-dev-dep', + severity: 'error', + comment: + "This module depends on an npm package from the 'devDependencies' section of your " + + 'package.json. It looks like something that ships to production, though. To prevent problems ' + + "with npm packages that aren't there on production declare it (only!) in the 'dependencies'" + + 'section of your package.json. If this module is development only - add it to the ' + + 'from.pathNot re of the not-to-dev-dep rule in the dependency-cruiser configuration', + from: { + path: '^(src)', + pathNot: '[.](?:spec|test)[.](?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$' + }, + to: { + dependencyTypes: [ + 'npm-dev', + ], + // type only dependencies are not a problem as they don't end up in the + // production code or are ignored by the runtime. + dependencyTypesNot: [ + 'type-only' + ], + pathNot: [ + 'node_modules/@types/' + ] + } + }, + { + name: 'optional-deps-used', + severity: 'info', + comment: + "This module depends on an npm package that is declared as an optional dependency " + + "in your package.json. As this makes sense in limited situations only, it's flagged here. " + + "If you use an optional dependency here by design - add an exception to your" + + "dependency-cruiser configuration.", + from: {}, + to: { + dependencyTypes: [ + 'npm-optional' + ] + } + }, + { + name: 'peer-deps-used', + comment: + "This module depends on an npm package that is declared as a peer dependency " + + "in your package.json. This makes sense if your package is e.g. a plugin, but in " + + "other cases - maybe not so much. If the use of a peer dependency is intentional " + + "add an exception to your dependency-cruiser configuration.", + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'npm-peer' + ] + } + } + ], + options: { + // Which modules not to follow further when encountered + doNotFollow: { + // path: an array of regular expressions in strings to match against + path: ['node_modules'] + }, + + // Which modules to exclude + // exclude : { + // // path: an array of regular expressions in strings to match against + // path: '', + // }, + + // Which modules to exclusively include (array of regular expressions in strings) + // dependency-cruiser will skip everything that doesn't match this pattern + // includeOnly : [''], + + // List of module systems to cruise. + // When left out dependency-cruiser will fall back to the list of _all_ + // module systems it knows of ('amd', 'cjs', 'es6', 'tsd']). It's the + // default because it's the safe option. It comes at a performance penalty, though + // As in practice only commonjs ('cjs') and ecmascript modules ('es6') + // are in wide use, you can limit the moduleSystems to those. + // moduleSystems: ['cjs', 'es6'], + + // false: don't look at JSDoc imports (the default) + // true: detect dependencies in JSDoc-style import statements. + // Implies parser: 'tsc', which a.o. means the typescript compiler will need + // to be installed in the same spot you run dependency-cruiser from. + // detectJSDocImports: true, + + // false: don't look at process.getBuiltinModule calls (the default) + // true: dependency-cruiser will detect calls to process.getBuiltinModule/ + // globalThis.process.getBuiltinModule as imports. + // detectProcessBuiltinModuleCalls: true, + + // prefix for links in html, d2, mermaid and dot/ svg output (e.g. 'https://github.com/you/yourrepo/blob/main/' + // to open it on your online repo or `vscode://file/${process.cwd()}/` to + // open it in visual studio code), + // prefix: `vscode://file/${process.cwd()}/`, + + // suffix for links in output. E.g. put .html here if you use it to link to + // your coverage reports. + // suffix: '.html', + + // false (the default): ignore dependencies that only exist before typescript-to-javascript compilation + // true: also detect dependencies that only exist before typescript-to-javascript compilation + // 'specify': for each dependency identify whether it only exists before compilation or also after + // tsPreCompilationDeps: false, + + // list of extensions to scan that aren't javascript or compile-to-javascript. + // Empty by default. Only put extensions in here that you want to take into + // account that are _not_ parsable. + // extraExtensionsToScan: ['.json', '.jpg', '.png', '.svg', '.webp'], + + // if true combines the package.jsons found from the module up to the base + // folder the cruise is initiated from. Useful for how (some) mono-repos + // manage dependencies & dependency definitions. + // combinedDependencies: false, + + // if true leave symlinks untouched, otherwise use the realpath + // preserveSymlinks: false, + + // TypeScript project file ('tsconfig.json') to use for + // (1) compilation and + // (2) resolution (e.g. with the paths property) + // + // The (optional) fileName attribute specifies which file to take (relative to + // dependency-cruiser's current working directory). When not provided + // defaults to './tsconfig.json'. + tsConfig: { + fileName: 'src/tsconfig.json' + }, + + // Webpack configuration to use to get resolve options from. + // + // The (optional) fileName attribute specifies which file to take (relative + // to dependency-cruiser's current working directory. When not provided defaults + // to './webpack.conf.js'. + // + // The (optional) 'env' and 'arguments' attributes contain the parameters + // to be passed if your webpack config is a function and takes them (see + // webpack documentation for details) + // webpackConfig: { + // fileName: 'webpack.config.js', + // env: {}, + // arguments: {} + // }, + + // Babel config ('.babelrc', '.babelrc.json', '.babelrc.json5', ...) to use + // for compilation + // babelConfig: { + // fileName: '.babelrc', + // }, + + // List of strings you have in use in addition to cjs/ es6 requires + // & imports to declare module dependencies. Use this e.g. if you've + // re-declared require, use a require-wrapper or use window.require as + // a hack. + // exoticRequireStrings: [], + + // options to pass on to enhanced-resolve, the package dependency-cruiser + // uses to resolve module references to disk. The values below should be + // suitable for most situations + // + // If you use webpack: you can also set these in webpack.conf.js. The set + // there will override the ones specified here. + enhancedResolveOptions: { + // What to consider as an 'exports' field in package.jsons + exportsFields: ['exports'], + + // List of conditions to check for in the exports field. + // Only works when the 'exportsFields' array is non-empty. + conditionNames: ['import', 'require', 'node', 'default', 'types'], + + // The extensions, by default are the same as the ones dependency-cruiser + // can access (run `npx depcruise --info` to see which ones that are in + // _your_ environment). If that list is larger than you need you can pass + // the extensions you actually use (e.g. ['.js', '.jsx']). This can speed + // up module resolution, which is the most expensive step. + // extensions: [".js", ".jsx", ".ts", ".tsx", ".d.ts"], + + // What to consider a 'main' field in package.json + mainFields: ["module", "main", "types", "typings"], + + // A list of alias fields in package.jsons + // See https://github.com/defunctzombie/package-browser-field-spec and + // the webpack [resolve.alias](https://webpack.js.org/configuration/resolve/#resolvealiasfields) + // documentation. + // Defaults to an empty array (= don't use alias fields). + // aliasFields: ['browser'], + }, + + // skipAnalysisNotInRules will make dependency-cruiser execute + // analysis strictly necessary for checking the rule set only. + // See https://github.com/sverweij/dependency-cruiser/blob/main/doc/options-reference.md#skipanalysisnotinrules + skipAnalysisNotInRules: true, + + reporterOptions: { + dot: { + // Pattern of modules to consolidate to. The default pattern in this configuration + // collapses everything in node_modules to one folder deep so you see + // the external modules, but not their innards. + collapsePattern: 'node_modules/(?:@[^/]+/[^/]+|[^/]+)', + + // Options to tweak the appearance of your graph. See + // https://github.com/sverweij/dependency-cruiser/blob/main/doc/options-reference.md#reporteroptions + // If you don't specify a theme dependency-cruiser falls back to a built-in one. + // theme: { + // graph: { + // // splines: 'ortho' - straight lines; slow on big graphs + // // splines: 'true' - bezier curves; fast but not as nice as ortho + // splines: 'true' + // }, + // }, + }, + archi: { + // Pattern of modules to consolidate to. + collapsePattern: '^(?:packages|src|lib(s?)|app(s?)|bin|test(s?)|spec(s?))/[^/]+|node_modules/(?:@[^/]+/[^/]+|[^/]+)', + + // Options to tweak the appearance of your graph. If you don't specify a + // theme for 'archi' dependency-cruiser will use the one specified in the + // dot section above and otherwise use the default one. + // theme: { }, + }, + text: { + highlightFocused: true + }, + } + } +}; +// generated: dependency-cruiser@17.3.7 on 2026-01-28T14:30:16.611Z diff --git a/cli/commands/build-eslint/CHANGELOG.md b/cli/commands/build-eslint/CHANGELOG.md new file mode 100644 index 00000000000..4f911b8b6d9 --- /dev/null +++ b/cli/commands/build-eslint/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/cli-command-build-eslint diff --git a/cli/commands/build-eslint/README.md b/cli/commands/build-eslint/README.md new file mode 100644 index 00000000000..52fc05e00c5 --- /dev/null +++ b/cli/commands/build-eslint/README.md @@ -0,0 +1,49 @@ +[![banner](https://particles.js.org/images/banner2.png)](https://particles.js.org) + +# tsParticles CLI + +## Installation + +### NPM + +```bash +npm install -g @tsparticles/cli-build +``` + +### Yarn + +```bash +yarn global add @tsparticles/cli-build +``` + +### PNPM + +```bash +pnpm global add @tsparticles/cli-build +``` + +## Usage + +### Help + +```bash +npx @tsparticles/cli-build --help +``` + +or + +```bash +tsparticles-build --help +``` + +### Build + +```bash +npx @tsparticles/cli-build +``` + +or + +```bash +tsparticles-build +``` diff --git a/cli/commands/build-eslint/eslint.config.js b/cli/commands/build-eslint/eslint.config.js new file mode 100644 index 00000000000..7dc85e779b6 --- /dev/null +++ b/cli/commands/build-eslint/eslint.config.js @@ -0,0 +1,22 @@ +import path from "path"; +import {fileURLToPath} from "url"; +import {defineConfig} from "eslint/config"; +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default defineConfig([ + tsParticlesESLintConfig, + { + languageOptions: { + parserOptions: { + project: [path.join(__dirname, "src", "tsconfig.json")], + tsconfigRootDir: __dirname, + sourceType: "module" + } + }, + rules: { + "no-console": "off" + } + } +]); diff --git a/cli/commands/build-eslint/package.json b/cli/commands/build-eslint/package.json new file mode 100644 index 00000000000..2bf330fc681 --- /dev/null +++ b/cli/commands/build-eslint/package.json @@ -0,0 +1,74 @@ +{ + "name": "@tsparticles/cli-command-build-eslint", + "version": "4.0.0-beta.15", + "license": "MIT", + "type": "module", + "publishConfig": { + "access": "public", + "tagVersionPrefix": "v" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "cli/commands/build-eslint" + }, + "prettier": "@tsparticles/prettier-config", + "scripts": { + "prettify:ci:src": "prettier --check ./src/*", + "prettify:ci:readme": "prettier --check ./README.md", + "prettify:src": "prettier --write ./src/*", + "prettify:readme": "prettier --write ./README.md", + "lint": "eslint src --ext .js,.jsx,.ts,.tsx --cache --cache-location .cache/eslint/.eslintcache --cache-strategy metadata --fix", + "lint:ci": "eslint src --ext .js,.jsx,.ts,.tsx --cache --cache-location .cache/eslint/.eslintcache --cache-strategy metadata", + "circular-deps": "depcruise src --include-only '^src' --validate --output-type err-long", + "compile": "pnpm run build:ts", + "compile:ci": "pnpm run build:ts", + "build:ts": "pnpm run build:ts:cjs", + "build:ts:cjs": "tsc -p src", + "build": "pnpm run clear:dist && pnpm run prettify:src && pnpm run lint && pnpm run compile && pnpm run circular-deps && pnpm run prettify:readme", + "build:ci": "pnpm run clear:dist && pnpm run prettify:ci:src && pnpm run lint:ci && pnpm run compile:ci && pnpm run prettify:ci:readme", + "clear:dist": "rimraf ./dist", + "prepack": "pnpm run build" + }, + "peerDependencies": { + "commander": "^14", + "eslint": "^10" + }, + "dependencies": { + "@swc/core": "^1.15.33", + "@tsparticles/depcruise-config": "workspace:^", + "@tsparticles/eslint-config": "workspace:^", + "@tsparticles/prettier-config": "workspace:^", + "@tsparticles/tsconfig": "workspace:^", + "dependency-cruiser": "^17.4.0", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-jsdoc": "^62.9.0", + "eslint-plugin-prettier": "^5.5.5", + "eslint-plugin-tsdoc": "^0.5.2", + "klaw": "^4.1.0", + "lookpath": "^1.2.3", + "path-scurry": "^2.0.2", + "prettier": "^3.8.3", + "prettier-plugin-multiline-arrays": "^4.1.8", + "prompts": "^2.4.2", + "rimraf": "^6.1.3", + "swc-loader": "^0.2.7", + "typescript": "^6.0.3", + "typescript-eslint": "^8.59.2" + }, + "devDependencies": { + "@types/estree": "^1.0.9", + "@types/klaw": "^3.0.7", + "@types/node": "^25.6.2", + "@types/prompts": "^2.4.9", + "browserslist": "^4.28.2", + "commander": "^14.0.3", + "copyfiles": "^2.4.1", + "cross-env": "^10.1.0", + "eslint": "^10.3.0", + "ts-node": "^10.9.2" + }, + "description": "tsParticles CLI", + "main": "dist/eslint.js", + "author": "Matteo Bruni " +} diff --git a/cli/commands/build-eslint/renovate.json b/cli/commands/build-eslint/renovate.json new file mode 100644 index 00000000000..df30aa6db3e --- /dev/null +++ b/cli/commands/build-eslint/renovate.json @@ -0,0 +1,9 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "baseBranches": [ + "dev" + ], + "extends": [ + "config:base" + ] +} diff --git a/cli/commands/build-eslint/src/eslint.ts b/cli/commands/build-eslint/src/eslint.ts new file mode 100644 index 00000000000..61809af59d9 --- /dev/null +++ b/cli/commands/build-eslint/src/eslint.ts @@ -0,0 +1,31 @@ +import { Command } from "commander"; +import { lint } from "./utils.js"; + +const esLintCommand = new Command("eslint"); + +esLintCommand.description("ESLint for tsParticles library"); +esLintCommand.option( + "--ci", + "Do all build steps for CI, no fixing files, only checking if they are formatted correctly, sets silent to true by default", + false, +); +esLintCommand.option( + "-s, --silent ", + "Reduce the amount of output during the build, defaults to false, except when --ci is set", + false, +); + +esLintCommand.action(async () => { + const opts = esLintCommand.opts(), + ci = !!opts["ci"], + silentOpt = opts["silent"] as string | boolean, + silent = silentOpt === "false" ? false : !!silentOpt || ci; + + if (!(await lint(ci, silent))) { + throw new Error("Dist files build failed"); + } + + console.log("Bundle finished successfully!"); +}); + +export { lint, esLintCommand }; diff --git a/cli/commands/build-eslint/src/tsconfig.json b/cli/commands/build-eslint/src/tsconfig.json new file mode 100644 index 00000000000..a86b208cb31 --- /dev/null +++ b/cli/commands/build-eslint/src/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "rootDir": ".", + "outDir": "../dist" + }, + "references": [{ "path": "../" }], + "include": ["**/*"] +} diff --git a/cli/commands/build-eslint/src/utils.ts b/cli/commands/build-eslint/src/utils.ts new file mode 100644 index 00000000000..626b8acddff --- /dev/null +++ b/cli/commands/build-eslint/src/utils.ts @@ -0,0 +1,53 @@ +import { ESLint } from "eslint"; + +/** + * @param ci - + * @param silent - + * @returns true if the linting was successful + */ +export async function lint(ci: boolean, silent: boolean): Promise { + if (!silent) { + console.log("ESLint - started on src"); + } + + let res: boolean; + + try { + const eslint = new ESLint({ + fix: !ci, + cache: true, + cacheLocation: ".cache/eslint/.eslintcache", + cacheStrategy: "content", + }), + results = await eslint.lintFiles(["src"]), + errors = ESLint.getErrorResults(results); + + await ESLint.outputFixes(results); + + const formatter = await eslint.loadFormatter("stylish"), + resultText = formatter.format(results), + minimumLength = 0; + + if (errors.length > minimumLength) { + const messages = errors.map(t => + t.messages.map(m => `${t.filePath} (${m.line.toString()},${m.column.toString()}): ${m.message}`).join("\n"), + ); + + throw new Error(messages.join("\n")); + } + + console.log(resultText); + + res = true; + } catch (e) { + console.error(e); + + res = false; + } + + if (!silent) { + console.log("ESLint - done on src"); + } + + return res; +} diff --git a/cli/commands/build-eslint/tsconfig.json b/cli/commands/build-eslint/tsconfig.json new file mode 100644 index 00000000000..714efda86b6 --- /dev/null +++ b/cli/commands/build-eslint/tsconfig.json @@ -0,0 +1,53 @@ +{ + "compilerOptions": { + "rootDir": ".", + "outDir": ".", + "resolveJsonModule": true, + "composite": true, + "target": "ESNext", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "lib": [ + "ESNext", + "ES2024", + "ES2023", + "ES2022", + "ES2021", + "ES2020", + "ES2019", + "ES2018", + "ES2017", + "ES2016", + "ES2015" + ], + "types": [ + "node", + "klaw", + "prompts", + "eslint" + ], + "strict": true, + "noImplicitAny": true, + "strictNullChecks": true, + "strictFunctionTypes": true, + "strictBindCallApply": true, + "strictPropertyInitialization": true, + "noImplicitThis": true, + "useUnknownInCatchVariables": true, + "alwaysStrict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "exactOptionalPropertyTypes": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedIndexedAccess": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "allowSyntheticDefaultImports": true + }, + "include": [ + "src/**/*" + ] +} diff --git a/cli/commands/build-prettier/.dependency-cruiser.cjs b/cli/commands/build-prettier/.dependency-cruiser.cjs new file mode 100644 index 00000000000..93e0d55a39d --- /dev/null +++ b/cli/commands/build-prettier/.dependency-cruiser.cjs @@ -0,0 +1,382 @@ +/** @type {import('dependency-cruiser').IConfiguration} */ +module.exports = { + forbidden: [ + { + name: 'no-circular', + severity: 'warn', + comment: + "This dependency is part of a circular relationship. You might want to revise " + + "your solution (i.e. use dependency inversion, make sure the modules have a single responsibility) ", + from: {}, + to: { + circular: true + } + }, + { + name: 'no-orphans', + comment: + "This is an orphan module - it's likely not used (anymore?). Either use it or " + + "remove it. If it's logical this module is an orphan (i.e. it's a config file), " + + "add an exception for it in your dependency-cruiser configuration. By default " + + "this rule does not scrutinize dot-files (e.g. .eslintrc.js), TypeScript declaration " + + "files (.d.ts), tsconfig.json and some of the babel and webpack configs.", + severity: 'warn', + from: { + orphan: true, + pathNot: [ + '(^|/)[.][^/]+[.](?:js|cjs|mjs|ts|cts|mts|json)$', // dot files + '[.]d[.]ts$', // TypeScript declaration files + '(^|/)tsconfig[.]json$', // TypeScript config + '(^|/)(?:babel|webpack)[.]config[.](?:js|cjs|mjs|ts|cts|mts|json)$' // other configs + ] + }, + to: {}, + }, + { + name: 'no-deprecated-core', + comment: + 'A module depends on a node core module that has been deprecated. Find an alternative - these are ' + + "bound to exist - node doesn't deprecate lightly.", + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'core' + ], + path: [ + '^v8/tools/codemap$', + '^v8/tools/consarray$', + '^v8/tools/csvparser$', + '^v8/tools/logreader$', + '^v8/tools/profile_view$', + '^v8/tools/profile$', + '^v8/tools/SourceMap$', + '^v8/tools/splaytree$', + '^v8/tools/tickprocessor-driver$', + '^v8/tools/tickprocessor$', + '^node-inspect/lib/_inspect$', + '^node-inspect/lib/internal/inspect_client$', + '^node-inspect/lib/internal/inspect_repl$', + '^async_hooks$', + '^punycode$', + '^domain$', + '^constants$', + '^sys$', + '^_linklist$', + '^_stream_wrap$' + ], + } + }, + { + name: 'not-to-deprecated', + comment: + 'This module uses a (version of an) npm module that has been deprecated. Either upgrade to a later ' + + 'version of that module, or find an alternative. Deprecated modules are a security risk.', + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'deprecated' + ] + } + }, + { + name: 'no-non-package-json', + severity: 'error', + comment: + "This module depends on an npm package that isn't in the 'dependencies' section of your package.json. " + + "That's problematic as the package either (1) won't be available on live (2 - worse) will be " + + "available on live with an non-guaranteed version. Fix it by adding the package to the dependencies " + + "in your package.json.", + from: {}, + to: { + dependencyTypes: [ + 'npm-no-pkg', + 'npm-unknown' + ] + } + }, + { + name: 'not-to-unresolvable', + comment: + "This module depends on a module that cannot be found ('resolved to disk'). If it's an npm " + + 'module: add it to your package.json. In all other cases you likely already know what to do.', + severity: 'error', + from: {}, + to: { + couldNotResolve: true + } + }, + { + name: 'no-duplicate-dep-types', + comment: + "Likely this module depends on an external ('npm') package that occurs more than once " + + "in your package.json i.e. bot as a devDependencies and in dependencies. This will cause " + + "maintenance problems later on.", + severity: 'warn', + from: {}, + to: { + moreThanOneDependencyType: true, + // as it's common to use a devDependency for type-only imports: don't + // consider type-only dependencyTypes for this rule + dependencyTypesNot: ["type-only"] + } + }, + + // rules you might want to tweak for your specific situation: + { + name: 'not-to-test', + comment: + "This module depends on code within a folder that should only contain tests. As tests don't " + + "implement functionality this is odd. Either you're writing a test outside the test folder " + + "or there's something in the test folder that isn't a test.", + severity: 'error', + from: { + pathNot: '^(tests)' + }, + to: { + path: '^(tests)' + } + }, + { + name: 'not-to-spec', + comment: + 'This module depends on a spec (test) file. The responsibility of a spec file is to test code. ' + + "If there's something in a spec that's of use to other modules, it doesn't have that single " + + 'responsibility anymore. Factor it out into (e.g.) a separate utility/ helper or a mock.', + severity: 'error', + from: {}, + to: { + path: '[.](?:spec|test)[.](?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$' + } + }, + { + name: 'not-to-dev-dep', + severity: 'error', + comment: + "This module depends on an npm package from the 'devDependencies' section of your " + + 'package.json. It looks like something that ships to production, though. To prevent problems ' + + "with npm packages that aren't there on production declare it (only!) in the 'dependencies'" + + 'section of your package.json. If this module is development only - add it to the ' + + 'from.pathNot re of the not-to-dev-dep rule in the dependency-cruiser configuration', + from: { + path: '^(src)', + pathNot: '[.](?:spec|test)[.](?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$' + }, + to: { + dependencyTypes: [ + 'npm-dev', + ], + // type only dependencies are not a problem as they don't end up in the + // production code or are ignored by the runtime. + dependencyTypesNot: [ + 'type-only' + ], + pathNot: [ + 'node_modules/@types/' + ] + } + }, + { + name: 'optional-deps-used', + severity: 'info', + comment: + "This module depends on an npm package that is declared as an optional dependency " + + "in your package.json. As this makes sense in limited situations only, it's flagged here. " + + "If you use an optional dependency here by design - add an exception to your" + + "dependency-cruiser configuration.", + from: {}, + to: { + dependencyTypes: [ + 'npm-optional' + ] + } + }, + { + name: 'peer-deps-used', + comment: + "This module depends on an npm package that is declared as a peer dependency " + + "in your package.json. This makes sense if your package is e.g. a plugin, but in " + + "other cases - maybe not so much. If the use of a peer dependency is intentional " + + "add an exception to your dependency-cruiser configuration.", + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'npm-peer' + ] + } + } + ], + options: { + // Which modules not to follow further when encountered + doNotFollow: { + // path: an array of regular expressions in strings to match against + path: ['node_modules'] + }, + + // Which modules to exclude + // exclude : { + // // path: an array of regular expressions in strings to match against + // path: '', + // }, + + // Which modules to exclusively include (array of regular expressions in strings) + // dependency-cruiser will skip everything that doesn't match this pattern + // includeOnly : [''], + + // List of module systems to cruise. + // When left out dependency-cruiser will fall back to the list of _all_ + // module systems it knows of ('amd', 'cjs', 'es6', 'tsd']). It's the + // default because it's the safe option. It comes at a performance penalty, though + // As in practice only commonjs ('cjs') and ecmascript modules ('es6') + // are in wide use, you can limit the moduleSystems to those. + // moduleSystems: ['cjs', 'es6'], + + // false: don't look at JSDoc imports (the default) + // true: detect dependencies in JSDoc-style import statements. + // Implies parser: 'tsc', which a.o. means the typescript compiler will need + // to be installed in the same spot you run dependency-cruiser from. + // detectJSDocImports: true, + + // false: don't look at process.getBuiltinModule calls (the default) + // true: dependency-cruiser will detect calls to process.getBuiltinModule/ + // globalThis.process.getBuiltinModule as imports. + // detectProcessBuiltinModuleCalls: true, + + // prefix for links in html, d2, mermaid and dot/ svg output (e.g. 'https://github.com/you/yourrepo/blob/main/' + // to open it on your online repo or `vscode://file/${process.cwd()}/` to + // open it in visual studio code), + // prefix: `vscode://file/${process.cwd()}/`, + + // suffix for links in output. E.g. put .html here if you use it to link to + // your coverage reports. + // suffix: '.html', + + // false (the default): ignore dependencies that only exist before typescript-to-javascript compilation + // true: also detect dependencies that only exist before typescript-to-javascript compilation + // 'specify': for each dependency identify whether it only exists before compilation or also after + // tsPreCompilationDeps: false, + + // list of extensions to scan that aren't javascript or compile-to-javascript. + // Empty by default. Only put extensions in here that you want to take into + // account that are _not_ parsable. + // extraExtensionsToScan: ['.json', '.jpg', '.png', '.svg', '.webp'], + + // if true combines the package.jsons found from the module up to the base + // folder the cruise is initiated from. Useful for how (some) mono-repos + // manage dependencies & dependency definitions. + // combinedDependencies: false, + + // if true leave symlinks untouched, otherwise use the realpath + // preserveSymlinks: false, + + // TypeScript project file ('tsconfig.json') to use for + // (1) compilation and + // (2) resolution (e.g. with the paths property) + // + // The (optional) fileName attribute specifies which file to take (relative to + // dependency-cruiser's current working directory). When not provided + // defaults to './tsconfig.json'. + tsConfig: { + fileName: 'src/tsconfig.json' + }, + + // Webpack configuration to use to get resolve options from. + // + // The (optional) fileName attribute specifies which file to take (relative + // to dependency-cruiser's current working directory. When not provided defaults + // to './webpack.conf.js'. + // + // The (optional) 'env' and 'arguments' attributes contain the parameters + // to be passed if your webpack config is a function and takes them (see + // webpack documentation for details) + // webpackConfig: { + // fileName: 'webpack.config.js', + // env: {}, + // arguments: {} + // }, + + // Babel config ('.babelrc', '.babelrc.json', '.babelrc.json5', ...) to use + // for compilation + // babelConfig: { + // fileName: '.babelrc', + // }, + + // List of strings you have in use in addition to cjs/ es6 requires + // & imports to declare module dependencies. Use this e.g. if you've + // re-declared require, use a require-wrapper or use window.require as + // a hack. + // exoticRequireStrings: [], + + // options to pass on to enhanced-resolve, the package dependency-cruiser + // uses to resolve module references to disk. The values below should be + // suitable for most situations + // + // If you use webpack: you can also set these in webpack.conf.js. The set + // there will override the ones specified here. + enhancedResolveOptions: { + // What to consider as an 'exports' field in package.jsons + exportsFields: ['exports'], + + // List of conditions to check for in the exports field. + // Only works when the 'exportsFields' array is non-empty. + conditionNames: ['import', 'require', 'node', 'default', 'types'], + + // The extensions, by default are the same as the ones dependency-cruiser + // can access (run `npx depcruise --info` to see which ones that are in + // _your_ environment). If that list is larger than you need you can pass + // the extensions you actually use (e.g. ['.js', '.jsx']). This can speed + // up module resolution, which is the most expensive step. + // extensions: [".js", ".jsx", ".ts", ".tsx", ".d.ts"], + + // What to consider a 'main' field in package.json + mainFields: ["module", "main", "types", "typings"], + + // A list of alias fields in package.jsons + // See https://github.com/defunctzombie/package-browser-field-spec and + // the webpack [resolve.alias](https://webpack.js.org/configuration/resolve/#resolvealiasfields) + // documentation. + // Defaults to an empty array (= don't use alias fields). + // aliasFields: ['browser'], + }, + + // skipAnalysisNotInRules will make dependency-cruiser execute + // analysis strictly necessary for checking the rule set only. + // See https://github.com/sverweij/dependency-cruiser/blob/main/doc/options-reference.md#skipanalysisnotinrules + skipAnalysisNotInRules: true, + + reporterOptions: { + dot: { + // Pattern of modules to consolidate to. The default pattern in this configuration + // collapses everything in node_modules to one folder deep so you see + // the external modules, but not their innards. + collapsePattern: 'node_modules/(?:@[^/]+/[^/]+|[^/]+)', + + // Options to tweak the appearance of your graph. See + // https://github.com/sverweij/dependency-cruiser/blob/main/doc/options-reference.md#reporteroptions + // If you don't specify a theme dependency-cruiser falls back to a built-in one. + // theme: { + // graph: { + // // splines: 'ortho' - straight lines; slow on big graphs + // // splines: 'true' - bezier curves; fast but not as nice as ortho + // splines: 'true' + // }, + // }, + }, + archi: { + // Pattern of modules to consolidate to. + collapsePattern: '^(?:packages|src|lib(s?)|app(s?)|bin|test(s?)|spec(s?))/[^/]+|node_modules/(?:@[^/]+/[^/]+|[^/]+)', + + // Options to tweak the appearance of your graph. If you don't specify a + // theme for 'archi' dependency-cruiser will use the one specified in the + // dot section above and otherwise use the default one. + // theme: { }, + }, + text: { + highlightFocused: true + }, + } + } +}; +// generated: dependency-cruiser@17.3.7 on 2026-01-28T14:30:16.611Z diff --git a/cli/commands/build-prettier/CHANGELOG.md b/cli/commands/build-prettier/CHANGELOG.md new file mode 100644 index 00000000000..2f006ab46eb --- /dev/null +++ b/cli/commands/build-prettier/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/cli-command-build-prettier diff --git a/cli/commands/build-prettier/README.md b/cli/commands/build-prettier/README.md new file mode 100644 index 00000000000..52fc05e00c5 --- /dev/null +++ b/cli/commands/build-prettier/README.md @@ -0,0 +1,49 @@ +[![banner](https://particles.js.org/images/banner2.png)](https://particles.js.org) + +# tsParticles CLI + +## Installation + +### NPM + +```bash +npm install -g @tsparticles/cli-build +``` + +### Yarn + +```bash +yarn global add @tsparticles/cli-build +``` + +### PNPM + +```bash +pnpm global add @tsparticles/cli-build +``` + +## Usage + +### Help + +```bash +npx @tsparticles/cli-build --help +``` + +or + +```bash +tsparticles-build --help +``` + +### Build + +```bash +npx @tsparticles/cli-build +``` + +or + +```bash +tsparticles-build +``` diff --git a/cli/commands/build-prettier/eslint.config.js b/cli/commands/build-prettier/eslint.config.js new file mode 100644 index 00000000000..7dc85e779b6 --- /dev/null +++ b/cli/commands/build-prettier/eslint.config.js @@ -0,0 +1,22 @@ +import path from "path"; +import {fileURLToPath} from "url"; +import {defineConfig} from "eslint/config"; +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default defineConfig([ + tsParticlesESLintConfig, + { + languageOptions: { + parserOptions: { + project: [path.join(__dirname, "src", "tsconfig.json")], + tsconfigRootDir: __dirname, + sourceType: "module" + } + }, + rules: { + "no-console": "off" + } + } +]); diff --git a/cli/commands/build-prettier/package.json b/cli/commands/build-prettier/package.json new file mode 100644 index 00000000000..8774e555b07 --- /dev/null +++ b/cli/commands/build-prettier/package.json @@ -0,0 +1,74 @@ +{ + "name": "@tsparticles/cli-command-build-prettier", + "version": "4.0.0-beta.15", + "license": "MIT", + "type": "module", + "publishConfig": { + "access": "public", + "tagVersionPrefix": "v" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "cli/commands/build-prettier" + }, + "prettier": "@tsparticles/prettier-config", + "scripts": { + "prettify:ci:src": "prettier --check ./src/*", + "prettify:ci:readme": "prettier --check ./README.md", + "prettify:src": "prettier --write ./src/*", + "prettify:readme": "prettier --write ./README.md", + "lint": "eslint src --ext .js,.jsx,.ts,.tsx --cache --cache-location .cache/eslint/.eslintcache --cache-strategy metadata --fix", + "lint:ci": "eslint src --ext .js,.jsx,.ts,.tsx --cache --cache-location .cache/eslint/.eslintcache --cache-strategy metadata", + "circular-deps": "depcruise src --include-only '^src' --validate --output-type err-long", + "compile": "pnpm run build:ts", + "compile:ci": "pnpm run build:ts", + "build:ts": "pnpm run build:ts:cjs", + "build:ts:cjs": "tsc -p src", + "build": "pnpm run clear:dist && pnpm run prettify:src && pnpm run lint && pnpm run compile && pnpm run circular-deps && pnpm run prettify:readme", + "build:ci": "pnpm run clear:dist && pnpm run prettify:ci:src && pnpm run lint:ci && pnpm run compile:ci && pnpm run prettify:ci:readme", + "clear:dist": "rimraf ./dist", + "prepack": "pnpm run build" + }, + "peerDependencies": { + "commander": "^14", + "prettier": "^3" + }, + "dependencies": { + "@swc/core": "^1.15.33", + "@tsparticles/depcruise-config": "workspace:^", + "@tsparticles/eslint-config": "workspace:^", + "@tsparticles/prettier-config": "workspace:^", + "@tsparticles/tsconfig": "workspace:^", + "dependency-cruiser": "^17.4.0", + "eslint": "^10.3.0", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-jsdoc": "^62.9.0", + "eslint-plugin-prettier": "^5.5.5", + "eslint-plugin-tsdoc": "^0.5.2", + "klaw": "^4.1.0", + "lookpath": "^1.2.3", + "path-scurry": "^2.0.2", + "prettier-plugin-multiline-arrays": "^4.1.8", + "prompts": "^2.4.2", + "rimraf": "^6.1.3", + "swc-loader": "^0.2.7", + "typescript": "^6.0.3", + "typescript-eslint": "^8.59.2" + }, + "devDependencies": { + "@types/estree": "^1.0.9", + "@types/klaw": "^3.0.7", + "@types/node": "^25.6.2", + "@types/prompts": "^2.4.9", + "browserslist": "^4.28.2", + "commander": "^14.0.3", + "copyfiles": "^2.4.1", + "cross-env": "^10.1.0", + "prettier": "^3.8.3", + "ts-node": "^10.9.2" + }, + "description": "tsParticles CLI", + "main": "dist/prettier.js", + "author": "Matteo Bruni " +} diff --git a/cli/commands/build-prettier/renovate.json b/cli/commands/build-prettier/renovate.json new file mode 100644 index 00000000000..df30aa6db3e --- /dev/null +++ b/cli/commands/build-prettier/renovate.json @@ -0,0 +1,9 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "baseBranches": [ + "dev" + ], + "extends": [ + "config:base" + ] +} diff --git a/cli/commands/build-prettier/src/prettier.ts b/cli/commands/build-prettier/src/prettier.ts new file mode 100644 index 00000000000..ab83fb93d74 --- /dev/null +++ b/cli/commands/build-prettier/src/prettier.ts @@ -0,0 +1,53 @@ +import { prettifyPackageDistJson, prettifyPackageJson, prettifyReadme, prettifySrc } from "./utils.js"; +import { Command } from "commander"; +import { existsSync } from "node:fs"; +import path from "node:path"; + +const prettierCommand = new Command("prettier"); + +prettierCommand.description("Prepare the dist files for tsParticles library"); +prettierCommand.option( + "--ci", + "Do all build steps for CI, no fixing files, only checking if they are formatted correctly, sets silent to true by default", + false, +); +prettierCommand.option( + "-s, --silent ", + "Reduce the amount of output during the build, defaults to false, except when --ci is set", + false, +); + +prettierCommand.action(async (argPath: string) => { + const opts = prettierCommand.opts(), + ci = !!opts["ci"], + silentOpt = opts["silent"] as string | boolean, + silent = silentOpt === "false" ? false : !!silentOpt || ci, + basePath = process.cwd(); + + if (!existsSync(basePath)) { + throw new Error("Provided path does not exist"); + } + + const srcPath = path.join(basePath, argPath); + + if (!existsSync(srcPath)) { + throw new Error("Provided path does not exist"); + } + + let canContinue = await prettifySrc(basePath, srcPath, ci, silent); + + if (canContinue) { + canContinue = + (await prettifyReadme(basePath, ci, silent)) && + (await prettifyPackageJson(basePath, ci, silent)) && + (await prettifyPackageDistJson(basePath, ci, silent)); + } + + if (!canContinue) { + throw new Error("Dist files build failed"); + } + + console.info("Bundle finished successfully!"); +}); + +export { prettifySrc, prettifyReadme, prettifyPackageJson, prettifyPackageDistJson, prettierCommand }; diff --git a/cli/commands/build-prettier/src/tsconfig.json b/cli/commands/build-prettier/src/tsconfig.json new file mode 100644 index 00000000000..a86b208cb31 --- /dev/null +++ b/cli/commands/build-prettier/src/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "rootDir": ".", + "outDir": "../dist" + }, + "references": [{ "path": "../" }], + "include": ["**/*"] +} diff --git a/cli/commands/build-prettier/src/utils.ts b/cli/commands/build-prettier/src/utils.ts new file mode 100644 index 00000000000..81dfb26665d --- /dev/null +++ b/cli/commands/build-prettier/src/utils.ts @@ -0,0 +1,285 @@ +import { readFile, writeFile } from "node:fs/promises"; +import { existsSync } from "node:fs"; +import klaw from "klaw"; +import path from "node:path"; +import prettier from "prettier"; + +type PrettierSupportedParser = "typescript" | "json" | "markdown"; + +/** + * @param basePath - + * @param parser - + * @returns - + */ +async function getPrettierOptions( + basePath: string, + parser: PrettierSupportedParser, +): Promise { + const baseOptions = (await prettier.resolveConfig(basePath)) ?? {}; + + return { + ...baseOptions, + printWidth: 120, + endOfLine: "lf", + tabWidth: 2, + arrowParens: "avoid", + parser, + }; +} + +/** + * @param filePath - + * @param options - + * @param ci - + * @param errorMessage - + */ +async function formatOrCheckFile( + filePath: string, + options: prettier.Options, + ci: boolean, + errorMessage: string, +): Promise { + const contents = await readFile(filePath, "utf8"); + + if (ci) { + if (!(await prettier.check(contents, options))) { + throw new Error(errorMessage); + } + + return; + } + + const formatted = await prettier.format(contents, options); + + if (formatted !== contents) { + await writeFile(filePath, formatted, "utf8"); + } +} + +/** + * @param basePath - + * @param srcPath - + * @param ci - + * @param silent - + * @returns true if the prettify src process was successful + */ +export async function prettifySrc(basePath: string, srcPath: string, ci: boolean, silent: boolean): Promise { + if (!silent) { + console.info("Prettier - started on src"); + } + + let res: boolean; + + try { + const options = await getPrettierOptions(basePath, "typescript"); + + for await (const file of klaw(srcPath)) { + if (file.stats.isDirectory()) { + continue; + } + + await formatOrCheckFile(file.path, options, ci, `${file.path} is not formatted correctly`); + } + + res = true; + } catch (e) { + console.error(e); + + res = false; + } + + if (!silent) { + console.info("Prettier - done on src"); + } + + return res; +} + +/** + * @param basePath - + * @param ci - + * @param silent - + * @returns true if the prettify package.json process was successful + */ +export async function prettifyPackageJson(basePath: string, ci: boolean, silent: boolean): Promise { + if (!silent) { + console.info("Prettier - started on package.json"); + } + + let res: boolean; + + try { + const options = await getPrettierOptions(basePath, "json"); + + await formatOrCheckFile("package.json", options, ci, "package.json is not formatted correctly"); + + res = true; + } catch (e) { + console.error(e); + + res = false; + } + + if (!silent) { + console.info("Prettier - done on package.json"); + } + + return res; +} + +/** + * @param basePath - + * @param ci - + * @param silent - + * @returns true if the prettify package.dist.json process was successful + */ +export async function prettifyPackageDistJson(basePath: string, ci: boolean, silent: boolean): Promise { + if (!silent) { + console.info("Prettier - started on package.dist.json"); + } + + let res: boolean; + + try { + const options = await getPrettierOptions(basePath, "json"); + + await formatOrCheckFile("package.dist.json", options, ci, "package.dist.json is not formatted correctly"); + + res = true; + } catch (e) { + console.error(e); + + res = false; + } + + if (!silent) { + console.info("Prettier - done on package.dist.json"); + } + + return res; +} + +/** + * @param basePath - + * @param ci - + * @param silent - + * @returns true if the prettify readme process was successful + */ +export async function prettifyReadme(basePath: string, ci: boolean, silent: boolean): Promise { + if (!silent) { + console.info("Prettier - started on README.md"); + } + + let res: boolean; + + try { + const options = await getPrettierOptions(basePath, "markdown"); + + await formatOrCheckFile("README.md", options, ci, "README.md is not formatted correctly"); + + res = + (await prettifyTraductions(basePath, ci, silent)) && (await prettifyMarkdownTypeDocFiles(basePath, ci, silent)); + } catch (e) { + console.error(e); + + res = false; + } + + if (!silent) { + console.info("Prettier - done on README.md"); + } + + return res; +} + +/** + * @param basePath - + * @param ci - + * @param silent - + * @returns true if the prettify traductions process was successful + */ +async function prettifyTraductions(basePath: string, ci: boolean, silent: boolean): Promise { + if (!silent) { + console.info("Prettier - started on traductions"); + } + + let res = false; + + try { + const folder = "traduction", + folderPath = path.join(basePath, folder), + options = await getPrettierOptions(basePath, "markdown"); + + if (!existsSync(folderPath)) { + res = true; + } + + if (!res) { + for await (const file of klaw(folderPath)) { + if (file.stats.isDirectory()) { + continue; + } + + await formatOrCheckFile(file.path, options, ci, `${file.path} is not formatted correctly`); + } + + res = true; + } + } catch (e) { + console.error(e); + + res = false; + } + + if (!silent) { + console.info("Prettier - done on traductions"); + } + + return res; +} + +/** + * @param basePath - + * @param ci - + * @param silent - + * @returns true if the prettify markdown typedoc files process was successful + */ +async function prettifyMarkdownTypeDocFiles(basePath: string, ci: boolean, silent: boolean): Promise { + if (!silent) { + console.info("Prettier - started on markdown"); + } + + let res = false; + + try { + const folder = "markdown", + folderPath = path.join(basePath, folder), + options = await getPrettierOptions(basePath, "markdown"); + + if (!existsSync(folderPath)) { + res = true; + } + + if (!res) { + for await (const file of klaw(folderPath)) { + if (file.stats.isDirectory()) { + continue; + } + + await formatOrCheckFile(file.path, options, ci, `${file.path} is not formatted correctly`); + } + + res = true; + } + } catch (e) { + console.error(e); + + res = false; + } + + if (!silent) { + console.info("Prettier - done on markdown"); + } + + return res; +} diff --git a/cli/commands/build-prettier/tsconfig.json b/cli/commands/build-prettier/tsconfig.json new file mode 100644 index 00000000000..714efda86b6 --- /dev/null +++ b/cli/commands/build-prettier/tsconfig.json @@ -0,0 +1,53 @@ +{ + "compilerOptions": { + "rootDir": ".", + "outDir": ".", + "resolveJsonModule": true, + "composite": true, + "target": "ESNext", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "lib": [ + "ESNext", + "ES2024", + "ES2023", + "ES2022", + "ES2021", + "ES2020", + "ES2019", + "ES2018", + "ES2017", + "ES2016", + "ES2015" + ], + "types": [ + "node", + "klaw", + "prompts", + "eslint" + ], + "strict": true, + "noImplicitAny": true, + "strictNullChecks": true, + "strictFunctionTypes": true, + "strictBindCallApply": true, + "strictPropertyInitialization": true, + "noImplicitThis": true, + "useUnknownInCatchVariables": true, + "alwaysStrict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "exactOptionalPropertyTypes": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedIndexedAccess": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "allowSyntheticDefaultImports": true + }, + "include": [ + "src/**/*" + ] +} diff --git a/cli/commands/build-tsc/.dependency-cruiser.cjs b/cli/commands/build-tsc/.dependency-cruiser.cjs new file mode 100644 index 00000000000..93e0d55a39d --- /dev/null +++ b/cli/commands/build-tsc/.dependency-cruiser.cjs @@ -0,0 +1,382 @@ +/** @type {import('dependency-cruiser').IConfiguration} */ +module.exports = { + forbidden: [ + { + name: 'no-circular', + severity: 'warn', + comment: + "This dependency is part of a circular relationship. You might want to revise " + + "your solution (i.e. use dependency inversion, make sure the modules have a single responsibility) ", + from: {}, + to: { + circular: true + } + }, + { + name: 'no-orphans', + comment: + "This is an orphan module - it's likely not used (anymore?). Either use it or " + + "remove it. If it's logical this module is an orphan (i.e. it's a config file), " + + "add an exception for it in your dependency-cruiser configuration. By default " + + "this rule does not scrutinize dot-files (e.g. .eslintrc.js), TypeScript declaration " + + "files (.d.ts), tsconfig.json and some of the babel and webpack configs.", + severity: 'warn', + from: { + orphan: true, + pathNot: [ + '(^|/)[.][^/]+[.](?:js|cjs|mjs|ts|cts|mts|json)$', // dot files + '[.]d[.]ts$', // TypeScript declaration files + '(^|/)tsconfig[.]json$', // TypeScript config + '(^|/)(?:babel|webpack)[.]config[.](?:js|cjs|mjs|ts|cts|mts|json)$' // other configs + ] + }, + to: {}, + }, + { + name: 'no-deprecated-core', + comment: + 'A module depends on a node core module that has been deprecated. Find an alternative - these are ' + + "bound to exist - node doesn't deprecate lightly.", + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'core' + ], + path: [ + '^v8/tools/codemap$', + '^v8/tools/consarray$', + '^v8/tools/csvparser$', + '^v8/tools/logreader$', + '^v8/tools/profile_view$', + '^v8/tools/profile$', + '^v8/tools/SourceMap$', + '^v8/tools/splaytree$', + '^v8/tools/tickprocessor-driver$', + '^v8/tools/tickprocessor$', + '^node-inspect/lib/_inspect$', + '^node-inspect/lib/internal/inspect_client$', + '^node-inspect/lib/internal/inspect_repl$', + '^async_hooks$', + '^punycode$', + '^domain$', + '^constants$', + '^sys$', + '^_linklist$', + '^_stream_wrap$' + ], + } + }, + { + name: 'not-to-deprecated', + comment: + 'This module uses a (version of an) npm module that has been deprecated. Either upgrade to a later ' + + 'version of that module, or find an alternative. Deprecated modules are a security risk.', + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'deprecated' + ] + } + }, + { + name: 'no-non-package-json', + severity: 'error', + comment: + "This module depends on an npm package that isn't in the 'dependencies' section of your package.json. " + + "That's problematic as the package either (1) won't be available on live (2 - worse) will be " + + "available on live with an non-guaranteed version. Fix it by adding the package to the dependencies " + + "in your package.json.", + from: {}, + to: { + dependencyTypes: [ + 'npm-no-pkg', + 'npm-unknown' + ] + } + }, + { + name: 'not-to-unresolvable', + comment: + "This module depends on a module that cannot be found ('resolved to disk'). If it's an npm " + + 'module: add it to your package.json. In all other cases you likely already know what to do.', + severity: 'error', + from: {}, + to: { + couldNotResolve: true + } + }, + { + name: 'no-duplicate-dep-types', + comment: + "Likely this module depends on an external ('npm') package that occurs more than once " + + "in your package.json i.e. bot as a devDependencies and in dependencies. This will cause " + + "maintenance problems later on.", + severity: 'warn', + from: {}, + to: { + moreThanOneDependencyType: true, + // as it's common to use a devDependency for type-only imports: don't + // consider type-only dependencyTypes for this rule + dependencyTypesNot: ["type-only"] + } + }, + + // rules you might want to tweak for your specific situation: + { + name: 'not-to-test', + comment: + "This module depends on code within a folder that should only contain tests. As tests don't " + + "implement functionality this is odd. Either you're writing a test outside the test folder " + + "or there's something in the test folder that isn't a test.", + severity: 'error', + from: { + pathNot: '^(tests)' + }, + to: { + path: '^(tests)' + } + }, + { + name: 'not-to-spec', + comment: + 'This module depends on a spec (test) file. The responsibility of a spec file is to test code. ' + + "If there's something in a spec that's of use to other modules, it doesn't have that single " + + 'responsibility anymore. Factor it out into (e.g.) a separate utility/ helper or a mock.', + severity: 'error', + from: {}, + to: { + path: '[.](?:spec|test)[.](?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$' + } + }, + { + name: 'not-to-dev-dep', + severity: 'error', + comment: + "This module depends on an npm package from the 'devDependencies' section of your " + + 'package.json. It looks like something that ships to production, though. To prevent problems ' + + "with npm packages that aren't there on production declare it (only!) in the 'dependencies'" + + 'section of your package.json. If this module is development only - add it to the ' + + 'from.pathNot re of the not-to-dev-dep rule in the dependency-cruiser configuration', + from: { + path: '^(src)', + pathNot: '[.](?:spec|test)[.](?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$' + }, + to: { + dependencyTypes: [ + 'npm-dev', + ], + // type only dependencies are not a problem as they don't end up in the + // production code or are ignored by the runtime. + dependencyTypesNot: [ + 'type-only' + ], + pathNot: [ + 'node_modules/@types/' + ] + } + }, + { + name: 'optional-deps-used', + severity: 'info', + comment: + "This module depends on an npm package that is declared as an optional dependency " + + "in your package.json. As this makes sense in limited situations only, it's flagged here. " + + "If you use an optional dependency here by design - add an exception to your" + + "dependency-cruiser configuration.", + from: {}, + to: { + dependencyTypes: [ + 'npm-optional' + ] + } + }, + { + name: 'peer-deps-used', + comment: + "This module depends on an npm package that is declared as a peer dependency " + + "in your package.json. This makes sense if your package is e.g. a plugin, but in " + + "other cases - maybe not so much. If the use of a peer dependency is intentional " + + "add an exception to your dependency-cruiser configuration.", + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'npm-peer' + ] + } + } + ], + options: { + // Which modules not to follow further when encountered + doNotFollow: { + // path: an array of regular expressions in strings to match against + path: ['node_modules'] + }, + + // Which modules to exclude + // exclude : { + // // path: an array of regular expressions in strings to match against + // path: '', + // }, + + // Which modules to exclusively include (array of regular expressions in strings) + // dependency-cruiser will skip everything that doesn't match this pattern + // includeOnly : [''], + + // List of module systems to cruise. + // When left out dependency-cruiser will fall back to the list of _all_ + // module systems it knows of ('amd', 'cjs', 'es6', 'tsd']). It's the + // default because it's the safe option. It comes at a performance penalty, though + // As in practice only commonjs ('cjs') and ecmascript modules ('es6') + // are in wide use, you can limit the moduleSystems to those. + // moduleSystems: ['cjs', 'es6'], + + // false: don't look at JSDoc imports (the default) + // true: detect dependencies in JSDoc-style import statements. + // Implies parser: 'tsc', which a.o. means the typescript compiler will need + // to be installed in the same spot you run dependency-cruiser from. + // detectJSDocImports: true, + + // false: don't look at process.getBuiltinModule calls (the default) + // true: dependency-cruiser will detect calls to process.getBuiltinModule/ + // globalThis.process.getBuiltinModule as imports. + // detectProcessBuiltinModuleCalls: true, + + // prefix for links in html, d2, mermaid and dot/ svg output (e.g. 'https://github.com/you/yourrepo/blob/main/' + // to open it on your online repo or `vscode://file/${process.cwd()}/` to + // open it in visual studio code), + // prefix: `vscode://file/${process.cwd()}/`, + + // suffix for links in output. E.g. put .html here if you use it to link to + // your coverage reports. + // suffix: '.html', + + // false (the default): ignore dependencies that only exist before typescript-to-javascript compilation + // true: also detect dependencies that only exist before typescript-to-javascript compilation + // 'specify': for each dependency identify whether it only exists before compilation or also after + // tsPreCompilationDeps: false, + + // list of extensions to scan that aren't javascript or compile-to-javascript. + // Empty by default. Only put extensions in here that you want to take into + // account that are _not_ parsable. + // extraExtensionsToScan: ['.json', '.jpg', '.png', '.svg', '.webp'], + + // if true combines the package.jsons found from the module up to the base + // folder the cruise is initiated from. Useful for how (some) mono-repos + // manage dependencies & dependency definitions. + // combinedDependencies: false, + + // if true leave symlinks untouched, otherwise use the realpath + // preserveSymlinks: false, + + // TypeScript project file ('tsconfig.json') to use for + // (1) compilation and + // (2) resolution (e.g. with the paths property) + // + // The (optional) fileName attribute specifies which file to take (relative to + // dependency-cruiser's current working directory). When not provided + // defaults to './tsconfig.json'. + tsConfig: { + fileName: 'src/tsconfig.json' + }, + + // Webpack configuration to use to get resolve options from. + // + // The (optional) fileName attribute specifies which file to take (relative + // to dependency-cruiser's current working directory. When not provided defaults + // to './webpack.conf.js'. + // + // The (optional) 'env' and 'arguments' attributes contain the parameters + // to be passed if your webpack config is a function and takes them (see + // webpack documentation for details) + // webpackConfig: { + // fileName: 'webpack.config.js', + // env: {}, + // arguments: {} + // }, + + // Babel config ('.babelrc', '.babelrc.json', '.babelrc.json5', ...) to use + // for compilation + // babelConfig: { + // fileName: '.babelrc', + // }, + + // List of strings you have in use in addition to cjs/ es6 requires + // & imports to declare module dependencies. Use this e.g. if you've + // re-declared require, use a require-wrapper or use window.require as + // a hack. + // exoticRequireStrings: [], + + // options to pass on to enhanced-resolve, the package dependency-cruiser + // uses to resolve module references to disk. The values below should be + // suitable for most situations + // + // If you use webpack: you can also set these in webpack.conf.js. The set + // there will override the ones specified here. + enhancedResolveOptions: { + // What to consider as an 'exports' field in package.jsons + exportsFields: ['exports'], + + // List of conditions to check for in the exports field. + // Only works when the 'exportsFields' array is non-empty. + conditionNames: ['import', 'require', 'node', 'default', 'types'], + + // The extensions, by default are the same as the ones dependency-cruiser + // can access (run `npx depcruise --info` to see which ones that are in + // _your_ environment). If that list is larger than you need you can pass + // the extensions you actually use (e.g. ['.js', '.jsx']). This can speed + // up module resolution, which is the most expensive step. + // extensions: [".js", ".jsx", ".ts", ".tsx", ".d.ts"], + + // What to consider a 'main' field in package.json + mainFields: ["module", "main", "types", "typings"], + + // A list of alias fields in package.jsons + // See https://github.com/defunctzombie/package-browser-field-spec and + // the webpack [resolve.alias](https://webpack.js.org/configuration/resolve/#resolvealiasfields) + // documentation. + // Defaults to an empty array (= don't use alias fields). + // aliasFields: ['browser'], + }, + + // skipAnalysisNotInRules will make dependency-cruiser execute + // analysis strictly necessary for checking the rule set only. + // See https://github.com/sverweij/dependency-cruiser/blob/main/doc/options-reference.md#skipanalysisnotinrules + skipAnalysisNotInRules: true, + + reporterOptions: { + dot: { + // Pattern of modules to consolidate to. The default pattern in this configuration + // collapses everything in node_modules to one folder deep so you see + // the external modules, but not their innards. + collapsePattern: 'node_modules/(?:@[^/]+/[^/]+|[^/]+)', + + // Options to tweak the appearance of your graph. See + // https://github.com/sverweij/dependency-cruiser/blob/main/doc/options-reference.md#reporteroptions + // If you don't specify a theme dependency-cruiser falls back to a built-in one. + // theme: { + // graph: { + // // splines: 'ortho' - straight lines; slow on big graphs + // // splines: 'true' - bezier curves; fast but not as nice as ortho + // splines: 'true' + // }, + // }, + }, + archi: { + // Pattern of modules to consolidate to. + collapsePattern: '^(?:packages|src|lib(s?)|app(s?)|bin|test(s?)|spec(s?))/[^/]+|node_modules/(?:@[^/]+/[^/]+|[^/]+)', + + // Options to tweak the appearance of your graph. If you don't specify a + // theme for 'archi' dependency-cruiser will use the one specified in the + // dot section above and otherwise use the default one. + // theme: { }, + }, + text: { + highlightFocused: true + }, + } + } +}; +// generated: dependency-cruiser@17.3.7 on 2026-01-28T14:30:16.611Z diff --git a/cli/commands/build-tsc/CHANGELOG.md b/cli/commands/build-tsc/CHANGELOG.md new file mode 100644 index 00000000000..ec4c7a08f6a --- /dev/null +++ b/cli/commands/build-tsc/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/cli-command-build-tsc diff --git a/cli/commands/build-tsc/README.md b/cli/commands/build-tsc/README.md new file mode 100644 index 00000000000..52fc05e00c5 --- /dev/null +++ b/cli/commands/build-tsc/README.md @@ -0,0 +1,49 @@ +[![banner](https://particles.js.org/images/banner2.png)](https://particles.js.org) + +# tsParticles CLI + +## Installation + +### NPM + +```bash +npm install -g @tsparticles/cli-build +``` + +### Yarn + +```bash +yarn global add @tsparticles/cli-build +``` + +### PNPM + +```bash +pnpm global add @tsparticles/cli-build +``` + +## Usage + +### Help + +```bash +npx @tsparticles/cli-build --help +``` + +or + +```bash +tsparticles-build --help +``` + +### Build + +```bash +npx @tsparticles/cli-build +``` + +or + +```bash +tsparticles-build +``` diff --git a/cli/commands/build-tsc/eslint.config.js b/cli/commands/build-tsc/eslint.config.js new file mode 100644 index 00000000000..7dc85e779b6 --- /dev/null +++ b/cli/commands/build-tsc/eslint.config.js @@ -0,0 +1,22 @@ +import path from "path"; +import {fileURLToPath} from "url"; +import {defineConfig} from "eslint/config"; +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default defineConfig([ + tsParticlesESLintConfig, + { + languageOptions: { + parserOptions: { + project: [path.join(__dirname, "src", "tsconfig.json")], + tsconfigRootDir: __dirname, + sourceType: "module" + } + }, + rules: { + "no-console": "off" + } + } +]); diff --git a/cli/commands/build-tsc/package.json b/cli/commands/build-tsc/package.json new file mode 100644 index 00000000000..2ff7ccfb07f --- /dev/null +++ b/cli/commands/build-tsc/package.json @@ -0,0 +1,74 @@ +{ + "name": "@tsparticles/cli-command-build-tsc", + "version": "4.0.0-beta.15", + "license": "MIT", + "type": "module", + "publishConfig": { + "access": "public", + "tagVersionPrefix": "v" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "cli/commands/build-tsc" + }, + "prettier": "@tsparticles/prettier-config", + "scripts": { + "prettify:ci:src": "prettier --check ./src/*", + "prettify:ci:readme": "prettier --check ./README.md", + "prettify:src": "prettier --write ./src/*", + "prettify:readme": "prettier --write ./README.md", + "lint": "eslint src --ext .js,.jsx,.ts,.tsx --cache --cache-location .cache/eslint/.eslintcache --cache-strategy metadata --fix", + "lint:ci": "eslint src --ext .js,.jsx,.ts,.tsx --cache --cache-location .cache/eslint/.eslintcache --cache-strategy metadata", + "circular-deps": "depcruise src --include-only '^src' --validate --output-type err-long", + "compile": "pnpm run build:ts", + "compile:ci": "pnpm run build:ts", + "build:ts": "pnpm run build:ts:cjs", + "build:ts:cjs": "tsc -p src", + "build": "pnpm run clear:dist && pnpm run prettify:src && pnpm run lint && pnpm run compile && pnpm run circular-deps && pnpm run prettify:readme", + "build:ci": "pnpm run clear:dist && pnpm run prettify:ci:src && pnpm run lint:ci && pnpm run compile:ci && pnpm run prettify:ci:readme", + "clear:dist": "rimraf ./dist", + "prepack": "pnpm run build" + }, + "peerDependencies": { + "commander": "^14", + "typescript": "^6" + }, + "dependencies": { + "@swc/core": "^1.15.33", + "@tsparticles/depcruise-config": "workspace:^", + "@tsparticles/eslint-config": "workspace:^", + "@tsparticles/prettier-config": "workspace:^", + "@tsparticles/tsconfig": "workspace:^", + "dependency-cruiser": "^17.4.0", + "eslint": "^10.3.0", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-jsdoc": "^62.9.0", + "eslint-plugin-prettier": "^5.5.5", + "eslint-plugin-tsdoc": "^0.5.2", + "klaw": "^4.1.0", + "lookpath": "^1.2.3", + "path-scurry": "^2.0.2", + "prettier": "^3.8.3", + "prettier-plugin-multiline-arrays": "^4.1.8", + "prompts": "^2.4.2", + "rimraf": "^6.1.3", + "swc-loader": "^0.2.7", + "typescript-eslint": "^8.59.2" + }, + "devDependencies": { + "@types/estree": "^1.0.9", + "@types/klaw": "^3.0.7", + "@types/node": "^25.6.2", + "@types/prompts": "^2.4.9", + "browserslist": "^4.28.2", + "commander": "^14.0.3", + "copyfiles": "^2.4.1", + "cross-env": "^10.1.0", + "ts-node": "^10.9.2", + "typescript": "^6.0.3" + }, + "description": "tsParticles CLI", + "main": "dist/tsc.js", + "author": "Matteo Bruni " +} diff --git a/cli/commands/build-tsc/renovate.json b/cli/commands/build-tsc/renovate.json new file mode 100644 index 00000000000..df30aa6db3e --- /dev/null +++ b/cli/commands/build-tsc/renovate.json @@ -0,0 +1,9 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "baseBranches": [ + "dev" + ], + "extends": [ + "config:base" + ] +} diff --git a/cli/commands/build-tsc/src/tsc.ts b/cli/commands/build-tsc/src/tsc.ts new file mode 100644 index 00000000000..0c64cd63139 --- /dev/null +++ b/cli/commands/build-tsc/src/tsc.ts @@ -0,0 +1,37 @@ +import { Command } from "commander"; +import { buildTS } from "./utils.js"; +import { existsSync } from "node:fs"; + +const tscCommand = new Command("tsc"); + +tscCommand.description("Build the TypeScript files for tsParticles library"); +tscCommand.option( + "--ci", + "Do all build steps for CI, no fixing files, only checking if they are formatted correctly, sets silent to true by default", + false, +); +tscCommand.option( + "-s, --silent ", + "Reduce the amount of output during the build, defaults to false, except when --ci is set", + false, +); + +tscCommand.action(async () => { + const opts = tscCommand.opts(), + ci = !!opts["ci"], + silentOpt = opts["silent"] as string | boolean, + silent = silentOpt === "false" ? false : !!silentOpt || ci, + basePath = process.cwd(); + + if (!existsSync(basePath)) { + throw new Error("Provided path does not exist"); + } + + if (!(await buildTS(basePath, silent))) { + throw new Error("TypeScript build failed"); + } + + console.info("TypeScript build finished successfully!"); +}); + +export { buildTS, tscCommand }; diff --git a/cli/commands/build-tsc/src/tsconfig.json b/cli/commands/build-tsc/src/tsconfig.json new file mode 100644 index 00000000000..a86b208cb31 --- /dev/null +++ b/cli/commands/build-tsc/src/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "rootDir": ".", + "outDir": "../dist" + }, + "references": [{ "path": "../" }], + "include": ["**/*"] +} diff --git a/cli/commands/build-tsc/src/utils.ts b/cli/commands/build-tsc/src/utils.ts new file mode 100644 index 00000000000..feb1751cef9 --- /dev/null +++ b/cli/commands/build-tsc/src/utils.ts @@ -0,0 +1,226 @@ +import { existsSync } from "node:fs"; +import path from "node:path"; +import { readFile } from "node:fs/promises"; + +enum ExitCodes { + OK = 0, + EmitErrors = 1, + NoDataOrOptions = 2, + NoOptions = 3, + ParseError = 4, +} + +type CompileType = "browser" | "cjs" | "esm" | "types"; + +interface CompileResult { + exitCode: ExitCodes; + logs: string[]; + type: CompileType; +} + +interface CompileConfig { + configFile: string; + extends: string; + outDir: string; +} + +const compileConfigs: Record = { + browser: { + configFile: "tsconfig.browser.json", + extends: "@tsparticles/tsconfig/dist/tsconfig.browser.json", + outDir: "./dist/browser", + }, + cjs: { + configFile: "tsconfig.json", + extends: "@tsparticles/tsconfig/dist/tsconfig.json", + outDir: "./dist/cjs", + }, + esm: { + configFile: "tsconfig.module.json", + extends: "@tsparticles/tsconfig/dist/tsconfig.module.json", + outDir: "./dist/esm", + }, + types: { + configFile: "tsconfig.types.json", + extends: "@tsparticles/tsconfig/dist/tsconfig.types.json", + outDir: "./dist/types", + }, +}; + +/** + * @param type - + * @returns - + */ +function getDefaultOptions(type: CompileType): unknown { + const config = compileConfigs[type]; + + return { + extends: config.extends, + compilerOptions: { + rootDir: "./src", + outDir: config.outDir, + }, + include: ["./src"], + }; +} + +/** + * @param basePath - + * @param file - + * @returns the file content or undefined if the file doesn't exist + */ +async function readConfig(basePath: string, file: string): Promise { + const tsconfigPath = path.join(basePath, file); + + if (existsSync(tsconfigPath)) { + const data = await readFile(path.join(basePath, file)); + + return data.toString(); + } + + return undefined; +} + +/** + * @param basePath - + * @param type - + * @param silent - + * @returns the exit code + */ +async function compile(basePath: string, type: CompileType, silent: boolean): Promise { + let options: unknown; + + const logs: string[] = [], + data = await readConfig(basePath, compileConfigs[type].configFile); + + if (!data) { + options = getDefaultOptions(type); + } + + if (!data && !options) { + logs.push(`No TS config found for ${type} build.`); + + return { + type, + logs, + exitCode: ExitCodes.NoDataOrOptions, + }; + } + + if (!options && data) { + options = JSON.parse(data); + } + + if (!options) { + logs.push(`No TS options available for ${type} build.`); + + return { + type, + logs, + exitCode: ExitCodes.NoOptions, + }; + } + + const ts = await import("typescript"); + + let parsed = ts.parseJsonConfigFileContent(options, ts.sys, basePath); + + if (parsed.errors.length && type === "cjs" && data) { + const noInputsCode = 18003, + hasNoInputsError = parsed.errors.some(diagnostic => diagnostic.code === noInputsCode); + + if (hasNoInputsError) { + options = getDefaultOptions(type); + parsed = ts.parseJsonConfigFileContent(options, ts.sys, basePath); + + if (!silent) { + logs.push("Using default cjs build options because tsconfig.json has no input files for this build."); + } + } + } + + if (parsed.errors.length) { + for (const diagnostic of parsed.errors) { + logs.push(ts.flattenDiagnosticMessageText(diagnostic.messageText, "\n")); + } + + return { + type, + logs, + exitCode: ExitCodes.ParseError, + }; + } + + const program = ts.createProgram(parsed.fileNames, parsed.options), + emitResult = program.emit(), + allDiagnostics = ts.getPreEmitDiagnostics(program).concat(emitResult.diagnostics); + + let failed = false; + + for (const diagnostic of allDiagnostics) { + failed = failed || diagnostic.category === ts.DiagnosticCategory.Error; + + if (diagnostic.file) { + const startingPos = 0, + { line, character } = ts.getLineAndCharacterOfPosition(diagnostic.file, diagnostic.start ?? startingPos), + message = ts.flattenDiagnosticMessageText(diagnostic.messageText, "\n"), + increment = 1; + + logs.push( + `${diagnostic.file.fileName} (${(line + increment).toString()},${(character + increment).toString()}): ${message}`, + ); + } else { + logs.push(ts.flattenDiagnosticMessageText(diagnostic.messageText, "\n")); + } + } + + const exitCode = emitResult.emitSkipped || failed ? ExitCodes.EmitErrors : ExitCodes.OK; + + if (!silent || exitCode) { + logs.push(`TSC for ${type} done with exit code: '${exitCode.toLocaleString()}'.`); + } + + return { + type, + logs, + exitCode, + }; +} + +/** + * @param basePath - + * @param silent - + * @returns true if the build was successful + */ +export async function buildTS(basePath: string, silent: boolean): Promise { + if (!silent) { + console.info("Building TS files"); + } + + const types: CompileType[] = ["browser", "cjs", "esm", "types"], + results = await Promise.all(types.map(type => compile(basePath, type, silent))); + + for (const type of types) { + const result = results.find(r => r.type === type); + + if (!result) { + continue; + } + + if (!silent) { + console.info(`Building TS files for ${type} configuration`); + } + + for (const log of result.logs) { + console.info(log); + } + } + + const res = results.every(result => result.exitCode === ExitCodes.OK); + + if (!silent) { + console.info("Building TS files done"); + } + + return res; +} diff --git a/cli/commands/build-tsc/tsconfig.json b/cli/commands/build-tsc/tsconfig.json new file mode 100644 index 00000000000..714efda86b6 --- /dev/null +++ b/cli/commands/build-tsc/tsconfig.json @@ -0,0 +1,53 @@ +{ + "compilerOptions": { + "rootDir": ".", + "outDir": ".", + "resolveJsonModule": true, + "composite": true, + "target": "ESNext", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "lib": [ + "ESNext", + "ES2024", + "ES2023", + "ES2022", + "ES2021", + "ES2020", + "ES2019", + "ES2018", + "ES2017", + "ES2016", + "ES2015" + ], + "types": [ + "node", + "klaw", + "prompts", + "eslint" + ], + "strict": true, + "noImplicitAny": true, + "strictNullChecks": true, + "strictFunctionTypes": true, + "strictBindCallApply": true, + "strictPropertyInitialization": true, + "noImplicitThis": true, + "useUnknownInCatchVariables": true, + "alwaysStrict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "exactOptionalPropertyTypes": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedIndexedAccess": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "allowSyntheticDefaultImports": true + }, + "include": [ + "src/**/*" + ] +} diff --git a/cli/commands/build/.dependency-cruiser.cjs b/cli/commands/build/.dependency-cruiser.cjs new file mode 100644 index 00000000000..93e0d55a39d --- /dev/null +++ b/cli/commands/build/.dependency-cruiser.cjs @@ -0,0 +1,382 @@ +/** @type {import('dependency-cruiser').IConfiguration} */ +module.exports = { + forbidden: [ + { + name: 'no-circular', + severity: 'warn', + comment: + "This dependency is part of a circular relationship. You might want to revise " + + "your solution (i.e. use dependency inversion, make sure the modules have a single responsibility) ", + from: {}, + to: { + circular: true + } + }, + { + name: 'no-orphans', + comment: + "This is an orphan module - it's likely not used (anymore?). Either use it or " + + "remove it. If it's logical this module is an orphan (i.e. it's a config file), " + + "add an exception for it in your dependency-cruiser configuration. By default " + + "this rule does not scrutinize dot-files (e.g. .eslintrc.js), TypeScript declaration " + + "files (.d.ts), tsconfig.json and some of the babel and webpack configs.", + severity: 'warn', + from: { + orphan: true, + pathNot: [ + '(^|/)[.][^/]+[.](?:js|cjs|mjs|ts|cts|mts|json)$', // dot files + '[.]d[.]ts$', // TypeScript declaration files + '(^|/)tsconfig[.]json$', // TypeScript config + '(^|/)(?:babel|webpack)[.]config[.](?:js|cjs|mjs|ts|cts|mts|json)$' // other configs + ] + }, + to: {}, + }, + { + name: 'no-deprecated-core', + comment: + 'A module depends on a node core module that has been deprecated. Find an alternative - these are ' + + "bound to exist - node doesn't deprecate lightly.", + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'core' + ], + path: [ + '^v8/tools/codemap$', + '^v8/tools/consarray$', + '^v8/tools/csvparser$', + '^v8/tools/logreader$', + '^v8/tools/profile_view$', + '^v8/tools/profile$', + '^v8/tools/SourceMap$', + '^v8/tools/splaytree$', + '^v8/tools/tickprocessor-driver$', + '^v8/tools/tickprocessor$', + '^node-inspect/lib/_inspect$', + '^node-inspect/lib/internal/inspect_client$', + '^node-inspect/lib/internal/inspect_repl$', + '^async_hooks$', + '^punycode$', + '^domain$', + '^constants$', + '^sys$', + '^_linklist$', + '^_stream_wrap$' + ], + } + }, + { + name: 'not-to-deprecated', + comment: + 'This module uses a (version of an) npm module that has been deprecated. Either upgrade to a later ' + + 'version of that module, or find an alternative. Deprecated modules are a security risk.', + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'deprecated' + ] + } + }, + { + name: 'no-non-package-json', + severity: 'error', + comment: + "This module depends on an npm package that isn't in the 'dependencies' section of your package.json. " + + "That's problematic as the package either (1) won't be available on live (2 - worse) will be " + + "available on live with an non-guaranteed version. Fix it by adding the package to the dependencies " + + "in your package.json.", + from: {}, + to: { + dependencyTypes: [ + 'npm-no-pkg', + 'npm-unknown' + ] + } + }, + { + name: 'not-to-unresolvable', + comment: + "This module depends on a module that cannot be found ('resolved to disk'). If it's an npm " + + 'module: add it to your package.json. In all other cases you likely already know what to do.', + severity: 'error', + from: {}, + to: { + couldNotResolve: true + } + }, + { + name: 'no-duplicate-dep-types', + comment: + "Likely this module depends on an external ('npm') package that occurs more than once " + + "in your package.json i.e. bot as a devDependencies and in dependencies. This will cause " + + "maintenance problems later on.", + severity: 'warn', + from: {}, + to: { + moreThanOneDependencyType: true, + // as it's common to use a devDependency for type-only imports: don't + // consider type-only dependencyTypes for this rule + dependencyTypesNot: ["type-only"] + } + }, + + // rules you might want to tweak for your specific situation: + { + name: 'not-to-test', + comment: + "This module depends on code within a folder that should only contain tests. As tests don't " + + "implement functionality this is odd. Either you're writing a test outside the test folder " + + "or there's something in the test folder that isn't a test.", + severity: 'error', + from: { + pathNot: '^(tests)' + }, + to: { + path: '^(tests)' + } + }, + { + name: 'not-to-spec', + comment: + 'This module depends on a spec (test) file. The responsibility of a spec file is to test code. ' + + "If there's something in a spec that's of use to other modules, it doesn't have that single " + + 'responsibility anymore. Factor it out into (e.g.) a separate utility/ helper or a mock.', + severity: 'error', + from: {}, + to: { + path: '[.](?:spec|test)[.](?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$' + } + }, + { + name: 'not-to-dev-dep', + severity: 'error', + comment: + "This module depends on an npm package from the 'devDependencies' section of your " + + 'package.json. It looks like something that ships to production, though. To prevent problems ' + + "with npm packages that aren't there on production declare it (only!) in the 'dependencies'" + + 'section of your package.json. If this module is development only - add it to the ' + + 'from.pathNot re of the not-to-dev-dep rule in the dependency-cruiser configuration', + from: { + path: '^(src)', + pathNot: '[.](?:spec|test)[.](?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$' + }, + to: { + dependencyTypes: [ + 'npm-dev', + ], + // type only dependencies are not a problem as they don't end up in the + // production code or are ignored by the runtime. + dependencyTypesNot: [ + 'type-only' + ], + pathNot: [ + 'node_modules/@types/' + ] + } + }, + { + name: 'optional-deps-used', + severity: 'info', + comment: + "This module depends on an npm package that is declared as an optional dependency " + + "in your package.json. As this makes sense in limited situations only, it's flagged here. " + + "If you use an optional dependency here by design - add an exception to your" + + "dependency-cruiser configuration.", + from: {}, + to: { + dependencyTypes: [ + 'npm-optional' + ] + } + }, + { + name: 'peer-deps-used', + comment: + "This module depends on an npm package that is declared as a peer dependency " + + "in your package.json. This makes sense if your package is e.g. a plugin, but in " + + "other cases - maybe not so much. If the use of a peer dependency is intentional " + + "add an exception to your dependency-cruiser configuration.", + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'npm-peer' + ] + } + } + ], + options: { + // Which modules not to follow further when encountered + doNotFollow: { + // path: an array of regular expressions in strings to match against + path: ['node_modules'] + }, + + // Which modules to exclude + // exclude : { + // // path: an array of regular expressions in strings to match against + // path: '', + // }, + + // Which modules to exclusively include (array of regular expressions in strings) + // dependency-cruiser will skip everything that doesn't match this pattern + // includeOnly : [''], + + // List of module systems to cruise. + // When left out dependency-cruiser will fall back to the list of _all_ + // module systems it knows of ('amd', 'cjs', 'es6', 'tsd']). It's the + // default because it's the safe option. It comes at a performance penalty, though + // As in practice only commonjs ('cjs') and ecmascript modules ('es6') + // are in wide use, you can limit the moduleSystems to those. + // moduleSystems: ['cjs', 'es6'], + + // false: don't look at JSDoc imports (the default) + // true: detect dependencies in JSDoc-style import statements. + // Implies parser: 'tsc', which a.o. means the typescript compiler will need + // to be installed in the same spot you run dependency-cruiser from. + // detectJSDocImports: true, + + // false: don't look at process.getBuiltinModule calls (the default) + // true: dependency-cruiser will detect calls to process.getBuiltinModule/ + // globalThis.process.getBuiltinModule as imports. + // detectProcessBuiltinModuleCalls: true, + + // prefix for links in html, d2, mermaid and dot/ svg output (e.g. 'https://github.com/you/yourrepo/blob/main/' + // to open it on your online repo or `vscode://file/${process.cwd()}/` to + // open it in visual studio code), + // prefix: `vscode://file/${process.cwd()}/`, + + // suffix for links in output. E.g. put .html here if you use it to link to + // your coverage reports. + // suffix: '.html', + + // false (the default): ignore dependencies that only exist before typescript-to-javascript compilation + // true: also detect dependencies that only exist before typescript-to-javascript compilation + // 'specify': for each dependency identify whether it only exists before compilation or also after + // tsPreCompilationDeps: false, + + // list of extensions to scan that aren't javascript or compile-to-javascript. + // Empty by default. Only put extensions in here that you want to take into + // account that are _not_ parsable. + // extraExtensionsToScan: ['.json', '.jpg', '.png', '.svg', '.webp'], + + // if true combines the package.jsons found from the module up to the base + // folder the cruise is initiated from. Useful for how (some) mono-repos + // manage dependencies & dependency definitions. + // combinedDependencies: false, + + // if true leave symlinks untouched, otherwise use the realpath + // preserveSymlinks: false, + + // TypeScript project file ('tsconfig.json') to use for + // (1) compilation and + // (2) resolution (e.g. with the paths property) + // + // The (optional) fileName attribute specifies which file to take (relative to + // dependency-cruiser's current working directory). When not provided + // defaults to './tsconfig.json'. + tsConfig: { + fileName: 'src/tsconfig.json' + }, + + // Webpack configuration to use to get resolve options from. + // + // The (optional) fileName attribute specifies which file to take (relative + // to dependency-cruiser's current working directory. When not provided defaults + // to './webpack.conf.js'. + // + // The (optional) 'env' and 'arguments' attributes contain the parameters + // to be passed if your webpack config is a function and takes them (see + // webpack documentation for details) + // webpackConfig: { + // fileName: 'webpack.config.js', + // env: {}, + // arguments: {} + // }, + + // Babel config ('.babelrc', '.babelrc.json', '.babelrc.json5', ...) to use + // for compilation + // babelConfig: { + // fileName: '.babelrc', + // }, + + // List of strings you have in use in addition to cjs/ es6 requires + // & imports to declare module dependencies. Use this e.g. if you've + // re-declared require, use a require-wrapper or use window.require as + // a hack. + // exoticRequireStrings: [], + + // options to pass on to enhanced-resolve, the package dependency-cruiser + // uses to resolve module references to disk. The values below should be + // suitable for most situations + // + // If you use webpack: you can also set these in webpack.conf.js. The set + // there will override the ones specified here. + enhancedResolveOptions: { + // What to consider as an 'exports' field in package.jsons + exportsFields: ['exports'], + + // List of conditions to check for in the exports field. + // Only works when the 'exportsFields' array is non-empty. + conditionNames: ['import', 'require', 'node', 'default', 'types'], + + // The extensions, by default are the same as the ones dependency-cruiser + // can access (run `npx depcruise --info` to see which ones that are in + // _your_ environment). If that list is larger than you need you can pass + // the extensions you actually use (e.g. ['.js', '.jsx']). This can speed + // up module resolution, which is the most expensive step. + // extensions: [".js", ".jsx", ".ts", ".tsx", ".d.ts"], + + // What to consider a 'main' field in package.json + mainFields: ["module", "main", "types", "typings"], + + // A list of alias fields in package.jsons + // See https://github.com/defunctzombie/package-browser-field-spec and + // the webpack [resolve.alias](https://webpack.js.org/configuration/resolve/#resolvealiasfields) + // documentation. + // Defaults to an empty array (= don't use alias fields). + // aliasFields: ['browser'], + }, + + // skipAnalysisNotInRules will make dependency-cruiser execute + // analysis strictly necessary for checking the rule set only. + // See https://github.com/sverweij/dependency-cruiser/blob/main/doc/options-reference.md#skipanalysisnotinrules + skipAnalysisNotInRules: true, + + reporterOptions: { + dot: { + // Pattern of modules to consolidate to. The default pattern in this configuration + // collapses everything in node_modules to one folder deep so you see + // the external modules, but not their innards. + collapsePattern: 'node_modules/(?:@[^/]+/[^/]+|[^/]+)', + + // Options to tweak the appearance of your graph. See + // https://github.com/sverweij/dependency-cruiser/blob/main/doc/options-reference.md#reporteroptions + // If you don't specify a theme dependency-cruiser falls back to a built-in one. + // theme: { + // graph: { + // // splines: 'ortho' - straight lines; slow on big graphs + // // splines: 'true' - bezier curves; fast but not as nice as ortho + // splines: 'true' + // }, + // }, + }, + archi: { + // Pattern of modules to consolidate to. + collapsePattern: '^(?:packages|src|lib(s?)|app(s?)|bin|test(s?)|spec(s?))/[^/]+|node_modules/(?:@[^/]+/[^/]+|[^/]+)', + + // Options to tweak the appearance of your graph. If you don't specify a + // theme for 'archi' dependency-cruiser will use the one specified in the + // dot section above and otherwise use the default one. + // theme: { }, + }, + text: { + highlightFocused: true + }, + } + } +}; +// generated: dependency-cruiser@17.3.7 on 2026-01-28T14:30:16.611Z diff --git a/cli/commands/build/CHANGELOG.md b/cli/commands/build/CHANGELOG.md new file mode 100644 index 00000000000..9d30be319e1 --- /dev/null +++ b/cli/commands/build/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/cli-command-build diff --git a/cli/commands/build/README.md b/cli/commands/build/README.md new file mode 100644 index 00000000000..13a53cbd086 --- /dev/null +++ b/cli/commands/build/README.md @@ -0,0 +1,69 @@ +[![banner](https://particles.js.org/images/banner2.png)](https://particles.js.org) + +# tsParticles CLI + +## Installation + +### NPM + +```bash +npm install -g @tsparticles/cli-build +``` + +### Yarn + +```bash +yarn global add @tsparticles/cli-build +``` + +### PNPM + +```bash +pnpm global add @tsparticles/cli-build +``` + +## Usage + +### Help + +```bash +npx @tsparticles/cli-build --help +``` + +or + +```bash +tsparticles-build --help +``` + +### Build + +```bash +npx @tsparticles/cli-build +``` + +or + +```bash +tsparticles-build +``` + +### Build options + +```bash +tsparticles-build +tsparticles-build --clean --lint --tsc +tsparticles-build --bundle-webpack +tsparticles-build --bundle-rollup +``` + +### Verify in this workspace + +From the `cli` root, these commands validate the Nx integration end-to-end: + +```bash +pnpm nx show project @tsparticles/cli-command-build --json +pnpm nx run @tsparticles/cli-command-build:tsc +pnpm nx run @tsparticles/cli-command-build:test +pnpm run build +``` diff --git a/cli/commands/build/eslint.config.js b/cli/commands/build/eslint.config.js new file mode 100644 index 00000000000..7dc85e779b6 --- /dev/null +++ b/cli/commands/build/eslint.config.js @@ -0,0 +1,22 @@ +import path from "path"; +import {fileURLToPath} from "url"; +import {defineConfig} from "eslint/config"; +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default defineConfig([ + tsParticlesESLintConfig, + { + languageOptions: { + parserOptions: { + project: [path.join(__dirname, "src", "tsconfig.json")], + tsconfigRootDir: __dirname, + sourceType: "module" + } + }, + rules: { + "no-console": "off" + } + } +]); diff --git a/cli/commands/build/package.json b/cli/commands/build/package.json new file mode 100644 index 00000000000..66dd3b63ced --- /dev/null +++ b/cli/commands/build/package.json @@ -0,0 +1,91 @@ +{ + "name": "@tsparticles/cli-command-build", + "version": "4.0.0-beta.15", + "license": "MIT", + "type": "module", + "publishConfig": { + "access": "public", + "tagVersionPrefix": "v" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "cli/commands/build" + }, + "prettier": "@tsparticles/prettier-config", + "scripts": { + "prettify:ci:src": "prettier --check ./src/*", + "prettify:ci:readme": "prettier --check ./README.md", + "prettify:src": "prettier --write ./src/*", + "prettify:readme": "prettier --write ./README.md", + "lint": "eslint src --ext .js,.jsx,.ts,.tsx --cache --cache-location .cache/eslint/.eslintcache --cache-strategy metadata --fix", + "lint:ci": "eslint src --ext .js,.jsx,.ts,.tsx --cache --cache-location .cache/eslint/.eslintcache --cache-strategy metadata", + "circular-deps": "depcruise src --include-only '^src' --validate --output-type err-long", + "compile": "pnpm run build:ts", + "compile:ci": "pnpm run build:ts", + "build:ts": "pnpm run build:ts:cjs", + "build:ts:cjs": "tsc -p src", + "build": "pnpm run clear:dist && pnpm run prettify:src && pnpm run lint && pnpm run compile && pnpm run circular-deps && pnpm run prettify:readme", + "build:ci": "pnpm run clear:dist && pnpm run prettify:ci:src && pnpm run lint:ci && pnpm run compile:ci && pnpm run prettify:ci:readme", + "clear:dist": "rimraf ./dist", + "test": "vitest run --config vitest.config.ts", + "test:ci": "vitest run --config vitest.config.ts", + "prepack": "pnpm run build" + }, + "peerDependencies": { + "commander": "^14" + }, + "dependencies": { + "@swc/core": "^1.15.33", + "@tsparticles/cli-command-build-bundle-rollup": "workspace:^", + "@tsparticles/cli-command-build-bundle-webpack": "workspace:^", + "@tsparticles/cli-command-build-circular-deps": "workspace:^", + "@tsparticles/cli-command-build-clear": "workspace:^", + "@tsparticles/cli-command-build-distfiles": "workspace:^", + "@tsparticles/cli-command-build-diststats": "workspace:^", + "@tsparticles/cli-command-build-eslint": "workspace:^", + "@tsparticles/cli-command-build-prettier": "workspace:^", + "@tsparticles/cli-command-build-tsc": "workspace:^", + "@tsparticles/depcruise-config": "workspace:^", + "@tsparticles/eslint-config": "workspace:^", + "@tsparticles/prettier-config": "workspace:^", + "@tsparticles/tsconfig": "workspace:^", + "@tsparticles/webpack-plugin": "workspace:^", + "dependency-cruiser": "^17.4.0", + "eslint": "^10.3.0", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-jsdoc": "^62.9.0", + "eslint-plugin-prettier": "^5.5.5", + "eslint-plugin-tsdoc": "^0.5.2", + "klaw": "^4.1.0", + "lookpath": "^1.2.3", + "path-scurry": "^2.0.2", + "prettier": "^3.8.3", + "prettier-plugin-multiline-arrays": "^4.1.8", + "prompts": "^2.4.2", + "rimraf": "^6.1.3", + "swc-loader": "^0.2.7", + "typescript": "^6.0.3", + "typescript-eslint": "^8.59.2", + "webpack": "^5.106.2" + }, + "devDependencies": { + "@types/estree": "^1.0.9", + "@types/klaw": "^3.0.7", + "@types/node": "^25.6.2", + "@types/prompts": "^2.4.9", + "@types/webpack-env": "^1.18.8", + "browserslist": "^4.28.2", + "commander": "^14.0.3", + "copyfiles": "^2.4.1", + "cross-env": "^10.1.0", + "terser-webpack-plugin": "^5.5.0", + "ts-node": "^10.9.2", + "vitest": "^4.1.5", + "webpack-bundle-analyzer": "^5.3.0", + "webpack-cli": "^7.0.2" + }, + "description": "tsParticles CLI", + "main": "dist/build.js", + "author": "Matteo Bruni " +} diff --git a/cli/commands/build/project.json b/cli/commands/build/project.json new file mode 100644 index 00000000000..3e0ef772ea0 --- /dev/null +++ b/cli/commands/build/project.json @@ -0,0 +1,7 @@ +{ + "name": "@tsparticles/cli-command-build", + "root": "cli/commands/build", + "sourceRoot": "cli/commands/build/src", + "tags": ["type:tooling", "scope:cli"] +} + diff --git a/cli/commands/build/renovate.json b/cli/commands/build/renovate.json new file mode 100644 index 00000000000..df30aa6db3e --- /dev/null +++ b/cli/commands/build/renovate.json @@ -0,0 +1,9 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "baseBranches": [ + "dev" + ], + "extends": [ + "config:base" + ] +} diff --git a/cli/commands/build/src/build.ts b/cli/commands/build/src/build.ts new file mode 100644 index 00000000000..aa971749000 --- /dev/null +++ b/cli/commands/build/src/build.ts @@ -0,0 +1,164 @@ +/* eslint-disable sort-imports */ +import { Command } from "commander"; +import { bundleWebpack, bundleWebpackCommand } from "@tsparticles/cli-command-build-bundle-webpack"; +import { bundleRollup, bundleRollupCommand } from "@tsparticles/cli-command-build-bundle-rollup"; +import { circularDeps as checkCircularDeps, circularDepsCommand } from "@tsparticles/cli-command-build-circular-deps"; +import { clearCommand, clearDist } from "@tsparticles/cli-command-build-clear"; +import { buildDistFiles, distFilesCommand } from "@tsparticles/cli-command-build-distfiles"; +import { getDistStats, type IDistStats } from "@tsparticles/cli-command-build-diststats"; +import { esLintCommand, lint } from "@tsparticles/cli-command-build-eslint"; +import { + prettierCommand, + prettifyPackageDistJson, + prettifyPackageJson, + prettifyReadme, + prettifySrc, +} from "@tsparticles/cli-command-build-prettier"; +import { buildTS, tscCommand } from "@tsparticles/cli-command-build-tsc"; +import path from "node:path"; + +const minSize = 0; + +/** + * Prints the difference in dist stats between two builds. + * @param oldStats - stats captured before the build + * @param newStats - stats captured after the build + */ +function printDistStatsDiff(oldStats: IDistStats, newStats: IDistStats): void { + const diffSize = newStats.totalSize - oldStats.totalSize, + bundleDiffSize = newStats.bundleSize - oldStats.bundleSize, + bundleSizeIncreased = bundleDiffSize > minSize, + bundleSizeText = bundleSizeIncreased ? "increased" : "decreased", + diffSizeText = diffSize > minSize ? "increased" : "decreased", + outputFunc = bundleSizeIncreased ? console.warn : console.info, + texts = [ + bundleDiffSize + ? `Bundle size ${bundleSizeText} from ${oldStats.bundleSize.toString()} to ${newStats.bundleSize.toString()} (${Math.abs(bundleDiffSize).toString()}B)` + : "Bundle size unchanged", + diffSize + ? `Size ${diffSizeText} from ${oldStats.totalSize.toString()} to ${newStats.totalSize.toString()} (${Math.abs(diffSize).toString()}B)` + : "Size unchanged", + `Files count changed from ${oldStats.totalFiles.toString()} to ${newStats.totalFiles.toString()} (${(newStats.totalFiles - oldStats.totalFiles).toString()})`, + `Folders count changed from ${oldStats.totalFolders.toString()} to ${newStats.totalFolders.toString()} (${(newStats.totalFolders - oldStats.totalFolders).toString()})`, + ]; + + for (const text of texts) { + outputFunc(text); + } +} + +const buildCommand = new Command("build"); + +buildCommand.description("Build the tsParticles library using TypeScript"); + +buildCommand.addCommand(bundleWebpackCommand); +buildCommand.addCommand(bundleRollupCommand); +buildCommand.addCommand(circularDepsCommand); +buildCommand.addCommand(clearCommand); +buildCommand.addCommand(distFilesCommand); +buildCommand.addCommand(esLintCommand); +buildCommand.addCommand(prettierCommand); +buildCommand.addCommand(tscCommand); + +buildCommand.option( + "-a, --all", + "Do all build steps (default if no flags are specified) (same as --bundle-rollup -c -d -l -p -t)", + false, +); +buildCommand.option("-b, --bundle-webpack", "Bundle the library using Webpack", false); +buildCommand.option("--bundle-rollup", "Bundle the library using Rollup", false); +buildCommand.option("-c, --clean", "Clean the dist folder", false); +buildCommand.option( + "--ci", + "Do all build steps for CI, no fixing files, only checking if they are formatted correctly, sets silent to true by default", + false, +); +buildCommand.option("-r, --circular-deps", "Check for circular dependencies", false); +buildCommand.option("-d, --dist", "Build the dist files", false); +buildCommand.option("-l, --lint", "Lint the source files", false); +buildCommand.option("-p, --prettify", "Prettify the source files", false); +buildCommand.option( + "-s, --silent ", + "Reduce the amount of output during the build, defaults to false, except when --ci is set", + false, +); +buildCommand.option("-t, --tsc", "Build the library using TypeScript", false); + +buildCommand.argument("[path]", `Path to the project root folder, default is "src"`, "src"); + +buildCommand.action(async (argPath: string) => { + const opts = buildCommand.opts(), + all = + !!opts["all"] || + (!opts["bundleWebpack"] && + !opts["bundleRollup"] && + !opts["clean"] && + !opts["circularDeps"] && + !opts["dist"] && + !opts["lint"] && + !opts["prettify"] && + !opts["tsc"]), + silentOpt = opts["silent"] as string | boolean, + ci = !!opts["ci"], + basePath = process.cwd(), + sourcePath = path.join(basePath, argPath), + options = { + circularDeps: all || !!opts["circularDeps"], + clean: all || !!opts["clean"], + distfiles: all || !!opts["dist"], + doBundleRollup: all || !!opts["bundleRollup"], + doBundleWebpack: !!opts["bundleWebpack"], + doLint: all || !!opts["lint"], + prettier: all || !!opts["prettify"], + silent: silentOpt === "false" ? false : !!silentOpt || ci, + tsc: all || !!opts["tsc"], + }, + oldStats = await getDistStats(basePath); + + if (options.clean && !(await clearDist(basePath, options.silent))) { + throw new Error("Dist clear failed"); + } + + if (options.prettier && !(await prettifySrc(basePath, sourcePath, ci, options.silent))) { + throw new Error("Source prettify failed"); + } + + if (options.doLint && !(await lint(ci, options.silent))) { + throw new Error("Lint failed"); + } + + if (options.tsc && !(await buildTS(basePath, options.silent))) { + throw new Error("TypeScript build failed"); + } + + if (options.circularDeps && !(await checkCircularDeps(basePath, options.silent))) { + throw new Error("Circular dependencies check failed"); + } + + if (options.doBundleWebpack && !(await bundleWebpack(basePath, options.silent))) { + throw new Error("Webpack bundling failed"); + } + + if (options.doBundleRollup && !(await bundleRollup(basePath, options.silent))) { + throw new Error("Rollup bundling failed"); + } + + if ( + options.prettier && + (!(await prettifyReadme(basePath, ci, options.silent)) || + !(await prettifyPackageJson(basePath, ci, options.silent)) || + !(await prettifyPackageDistJson(basePath, ci, options.silent))) + ) { + throw new Error("Project prettify failed"); + } + + if (options.distfiles && !(await buildDistFiles(basePath, options.silent))) { + throw new Error("Dist files build failed"); + } + + if (!options.silent) { + printDistStatsDiff(oldStats, await getDistStats(basePath)); + } +}); + +export { buildCommand }; diff --git a/cli/commands/build/src/tsconfig.json b/cli/commands/build/src/tsconfig.json new file mode 100644 index 00000000000..a86b208cb31 --- /dev/null +++ b/cli/commands/build/src/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "rootDir": ".", + "outDir": "../dist" + }, + "references": [{ "path": "../" }], + "include": ["**/*"] +} diff --git a/cli/commands/build/tsconfig.json b/cli/commands/build/tsconfig.json new file mode 100644 index 00000000000..4cbe44f9078 --- /dev/null +++ b/cli/commands/build/tsconfig.json @@ -0,0 +1,54 @@ +{ + "compilerOptions": { + "rootDir": ".", + "outDir": ".", + "resolveJsonModule": true, + "composite": true, + "target": "ESNext", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "lib": [ + "ESNext", + "ES2024", + "ES2023", + "ES2022", + "ES2021", + "ES2020", + "ES2019", + "ES2018", + "ES2017", + "ES2016", + "ES2015" + ], + "types": [ + "node", + "klaw", + "prompts", + "eslint" + ], + "strict": true, + "noImplicitAny": true, + "strictNullChecks": true, + "strictFunctionTypes": true, + "strictBindCallApply": true, + "strictPropertyInitialization": true, + "noImplicitThis": true, + "useUnknownInCatchVariables": true, + "alwaysStrict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "exactOptionalPropertyTypes": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedIndexedAccess": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "skipLibCheck": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "allowSyntheticDefaultImports": true + }, + "include": [ + "src/**/*" + ] +} diff --git a/cli/commands/build/vitest.config.ts b/cli/commands/build/vitest.config.ts new file mode 100644 index 00000000000..0688f4e6001 --- /dev/null +++ b/cli/commands/build/vitest.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from "vitest/config"; + +export default defineConfig({ + test: { + include: ["tests/**/*.test.ts"], + }, +}); + diff --git a/cli/commands/create-bundle/.browserslistrc b/cli/commands/create-bundle/.browserslistrc new file mode 100644 index 00000000000..fb811e7a9d2 --- /dev/null +++ b/cli/commands/create-bundle/.browserslistrc @@ -0,0 +1,2 @@ +since 2021 +not dead diff --git a/cli/commands/create-bundle/.dependency-cruiser.cjs b/cli/commands/create-bundle/.dependency-cruiser.cjs new file mode 100644 index 00000000000..f35670138c7 --- /dev/null +++ b/cli/commands/create-bundle/.dependency-cruiser.cjs @@ -0,0 +1,230 @@ +/** @type {import('dependency-cruiser').IConfiguration} */ +module.exports = { + forbidden: [ + { + name: 'no-circular', + severity: 'warn', + comment: + "This dependency is part of a circular relationship. You might want to revise " + + "your solution (i.e. use dependency inversion, make sure the modules have a single responsibility) ", + from: {}, + to: { + circular: true + } + }, + { + name: 'no-orphans', + comment: + "This is an orphan module - it's likely not used (anymore?). Either use it or " + + "remove it. If it's logical this module is an orphan (i.e. it's a config file), " + + "add an exception for it in your dependency-cruiser configuration. By default " + + "this rule does not scrutinize dot-files (e.g. .eslintrc.js), TypeScript declaration " + + "files (.d.ts), tsconfig.json and some of the babel and webpack configs.", + severity: 'warn', + from: { + orphan: true, + pathNot: [ + '(^|/)[.][^/]+[.](?:js|cjs|mjs|ts|cts|mts|json)$', + '[.]d[.]ts$', + '(^|/)tsconfig[.]json$', + '(^|/)(?:babel|webpack)[.]config[.](?:js|cjs|mjs|ts|cts|mts|json)$' + ] + }, + to: {}, + }, + { + name: 'no-deprecated-core', + comment: + 'A module depends on a node core module that has been deprecated. Find an alternative - these are ' + + "bound to exist - node doesn't deprecate lightly.", + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'core' + ], + path: [ + '^v8/tools/codemap$', + '^v8/tools/consarray$', + '^v8/tools/csvparser$', + '^v8/tools/logreader$', + '^v8/tools/profile_view$', + '^v8/tools/profile$', + '^v8/tools/SourceMap$', + '^v8/tools/splaytree$', + '^v8/tools/tickprocessor-driver$', + '^v8/tools/tickprocessor$', + '^node-inspect/lib/_inspect$', + '^node-inspect/lib/internal/inspect_client$', + '^node-inspect/lib/internal/inspect_repl$', + '^async_hooks$', + '^punycode$', + '^domain$', + '^constants$', + '^sys$', + '^_linklist$', + '^_stream_wrap$' + ], + } + }, + { + name: 'not-to-deprecated', + comment: + 'This module uses a (version of an) npm module that has been deprecated. Either upgrade to a later ' + + 'version of that module, or find an alternative. Deprecated modules are a security risk.', + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'deprecated' + ] + } + }, + { + name: 'no-non-package-json', + severity: 'error', + comment: + "This module depends on an npm package that isn't in the 'dependencies' section of your package.json. " + + "That's problematic as the package either (1) won't be available on live (2 - worse) will be " + + "available on live with an non-guaranteed version. Fix it by adding the package to the dependencies " + + "in your package.json.", + from: {}, + to: { + dependencyTypes: [ + 'npm-no-pkg', + 'npm-unknown' + ] + } + }, + { + name: 'not-to-unresolvable', + comment: + "This module depends on a module that cannot be found ('resolved to disk'). If it's an npm " + + 'module: add it to your package.json. In all other cases you likely already know what to do.', + severity: 'error', + from: {}, + to: { + couldNotResolve: true + } + }, + { + name: 'no-duplicate-dep-types', + comment: + "Likely this module depends on an external ('npm') package that occurs more than once " + + "in your package.json i.e. bot as a devDependencies and in dependencies. This will cause " + + "maintenance problems later on.", + severity: 'warn', + from: {}, + to: { + moreThanOneDependencyType: true, + dependencyTypesNot: ["type-only"] + } + }, + { + name: 'not-to-test', + comment: + "This module depends on code within a folder that should only contain tests. As tests don't " + + "implement functionality this is odd. Either you're writing a test outside the test folder " + + "or there's something in the test folder that isn't a test.", + severity: 'error', + from: { + pathNot: '^(tests)' + }, + to: { + path: '^(tests)' + } + }, + { + name: 'not-to-spec', + comment: + 'This module depends on a spec (test) file. The responsibility of a spec file is to test code. ' + + "If there's something in a spec that's of use to other modules, it doesn't have that single " + + 'responsibility anymore. Factor it out into (e.g.) a separate utility/ helper or a mock.', + severity: 'error', + from: {}, + to: { + path: '[.](?:spec|test)[.](?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$' + } + }, + { + name: 'not-to-dev-dep', + severity: 'error', + comment: + "This module depends on an npm package from the 'devDependencies' section of your " + + 'package.json. It looks like something that ships to production, though. To prevent problems ' + + "with npm packages that aren't there on production declare it (only!) in the 'dependencies'" + + 'section of your package.json. If this module is development only - add it to the ' + + 'from.pathNot re of the not-to-dev-dep rule in the dependency-cruiser configuration', + from: { + path: '^(src)', + pathNot: '[.](?:spec|test)[.](?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$' + }, + to: { + dependencyTypes: [ + 'npm-dev', + ], + dependencyTypesNot: [ + 'type-only' + ], + pathNot: [ + 'node_modules/@types/' + ] + } + }, + { + name: 'optional-deps-used', + severity: 'info', + comment: + "This module depends on an npm package that is declared as an optional dependency " + + "in your package.json. As this makes sense in limited situations only, it's flagged here. " + + "If you use an optional dependency here by design - add an exception to your" + + "dependency-cruiser configuration.", + from: {}, + to: { + dependencyTypes: [ + 'npm-optional' + ] + } + }, + { + name: 'peer-deps-used', + comment: + "This module depends on an npm package that is declared as a peer dependency " + + "in your package.json. This makes sense if your package is e.g. a plugin, but in " + + "other cases - maybe not so much. If the use of a peer dependency is intentional " + + "add an exception to your dependency-cruiser configuration.", + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'npm-peer' + ] + } + } + ], + options: { + doNotFollow: { + path: ['node_modules'] + }, + tsConfig: { + fileName: 'src/tsconfig.json' + }, + enhancedResolveOptions: { + exportsFields: ['exports'], + conditionNames: ['import', 'require', 'node', 'default', 'types'], + mainFields: ["module", "main", "types", "typings"], + }, + skipAnalysisNotInRules: true, + reporterOptions: { + dot: { + collapsePattern: 'node_modules/(?:@[^/]+/[^/]+|[^/]+)', + }, + archi: { + collapsePattern: '^(?:packages|src|lib(s?)|app(s?)|bin|test(s?)|spec(s?))/[^/]+|node_modules/(?:@[^/]+/[^/]+|[^/]+)', + }, + text: { + highlightFocused: true + }, + } + } +}; diff --git a/cli/commands/create-bundle/.gitignore b/cli/commands/create-bundle/.gitignore new file mode 100644 index 00000000000..19758deef41 --- /dev/null +++ b/cli/commands/create-bundle/.gitignore @@ -0,0 +1,4 @@ +dist +node_modules +.DS_Store +.cache/ diff --git a/cli/commands/create-bundle/CHANGELOG.md b/cli/commands/create-bundle/CHANGELOG.md new file mode 100644 index 00000000000..00e8f4670ef --- /dev/null +++ b/cli/commands/create-bundle/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/cli-command-create-bundle diff --git a/cli/commands/create-bundle/README.md b/cli/commands/create-bundle/README.md new file mode 100644 index 00000000000..28c8ad7a659 --- /dev/null +++ b/cli/commands/create-bundle/README.md @@ -0,0 +1,11 @@ +# @tsparticles/cli-command-create-bundle + +## Build + +```bash +pnpm run build +``` + +## License + +MIT diff --git a/cli/commands/create-bundle/eslint.config.js b/cli/commands/create-bundle/eslint.config.js new file mode 100644 index 00000000000..7dc85e779b6 --- /dev/null +++ b/cli/commands/create-bundle/eslint.config.js @@ -0,0 +1,22 @@ +import path from "path"; +import {fileURLToPath} from "url"; +import {defineConfig} from "eslint/config"; +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default defineConfig([ + tsParticlesESLintConfig, + { + languageOptions: { + parserOptions: { + project: [path.join(__dirname, "src", "tsconfig.json")], + tsconfigRootDir: __dirname, + sourceType: "module" + } + }, + rules: { + "no-console": "off" + } + } +]); diff --git a/cli/commands/create-bundle/package.json b/cli/commands/create-bundle/package.json new file mode 100644 index 00000000000..eb9833fafcc --- /dev/null +++ b/cli/commands/create-bundle/package.json @@ -0,0 +1,65 @@ +{ + "name": "@tsparticles/cli-command-create-bundle", + "version": "4.0.0-beta.15", + "license": "MIT", + "type": "module", + "publishConfig": { + "access": "public", + "tagVersionPrefix": "v" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "cli/commands/create-bundle" + }, + "prettier": "@tsparticles/prettier-config", + "scripts": { + "prettify:ci:src": "prettier --check ./src/*", + "prettify:ci:readme": "prettier --check ./README.md", + "prettify:src": "prettier --write ./src/*", + "prettify:readme": "prettier --write ./README.md", + "lint": "eslint src --ext .js,.jsx,.ts,.tsx --cache --cache-location .cache/eslint/.eslintcache --cache-strategy metadata --fix", + "lint:ci": "eslint src --ext .js,.jsx,.ts,.tsx --cache --cache-location .cache/eslint/.eslintcache --cache-strategy metadata", + "circular-deps": "depcruise src --include-only '^src' --validate --output-type err-long", + "compile": "pnpm run build:ts", + "compile:ci": "pnpm run build:ts", + "build:ts": "pnpm run build:ts:cjs", + "build:ts:cjs": "tsc -p src", + "build": "pnpm run clear:dist && pnpm run prettify:src && pnpm run lint && pnpm run compile && pnpm run circular-deps && pnpm run prettify:readme", + "build:ci": "pnpm run clear:dist && pnpm run prettify:ci:src && pnpm run lint:ci && pnpm run compile:ci && pnpm run prettify:ci:readme", + "clear:dist": "rimraf ./dist", + "prepack": "pnpm run build" + }, + "dependencies": { + "@tsparticles/cli-create-utils": "workspace:^", + "@tsparticles/depcruise-config": "workspace:^", + "@tsparticles/eslint-config": "workspace:^", + "@tsparticles/prettier-config": "workspace:^", + "@tsparticles/tsconfig": "workspace:^", + "dependency-cruiser": "^17.4.0", + "eslint": "^10.3.0", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-jsdoc": "^62.9.0", + "eslint-plugin-prettier": "^5.5.5", + "eslint-plugin-tsdoc": "^0.5.2", + "prettier": "^3.8.3", + "prettier-plugin-multiline-arrays": "^4.1.8" + }, + "devDependencies": { + "@types/estree": "^1.0.9", + "@types/node": "^25.6.2", + "browserslist": "^4.28.2", + "commander": "^14.0.3", + "copyfiles": "^2.4.1", + "cross-env": "^10.1.0", + "rimraf": "^6.1.3", + "terser-webpack-plugin": "^5.5.0", + "ts-node": "^10.9.2", + "typescript": "^6.0.3", + "webpack-bundle-analyzer": "^5.3.0", + "webpack-cli": "^7.0.2" + }, + "description": "tsParticles CLI Create Bundle command", + "main": "dist/bundle.js", + "author": "Matteo Bruni " +} diff --git a/cli/commands/create-bundle/src/bundle.ts b/cli/commands/create-bundle/src/bundle.ts new file mode 100644 index 00000000000..e7437da0161 --- /dev/null +++ b/cli/commands/create-bundle/src/bundle.ts @@ -0,0 +1,23 @@ +import { createProjectTemplate, promptProjectData } from "@tsparticles/cli-create-utils"; +import { Command } from "commander"; + +const bundleCreateCommand = new Command("bundle"); + +bundleCreateCommand.description("Create a new tsParticles bundle"); +bundleCreateCommand.argument("", "Destination folder"); +bundleCreateCommand.action(async (destination: string) => { + const data = await promptProjectData({ + destination, + nameLabel: "bundle", + }); + + await createProjectTemplate({ + description: data.description, + destination: data.destinationPath, + kind: "bundle", + name: data.name, + repositoryUrl: data.repositoryUrl, + }); +}); + +export { bundleCreateCommand }; diff --git a/cli/commands/create-bundle/src/tsconfig.json b/cli/commands/create-bundle/src/tsconfig.json new file mode 100644 index 00000000000..a86b208cb31 --- /dev/null +++ b/cli/commands/create-bundle/src/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "rootDir": ".", + "outDir": "../dist" + }, + "references": [{ "path": "../" }], + "include": ["**/*"] +} diff --git a/cli/commands/create-bundle/tsconfig.json b/cli/commands/create-bundle/tsconfig.json new file mode 100644 index 00000000000..8c0be5a74c5 --- /dev/null +++ b/cli/commands/create-bundle/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "rootDir": ".", + "outDir": ".", + "resolveJsonModule": true, + "composite": true, + "target": "ESNext", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "types": [ + "node" + ], + "strict": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "allowSyntheticDefaultImports": true + }, + "include": [ + "src/**/*" + ] +} diff --git a/cli/commands/create-effect/.browserslistrc b/cli/commands/create-effect/.browserslistrc new file mode 100644 index 00000000000..fb811e7a9d2 --- /dev/null +++ b/cli/commands/create-effect/.browserslistrc @@ -0,0 +1,2 @@ +since 2021 +not dead diff --git a/cli/commands/create-effect/.dependency-cruiser.cjs b/cli/commands/create-effect/.dependency-cruiser.cjs new file mode 100644 index 00000000000..f35670138c7 --- /dev/null +++ b/cli/commands/create-effect/.dependency-cruiser.cjs @@ -0,0 +1,230 @@ +/** @type {import('dependency-cruiser').IConfiguration} */ +module.exports = { + forbidden: [ + { + name: 'no-circular', + severity: 'warn', + comment: + "This dependency is part of a circular relationship. You might want to revise " + + "your solution (i.e. use dependency inversion, make sure the modules have a single responsibility) ", + from: {}, + to: { + circular: true + } + }, + { + name: 'no-orphans', + comment: + "This is an orphan module - it's likely not used (anymore?). Either use it or " + + "remove it. If it's logical this module is an orphan (i.e. it's a config file), " + + "add an exception for it in your dependency-cruiser configuration. By default " + + "this rule does not scrutinize dot-files (e.g. .eslintrc.js), TypeScript declaration " + + "files (.d.ts), tsconfig.json and some of the babel and webpack configs.", + severity: 'warn', + from: { + orphan: true, + pathNot: [ + '(^|/)[.][^/]+[.](?:js|cjs|mjs|ts|cts|mts|json)$', + '[.]d[.]ts$', + '(^|/)tsconfig[.]json$', + '(^|/)(?:babel|webpack)[.]config[.](?:js|cjs|mjs|ts|cts|mts|json)$' + ] + }, + to: {}, + }, + { + name: 'no-deprecated-core', + comment: + 'A module depends on a node core module that has been deprecated. Find an alternative - these are ' + + "bound to exist - node doesn't deprecate lightly.", + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'core' + ], + path: [ + '^v8/tools/codemap$', + '^v8/tools/consarray$', + '^v8/tools/csvparser$', + '^v8/tools/logreader$', + '^v8/tools/profile_view$', + '^v8/tools/profile$', + '^v8/tools/SourceMap$', + '^v8/tools/splaytree$', + '^v8/tools/tickprocessor-driver$', + '^v8/tools/tickprocessor$', + '^node-inspect/lib/_inspect$', + '^node-inspect/lib/internal/inspect_client$', + '^node-inspect/lib/internal/inspect_repl$', + '^async_hooks$', + '^punycode$', + '^domain$', + '^constants$', + '^sys$', + '^_linklist$', + '^_stream_wrap$' + ], + } + }, + { + name: 'not-to-deprecated', + comment: + 'This module uses a (version of an) npm module that has been deprecated. Either upgrade to a later ' + + 'version of that module, or find an alternative. Deprecated modules are a security risk.', + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'deprecated' + ] + } + }, + { + name: 'no-non-package-json', + severity: 'error', + comment: + "This module depends on an npm package that isn't in the 'dependencies' section of your package.json. " + + "That's problematic as the package either (1) won't be available on live (2 - worse) will be " + + "available on live with an non-guaranteed version. Fix it by adding the package to the dependencies " + + "in your package.json.", + from: {}, + to: { + dependencyTypes: [ + 'npm-no-pkg', + 'npm-unknown' + ] + } + }, + { + name: 'not-to-unresolvable', + comment: + "This module depends on a module that cannot be found ('resolved to disk'). If it's an npm " + + 'module: add it to your package.json. In all other cases you likely already know what to do.', + severity: 'error', + from: {}, + to: { + couldNotResolve: true + } + }, + { + name: 'no-duplicate-dep-types', + comment: + "Likely this module depends on an external ('npm') package that occurs more than once " + + "in your package.json i.e. bot as a devDependencies and in dependencies. This will cause " + + "maintenance problems later on.", + severity: 'warn', + from: {}, + to: { + moreThanOneDependencyType: true, + dependencyTypesNot: ["type-only"] + } + }, + { + name: 'not-to-test', + comment: + "This module depends on code within a folder that should only contain tests. As tests don't " + + "implement functionality this is odd. Either you're writing a test outside the test folder " + + "or there's something in the test folder that isn't a test.", + severity: 'error', + from: { + pathNot: '^(tests)' + }, + to: { + path: '^(tests)' + } + }, + { + name: 'not-to-spec', + comment: + 'This module depends on a spec (test) file. The responsibility of a spec file is to test code. ' + + "If there's something in a spec that's of use to other modules, it doesn't have that single " + + 'responsibility anymore. Factor it out into (e.g.) a separate utility/ helper or a mock.', + severity: 'error', + from: {}, + to: { + path: '[.](?:spec|test)[.](?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$' + } + }, + { + name: 'not-to-dev-dep', + severity: 'error', + comment: + "This module depends on an npm package from the 'devDependencies' section of your " + + 'package.json. It looks like something that ships to production, though. To prevent problems ' + + "with npm packages that aren't there on production declare it (only!) in the 'dependencies'" + + 'section of your package.json. If this module is development only - add it to the ' + + 'from.pathNot re of the not-to-dev-dep rule in the dependency-cruiser configuration', + from: { + path: '^(src)', + pathNot: '[.](?:spec|test)[.](?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$' + }, + to: { + dependencyTypes: [ + 'npm-dev', + ], + dependencyTypesNot: [ + 'type-only' + ], + pathNot: [ + 'node_modules/@types/' + ] + } + }, + { + name: 'optional-deps-used', + severity: 'info', + comment: + "This module depends on an npm package that is declared as an optional dependency " + + "in your package.json. As this makes sense in limited situations only, it's flagged here. " + + "If you use an optional dependency here by design - add an exception to your" + + "dependency-cruiser configuration.", + from: {}, + to: { + dependencyTypes: [ + 'npm-optional' + ] + } + }, + { + name: 'peer-deps-used', + comment: + "This module depends on an npm package that is declared as a peer dependency " + + "in your package.json. This makes sense if your package is e.g. a plugin, but in " + + "other cases - maybe not so much. If the use of a peer dependency is intentional " + + "add an exception to your dependency-cruiser configuration.", + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'npm-peer' + ] + } + } + ], + options: { + doNotFollow: { + path: ['node_modules'] + }, + tsConfig: { + fileName: 'src/tsconfig.json' + }, + enhancedResolveOptions: { + exportsFields: ['exports'], + conditionNames: ['import', 'require', 'node', 'default', 'types'], + mainFields: ["module", "main", "types", "typings"], + }, + skipAnalysisNotInRules: true, + reporterOptions: { + dot: { + collapsePattern: 'node_modules/(?:@[^/]+/[^/]+|[^/]+)', + }, + archi: { + collapsePattern: '^(?:packages|src|lib(s?)|app(s?)|bin|test(s?)|spec(s?))/[^/]+|node_modules/(?:@[^/]+/[^/]+|[^/]+)', + }, + text: { + highlightFocused: true + }, + } + } +}; diff --git a/cli/commands/create-effect/.gitignore b/cli/commands/create-effect/.gitignore new file mode 100644 index 00000000000..19758deef41 --- /dev/null +++ b/cli/commands/create-effect/.gitignore @@ -0,0 +1,4 @@ +dist +node_modules +.DS_Store +.cache/ diff --git a/cli/commands/create-effect/CHANGELOG.md b/cli/commands/create-effect/CHANGELOG.md new file mode 100644 index 00000000000..e8de6927c0a --- /dev/null +++ b/cli/commands/create-effect/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/cli-command-create-effect diff --git a/cli/commands/create-effect/README.md b/cli/commands/create-effect/README.md new file mode 100644 index 00000000000..a5b226308cf --- /dev/null +++ b/cli/commands/create-effect/README.md @@ -0,0 +1,11 @@ +# @tsparticles/cli-command-create-effect + +## Build + +```bash +pnpm run build +``` + +## License + +MIT diff --git a/cli/commands/create-effect/eslint.config.js b/cli/commands/create-effect/eslint.config.js new file mode 100644 index 00000000000..7dc85e779b6 --- /dev/null +++ b/cli/commands/create-effect/eslint.config.js @@ -0,0 +1,22 @@ +import path from "path"; +import {fileURLToPath} from "url"; +import {defineConfig} from "eslint/config"; +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default defineConfig([ + tsParticlesESLintConfig, + { + languageOptions: { + parserOptions: { + project: [path.join(__dirname, "src", "tsconfig.json")], + tsconfigRootDir: __dirname, + sourceType: "module" + } + }, + rules: { + "no-console": "off" + } + } +]); diff --git a/cli/commands/create-effect/package.json b/cli/commands/create-effect/package.json new file mode 100644 index 00000000000..ceead9ee21f --- /dev/null +++ b/cli/commands/create-effect/package.json @@ -0,0 +1,65 @@ +{ + "name": "@tsparticles/cli-command-create-effect", + "version": "4.0.0-beta.15", + "license": "MIT", + "type": "module", + "publishConfig": { + "access": "public", + "tagVersionPrefix": "v" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "cli/commands/create-effect" + }, + "prettier": "@tsparticles/prettier-config", + "scripts": { + "prettify:ci:src": "prettier --check ./src/*", + "prettify:ci:readme": "prettier --check ./README.md", + "prettify:src": "prettier --write ./src/*", + "prettify:readme": "prettier --write ./README.md", + "lint": "eslint src --ext .js,.jsx,.ts,.tsx --cache --cache-location .cache/eslint/.eslintcache --cache-strategy metadata --fix", + "lint:ci": "eslint src --ext .js,.jsx,.ts,.tsx --cache --cache-location .cache/eslint/.eslintcache --cache-strategy metadata", + "circular-deps": "depcruise src --include-only '^src' --validate --output-type err-long", + "compile": "pnpm run build:ts", + "compile:ci": "pnpm run build:ts", + "build:ts": "pnpm run build:ts:cjs", + "build:ts:cjs": "tsc -p src", + "build": "pnpm run clear:dist && pnpm run prettify:src && pnpm run lint && pnpm run compile && pnpm run circular-deps && pnpm run prettify:readme", + "build:ci": "pnpm run clear:dist && pnpm run prettify:ci:src && pnpm run lint:ci && pnpm run compile:ci && pnpm run prettify:ci:readme", + "clear:dist": "rimraf ./dist", + "prepack": "pnpm run build" + }, + "dependencies": { + "@tsparticles/cli-create-utils": "workspace:^", + "@tsparticles/depcruise-config": "workspace:^", + "@tsparticles/eslint-config": "workspace:^", + "@tsparticles/prettier-config": "workspace:^", + "@tsparticles/tsconfig": "workspace:^", + "dependency-cruiser": "^17.4.0", + "eslint": "^10.3.0", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-jsdoc": "^62.9.0", + "eslint-plugin-prettier": "^5.5.5", + "eslint-plugin-tsdoc": "^0.5.2", + "prettier": "^3.8.3", + "prettier-plugin-multiline-arrays": "^4.1.8" + }, + "devDependencies": { + "@types/estree": "^1.0.9", + "@types/node": "^25.6.2", + "browserslist": "^4.28.2", + "commander": "^14.0.3", + "copyfiles": "^2.4.1", + "cross-env": "^10.1.0", + "rimraf": "^6.1.3", + "terser-webpack-plugin": "^5.5.0", + "ts-node": "^10.9.2", + "typescript": "^6.0.3", + "webpack-bundle-analyzer": "^5.3.0", + "webpack-cli": "^7.0.2" + }, + "description": "tsParticles CLI Create Effect command", + "main": "dist/effect.js", + "author": "Matteo Bruni " +} diff --git a/cli/commands/create-effect/src/effect.ts b/cli/commands/create-effect/src/effect.ts new file mode 100644 index 00000000000..7fb6f77b653 --- /dev/null +++ b/cli/commands/create-effect/src/effect.ts @@ -0,0 +1,23 @@ +import { createProjectTemplate, promptProjectData } from "@tsparticles/cli-create-utils"; +import { Command } from "commander"; + +const effectCreateCommand = new Command("effect"); + +effectCreateCommand.description("Create a new tsParticles effect"); +effectCreateCommand.argument("", "Destination folder"); +effectCreateCommand.action(async (destination: string) => { + const data = await promptProjectData({ + destination, + nameLabel: "effect", + }); + + await createProjectTemplate({ + description: data.description, + destination: data.destinationPath, + kind: "effect", + name: data.name, + repositoryUrl: data.repositoryUrl, + }); +}); + +export { effectCreateCommand }; diff --git a/cli/commands/create-effect/src/tsconfig.json b/cli/commands/create-effect/src/tsconfig.json new file mode 100644 index 00000000000..a86b208cb31 --- /dev/null +++ b/cli/commands/create-effect/src/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "rootDir": ".", + "outDir": "../dist" + }, + "references": [{ "path": "../" }], + "include": ["**/*"] +} diff --git a/cli/commands/create-effect/tsconfig.json b/cli/commands/create-effect/tsconfig.json new file mode 100644 index 00000000000..8c0be5a74c5 --- /dev/null +++ b/cli/commands/create-effect/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "rootDir": ".", + "outDir": ".", + "resolveJsonModule": true, + "composite": true, + "target": "ESNext", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "types": [ + "node" + ], + "strict": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "allowSyntheticDefaultImports": true + }, + "include": [ + "src/**/*" + ] +} diff --git a/cli/commands/create-interaction/.browserslistrc b/cli/commands/create-interaction/.browserslistrc new file mode 100644 index 00000000000..fb811e7a9d2 --- /dev/null +++ b/cli/commands/create-interaction/.browserslistrc @@ -0,0 +1,2 @@ +since 2021 +not dead diff --git a/cli/commands/create-interaction/.dependency-cruiser.cjs b/cli/commands/create-interaction/.dependency-cruiser.cjs new file mode 100644 index 00000000000..f35670138c7 --- /dev/null +++ b/cli/commands/create-interaction/.dependency-cruiser.cjs @@ -0,0 +1,230 @@ +/** @type {import('dependency-cruiser').IConfiguration} */ +module.exports = { + forbidden: [ + { + name: 'no-circular', + severity: 'warn', + comment: + "This dependency is part of a circular relationship. You might want to revise " + + "your solution (i.e. use dependency inversion, make sure the modules have a single responsibility) ", + from: {}, + to: { + circular: true + } + }, + { + name: 'no-orphans', + comment: + "This is an orphan module - it's likely not used (anymore?). Either use it or " + + "remove it. If it's logical this module is an orphan (i.e. it's a config file), " + + "add an exception for it in your dependency-cruiser configuration. By default " + + "this rule does not scrutinize dot-files (e.g. .eslintrc.js), TypeScript declaration " + + "files (.d.ts), tsconfig.json and some of the babel and webpack configs.", + severity: 'warn', + from: { + orphan: true, + pathNot: [ + '(^|/)[.][^/]+[.](?:js|cjs|mjs|ts|cts|mts|json)$', + '[.]d[.]ts$', + '(^|/)tsconfig[.]json$', + '(^|/)(?:babel|webpack)[.]config[.](?:js|cjs|mjs|ts|cts|mts|json)$' + ] + }, + to: {}, + }, + { + name: 'no-deprecated-core', + comment: + 'A module depends on a node core module that has been deprecated. Find an alternative - these are ' + + "bound to exist - node doesn't deprecate lightly.", + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'core' + ], + path: [ + '^v8/tools/codemap$', + '^v8/tools/consarray$', + '^v8/tools/csvparser$', + '^v8/tools/logreader$', + '^v8/tools/profile_view$', + '^v8/tools/profile$', + '^v8/tools/SourceMap$', + '^v8/tools/splaytree$', + '^v8/tools/tickprocessor-driver$', + '^v8/tools/tickprocessor$', + '^node-inspect/lib/_inspect$', + '^node-inspect/lib/internal/inspect_client$', + '^node-inspect/lib/internal/inspect_repl$', + '^async_hooks$', + '^punycode$', + '^domain$', + '^constants$', + '^sys$', + '^_linklist$', + '^_stream_wrap$' + ], + } + }, + { + name: 'not-to-deprecated', + comment: + 'This module uses a (version of an) npm module that has been deprecated. Either upgrade to a later ' + + 'version of that module, or find an alternative. Deprecated modules are a security risk.', + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'deprecated' + ] + } + }, + { + name: 'no-non-package-json', + severity: 'error', + comment: + "This module depends on an npm package that isn't in the 'dependencies' section of your package.json. " + + "That's problematic as the package either (1) won't be available on live (2 - worse) will be " + + "available on live with an non-guaranteed version. Fix it by adding the package to the dependencies " + + "in your package.json.", + from: {}, + to: { + dependencyTypes: [ + 'npm-no-pkg', + 'npm-unknown' + ] + } + }, + { + name: 'not-to-unresolvable', + comment: + "This module depends on a module that cannot be found ('resolved to disk'). If it's an npm " + + 'module: add it to your package.json. In all other cases you likely already know what to do.', + severity: 'error', + from: {}, + to: { + couldNotResolve: true + } + }, + { + name: 'no-duplicate-dep-types', + comment: + "Likely this module depends on an external ('npm') package that occurs more than once " + + "in your package.json i.e. bot as a devDependencies and in dependencies. This will cause " + + "maintenance problems later on.", + severity: 'warn', + from: {}, + to: { + moreThanOneDependencyType: true, + dependencyTypesNot: ["type-only"] + } + }, + { + name: 'not-to-test', + comment: + "This module depends on code within a folder that should only contain tests. As tests don't " + + "implement functionality this is odd. Either you're writing a test outside the test folder " + + "or there's something in the test folder that isn't a test.", + severity: 'error', + from: { + pathNot: '^(tests)' + }, + to: { + path: '^(tests)' + } + }, + { + name: 'not-to-spec', + comment: + 'This module depends on a spec (test) file. The responsibility of a spec file is to test code. ' + + "If there's something in a spec that's of use to other modules, it doesn't have that single " + + 'responsibility anymore. Factor it out into (e.g.) a separate utility/ helper or a mock.', + severity: 'error', + from: {}, + to: { + path: '[.](?:spec|test)[.](?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$' + } + }, + { + name: 'not-to-dev-dep', + severity: 'error', + comment: + "This module depends on an npm package from the 'devDependencies' section of your " + + 'package.json. It looks like something that ships to production, though. To prevent problems ' + + "with npm packages that aren't there on production declare it (only!) in the 'dependencies'" + + 'section of your package.json. If this module is development only - add it to the ' + + 'from.pathNot re of the not-to-dev-dep rule in the dependency-cruiser configuration', + from: { + path: '^(src)', + pathNot: '[.](?:spec|test)[.](?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$' + }, + to: { + dependencyTypes: [ + 'npm-dev', + ], + dependencyTypesNot: [ + 'type-only' + ], + pathNot: [ + 'node_modules/@types/' + ] + } + }, + { + name: 'optional-deps-used', + severity: 'info', + comment: + "This module depends on an npm package that is declared as an optional dependency " + + "in your package.json. As this makes sense in limited situations only, it's flagged here. " + + "If you use an optional dependency here by design - add an exception to your" + + "dependency-cruiser configuration.", + from: {}, + to: { + dependencyTypes: [ + 'npm-optional' + ] + } + }, + { + name: 'peer-deps-used', + comment: + "This module depends on an npm package that is declared as a peer dependency " + + "in your package.json. This makes sense if your package is e.g. a plugin, but in " + + "other cases - maybe not so much. If the use of a peer dependency is intentional " + + "add an exception to your dependency-cruiser configuration.", + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'npm-peer' + ] + } + } + ], + options: { + doNotFollow: { + path: ['node_modules'] + }, + tsConfig: { + fileName: 'src/tsconfig.json' + }, + enhancedResolveOptions: { + exportsFields: ['exports'], + conditionNames: ['import', 'require', 'node', 'default', 'types'], + mainFields: ["module", "main", "types", "typings"], + }, + skipAnalysisNotInRules: true, + reporterOptions: { + dot: { + collapsePattern: 'node_modules/(?:@[^/]+/[^/]+|[^/]+)', + }, + archi: { + collapsePattern: '^(?:packages|src|lib(s?)|app(s?)|bin|test(s?)|spec(s?))/[^/]+|node_modules/(?:@[^/]+/[^/]+|[^/]+)', + }, + text: { + highlightFocused: true + }, + } + } +}; diff --git a/cli/commands/create-interaction/.gitignore b/cli/commands/create-interaction/.gitignore new file mode 100644 index 00000000000..19758deef41 --- /dev/null +++ b/cli/commands/create-interaction/.gitignore @@ -0,0 +1,4 @@ +dist +node_modules +.DS_Store +.cache/ diff --git a/cli/commands/create-interaction/CHANGELOG.md b/cli/commands/create-interaction/CHANGELOG.md new file mode 100644 index 00000000000..c8db2fe4bc7 --- /dev/null +++ b/cli/commands/create-interaction/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/cli-command-create-interaction diff --git a/cli/commands/create-interaction/README.md b/cli/commands/create-interaction/README.md new file mode 100644 index 00000000000..503e6768fc0 --- /dev/null +++ b/cli/commands/create-interaction/README.md @@ -0,0 +1,11 @@ +# @tsparticles/cli-command-create-interaction + +## Build + +```bash +pnpm run build +``` + +## License + +MIT diff --git a/cli/commands/create-interaction/eslint.config.js b/cli/commands/create-interaction/eslint.config.js new file mode 100644 index 00000000000..7dc85e779b6 --- /dev/null +++ b/cli/commands/create-interaction/eslint.config.js @@ -0,0 +1,22 @@ +import path from "path"; +import {fileURLToPath} from "url"; +import {defineConfig} from "eslint/config"; +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default defineConfig([ + tsParticlesESLintConfig, + { + languageOptions: { + parserOptions: { + project: [path.join(__dirname, "src", "tsconfig.json")], + tsconfigRootDir: __dirname, + sourceType: "module" + } + }, + rules: { + "no-console": "off" + } + } +]); diff --git a/cli/commands/create-interaction/package.json b/cli/commands/create-interaction/package.json new file mode 100644 index 00000000000..c2fd84c2b81 --- /dev/null +++ b/cli/commands/create-interaction/package.json @@ -0,0 +1,65 @@ +{ + "name": "@tsparticles/cli-command-create-interaction", + "version": "4.0.0-beta.15", + "license": "MIT", + "type": "module", + "publishConfig": { + "access": "public", + "tagVersionPrefix": "v" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "cli/commands/create-interaction" + }, + "prettier": "@tsparticles/prettier-config", + "scripts": { + "prettify:ci:src": "prettier --check ./src/*", + "prettify:ci:readme": "prettier --check ./README.md", + "prettify:src": "prettier --write ./src/*", + "prettify:readme": "prettier --write ./README.md", + "lint": "eslint src --ext .js,.jsx,.ts,.tsx --cache --cache-location .cache/eslint/.eslintcache --cache-strategy metadata --fix", + "lint:ci": "eslint src --ext .js,.jsx,.ts,.tsx --cache --cache-location .cache/eslint/.eslintcache --cache-strategy metadata", + "circular-deps": "depcruise src --include-only '^src' --validate --output-type err-long", + "compile": "pnpm run build:ts", + "compile:ci": "pnpm run build:ts", + "build:ts": "pnpm run build:ts:cjs", + "build:ts:cjs": "tsc -p src", + "build": "pnpm run clear:dist && pnpm run prettify:src && pnpm run lint && pnpm run compile && pnpm run circular-deps && pnpm run prettify:readme", + "build:ci": "pnpm run clear:dist && pnpm run prettify:ci:src && pnpm run lint:ci && pnpm run compile:ci && pnpm run prettify:ci:readme", + "clear:dist": "rimraf ./dist", + "prepack": "pnpm run build" + }, + "dependencies": { + "@tsparticles/cli-create-utils": "workspace:^", + "@tsparticles/depcruise-config": "workspace:^", + "@tsparticles/eslint-config": "workspace:^", + "@tsparticles/prettier-config": "workspace:^", + "@tsparticles/tsconfig": "workspace:^", + "dependency-cruiser": "^17.4.0", + "eslint": "^10.3.0", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-jsdoc": "^62.9.0", + "eslint-plugin-prettier": "^5.5.5", + "eslint-plugin-tsdoc": "^0.5.2", + "prettier": "^3.8.3", + "prettier-plugin-multiline-arrays": "^4.1.8" + }, + "devDependencies": { + "@types/estree": "^1.0.9", + "@types/node": "^25.6.2", + "browserslist": "^4.28.2", + "commander": "^14.0.3", + "copyfiles": "^2.4.1", + "cross-env": "^10.1.0", + "rimraf": "^6.1.3", + "terser-webpack-plugin": "^5.5.0", + "ts-node": "^10.9.2", + "typescript": "^6.0.3", + "webpack-bundle-analyzer": "^5.3.0", + "webpack-cli": "^7.0.2" + }, + "description": "tsParticles CLI Create Interaction command", + "main": "dist/interaction.js", + "author": "Matteo Bruni " +} diff --git a/cli/commands/create-interaction/src/interaction.ts b/cli/commands/create-interaction/src/interaction.ts new file mode 100644 index 00000000000..9d77336365a --- /dev/null +++ b/cli/commands/create-interaction/src/interaction.ts @@ -0,0 +1,34 @@ +import { createProjectTemplate, promptProjectData } from "@tsparticles/cli-create-utils"; +import { Command } from "commander"; + +const interactionCreateCommand = new Command("interaction"); + +interactionCreateCommand.description("Create a new tsParticles interaction"); +interactionCreateCommand.argument("", "Destination folder"); +interactionCreateCommand.action(async (destination: string) => { + const data = await promptProjectData<"external" | "generic" | "particles">({ + destination, + nameLabel: "interaction", + select: { + choices: [ + { title: "Generic (external + particles)", value: "generic" }, + { title: "External interaction", value: "external" }, + { title: "Particles interaction", value: "particles" }, + ], + initial: "generic", + message: "Which interaction type do you want to create?", + name: "interactionType", + }, + }); + + await createProjectTemplate({ + description: data.description, + destination: data.destinationPath, + kind: "interaction", + name: data.name, + repositoryUrl: data.repositoryUrl, + type: data.type, + }); +}); + +export { interactionCreateCommand }; diff --git a/cli/commands/create-interaction/src/tsconfig.json b/cli/commands/create-interaction/src/tsconfig.json new file mode 100644 index 00000000000..a86b208cb31 --- /dev/null +++ b/cli/commands/create-interaction/src/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "rootDir": ".", + "outDir": "../dist" + }, + "references": [{ "path": "../" }], + "include": ["**/*"] +} diff --git a/cli/commands/create-interaction/tsconfig.json b/cli/commands/create-interaction/tsconfig.json new file mode 100644 index 00000000000..8c0be5a74c5 --- /dev/null +++ b/cli/commands/create-interaction/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "rootDir": ".", + "outDir": ".", + "resolveJsonModule": true, + "composite": true, + "target": "ESNext", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "types": [ + "node" + ], + "strict": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "allowSyntheticDefaultImports": true + }, + "include": [ + "src/**/*" + ] +} diff --git a/cli/commands/create-palette/.browserslistrc b/cli/commands/create-palette/.browserslistrc new file mode 100644 index 00000000000..fb811e7a9d2 --- /dev/null +++ b/cli/commands/create-palette/.browserslistrc @@ -0,0 +1,2 @@ +since 2021 +not dead diff --git a/cli/commands/create-palette/.dependency-cruiser.cjs b/cli/commands/create-palette/.dependency-cruiser.cjs new file mode 100644 index 00000000000..f35670138c7 --- /dev/null +++ b/cli/commands/create-palette/.dependency-cruiser.cjs @@ -0,0 +1,230 @@ +/** @type {import('dependency-cruiser').IConfiguration} */ +module.exports = { + forbidden: [ + { + name: 'no-circular', + severity: 'warn', + comment: + "This dependency is part of a circular relationship. You might want to revise " + + "your solution (i.e. use dependency inversion, make sure the modules have a single responsibility) ", + from: {}, + to: { + circular: true + } + }, + { + name: 'no-orphans', + comment: + "This is an orphan module - it's likely not used (anymore?). Either use it or " + + "remove it. If it's logical this module is an orphan (i.e. it's a config file), " + + "add an exception for it in your dependency-cruiser configuration. By default " + + "this rule does not scrutinize dot-files (e.g. .eslintrc.js), TypeScript declaration " + + "files (.d.ts), tsconfig.json and some of the babel and webpack configs.", + severity: 'warn', + from: { + orphan: true, + pathNot: [ + '(^|/)[.][^/]+[.](?:js|cjs|mjs|ts|cts|mts|json)$', + '[.]d[.]ts$', + '(^|/)tsconfig[.]json$', + '(^|/)(?:babel|webpack)[.]config[.](?:js|cjs|mjs|ts|cts|mts|json)$' + ] + }, + to: {}, + }, + { + name: 'no-deprecated-core', + comment: + 'A module depends on a node core module that has been deprecated. Find an alternative - these are ' + + "bound to exist - node doesn't deprecate lightly.", + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'core' + ], + path: [ + '^v8/tools/codemap$', + '^v8/tools/consarray$', + '^v8/tools/csvparser$', + '^v8/tools/logreader$', + '^v8/tools/profile_view$', + '^v8/tools/profile$', + '^v8/tools/SourceMap$', + '^v8/tools/splaytree$', + '^v8/tools/tickprocessor-driver$', + '^v8/tools/tickprocessor$', + '^node-inspect/lib/_inspect$', + '^node-inspect/lib/internal/inspect_client$', + '^node-inspect/lib/internal/inspect_repl$', + '^async_hooks$', + '^punycode$', + '^domain$', + '^constants$', + '^sys$', + '^_linklist$', + '^_stream_wrap$' + ], + } + }, + { + name: 'not-to-deprecated', + comment: + 'This module uses a (version of an) npm module that has been deprecated. Either upgrade to a later ' + + 'version of that module, or find an alternative. Deprecated modules are a security risk.', + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'deprecated' + ] + } + }, + { + name: 'no-non-package-json', + severity: 'error', + comment: + "This module depends on an npm package that isn't in the 'dependencies' section of your package.json. " + + "That's problematic as the package either (1) won't be available on live (2 - worse) will be " + + "available on live with an non-guaranteed version. Fix it by adding the package to the dependencies " + + "in your package.json.", + from: {}, + to: { + dependencyTypes: [ + 'npm-no-pkg', + 'npm-unknown' + ] + } + }, + { + name: 'not-to-unresolvable', + comment: + "This module depends on a module that cannot be found ('resolved to disk'). If it's an npm " + + 'module: add it to your package.json. In all other cases you likely already know what to do.', + severity: 'error', + from: {}, + to: { + couldNotResolve: true + } + }, + { + name: 'no-duplicate-dep-types', + comment: + "Likely this module depends on an external ('npm') package that occurs more than once " + + "in your package.json i.e. bot as a devDependencies and in dependencies. This will cause " + + "maintenance problems later on.", + severity: 'warn', + from: {}, + to: { + moreThanOneDependencyType: true, + dependencyTypesNot: ["type-only"] + } + }, + { + name: 'not-to-test', + comment: + "This module depends on code within a folder that should only contain tests. As tests don't " + + "implement functionality this is odd. Either you're writing a test outside the test folder " + + "or there's something in the test folder that isn't a test.", + severity: 'error', + from: { + pathNot: '^(tests)' + }, + to: { + path: '^(tests)' + } + }, + { + name: 'not-to-spec', + comment: + 'This module depends on a spec (test) file. The responsibility of a spec file is to test code. ' + + "If there's something in a spec that's of use to other modules, it doesn't have that single " + + 'responsibility anymore. Factor it out into (e.g.) a separate utility/ helper or a mock.', + severity: 'error', + from: {}, + to: { + path: '[.](?:spec|test)[.](?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$' + } + }, + { + name: 'not-to-dev-dep', + severity: 'error', + comment: + "This module depends on an npm package from the 'devDependencies' section of your " + + 'package.json. It looks like something that ships to production, though. To prevent problems ' + + "with npm packages that aren't there on production declare it (only!) in the 'dependencies'" + + 'section of your package.json. If this module is development only - add it to the ' + + 'from.pathNot re of the not-to-dev-dep rule in the dependency-cruiser configuration', + from: { + path: '^(src)', + pathNot: '[.](?:spec|test)[.](?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$' + }, + to: { + dependencyTypes: [ + 'npm-dev', + ], + dependencyTypesNot: [ + 'type-only' + ], + pathNot: [ + 'node_modules/@types/' + ] + } + }, + { + name: 'optional-deps-used', + severity: 'info', + comment: + "This module depends on an npm package that is declared as an optional dependency " + + "in your package.json. As this makes sense in limited situations only, it's flagged here. " + + "If you use an optional dependency here by design - add an exception to your" + + "dependency-cruiser configuration.", + from: {}, + to: { + dependencyTypes: [ + 'npm-optional' + ] + } + }, + { + name: 'peer-deps-used', + comment: + "This module depends on an npm package that is declared as a peer dependency " + + "in your package.json. This makes sense if your package is e.g. a plugin, but in " + + "other cases - maybe not so much. If the use of a peer dependency is intentional " + + "add an exception to your dependency-cruiser configuration.", + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'npm-peer' + ] + } + } + ], + options: { + doNotFollow: { + path: ['node_modules'] + }, + tsConfig: { + fileName: 'src/tsconfig.json' + }, + enhancedResolveOptions: { + exportsFields: ['exports'], + conditionNames: ['import', 'require', 'node', 'default', 'types'], + mainFields: ["module", "main", "types", "typings"], + }, + skipAnalysisNotInRules: true, + reporterOptions: { + dot: { + collapsePattern: 'node_modules/(?:@[^/]+/[^/]+|[^/]+)', + }, + archi: { + collapsePattern: '^(?:packages|src|lib(s?)|app(s?)|bin|test(s?)|spec(s?))/[^/]+|node_modules/(?:@[^/]+/[^/]+|[^/]+)', + }, + text: { + highlightFocused: true + }, + } + } +}; diff --git a/cli/commands/create-palette/.gitignore b/cli/commands/create-palette/.gitignore new file mode 100644 index 00000000000..19758deef41 --- /dev/null +++ b/cli/commands/create-palette/.gitignore @@ -0,0 +1,4 @@ +dist +node_modules +.DS_Store +.cache/ diff --git a/cli/commands/create-palette/CHANGELOG.md b/cli/commands/create-palette/CHANGELOG.md new file mode 100644 index 00000000000..64d386ca8a0 --- /dev/null +++ b/cli/commands/create-palette/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/cli-command-create-palette diff --git a/cli/commands/create-palette/README.md b/cli/commands/create-palette/README.md new file mode 100644 index 00000000000..33ec873ae9d --- /dev/null +++ b/cli/commands/create-palette/README.md @@ -0,0 +1,11 @@ +# @tsparticles/cli-command-create-palette + +## Build + +```bash +pnpm run build +``` + +## License + +MIT diff --git a/cli/commands/create-palette/eslint.config.js b/cli/commands/create-palette/eslint.config.js new file mode 100644 index 00000000000..7dc85e779b6 --- /dev/null +++ b/cli/commands/create-palette/eslint.config.js @@ -0,0 +1,22 @@ +import path from "path"; +import {fileURLToPath} from "url"; +import {defineConfig} from "eslint/config"; +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default defineConfig([ + tsParticlesESLintConfig, + { + languageOptions: { + parserOptions: { + project: [path.join(__dirname, "src", "tsconfig.json")], + tsconfigRootDir: __dirname, + sourceType: "module" + } + }, + rules: { + "no-console": "off" + } + } +]); diff --git a/cli/commands/create-palette/package.json b/cli/commands/create-palette/package.json new file mode 100644 index 00000000000..31239c6b488 --- /dev/null +++ b/cli/commands/create-palette/package.json @@ -0,0 +1,65 @@ +{ + "name": "@tsparticles/cli-command-create-palette", + "version": "4.0.0-beta.15", + "license": "MIT", + "type": "module", + "publishConfig": { + "access": "public", + "tagVersionPrefix": "v" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "cli/commands/create-palette" + }, + "prettier": "@tsparticles/prettier-config", + "scripts": { + "prettify:ci:src": "prettier --check ./src/*", + "prettify:ci:readme": "prettier --check ./README.md", + "prettify:src": "prettier --write ./src/*", + "prettify:readme": "prettier --write ./README.md", + "lint": "eslint src --ext .js,.jsx,.ts,.tsx --cache --cache-location .cache/eslint/.eslintcache --cache-strategy metadata --fix", + "lint:ci": "eslint src --ext .js,.jsx,.ts,.tsx --cache --cache-location .cache/eslint/.eslintcache --cache-strategy metadata", + "circular-deps": "depcruise src --include-only '^src' --validate --output-type err-long", + "compile": "pnpm run build:ts", + "compile:ci": "pnpm run build:ts", + "build:ts": "pnpm run build:ts:cjs", + "build:ts:cjs": "tsc -p src", + "build": "pnpm run clear:dist && pnpm run prettify:src && pnpm run lint && pnpm run compile && pnpm run circular-deps && pnpm run prettify:readme", + "build:ci": "pnpm run clear:dist && pnpm run prettify:ci:src && pnpm run lint:ci && pnpm run compile:ci && pnpm run prettify:ci:readme", + "clear:dist": "rimraf ./dist", + "prepack": "pnpm run build" + }, + "dependencies": { + "@tsparticles/cli-create-utils": "workspace:^", + "@tsparticles/depcruise-config": "workspace:^", + "@tsparticles/eslint-config": "workspace:^", + "@tsparticles/prettier-config": "workspace:^", + "@tsparticles/tsconfig": "workspace:^", + "dependency-cruiser": "^17.4.0", + "eslint": "^10.3.0", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-jsdoc": "^62.9.0", + "eslint-plugin-prettier": "^5.5.5", + "eslint-plugin-tsdoc": "^0.5.2", + "prettier": "^3.8.3", + "prettier-plugin-multiline-arrays": "^4.1.8" + }, + "devDependencies": { + "@types/estree": "^1.0.9", + "@types/node": "^25.6.2", + "browserslist": "^4.28.2", + "commander": "^14.0.3", + "copyfiles": "^2.4.1", + "cross-env": "^10.1.0", + "rimraf": "^6.1.3", + "terser-webpack-plugin": "^5.5.0", + "ts-node": "^10.9.2", + "typescript": "^6.0.3", + "webpack-bundle-analyzer": "^5.3.0", + "webpack-cli": "^7.0.2" + }, + "description": "tsParticles CLI Create Palette command", + "main": "dist/palette.js", + "author": "Matteo Bruni " +} diff --git a/cli/commands/create-palette/src/palette.ts b/cli/commands/create-palette/src/palette.ts new file mode 100644 index 00000000000..4654d5f4663 --- /dev/null +++ b/cli/commands/create-palette/src/palette.ts @@ -0,0 +1,23 @@ +import { createProjectTemplate, promptProjectData } from "@tsparticles/cli-create-utils"; +import { Command } from "commander"; + +const paletteCreateCommand = new Command("palette"); + +paletteCreateCommand.description("Create a new tsParticles palette"); +paletteCreateCommand.argument("", "Destination folder"); +paletteCreateCommand.action(async (destination: string) => { + const data = await promptProjectData({ + destination, + nameLabel: "palette", + }); + + await createProjectTemplate({ + description: data.description, + destination: data.destinationPath, + kind: "palette", + name: data.name, + repositoryUrl: data.repositoryUrl, + }); +}); + +export { paletteCreateCommand }; diff --git a/cli/commands/create-palette/src/tsconfig.json b/cli/commands/create-palette/src/tsconfig.json new file mode 100644 index 00000000000..a86b208cb31 --- /dev/null +++ b/cli/commands/create-palette/src/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "rootDir": ".", + "outDir": "../dist" + }, + "references": [{ "path": "../" }], + "include": ["**/*"] +} diff --git a/cli/commands/create-palette/tsconfig.json b/cli/commands/create-palette/tsconfig.json new file mode 100644 index 00000000000..8c0be5a74c5 --- /dev/null +++ b/cli/commands/create-palette/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "rootDir": ".", + "outDir": ".", + "resolveJsonModule": true, + "composite": true, + "target": "ESNext", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "types": [ + "node" + ], + "strict": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "allowSyntheticDefaultImports": true + }, + "include": [ + "src/**/*" + ] +} diff --git a/cli/commands/create-path/.browserslistrc b/cli/commands/create-path/.browserslistrc new file mode 100644 index 00000000000..fb811e7a9d2 --- /dev/null +++ b/cli/commands/create-path/.browserslistrc @@ -0,0 +1,2 @@ +since 2021 +not dead diff --git a/cli/commands/create-path/.dependency-cruiser.cjs b/cli/commands/create-path/.dependency-cruiser.cjs new file mode 100644 index 00000000000..f35670138c7 --- /dev/null +++ b/cli/commands/create-path/.dependency-cruiser.cjs @@ -0,0 +1,230 @@ +/** @type {import('dependency-cruiser').IConfiguration} */ +module.exports = { + forbidden: [ + { + name: 'no-circular', + severity: 'warn', + comment: + "This dependency is part of a circular relationship. You might want to revise " + + "your solution (i.e. use dependency inversion, make sure the modules have a single responsibility) ", + from: {}, + to: { + circular: true + } + }, + { + name: 'no-orphans', + comment: + "This is an orphan module - it's likely not used (anymore?). Either use it or " + + "remove it. If it's logical this module is an orphan (i.e. it's a config file), " + + "add an exception for it in your dependency-cruiser configuration. By default " + + "this rule does not scrutinize dot-files (e.g. .eslintrc.js), TypeScript declaration " + + "files (.d.ts), tsconfig.json and some of the babel and webpack configs.", + severity: 'warn', + from: { + orphan: true, + pathNot: [ + '(^|/)[.][^/]+[.](?:js|cjs|mjs|ts|cts|mts|json)$', + '[.]d[.]ts$', + '(^|/)tsconfig[.]json$', + '(^|/)(?:babel|webpack)[.]config[.](?:js|cjs|mjs|ts|cts|mts|json)$' + ] + }, + to: {}, + }, + { + name: 'no-deprecated-core', + comment: + 'A module depends on a node core module that has been deprecated. Find an alternative - these are ' + + "bound to exist - node doesn't deprecate lightly.", + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'core' + ], + path: [ + '^v8/tools/codemap$', + '^v8/tools/consarray$', + '^v8/tools/csvparser$', + '^v8/tools/logreader$', + '^v8/tools/profile_view$', + '^v8/tools/profile$', + '^v8/tools/SourceMap$', + '^v8/tools/splaytree$', + '^v8/tools/tickprocessor-driver$', + '^v8/tools/tickprocessor$', + '^node-inspect/lib/_inspect$', + '^node-inspect/lib/internal/inspect_client$', + '^node-inspect/lib/internal/inspect_repl$', + '^async_hooks$', + '^punycode$', + '^domain$', + '^constants$', + '^sys$', + '^_linklist$', + '^_stream_wrap$' + ], + } + }, + { + name: 'not-to-deprecated', + comment: + 'This module uses a (version of an) npm module that has been deprecated. Either upgrade to a later ' + + 'version of that module, or find an alternative. Deprecated modules are a security risk.', + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'deprecated' + ] + } + }, + { + name: 'no-non-package-json', + severity: 'error', + comment: + "This module depends on an npm package that isn't in the 'dependencies' section of your package.json. " + + "That's problematic as the package either (1) won't be available on live (2 - worse) will be " + + "available on live with an non-guaranteed version. Fix it by adding the package to the dependencies " + + "in your package.json.", + from: {}, + to: { + dependencyTypes: [ + 'npm-no-pkg', + 'npm-unknown' + ] + } + }, + { + name: 'not-to-unresolvable', + comment: + "This module depends on a module that cannot be found ('resolved to disk'). If it's an npm " + + 'module: add it to your package.json. In all other cases you likely already know what to do.', + severity: 'error', + from: {}, + to: { + couldNotResolve: true + } + }, + { + name: 'no-duplicate-dep-types', + comment: + "Likely this module depends on an external ('npm') package that occurs more than once " + + "in your package.json i.e. bot as a devDependencies and in dependencies. This will cause " + + "maintenance problems later on.", + severity: 'warn', + from: {}, + to: { + moreThanOneDependencyType: true, + dependencyTypesNot: ["type-only"] + } + }, + { + name: 'not-to-test', + comment: + "This module depends on code within a folder that should only contain tests. As tests don't " + + "implement functionality this is odd. Either you're writing a test outside the test folder " + + "or there's something in the test folder that isn't a test.", + severity: 'error', + from: { + pathNot: '^(tests)' + }, + to: { + path: '^(tests)' + } + }, + { + name: 'not-to-spec', + comment: + 'This module depends on a spec (test) file. The responsibility of a spec file is to test code. ' + + "If there's something in a spec that's of use to other modules, it doesn't have that single " + + 'responsibility anymore. Factor it out into (e.g.) a separate utility/ helper or a mock.', + severity: 'error', + from: {}, + to: { + path: '[.](?:spec|test)[.](?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$' + } + }, + { + name: 'not-to-dev-dep', + severity: 'error', + comment: + "This module depends on an npm package from the 'devDependencies' section of your " + + 'package.json. It looks like something that ships to production, though. To prevent problems ' + + "with npm packages that aren't there on production declare it (only!) in the 'dependencies'" + + 'section of your package.json. If this module is development only - add it to the ' + + 'from.pathNot re of the not-to-dev-dep rule in the dependency-cruiser configuration', + from: { + path: '^(src)', + pathNot: '[.](?:spec|test)[.](?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$' + }, + to: { + dependencyTypes: [ + 'npm-dev', + ], + dependencyTypesNot: [ + 'type-only' + ], + pathNot: [ + 'node_modules/@types/' + ] + } + }, + { + name: 'optional-deps-used', + severity: 'info', + comment: + "This module depends on an npm package that is declared as an optional dependency " + + "in your package.json. As this makes sense in limited situations only, it's flagged here. " + + "If you use an optional dependency here by design - add an exception to your" + + "dependency-cruiser configuration.", + from: {}, + to: { + dependencyTypes: [ + 'npm-optional' + ] + } + }, + { + name: 'peer-deps-used', + comment: + "This module depends on an npm package that is declared as a peer dependency " + + "in your package.json. This makes sense if your package is e.g. a plugin, but in " + + "other cases - maybe not so much. If the use of a peer dependency is intentional " + + "add an exception to your dependency-cruiser configuration.", + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'npm-peer' + ] + } + } + ], + options: { + doNotFollow: { + path: ['node_modules'] + }, + tsConfig: { + fileName: 'src/tsconfig.json' + }, + enhancedResolveOptions: { + exportsFields: ['exports'], + conditionNames: ['import', 'require', 'node', 'default', 'types'], + mainFields: ["module", "main", "types", "typings"], + }, + skipAnalysisNotInRules: true, + reporterOptions: { + dot: { + collapsePattern: 'node_modules/(?:@[^/]+/[^/]+|[^/]+)', + }, + archi: { + collapsePattern: '^(?:packages|src|lib(s?)|app(s?)|bin|test(s?)|spec(s?))/[^/]+|node_modules/(?:@[^/]+/[^/]+|[^/]+)', + }, + text: { + highlightFocused: true + }, + } + } +}; diff --git a/cli/commands/create-path/.gitignore b/cli/commands/create-path/.gitignore new file mode 100644 index 00000000000..19758deef41 --- /dev/null +++ b/cli/commands/create-path/.gitignore @@ -0,0 +1,4 @@ +dist +node_modules +.DS_Store +.cache/ diff --git a/cli/commands/create-path/CHANGELOG.md b/cli/commands/create-path/CHANGELOG.md new file mode 100644 index 00000000000..d61a5f4a459 --- /dev/null +++ b/cli/commands/create-path/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/cli-command-create-path diff --git a/cli/commands/create-path/README.md b/cli/commands/create-path/README.md new file mode 100644 index 00000000000..2a9da9501d5 --- /dev/null +++ b/cli/commands/create-path/README.md @@ -0,0 +1,11 @@ +# @tsparticles/cli-command-create-path + +## Build + +```bash +pnpm run build +``` + +## License + +MIT diff --git a/cli/commands/create-path/eslint.config.js b/cli/commands/create-path/eslint.config.js new file mode 100644 index 00000000000..7dc85e779b6 --- /dev/null +++ b/cli/commands/create-path/eslint.config.js @@ -0,0 +1,22 @@ +import path from "path"; +import {fileURLToPath} from "url"; +import {defineConfig} from "eslint/config"; +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default defineConfig([ + tsParticlesESLintConfig, + { + languageOptions: { + parserOptions: { + project: [path.join(__dirname, "src", "tsconfig.json")], + tsconfigRootDir: __dirname, + sourceType: "module" + } + }, + rules: { + "no-console": "off" + } + } +]); diff --git a/cli/commands/create-path/package.json b/cli/commands/create-path/package.json new file mode 100644 index 00000000000..01b9182825d --- /dev/null +++ b/cli/commands/create-path/package.json @@ -0,0 +1,65 @@ +{ + "name": "@tsparticles/cli-command-create-path", + "version": "4.0.0-beta.15", + "license": "MIT", + "type": "module", + "publishConfig": { + "access": "public", + "tagVersionPrefix": "v" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "cli/commands/create-path" + }, + "prettier": "@tsparticles/prettier-config", + "scripts": { + "prettify:ci:src": "prettier --check ./src/*", + "prettify:ci:readme": "prettier --check ./README.md", + "prettify:src": "prettier --write ./src/*", + "prettify:readme": "prettier --write ./README.md", + "lint": "eslint src --ext .js,.jsx,.ts,.tsx --cache --cache-location .cache/eslint/.eslintcache --cache-strategy metadata --fix", + "lint:ci": "eslint src --ext .js,.jsx,.ts,.tsx --cache --cache-location .cache/eslint/.eslintcache --cache-strategy metadata", + "circular-deps": "depcruise src --include-only '^src' --validate --output-type err-long", + "compile": "pnpm run build:ts", + "compile:ci": "pnpm run build:ts", + "build:ts": "pnpm run build:ts:cjs", + "build:ts:cjs": "tsc -p src", + "build": "pnpm run clear:dist && pnpm run prettify:src && pnpm run lint && pnpm run compile && pnpm run circular-deps && pnpm run prettify:readme", + "build:ci": "pnpm run clear:dist && pnpm run prettify:ci:src && pnpm run lint:ci && pnpm run compile:ci && pnpm run prettify:ci:readme", + "clear:dist": "rimraf ./dist", + "prepack": "pnpm run build" + }, + "dependencies": { + "@tsparticles/cli-create-utils": "workspace:^", + "@tsparticles/depcruise-config": "workspace:^", + "@tsparticles/eslint-config": "workspace:^", + "@tsparticles/prettier-config": "workspace:^", + "@tsparticles/tsconfig": "workspace:^", + "dependency-cruiser": "^17.4.0", + "eslint": "^10.3.0", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-jsdoc": "^62.9.0", + "eslint-plugin-prettier": "^5.5.5", + "eslint-plugin-tsdoc": "^0.5.2", + "prettier": "^3.8.3", + "prettier-plugin-multiline-arrays": "^4.1.8" + }, + "devDependencies": { + "@types/estree": "^1.0.9", + "@types/node": "^25.6.2", + "browserslist": "^4.28.2", + "commander": "^14.0.3", + "copyfiles": "^2.4.1", + "cross-env": "^10.1.0", + "rimraf": "^6.1.3", + "terser-webpack-plugin": "^5.5.0", + "ts-node": "^10.9.2", + "typescript": "^6.0.3", + "webpack-bundle-analyzer": "^5.3.0", + "webpack-cli": "^7.0.2" + }, + "description": "tsParticles CLI Create Path command", + "main": "dist/path.js", + "author": "Matteo Bruni " +} diff --git a/cli/commands/create-path/src/path.ts b/cli/commands/create-path/src/path.ts new file mode 100644 index 00000000000..ff3a1413ffd --- /dev/null +++ b/cli/commands/create-path/src/path.ts @@ -0,0 +1,23 @@ +import { createProjectTemplate, promptProjectData } from "@tsparticles/cli-create-utils"; +import { Command } from "commander"; + +const pathCreateCommand = new Command("path"); + +pathCreateCommand.description("Create a new tsParticles path plugin"); +pathCreateCommand.argument("", "Destination folder"); +pathCreateCommand.action(async (destination: string) => { + const data = await promptProjectData({ + destination, + nameLabel: "path plugin", + }); + + await createProjectTemplate({ + description: data.description, + destination: data.destinationPath, + kind: "path", + name: data.name, + repositoryUrl: data.repositoryUrl, + }); +}); + +export { pathCreateCommand }; diff --git a/cli/commands/create-path/src/tsconfig.json b/cli/commands/create-path/src/tsconfig.json new file mode 100644 index 00000000000..a86b208cb31 --- /dev/null +++ b/cli/commands/create-path/src/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "rootDir": ".", + "outDir": "../dist" + }, + "references": [{ "path": "../" }], + "include": ["**/*"] +} diff --git a/cli/commands/create-path/tsconfig.json b/cli/commands/create-path/tsconfig.json new file mode 100644 index 00000000000..8c0be5a74c5 --- /dev/null +++ b/cli/commands/create-path/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "rootDir": ".", + "outDir": ".", + "resolveJsonModule": true, + "composite": true, + "target": "ESNext", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "types": [ + "node" + ], + "strict": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "allowSyntheticDefaultImports": true + }, + "include": [ + "src/**/*" + ] +} diff --git a/cli/commands/create-plugin/.browserslistrc b/cli/commands/create-plugin/.browserslistrc new file mode 100644 index 00000000000..fb811e7a9d2 --- /dev/null +++ b/cli/commands/create-plugin/.browserslistrc @@ -0,0 +1,2 @@ +since 2021 +not dead diff --git a/cli/commands/create-plugin/.dependency-cruiser.cjs b/cli/commands/create-plugin/.dependency-cruiser.cjs new file mode 100644 index 00000000000..f35670138c7 --- /dev/null +++ b/cli/commands/create-plugin/.dependency-cruiser.cjs @@ -0,0 +1,230 @@ +/** @type {import('dependency-cruiser').IConfiguration} */ +module.exports = { + forbidden: [ + { + name: 'no-circular', + severity: 'warn', + comment: + "This dependency is part of a circular relationship. You might want to revise " + + "your solution (i.e. use dependency inversion, make sure the modules have a single responsibility) ", + from: {}, + to: { + circular: true + } + }, + { + name: 'no-orphans', + comment: + "This is an orphan module - it's likely not used (anymore?). Either use it or " + + "remove it. If it's logical this module is an orphan (i.e. it's a config file), " + + "add an exception for it in your dependency-cruiser configuration. By default " + + "this rule does not scrutinize dot-files (e.g. .eslintrc.js), TypeScript declaration " + + "files (.d.ts), tsconfig.json and some of the babel and webpack configs.", + severity: 'warn', + from: { + orphan: true, + pathNot: [ + '(^|/)[.][^/]+[.](?:js|cjs|mjs|ts|cts|mts|json)$', + '[.]d[.]ts$', + '(^|/)tsconfig[.]json$', + '(^|/)(?:babel|webpack)[.]config[.](?:js|cjs|mjs|ts|cts|mts|json)$' + ] + }, + to: {}, + }, + { + name: 'no-deprecated-core', + comment: + 'A module depends on a node core module that has been deprecated. Find an alternative - these are ' + + "bound to exist - node doesn't deprecate lightly.", + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'core' + ], + path: [ + '^v8/tools/codemap$', + '^v8/tools/consarray$', + '^v8/tools/csvparser$', + '^v8/tools/logreader$', + '^v8/tools/profile_view$', + '^v8/tools/profile$', + '^v8/tools/SourceMap$', + '^v8/tools/splaytree$', + '^v8/tools/tickprocessor-driver$', + '^v8/tools/tickprocessor$', + '^node-inspect/lib/_inspect$', + '^node-inspect/lib/internal/inspect_client$', + '^node-inspect/lib/internal/inspect_repl$', + '^async_hooks$', + '^punycode$', + '^domain$', + '^constants$', + '^sys$', + '^_linklist$', + '^_stream_wrap$' + ], + } + }, + { + name: 'not-to-deprecated', + comment: + 'This module uses a (version of an) npm module that has been deprecated. Either upgrade to a later ' + + 'version of that module, or find an alternative. Deprecated modules are a security risk.', + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'deprecated' + ] + } + }, + { + name: 'no-non-package-json', + severity: 'error', + comment: + "This module depends on an npm package that isn't in the 'dependencies' section of your package.json. " + + "That's problematic as the package either (1) won't be available on live (2 - worse) will be " + + "available on live with an non-guaranteed version. Fix it by adding the package to the dependencies " + + "in your package.json.", + from: {}, + to: { + dependencyTypes: [ + 'npm-no-pkg', + 'npm-unknown' + ] + } + }, + { + name: 'not-to-unresolvable', + comment: + "This module depends on a module that cannot be found ('resolved to disk'). If it's an npm " + + 'module: add it to your package.json. In all other cases you likely already know what to do.', + severity: 'error', + from: {}, + to: { + couldNotResolve: true + } + }, + { + name: 'no-duplicate-dep-types', + comment: + "Likely this module depends on an external ('npm') package that occurs more than once " + + "in your package.json i.e. bot as a devDependencies and in dependencies. This will cause " + + "maintenance problems later on.", + severity: 'warn', + from: {}, + to: { + moreThanOneDependencyType: true, + dependencyTypesNot: ["type-only"] + } + }, + { + name: 'not-to-test', + comment: + "This module depends on code within a folder that should only contain tests. As tests don't " + + "implement functionality this is odd. Either you're writing a test outside the test folder " + + "or there's something in the test folder that isn't a test.", + severity: 'error', + from: { + pathNot: '^(tests)' + }, + to: { + path: '^(tests)' + } + }, + { + name: 'not-to-spec', + comment: + 'This module depends on a spec (test) file. The responsibility of a spec file is to test code. ' + + "If there's something in a spec that's of use to other modules, it doesn't have that single " + + 'responsibility anymore. Factor it out into (e.g.) a separate utility/ helper or a mock.', + severity: 'error', + from: {}, + to: { + path: '[.](?:spec|test)[.](?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$' + } + }, + { + name: 'not-to-dev-dep', + severity: 'error', + comment: + "This module depends on an npm package from the 'devDependencies' section of your " + + 'package.json. It looks like something that ships to production, though. To prevent problems ' + + "with npm packages that aren't there on production declare it (only!) in the 'dependencies'" + + 'section of your package.json. If this module is development only - add it to the ' + + 'from.pathNot re of the not-to-dev-dep rule in the dependency-cruiser configuration', + from: { + path: '^(src)', + pathNot: '[.](?:spec|test)[.](?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$' + }, + to: { + dependencyTypes: [ + 'npm-dev', + ], + dependencyTypesNot: [ + 'type-only' + ], + pathNot: [ + 'node_modules/@types/' + ] + } + }, + { + name: 'optional-deps-used', + severity: 'info', + comment: + "This module depends on an npm package that is declared as an optional dependency " + + "in your package.json. As this makes sense in limited situations only, it's flagged here. " + + "If you use an optional dependency here by design - add an exception to your" + + "dependency-cruiser configuration.", + from: {}, + to: { + dependencyTypes: [ + 'npm-optional' + ] + } + }, + { + name: 'peer-deps-used', + comment: + "This module depends on an npm package that is declared as a peer dependency " + + "in your package.json. This makes sense if your package is e.g. a plugin, but in " + + "other cases - maybe not so much. If the use of a peer dependency is intentional " + + "add an exception to your dependency-cruiser configuration.", + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'npm-peer' + ] + } + } + ], + options: { + doNotFollow: { + path: ['node_modules'] + }, + tsConfig: { + fileName: 'src/tsconfig.json' + }, + enhancedResolveOptions: { + exportsFields: ['exports'], + conditionNames: ['import', 'require', 'node', 'default', 'types'], + mainFields: ["module", "main", "types", "typings"], + }, + skipAnalysisNotInRules: true, + reporterOptions: { + dot: { + collapsePattern: 'node_modules/(?:@[^/]+/[^/]+|[^/]+)', + }, + archi: { + collapsePattern: '^(?:packages|src|lib(s?)|app(s?)|bin|test(s?)|spec(s?))/[^/]+|node_modules/(?:@[^/]+/[^/]+|[^/]+)', + }, + text: { + highlightFocused: true + }, + } + } +}; diff --git a/cli/commands/create-plugin/.gitignore b/cli/commands/create-plugin/.gitignore new file mode 100644 index 00000000000..19758deef41 --- /dev/null +++ b/cli/commands/create-plugin/.gitignore @@ -0,0 +1,4 @@ +dist +node_modules +.DS_Store +.cache/ diff --git a/cli/commands/create-plugin/CHANGELOG.md b/cli/commands/create-plugin/CHANGELOG.md new file mode 100644 index 00000000000..10dfa05454f --- /dev/null +++ b/cli/commands/create-plugin/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/cli-command-create-plugin diff --git a/cli/commands/create-plugin/README.md b/cli/commands/create-plugin/README.md new file mode 100644 index 00000000000..8f8df286d05 --- /dev/null +++ b/cli/commands/create-plugin/README.md @@ -0,0 +1,11 @@ +# @tsparticles/cli-command-create-plugin + +## Build + +```bash +pnpm run build +``` + +## License + +MIT diff --git a/cli/commands/create-plugin/eslint.config.js b/cli/commands/create-plugin/eslint.config.js new file mode 100644 index 00000000000..7dc85e779b6 --- /dev/null +++ b/cli/commands/create-plugin/eslint.config.js @@ -0,0 +1,22 @@ +import path from "path"; +import {fileURLToPath} from "url"; +import {defineConfig} from "eslint/config"; +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default defineConfig([ + tsParticlesESLintConfig, + { + languageOptions: { + parserOptions: { + project: [path.join(__dirname, "src", "tsconfig.json")], + tsconfigRootDir: __dirname, + sourceType: "module" + } + }, + rules: { + "no-console": "off" + } + } +]); diff --git a/cli/commands/create-plugin/package.json b/cli/commands/create-plugin/package.json new file mode 100644 index 00000000000..94bcc78f67b --- /dev/null +++ b/cli/commands/create-plugin/package.json @@ -0,0 +1,65 @@ +{ + "name": "@tsparticles/cli-command-create-plugin", + "version": "4.0.0-beta.15", + "license": "MIT", + "type": "module", + "publishConfig": { + "access": "public", + "tagVersionPrefix": "v" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "cli/commands/create-plugin" + }, + "prettier": "@tsparticles/prettier-config", + "scripts": { + "prettify:ci:src": "prettier --check ./src/*", + "prettify:ci:readme": "prettier --check ./README.md", + "prettify:src": "prettier --write ./src/*", + "prettify:readme": "prettier --write ./README.md", + "lint": "eslint src --ext .js,.jsx,.ts,.tsx --cache --cache-location .cache/eslint/.eslintcache --cache-strategy metadata --fix", + "lint:ci": "eslint src --ext .js,.jsx,.ts,.tsx --cache --cache-location .cache/eslint/.eslintcache --cache-strategy metadata", + "circular-deps": "depcruise src --include-only '^src' --validate --output-type err-long", + "compile": "pnpm run build:ts", + "compile:ci": "pnpm run build:ts", + "build:ts": "pnpm run build:ts:cjs", + "build:ts:cjs": "tsc -p src", + "build": "pnpm run clear:dist && pnpm run prettify:src && pnpm run lint && pnpm run compile && pnpm run circular-deps && pnpm run prettify:readme", + "build:ci": "pnpm run clear:dist && pnpm run prettify:ci:src && pnpm run lint:ci && pnpm run compile:ci && pnpm run prettify:ci:readme", + "clear:dist": "rimraf ./dist", + "prepack": "pnpm run build" + }, + "dependencies": { + "@tsparticles/cli-create-utils": "workspace:^", + "@tsparticles/depcruise-config": "workspace:^", + "@tsparticles/eslint-config": "workspace:^", + "@tsparticles/prettier-config": "workspace:^", + "@tsparticles/tsconfig": "workspace:^", + "dependency-cruiser": "^17.4.0", + "eslint": "^10.3.0", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-jsdoc": "^62.9.0", + "eslint-plugin-prettier": "^5.5.5", + "eslint-plugin-tsdoc": "^0.5.2", + "prettier": "^3.8.3", + "prettier-plugin-multiline-arrays": "^4.1.8" + }, + "devDependencies": { + "@types/estree": "^1.0.9", + "@types/node": "^25.6.2", + "browserslist": "^4.28.2", + "commander": "^14.0.3", + "copyfiles": "^2.4.1", + "cross-env": "^10.1.0", + "rimraf": "^6.1.3", + "terser-webpack-plugin": "^5.5.0", + "ts-node": "^10.9.2", + "typescript": "^6.0.3", + "webpack-bundle-analyzer": "^5.3.0", + "webpack-cli": "^7.0.2" + }, + "description": "tsParticles CLI Create Plugin command", + "main": "dist/plugin.js", + "author": "Matteo Bruni " +} diff --git a/cli/commands/create-plugin/src/plugin.ts b/cli/commands/create-plugin/src/plugin.ts new file mode 100644 index 00000000000..505f8c5330f --- /dev/null +++ b/cli/commands/create-plugin/src/plugin.ts @@ -0,0 +1,36 @@ +import { createProjectTemplate, promptProjectData } from "@tsparticles/cli-create-utils"; +import { Command } from "commander"; + +const pluginCreateCommand = new Command("plugin"); + +pluginCreateCommand.description("Create a new tsParticles plugin"); +pluginCreateCommand.argument("", "Destination folder"); +pluginCreateCommand.action(async (destination: string) => { + const data = await promptProjectData<"color-manager" | "easing" | "emitters-shape" | "export" | "generic">({ + destination, + nameLabel: "plugin", + select: { + choices: [ + { title: "Generic plugin", value: "generic" }, + { title: "Emitters shape", value: "emitters-shape" }, + { title: "Easing", value: "easing" }, + { title: "Export", value: "export" }, + { title: "Color manager", value: "color-manager" }, + ], + initial: "generic", + message: "Which plugin type do you want to create?", + name: "pluginType", + }, + }); + + await createProjectTemplate({ + description: data.description, + destination: data.destinationPath, + kind: "plugin", + name: data.name, + repositoryUrl: data.repositoryUrl, + type: data.type, + }); +}); + +export { pluginCreateCommand }; diff --git a/cli/commands/create-plugin/src/tsconfig.json b/cli/commands/create-plugin/src/tsconfig.json new file mode 100644 index 00000000000..a86b208cb31 --- /dev/null +++ b/cli/commands/create-plugin/src/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "rootDir": ".", + "outDir": "../dist" + }, + "references": [{ "path": "../" }], + "include": ["**/*"] +} diff --git a/cli/commands/create-plugin/tsconfig.json b/cli/commands/create-plugin/tsconfig.json new file mode 100644 index 00000000000..8c0be5a74c5 --- /dev/null +++ b/cli/commands/create-plugin/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "rootDir": ".", + "outDir": ".", + "resolveJsonModule": true, + "composite": true, + "target": "ESNext", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "types": [ + "node" + ], + "strict": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "allowSyntheticDefaultImports": true + }, + "include": [ + "src/**/*" + ] +} diff --git a/cli/commands/create-preset/.browserslistrc b/cli/commands/create-preset/.browserslistrc new file mode 100644 index 00000000000..fb811e7a9d2 --- /dev/null +++ b/cli/commands/create-preset/.browserslistrc @@ -0,0 +1,2 @@ +since 2021 +not dead diff --git a/cli/commands/create-preset/.dependency-cruiser.cjs b/cli/commands/create-preset/.dependency-cruiser.cjs new file mode 100644 index 00000000000..f35670138c7 --- /dev/null +++ b/cli/commands/create-preset/.dependency-cruiser.cjs @@ -0,0 +1,230 @@ +/** @type {import('dependency-cruiser').IConfiguration} */ +module.exports = { + forbidden: [ + { + name: 'no-circular', + severity: 'warn', + comment: + "This dependency is part of a circular relationship. You might want to revise " + + "your solution (i.e. use dependency inversion, make sure the modules have a single responsibility) ", + from: {}, + to: { + circular: true + } + }, + { + name: 'no-orphans', + comment: + "This is an orphan module - it's likely not used (anymore?). Either use it or " + + "remove it. If it's logical this module is an orphan (i.e. it's a config file), " + + "add an exception for it in your dependency-cruiser configuration. By default " + + "this rule does not scrutinize dot-files (e.g. .eslintrc.js), TypeScript declaration " + + "files (.d.ts), tsconfig.json and some of the babel and webpack configs.", + severity: 'warn', + from: { + orphan: true, + pathNot: [ + '(^|/)[.][^/]+[.](?:js|cjs|mjs|ts|cts|mts|json)$', + '[.]d[.]ts$', + '(^|/)tsconfig[.]json$', + '(^|/)(?:babel|webpack)[.]config[.](?:js|cjs|mjs|ts|cts|mts|json)$' + ] + }, + to: {}, + }, + { + name: 'no-deprecated-core', + comment: + 'A module depends on a node core module that has been deprecated. Find an alternative - these are ' + + "bound to exist - node doesn't deprecate lightly.", + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'core' + ], + path: [ + '^v8/tools/codemap$', + '^v8/tools/consarray$', + '^v8/tools/csvparser$', + '^v8/tools/logreader$', + '^v8/tools/profile_view$', + '^v8/tools/profile$', + '^v8/tools/SourceMap$', + '^v8/tools/splaytree$', + '^v8/tools/tickprocessor-driver$', + '^v8/tools/tickprocessor$', + '^node-inspect/lib/_inspect$', + '^node-inspect/lib/internal/inspect_client$', + '^node-inspect/lib/internal/inspect_repl$', + '^async_hooks$', + '^punycode$', + '^domain$', + '^constants$', + '^sys$', + '^_linklist$', + '^_stream_wrap$' + ], + } + }, + { + name: 'not-to-deprecated', + comment: + 'This module uses a (version of an) npm module that has been deprecated. Either upgrade to a later ' + + 'version of that module, or find an alternative. Deprecated modules are a security risk.', + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'deprecated' + ] + } + }, + { + name: 'no-non-package-json', + severity: 'error', + comment: + "This module depends on an npm package that isn't in the 'dependencies' section of your package.json. " + + "That's problematic as the package either (1) won't be available on live (2 - worse) will be " + + "available on live with an non-guaranteed version. Fix it by adding the package to the dependencies " + + "in your package.json.", + from: {}, + to: { + dependencyTypes: [ + 'npm-no-pkg', + 'npm-unknown' + ] + } + }, + { + name: 'not-to-unresolvable', + comment: + "This module depends on a module that cannot be found ('resolved to disk'). If it's an npm " + + 'module: add it to your package.json. In all other cases you likely already know what to do.', + severity: 'error', + from: {}, + to: { + couldNotResolve: true + } + }, + { + name: 'no-duplicate-dep-types', + comment: + "Likely this module depends on an external ('npm') package that occurs more than once " + + "in your package.json i.e. bot as a devDependencies and in dependencies. This will cause " + + "maintenance problems later on.", + severity: 'warn', + from: {}, + to: { + moreThanOneDependencyType: true, + dependencyTypesNot: ["type-only"] + } + }, + { + name: 'not-to-test', + comment: + "This module depends on code within a folder that should only contain tests. As tests don't " + + "implement functionality this is odd. Either you're writing a test outside the test folder " + + "or there's something in the test folder that isn't a test.", + severity: 'error', + from: { + pathNot: '^(tests)' + }, + to: { + path: '^(tests)' + } + }, + { + name: 'not-to-spec', + comment: + 'This module depends on a spec (test) file. The responsibility of a spec file is to test code. ' + + "If there's something in a spec that's of use to other modules, it doesn't have that single " + + 'responsibility anymore. Factor it out into (e.g.) a separate utility/ helper or a mock.', + severity: 'error', + from: {}, + to: { + path: '[.](?:spec|test)[.](?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$' + } + }, + { + name: 'not-to-dev-dep', + severity: 'error', + comment: + "This module depends on an npm package from the 'devDependencies' section of your " + + 'package.json. It looks like something that ships to production, though. To prevent problems ' + + "with npm packages that aren't there on production declare it (only!) in the 'dependencies'" + + 'section of your package.json. If this module is development only - add it to the ' + + 'from.pathNot re of the not-to-dev-dep rule in the dependency-cruiser configuration', + from: { + path: '^(src)', + pathNot: '[.](?:spec|test)[.](?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$' + }, + to: { + dependencyTypes: [ + 'npm-dev', + ], + dependencyTypesNot: [ + 'type-only' + ], + pathNot: [ + 'node_modules/@types/' + ] + } + }, + { + name: 'optional-deps-used', + severity: 'info', + comment: + "This module depends on an npm package that is declared as an optional dependency " + + "in your package.json. As this makes sense in limited situations only, it's flagged here. " + + "If you use an optional dependency here by design - add an exception to your" + + "dependency-cruiser configuration.", + from: {}, + to: { + dependencyTypes: [ + 'npm-optional' + ] + } + }, + { + name: 'peer-deps-used', + comment: + "This module depends on an npm package that is declared as a peer dependency " + + "in your package.json. This makes sense if your package is e.g. a plugin, but in " + + "other cases - maybe not so much. If the use of a peer dependency is intentional " + + "add an exception to your dependency-cruiser configuration.", + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'npm-peer' + ] + } + } + ], + options: { + doNotFollow: { + path: ['node_modules'] + }, + tsConfig: { + fileName: 'src/tsconfig.json' + }, + enhancedResolveOptions: { + exportsFields: ['exports'], + conditionNames: ['import', 'require', 'node', 'default', 'types'], + mainFields: ["module", "main", "types", "typings"], + }, + skipAnalysisNotInRules: true, + reporterOptions: { + dot: { + collapsePattern: 'node_modules/(?:@[^/]+/[^/]+|[^/]+)', + }, + archi: { + collapsePattern: '^(?:packages|src|lib(s?)|app(s?)|bin|test(s?)|spec(s?))/[^/]+|node_modules/(?:@[^/]+/[^/]+|[^/]+)', + }, + text: { + highlightFocused: true + }, + } + } +}; diff --git a/cli/commands/create-preset/.gitignore b/cli/commands/create-preset/.gitignore new file mode 100644 index 00000000000..19758deef41 --- /dev/null +++ b/cli/commands/create-preset/.gitignore @@ -0,0 +1,4 @@ +dist +node_modules +.DS_Store +.cache/ diff --git a/cli/commands/create-preset/CHANGELOG.md b/cli/commands/create-preset/CHANGELOG.md new file mode 100644 index 00000000000..4d3f4586a9f --- /dev/null +++ b/cli/commands/create-preset/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/cli-command-create-preset diff --git a/cli/commands/create-preset/README.md b/cli/commands/create-preset/README.md new file mode 100644 index 00000000000..95722b5c757 --- /dev/null +++ b/cli/commands/create-preset/README.md @@ -0,0 +1,11 @@ +# @tsparticles/cli-command-create-preset + +## Build + +```bash +pnpm run build +``` + +## License + +MIT diff --git a/cli/commands/create-preset/eslint.config.js b/cli/commands/create-preset/eslint.config.js new file mode 100644 index 00000000000..7dc85e779b6 --- /dev/null +++ b/cli/commands/create-preset/eslint.config.js @@ -0,0 +1,22 @@ +import path from "path"; +import {fileURLToPath} from "url"; +import {defineConfig} from "eslint/config"; +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default defineConfig([ + tsParticlesESLintConfig, + { + languageOptions: { + parserOptions: { + project: [path.join(__dirname, "src", "tsconfig.json")], + tsconfigRootDir: __dirname, + sourceType: "module" + } + }, + rules: { + "no-console": "off" + } + } +]); diff --git a/cli/commands/create-preset/package.json b/cli/commands/create-preset/package.json new file mode 100644 index 00000000000..3080b5c9f36 --- /dev/null +++ b/cli/commands/create-preset/package.json @@ -0,0 +1,65 @@ +{ + "name": "@tsparticles/cli-command-create-preset", + "version": "4.0.0-beta.15", + "license": "MIT", + "type": "module", + "publishConfig": { + "access": "public", + "tagVersionPrefix": "v" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "cli/commands/create-preset" + }, + "prettier": "@tsparticles/prettier-config", + "scripts": { + "prettify:ci:src": "prettier --check ./src/*", + "prettify:ci:readme": "prettier --check ./README.md", + "prettify:src": "prettier --write ./src/*", + "prettify:readme": "prettier --write ./README.md", + "lint": "eslint src --ext .js,.jsx,.ts,.tsx --cache --cache-location .cache/eslint/.eslintcache --cache-strategy metadata --fix", + "lint:ci": "eslint src --ext .js,.jsx,.ts,.tsx --cache --cache-location .cache/eslint/.eslintcache --cache-strategy metadata", + "circular-deps": "depcruise src --include-only '^src' --validate --output-type err-long", + "compile": "pnpm run build:ts", + "compile:ci": "pnpm run build:ts", + "build:ts": "pnpm run build:ts:cjs", + "build:ts:cjs": "tsc -p src", + "build": "pnpm run clear:dist && pnpm run prettify:src && pnpm run lint && pnpm run compile && pnpm run circular-deps && pnpm run prettify:readme", + "build:ci": "pnpm run clear:dist && pnpm run prettify:ci:src && pnpm run lint:ci && pnpm run compile:ci && pnpm run prettify:ci:readme", + "clear:dist": "rimraf ./dist", + "prepack": "pnpm run build" + }, + "dependencies": { + "@tsparticles/cli-create-utils": "workspace:^", + "@tsparticles/depcruise-config": "workspace:^", + "@tsparticles/eslint-config": "workspace:^", + "@tsparticles/prettier-config": "workspace:^", + "@tsparticles/tsconfig": "workspace:^", + "dependency-cruiser": "^17.4.0", + "eslint": "^10.3.0", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-jsdoc": "^62.9.0", + "eslint-plugin-prettier": "^5.5.5", + "eslint-plugin-tsdoc": "^0.5.2", + "prettier": "^3.8.3", + "prettier-plugin-multiline-arrays": "^4.1.8" + }, + "devDependencies": { + "@types/estree": "^1.0.9", + "@types/node": "^25.6.2", + "browserslist": "^4.28.2", + "commander": "^14.0.3", + "copyfiles": "^2.4.1", + "cross-env": "^10.1.0", + "rimraf": "^6.1.3", + "terser-webpack-plugin": "^5.5.0", + "ts-node": "^10.9.2", + "typescript": "^6.0.3", + "webpack-bundle-analyzer": "^5.3.0", + "webpack-cli": "^7.0.2" + }, + "description": "tsParticles CLI Create Preset command", + "main": "dist/preset.js", + "author": "Matteo Bruni " +} diff --git a/cli/commands/create-preset/src/preset.ts b/cli/commands/create-preset/src/preset.ts new file mode 100644 index 00000000000..88079c41adb --- /dev/null +++ b/cli/commands/create-preset/src/preset.ts @@ -0,0 +1,23 @@ +import { createProjectTemplate, promptProjectData } from "@tsparticles/cli-create-utils"; +import { Command } from "commander"; + +const presetCreateCommand = new Command("preset"); + +presetCreateCommand.description("Create a new tsParticles preset"); +presetCreateCommand.argument("", "Destination folder"); +presetCreateCommand.action(async (destination: string) => { + const data = await promptProjectData({ + destination, + nameLabel: "preset", + }); + + await createProjectTemplate({ + description: data.description, + destination: data.destinationPath, + kind: "preset", + name: data.name, + repositoryUrl: data.repositoryUrl, + }); +}); + +export { presetCreateCommand }; diff --git a/cli/commands/create-preset/src/tsconfig.json b/cli/commands/create-preset/src/tsconfig.json new file mode 100644 index 00000000000..a86b208cb31 --- /dev/null +++ b/cli/commands/create-preset/src/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "rootDir": ".", + "outDir": "../dist" + }, + "references": [{ "path": "../" }], + "include": ["**/*"] +} diff --git a/cli/commands/create-preset/tsconfig.json b/cli/commands/create-preset/tsconfig.json new file mode 100644 index 00000000000..8c0be5a74c5 --- /dev/null +++ b/cli/commands/create-preset/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "rootDir": ".", + "outDir": ".", + "resolveJsonModule": true, + "composite": true, + "target": "ESNext", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "types": [ + "node" + ], + "strict": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "allowSyntheticDefaultImports": true + }, + "include": [ + "src/**/*" + ] +} diff --git a/cli/commands/create-shape/.browserslistrc b/cli/commands/create-shape/.browserslistrc new file mode 100644 index 00000000000..fb811e7a9d2 --- /dev/null +++ b/cli/commands/create-shape/.browserslistrc @@ -0,0 +1,2 @@ +since 2021 +not dead diff --git a/cli/commands/create-shape/.dependency-cruiser.cjs b/cli/commands/create-shape/.dependency-cruiser.cjs new file mode 100644 index 00000000000..f35670138c7 --- /dev/null +++ b/cli/commands/create-shape/.dependency-cruiser.cjs @@ -0,0 +1,230 @@ +/** @type {import('dependency-cruiser').IConfiguration} */ +module.exports = { + forbidden: [ + { + name: 'no-circular', + severity: 'warn', + comment: + "This dependency is part of a circular relationship. You might want to revise " + + "your solution (i.e. use dependency inversion, make sure the modules have a single responsibility) ", + from: {}, + to: { + circular: true + } + }, + { + name: 'no-orphans', + comment: + "This is an orphan module - it's likely not used (anymore?). Either use it or " + + "remove it. If it's logical this module is an orphan (i.e. it's a config file), " + + "add an exception for it in your dependency-cruiser configuration. By default " + + "this rule does not scrutinize dot-files (e.g. .eslintrc.js), TypeScript declaration " + + "files (.d.ts), tsconfig.json and some of the babel and webpack configs.", + severity: 'warn', + from: { + orphan: true, + pathNot: [ + '(^|/)[.][^/]+[.](?:js|cjs|mjs|ts|cts|mts|json)$', + '[.]d[.]ts$', + '(^|/)tsconfig[.]json$', + '(^|/)(?:babel|webpack)[.]config[.](?:js|cjs|mjs|ts|cts|mts|json)$' + ] + }, + to: {}, + }, + { + name: 'no-deprecated-core', + comment: + 'A module depends on a node core module that has been deprecated. Find an alternative - these are ' + + "bound to exist - node doesn't deprecate lightly.", + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'core' + ], + path: [ + '^v8/tools/codemap$', + '^v8/tools/consarray$', + '^v8/tools/csvparser$', + '^v8/tools/logreader$', + '^v8/tools/profile_view$', + '^v8/tools/profile$', + '^v8/tools/SourceMap$', + '^v8/tools/splaytree$', + '^v8/tools/tickprocessor-driver$', + '^v8/tools/tickprocessor$', + '^node-inspect/lib/_inspect$', + '^node-inspect/lib/internal/inspect_client$', + '^node-inspect/lib/internal/inspect_repl$', + '^async_hooks$', + '^punycode$', + '^domain$', + '^constants$', + '^sys$', + '^_linklist$', + '^_stream_wrap$' + ], + } + }, + { + name: 'not-to-deprecated', + comment: + 'This module uses a (version of an) npm module that has been deprecated. Either upgrade to a later ' + + 'version of that module, or find an alternative. Deprecated modules are a security risk.', + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'deprecated' + ] + } + }, + { + name: 'no-non-package-json', + severity: 'error', + comment: + "This module depends on an npm package that isn't in the 'dependencies' section of your package.json. " + + "That's problematic as the package either (1) won't be available on live (2 - worse) will be " + + "available on live with an non-guaranteed version. Fix it by adding the package to the dependencies " + + "in your package.json.", + from: {}, + to: { + dependencyTypes: [ + 'npm-no-pkg', + 'npm-unknown' + ] + } + }, + { + name: 'not-to-unresolvable', + comment: + "This module depends on a module that cannot be found ('resolved to disk'). If it's an npm " + + 'module: add it to your package.json. In all other cases you likely already know what to do.', + severity: 'error', + from: {}, + to: { + couldNotResolve: true + } + }, + { + name: 'no-duplicate-dep-types', + comment: + "Likely this module depends on an external ('npm') package that occurs more than once " + + "in your package.json i.e. bot as a devDependencies and in dependencies. This will cause " + + "maintenance problems later on.", + severity: 'warn', + from: {}, + to: { + moreThanOneDependencyType: true, + dependencyTypesNot: ["type-only"] + } + }, + { + name: 'not-to-test', + comment: + "This module depends on code within a folder that should only contain tests. As tests don't " + + "implement functionality this is odd. Either you're writing a test outside the test folder " + + "or there's something in the test folder that isn't a test.", + severity: 'error', + from: { + pathNot: '^(tests)' + }, + to: { + path: '^(tests)' + } + }, + { + name: 'not-to-spec', + comment: + 'This module depends on a spec (test) file. The responsibility of a spec file is to test code. ' + + "If there's something in a spec that's of use to other modules, it doesn't have that single " + + 'responsibility anymore. Factor it out into (e.g.) a separate utility/ helper or a mock.', + severity: 'error', + from: {}, + to: { + path: '[.](?:spec|test)[.](?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$' + } + }, + { + name: 'not-to-dev-dep', + severity: 'error', + comment: + "This module depends on an npm package from the 'devDependencies' section of your " + + 'package.json. It looks like something that ships to production, though. To prevent problems ' + + "with npm packages that aren't there on production declare it (only!) in the 'dependencies'" + + 'section of your package.json. If this module is development only - add it to the ' + + 'from.pathNot re of the not-to-dev-dep rule in the dependency-cruiser configuration', + from: { + path: '^(src)', + pathNot: '[.](?:spec|test)[.](?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$' + }, + to: { + dependencyTypes: [ + 'npm-dev', + ], + dependencyTypesNot: [ + 'type-only' + ], + pathNot: [ + 'node_modules/@types/' + ] + } + }, + { + name: 'optional-deps-used', + severity: 'info', + comment: + "This module depends on an npm package that is declared as an optional dependency " + + "in your package.json. As this makes sense in limited situations only, it's flagged here. " + + "If you use an optional dependency here by design - add an exception to your" + + "dependency-cruiser configuration.", + from: {}, + to: { + dependencyTypes: [ + 'npm-optional' + ] + } + }, + { + name: 'peer-deps-used', + comment: + "This module depends on an npm package that is declared as a peer dependency " + + "in your package.json. This makes sense if your package is e.g. a plugin, but in " + + "other cases - maybe not so much. If the use of a peer dependency is intentional " + + "add an exception to your dependency-cruiser configuration.", + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'npm-peer' + ] + } + } + ], + options: { + doNotFollow: { + path: ['node_modules'] + }, + tsConfig: { + fileName: 'src/tsconfig.json' + }, + enhancedResolveOptions: { + exportsFields: ['exports'], + conditionNames: ['import', 'require', 'node', 'default', 'types'], + mainFields: ["module", "main", "types", "typings"], + }, + skipAnalysisNotInRules: true, + reporterOptions: { + dot: { + collapsePattern: 'node_modules/(?:@[^/]+/[^/]+|[^/]+)', + }, + archi: { + collapsePattern: '^(?:packages|src|lib(s?)|app(s?)|bin|test(s?)|spec(s?))/[^/]+|node_modules/(?:@[^/]+/[^/]+|[^/]+)', + }, + text: { + highlightFocused: true + }, + } + } +}; diff --git a/cli/commands/create-shape/.gitignore b/cli/commands/create-shape/.gitignore new file mode 100644 index 00000000000..19758deef41 --- /dev/null +++ b/cli/commands/create-shape/.gitignore @@ -0,0 +1,4 @@ +dist +node_modules +.DS_Store +.cache/ diff --git a/cli/commands/create-shape/CHANGELOG.md b/cli/commands/create-shape/CHANGELOG.md new file mode 100644 index 00000000000..40801d22798 --- /dev/null +++ b/cli/commands/create-shape/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/cli-command-create-shape diff --git a/cli/commands/create-shape/README.md b/cli/commands/create-shape/README.md new file mode 100644 index 00000000000..1bb35af58f6 --- /dev/null +++ b/cli/commands/create-shape/README.md @@ -0,0 +1,11 @@ +# @tsparticles/cli-command-create-shape + +## Build + +```bash +pnpm run build +``` + +## License + +MIT diff --git a/cli/commands/create-shape/eslint.config.js b/cli/commands/create-shape/eslint.config.js new file mode 100644 index 00000000000..7dc85e779b6 --- /dev/null +++ b/cli/commands/create-shape/eslint.config.js @@ -0,0 +1,22 @@ +import path from "path"; +import {fileURLToPath} from "url"; +import {defineConfig} from "eslint/config"; +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default defineConfig([ + tsParticlesESLintConfig, + { + languageOptions: { + parserOptions: { + project: [path.join(__dirname, "src", "tsconfig.json")], + tsconfigRootDir: __dirname, + sourceType: "module" + } + }, + rules: { + "no-console": "off" + } + } +]); diff --git a/cli/commands/create-shape/package.json b/cli/commands/create-shape/package.json new file mode 100644 index 00000000000..ca0ea99d24c --- /dev/null +++ b/cli/commands/create-shape/package.json @@ -0,0 +1,65 @@ +{ + "name": "@tsparticles/cli-command-create-shape", + "version": "4.0.0-beta.15", + "license": "MIT", + "type": "module", + "publishConfig": { + "access": "public", + "tagVersionPrefix": "v" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "cli/commands/create-shape" + }, + "prettier": "@tsparticles/prettier-config", + "scripts": { + "prettify:ci:src": "prettier --check ./src/*", + "prettify:ci:readme": "prettier --check ./README.md", + "prettify:src": "prettier --write ./src/*", + "prettify:readme": "prettier --write ./README.md", + "lint": "eslint src --ext .js,.jsx,.ts,.tsx --cache --cache-location .cache/eslint/.eslintcache --cache-strategy metadata --fix", + "lint:ci": "eslint src --ext .js,.jsx,.ts,.tsx --cache --cache-location .cache/eslint/.eslintcache --cache-strategy metadata", + "circular-deps": "depcruise src --include-only '^src' --validate --output-type err-long", + "compile": "pnpm run build:ts", + "compile:ci": "pnpm run build:ts", + "build:ts": "pnpm run build:ts:cjs", + "build:ts:cjs": "tsc -p src", + "build": "pnpm run clear:dist && pnpm run prettify:src && pnpm run lint && pnpm run compile && pnpm run circular-deps && pnpm run prettify:readme", + "build:ci": "pnpm run clear:dist && pnpm run prettify:ci:src && pnpm run lint:ci && pnpm run compile:ci && pnpm run prettify:ci:readme", + "clear:dist": "rimraf ./dist", + "prepack": "pnpm run build" + }, + "dependencies": { + "@tsparticles/cli-create-utils": "workspace:^", + "@tsparticles/depcruise-config": "workspace:^", + "@tsparticles/eslint-config": "workspace:^", + "@tsparticles/prettier-config": "workspace:^", + "@tsparticles/tsconfig": "workspace:^", + "dependency-cruiser": "^17.4.0", + "eslint": "^10.3.0", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-jsdoc": "^62.9.0", + "eslint-plugin-prettier": "^5.5.5", + "eslint-plugin-tsdoc": "^0.5.2", + "prettier": "^3.8.3", + "prettier-plugin-multiline-arrays": "^4.1.8" + }, + "devDependencies": { + "@types/estree": "^1.0.9", + "@types/node": "^25.6.2", + "browserslist": "^4.28.2", + "commander": "^14.0.3", + "copyfiles": "^2.4.1", + "cross-env": "^10.1.0", + "rimraf": "^6.1.3", + "terser-webpack-plugin": "^5.5.0", + "ts-node": "^10.9.2", + "typescript": "^6.0.3", + "webpack-bundle-analyzer": "^5.3.0", + "webpack-cli": "^7.0.2" + }, + "description": "tsParticles CLI Create Shape command", + "main": "dist/shape.js", + "author": "Matteo Bruni " +} diff --git a/cli/commands/create-shape/src/shape.ts b/cli/commands/create-shape/src/shape.ts new file mode 100644 index 00000000000..2ebf51e6676 --- /dev/null +++ b/cli/commands/create-shape/src/shape.ts @@ -0,0 +1,23 @@ +import { createProjectTemplate, promptProjectData } from "@tsparticles/cli-create-utils"; +import { Command } from "commander"; + +const shapeCreateCommand = new Command("shape"); + +shapeCreateCommand.description("Create a new tsParticles shape"); +shapeCreateCommand.argument("", "Destination folder"); +shapeCreateCommand.action(async (destination: string) => { + const data = await promptProjectData({ + destination, + nameLabel: "shape", + }); + + await createProjectTemplate({ + description: data.description, + destination: data.destinationPath, + kind: "shape", + name: data.name, + repositoryUrl: data.repositoryUrl, + }); +}); + +export { shapeCreateCommand }; diff --git a/cli/commands/create-shape/src/tsconfig.json b/cli/commands/create-shape/src/tsconfig.json new file mode 100644 index 00000000000..a86b208cb31 --- /dev/null +++ b/cli/commands/create-shape/src/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "rootDir": ".", + "outDir": "../dist" + }, + "references": [{ "path": "../" }], + "include": ["**/*"] +} diff --git a/cli/commands/create-shape/tsconfig.json b/cli/commands/create-shape/tsconfig.json new file mode 100644 index 00000000000..8c0be5a74c5 --- /dev/null +++ b/cli/commands/create-shape/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "rootDir": ".", + "outDir": ".", + "resolveJsonModule": true, + "composite": true, + "target": "ESNext", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "types": [ + "node" + ], + "strict": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "allowSyntheticDefaultImports": true + }, + "include": [ + "src/**/*" + ] +} diff --git a/cli/commands/create-updater/.browserslistrc b/cli/commands/create-updater/.browserslistrc new file mode 100644 index 00000000000..fb811e7a9d2 --- /dev/null +++ b/cli/commands/create-updater/.browserslistrc @@ -0,0 +1,2 @@ +since 2021 +not dead diff --git a/cli/commands/create-updater/.dependency-cruiser.cjs b/cli/commands/create-updater/.dependency-cruiser.cjs new file mode 100644 index 00000000000..f35670138c7 --- /dev/null +++ b/cli/commands/create-updater/.dependency-cruiser.cjs @@ -0,0 +1,230 @@ +/** @type {import('dependency-cruiser').IConfiguration} */ +module.exports = { + forbidden: [ + { + name: 'no-circular', + severity: 'warn', + comment: + "This dependency is part of a circular relationship. You might want to revise " + + "your solution (i.e. use dependency inversion, make sure the modules have a single responsibility) ", + from: {}, + to: { + circular: true + } + }, + { + name: 'no-orphans', + comment: + "This is an orphan module - it's likely not used (anymore?). Either use it or " + + "remove it. If it's logical this module is an orphan (i.e. it's a config file), " + + "add an exception for it in your dependency-cruiser configuration. By default " + + "this rule does not scrutinize dot-files (e.g. .eslintrc.js), TypeScript declaration " + + "files (.d.ts), tsconfig.json and some of the babel and webpack configs.", + severity: 'warn', + from: { + orphan: true, + pathNot: [ + '(^|/)[.][^/]+[.](?:js|cjs|mjs|ts|cts|mts|json)$', + '[.]d[.]ts$', + '(^|/)tsconfig[.]json$', + '(^|/)(?:babel|webpack)[.]config[.](?:js|cjs|mjs|ts|cts|mts|json)$' + ] + }, + to: {}, + }, + { + name: 'no-deprecated-core', + comment: + 'A module depends on a node core module that has been deprecated. Find an alternative - these are ' + + "bound to exist - node doesn't deprecate lightly.", + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'core' + ], + path: [ + '^v8/tools/codemap$', + '^v8/tools/consarray$', + '^v8/tools/csvparser$', + '^v8/tools/logreader$', + '^v8/tools/profile_view$', + '^v8/tools/profile$', + '^v8/tools/SourceMap$', + '^v8/tools/splaytree$', + '^v8/tools/tickprocessor-driver$', + '^v8/tools/tickprocessor$', + '^node-inspect/lib/_inspect$', + '^node-inspect/lib/internal/inspect_client$', + '^node-inspect/lib/internal/inspect_repl$', + '^async_hooks$', + '^punycode$', + '^domain$', + '^constants$', + '^sys$', + '^_linklist$', + '^_stream_wrap$' + ], + } + }, + { + name: 'not-to-deprecated', + comment: + 'This module uses a (version of an) npm module that has been deprecated. Either upgrade to a later ' + + 'version of that module, or find an alternative. Deprecated modules are a security risk.', + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'deprecated' + ] + } + }, + { + name: 'no-non-package-json', + severity: 'error', + comment: + "This module depends on an npm package that isn't in the 'dependencies' section of your package.json. " + + "That's problematic as the package either (1) won't be available on live (2 - worse) will be " + + "available on live with an non-guaranteed version. Fix it by adding the package to the dependencies " + + "in your package.json.", + from: {}, + to: { + dependencyTypes: [ + 'npm-no-pkg', + 'npm-unknown' + ] + } + }, + { + name: 'not-to-unresolvable', + comment: + "This module depends on a module that cannot be found ('resolved to disk'). If it's an npm " + + 'module: add it to your package.json. In all other cases you likely already know what to do.', + severity: 'error', + from: {}, + to: { + couldNotResolve: true + } + }, + { + name: 'no-duplicate-dep-types', + comment: + "Likely this module depends on an external ('npm') package that occurs more than once " + + "in your package.json i.e. bot as a devDependencies and in dependencies. This will cause " + + "maintenance problems later on.", + severity: 'warn', + from: {}, + to: { + moreThanOneDependencyType: true, + dependencyTypesNot: ["type-only"] + } + }, + { + name: 'not-to-test', + comment: + "This module depends on code within a folder that should only contain tests. As tests don't " + + "implement functionality this is odd. Either you're writing a test outside the test folder " + + "or there's something in the test folder that isn't a test.", + severity: 'error', + from: { + pathNot: '^(tests)' + }, + to: { + path: '^(tests)' + } + }, + { + name: 'not-to-spec', + comment: + 'This module depends on a spec (test) file. The responsibility of a spec file is to test code. ' + + "If there's something in a spec that's of use to other modules, it doesn't have that single " + + 'responsibility anymore. Factor it out into (e.g.) a separate utility/ helper or a mock.', + severity: 'error', + from: {}, + to: { + path: '[.](?:spec|test)[.](?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$' + } + }, + { + name: 'not-to-dev-dep', + severity: 'error', + comment: + "This module depends on an npm package from the 'devDependencies' section of your " + + 'package.json. It looks like something that ships to production, though. To prevent problems ' + + "with npm packages that aren't there on production declare it (only!) in the 'dependencies'" + + 'section of your package.json. If this module is development only - add it to the ' + + 'from.pathNot re of the not-to-dev-dep rule in the dependency-cruiser configuration', + from: { + path: '^(src)', + pathNot: '[.](?:spec|test)[.](?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$' + }, + to: { + dependencyTypes: [ + 'npm-dev', + ], + dependencyTypesNot: [ + 'type-only' + ], + pathNot: [ + 'node_modules/@types/' + ] + } + }, + { + name: 'optional-deps-used', + severity: 'info', + comment: + "This module depends on an npm package that is declared as an optional dependency " + + "in your package.json. As this makes sense in limited situations only, it's flagged here. " + + "If you use an optional dependency here by design - add an exception to your" + + "dependency-cruiser configuration.", + from: {}, + to: { + dependencyTypes: [ + 'npm-optional' + ] + } + }, + { + name: 'peer-deps-used', + comment: + "This module depends on an npm package that is declared as a peer dependency " + + "in your package.json. This makes sense if your package is e.g. a plugin, but in " + + "other cases - maybe not so much. If the use of a peer dependency is intentional " + + "add an exception to your dependency-cruiser configuration.", + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'npm-peer' + ] + } + } + ], + options: { + doNotFollow: { + path: ['node_modules'] + }, + tsConfig: { + fileName: 'src/tsconfig.json' + }, + enhancedResolveOptions: { + exportsFields: ['exports'], + conditionNames: ['import', 'require', 'node', 'default', 'types'], + mainFields: ["module", "main", "types", "typings"], + }, + skipAnalysisNotInRules: true, + reporterOptions: { + dot: { + collapsePattern: 'node_modules/(?:@[^/]+/[^/]+|[^/]+)', + }, + archi: { + collapsePattern: '^(?:packages|src|lib(s?)|app(s?)|bin|test(s?)|spec(s?))/[^/]+|node_modules/(?:@[^/]+/[^/]+|[^/]+)', + }, + text: { + highlightFocused: true + }, + } + } +}; diff --git a/cli/commands/create-updater/.gitignore b/cli/commands/create-updater/.gitignore new file mode 100644 index 00000000000..19758deef41 --- /dev/null +++ b/cli/commands/create-updater/.gitignore @@ -0,0 +1,4 @@ +dist +node_modules +.DS_Store +.cache/ diff --git a/cli/commands/create-updater/CHANGELOG.md b/cli/commands/create-updater/CHANGELOG.md new file mode 100644 index 00000000000..7d389f436b3 --- /dev/null +++ b/cli/commands/create-updater/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/cli-command-create-updater diff --git a/cli/commands/create-updater/README.md b/cli/commands/create-updater/README.md new file mode 100644 index 00000000000..e551dab4a64 --- /dev/null +++ b/cli/commands/create-updater/README.md @@ -0,0 +1,11 @@ +# @tsparticles/cli-command-create-updater + +## Build + +```bash +pnpm run build +``` + +## License + +MIT diff --git a/cli/commands/create-updater/eslint.config.js b/cli/commands/create-updater/eslint.config.js new file mode 100644 index 00000000000..7dc85e779b6 --- /dev/null +++ b/cli/commands/create-updater/eslint.config.js @@ -0,0 +1,22 @@ +import path from "path"; +import {fileURLToPath} from "url"; +import {defineConfig} from "eslint/config"; +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default defineConfig([ + tsParticlesESLintConfig, + { + languageOptions: { + parserOptions: { + project: [path.join(__dirname, "src", "tsconfig.json")], + tsconfigRootDir: __dirname, + sourceType: "module" + } + }, + rules: { + "no-console": "off" + } + } +]); diff --git a/cli/commands/create-updater/package.json b/cli/commands/create-updater/package.json new file mode 100644 index 00000000000..a1fef14303d --- /dev/null +++ b/cli/commands/create-updater/package.json @@ -0,0 +1,65 @@ +{ + "name": "@tsparticles/cli-command-create-updater", + "version": "4.0.0-beta.15", + "license": "MIT", + "type": "module", + "publishConfig": { + "access": "public", + "tagVersionPrefix": "v" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "cli/commands/create-updater" + }, + "prettier": "@tsparticles/prettier-config", + "scripts": { + "prettify:ci:src": "prettier --check ./src/*", + "prettify:ci:readme": "prettier --check ./README.md", + "prettify:src": "prettier --write ./src/*", + "prettify:readme": "prettier --write ./README.md", + "lint": "eslint src --ext .js,.jsx,.ts,.tsx --cache --cache-location .cache/eslint/.eslintcache --cache-strategy metadata --fix", + "lint:ci": "eslint src --ext .js,.jsx,.ts,.tsx --cache --cache-location .cache/eslint/.eslintcache --cache-strategy metadata", + "circular-deps": "depcruise src --include-only '^src' --validate --output-type err-long", + "compile": "pnpm run build:ts", + "compile:ci": "pnpm run build:ts", + "build:ts": "pnpm run build:ts:cjs", + "build:ts:cjs": "tsc -p src", + "build": "pnpm run clear:dist && pnpm run prettify:src && pnpm run lint && pnpm run compile && pnpm run circular-deps && pnpm run prettify:readme", + "build:ci": "pnpm run clear:dist && pnpm run prettify:ci:src && pnpm run lint:ci && pnpm run compile:ci && pnpm run prettify:ci:readme", + "clear:dist": "rimraf ./dist", + "prepack": "pnpm run build" + }, + "dependencies": { + "@tsparticles/cli-create-utils": "workspace:^", + "@tsparticles/depcruise-config": "workspace:^", + "@tsparticles/eslint-config": "workspace:^", + "@tsparticles/prettier-config": "workspace:^", + "@tsparticles/tsconfig": "workspace:^", + "dependency-cruiser": "^17.4.0", + "eslint": "^10.3.0", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-jsdoc": "^62.9.0", + "eslint-plugin-prettier": "^5.5.5", + "eslint-plugin-tsdoc": "^0.5.2", + "prettier": "^3.8.3", + "prettier-plugin-multiline-arrays": "^4.1.8" + }, + "devDependencies": { + "@types/estree": "^1.0.9", + "@types/node": "^25.6.2", + "browserslist": "^4.28.2", + "commander": "^14.0.3", + "copyfiles": "^2.4.1", + "cross-env": "^10.1.0", + "rimraf": "^6.1.3", + "terser-webpack-plugin": "^5.5.0", + "ts-node": "^10.9.2", + "typescript": "^6.0.3", + "webpack-bundle-analyzer": "^5.3.0", + "webpack-cli": "^7.0.2" + }, + "description": "tsParticles CLI Create Updater command", + "main": "dist/updater.js", + "author": "Matteo Bruni " +} diff --git a/cli/commands/create-updater/src/tsconfig.json b/cli/commands/create-updater/src/tsconfig.json new file mode 100644 index 00000000000..a86b208cb31 --- /dev/null +++ b/cli/commands/create-updater/src/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "rootDir": ".", + "outDir": "../dist" + }, + "references": [{ "path": "../" }], + "include": ["**/*"] +} diff --git a/cli/commands/create-updater/src/updater.ts b/cli/commands/create-updater/src/updater.ts new file mode 100644 index 00000000000..e2de970be40 --- /dev/null +++ b/cli/commands/create-updater/src/updater.ts @@ -0,0 +1,23 @@ +import { createProjectTemplate, promptProjectData } from "@tsparticles/cli-create-utils"; +import { Command } from "commander"; + +const updaterCreateCommand = new Command("updater"); + +updaterCreateCommand.description("Create a new tsParticles updater"); +updaterCreateCommand.argument("", "Destination folder"); +updaterCreateCommand.action(async (destination: string) => { + const data = await promptProjectData({ + destination, + nameLabel: "updater", + }); + + await createProjectTemplate({ + description: data.description, + destination: data.destinationPath, + kind: "updater", + name: data.name, + repositoryUrl: data.repositoryUrl, + }); +}); + +export { updaterCreateCommand }; diff --git a/cli/commands/create-updater/tsconfig.json b/cli/commands/create-updater/tsconfig.json new file mode 100644 index 00000000000..8c0be5a74c5 --- /dev/null +++ b/cli/commands/create-updater/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "rootDir": ".", + "outDir": ".", + "resolveJsonModule": true, + "composite": true, + "target": "ESNext", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "types": [ + "node" + ], + "strict": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "allowSyntheticDefaultImports": true + }, + "include": [ + "src/**/*" + ] +} diff --git a/cli/commands/create-utils/.dependency-cruiser.cjs b/cli/commands/create-utils/.dependency-cruiser.cjs new file mode 100644 index 00000000000..93e0d55a39d --- /dev/null +++ b/cli/commands/create-utils/.dependency-cruiser.cjs @@ -0,0 +1,382 @@ +/** @type {import('dependency-cruiser').IConfiguration} */ +module.exports = { + forbidden: [ + { + name: 'no-circular', + severity: 'warn', + comment: + "This dependency is part of a circular relationship. You might want to revise " + + "your solution (i.e. use dependency inversion, make sure the modules have a single responsibility) ", + from: {}, + to: { + circular: true + } + }, + { + name: 'no-orphans', + comment: + "This is an orphan module - it's likely not used (anymore?). Either use it or " + + "remove it. If it's logical this module is an orphan (i.e. it's a config file), " + + "add an exception for it in your dependency-cruiser configuration. By default " + + "this rule does not scrutinize dot-files (e.g. .eslintrc.js), TypeScript declaration " + + "files (.d.ts), tsconfig.json and some of the babel and webpack configs.", + severity: 'warn', + from: { + orphan: true, + pathNot: [ + '(^|/)[.][^/]+[.](?:js|cjs|mjs|ts|cts|mts|json)$', // dot files + '[.]d[.]ts$', // TypeScript declaration files + '(^|/)tsconfig[.]json$', // TypeScript config + '(^|/)(?:babel|webpack)[.]config[.](?:js|cjs|mjs|ts|cts|mts|json)$' // other configs + ] + }, + to: {}, + }, + { + name: 'no-deprecated-core', + comment: + 'A module depends on a node core module that has been deprecated. Find an alternative - these are ' + + "bound to exist - node doesn't deprecate lightly.", + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'core' + ], + path: [ + '^v8/tools/codemap$', + '^v8/tools/consarray$', + '^v8/tools/csvparser$', + '^v8/tools/logreader$', + '^v8/tools/profile_view$', + '^v8/tools/profile$', + '^v8/tools/SourceMap$', + '^v8/tools/splaytree$', + '^v8/tools/tickprocessor-driver$', + '^v8/tools/tickprocessor$', + '^node-inspect/lib/_inspect$', + '^node-inspect/lib/internal/inspect_client$', + '^node-inspect/lib/internal/inspect_repl$', + '^async_hooks$', + '^punycode$', + '^domain$', + '^constants$', + '^sys$', + '^_linklist$', + '^_stream_wrap$' + ], + } + }, + { + name: 'not-to-deprecated', + comment: + 'This module uses a (version of an) npm module that has been deprecated. Either upgrade to a later ' + + 'version of that module, or find an alternative. Deprecated modules are a security risk.', + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'deprecated' + ] + } + }, + { + name: 'no-non-package-json', + severity: 'error', + comment: + "This module depends on an npm package that isn't in the 'dependencies' section of your package.json. " + + "That's problematic as the package either (1) won't be available on live (2 - worse) will be " + + "available on live with an non-guaranteed version. Fix it by adding the package to the dependencies " + + "in your package.json.", + from: {}, + to: { + dependencyTypes: [ + 'npm-no-pkg', + 'npm-unknown' + ] + } + }, + { + name: 'not-to-unresolvable', + comment: + "This module depends on a module that cannot be found ('resolved to disk'). If it's an npm " + + 'module: add it to your package.json. In all other cases you likely already know what to do.', + severity: 'error', + from: {}, + to: { + couldNotResolve: true + } + }, + { + name: 'no-duplicate-dep-types', + comment: + "Likely this module depends on an external ('npm') package that occurs more than once " + + "in your package.json i.e. bot as a devDependencies and in dependencies. This will cause " + + "maintenance problems later on.", + severity: 'warn', + from: {}, + to: { + moreThanOneDependencyType: true, + // as it's common to use a devDependency for type-only imports: don't + // consider type-only dependencyTypes for this rule + dependencyTypesNot: ["type-only"] + } + }, + + // rules you might want to tweak for your specific situation: + { + name: 'not-to-test', + comment: + "This module depends on code within a folder that should only contain tests. As tests don't " + + "implement functionality this is odd. Either you're writing a test outside the test folder " + + "or there's something in the test folder that isn't a test.", + severity: 'error', + from: { + pathNot: '^(tests)' + }, + to: { + path: '^(tests)' + } + }, + { + name: 'not-to-spec', + comment: + 'This module depends on a spec (test) file. The responsibility of a spec file is to test code. ' + + "If there's something in a spec that's of use to other modules, it doesn't have that single " + + 'responsibility anymore. Factor it out into (e.g.) a separate utility/ helper or a mock.', + severity: 'error', + from: {}, + to: { + path: '[.](?:spec|test)[.](?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$' + } + }, + { + name: 'not-to-dev-dep', + severity: 'error', + comment: + "This module depends on an npm package from the 'devDependencies' section of your " + + 'package.json. It looks like something that ships to production, though. To prevent problems ' + + "with npm packages that aren't there on production declare it (only!) in the 'dependencies'" + + 'section of your package.json. If this module is development only - add it to the ' + + 'from.pathNot re of the not-to-dev-dep rule in the dependency-cruiser configuration', + from: { + path: '^(src)', + pathNot: '[.](?:spec|test)[.](?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$' + }, + to: { + dependencyTypes: [ + 'npm-dev', + ], + // type only dependencies are not a problem as they don't end up in the + // production code or are ignored by the runtime. + dependencyTypesNot: [ + 'type-only' + ], + pathNot: [ + 'node_modules/@types/' + ] + } + }, + { + name: 'optional-deps-used', + severity: 'info', + comment: + "This module depends on an npm package that is declared as an optional dependency " + + "in your package.json. As this makes sense in limited situations only, it's flagged here. " + + "If you use an optional dependency here by design - add an exception to your" + + "dependency-cruiser configuration.", + from: {}, + to: { + dependencyTypes: [ + 'npm-optional' + ] + } + }, + { + name: 'peer-deps-used', + comment: + "This module depends on an npm package that is declared as a peer dependency " + + "in your package.json. This makes sense if your package is e.g. a plugin, but in " + + "other cases - maybe not so much. If the use of a peer dependency is intentional " + + "add an exception to your dependency-cruiser configuration.", + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'npm-peer' + ] + } + } + ], + options: { + // Which modules not to follow further when encountered + doNotFollow: { + // path: an array of regular expressions in strings to match against + path: ['node_modules'] + }, + + // Which modules to exclude + // exclude : { + // // path: an array of regular expressions in strings to match against + // path: '', + // }, + + // Which modules to exclusively include (array of regular expressions in strings) + // dependency-cruiser will skip everything that doesn't match this pattern + // includeOnly : [''], + + // List of module systems to cruise. + // When left out dependency-cruiser will fall back to the list of _all_ + // module systems it knows of ('amd', 'cjs', 'es6', 'tsd']). It's the + // default because it's the safe option. It comes at a performance penalty, though + // As in practice only commonjs ('cjs') and ecmascript modules ('es6') + // are in wide use, you can limit the moduleSystems to those. + // moduleSystems: ['cjs', 'es6'], + + // false: don't look at JSDoc imports (the default) + // true: detect dependencies in JSDoc-style import statements. + // Implies parser: 'tsc', which a.o. means the typescript compiler will need + // to be installed in the same spot you run dependency-cruiser from. + // detectJSDocImports: true, + + // false: don't look at process.getBuiltinModule calls (the default) + // true: dependency-cruiser will detect calls to process.getBuiltinModule/ + // globalThis.process.getBuiltinModule as imports. + // detectProcessBuiltinModuleCalls: true, + + // prefix for links in html, d2, mermaid and dot/ svg output (e.g. 'https://github.com/you/yourrepo/blob/main/' + // to open it on your online repo or `vscode://file/${process.cwd()}/` to + // open it in visual studio code), + // prefix: `vscode://file/${process.cwd()}/`, + + // suffix for links in output. E.g. put .html here if you use it to link to + // your coverage reports. + // suffix: '.html', + + // false (the default): ignore dependencies that only exist before typescript-to-javascript compilation + // true: also detect dependencies that only exist before typescript-to-javascript compilation + // 'specify': for each dependency identify whether it only exists before compilation or also after + // tsPreCompilationDeps: false, + + // list of extensions to scan that aren't javascript or compile-to-javascript. + // Empty by default. Only put extensions in here that you want to take into + // account that are _not_ parsable. + // extraExtensionsToScan: ['.json', '.jpg', '.png', '.svg', '.webp'], + + // if true combines the package.jsons found from the module up to the base + // folder the cruise is initiated from. Useful for how (some) mono-repos + // manage dependencies & dependency definitions. + // combinedDependencies: false, + + // if true leave symlinks untouched, otherwise use the realpath + // preserveSymlinks: false, + + // TypeScript project file ('tsconfig.json') to use for + // (1) compilation and + // (2) resolution (e.g. with the paths property) + // + // The (optional) fileName attribute specifies which file to take (relative to + // dependency-cruiser's current working directory). When not provided + // defaults to './tsconfig.json'. + tsConfig: { + fileName: 'src/tsconfig.json' + }, + + // Webpack configuration to use to get resolve options from. + // + // The (optional) fileName attribute specifies which file to take (relative + // to dependency-cruiser's current working directory. When not provided defaults + // to './webpack.conf.js'. + // + // The (optional) 'env' and 'arguments' attributes contain the parameters + // to be passed if your webpack config is a function and takes them (see + // webpack documentation for details) + // webpackConfig: { + // fileName: 'webpack.config.js', + // env: {}, + // arguments: {} + // }, + + // Babel config ('.babelrc', '.babelrc.json', '.babelrc.json5', ...) to use + // for compilation + // babelConfig: { + // fileName: '.babelrc', + // }, + + // List of strings you have in use in addition to cjs/ es6 requires + // & imports to declare module dependencies. Use this e.g. if you've + // re-declared require, use a require-wrapper or use window.require as + // a hack. + // exoticRequireStrings: [], + + // options to pass on to enhanced-resolve, the package dependency-cruiser + // uses to resolve module references to disk. The values below should be + // suitable for most situations + // + // If you use webpack: you can also set these in webpack.conf.js. The set + // there will override the ones specified here. + enhancedResolveOptions: { + // What to consider as an 'exports' field in package.jsons + exportsFields: ['exports'], + + // List of conditions to check for in the exports field. + // Only works when the 'exportsFields' array is non-empty. + conditionNames: ['import', 'require', 'node', 'default', 'types'], + + // The extensions, by default are the same as the ones dependency-cruiser + // can access (run `npx depcruise --info` to see which ones that are in + // _your_ environment). If that list is larger than you need you can pass + // the extensions you actually use (e.g. ['.js', '.jsx']). This can speed + // up module resolution, which is the most expensive step. + // extensions: [".js", ".jsx", ".ts", ".tsx", ".d.ts"], + + // What to consider a 'main' field in package.json + mainFields: ["module", "main", "types", "typings"], + + // A list of alias fields in package.jsons + // See https://github.com/defunctzombie/package-browser-field-spec and + // the webpack [resolve.alias](https://webpack.js.org/configuration/resolve/#resolvealiasfields) + // documentation. + // Defaults to an empty array (= don't use alias fields). + // aliasFields: ['browser'], + }, + + // skipAnalysisNotInRules will make dependency-cruiser execute + // analysis strictly necessary for checking the rule set only. + // See https://github.com/sverweij/dependency-cruiser/blob/main/doc/options-reference.md#skipanalysisnotinrules + skipAnalysisNotInRules: true, + + reporterOptions: { + dot: { + // Pattern of modules to consolidate to. The default pattern in this configuration + // collapses everything in node_modules to one folder deep so you see + // the external modules, but not their innards. + collapsePattern: 'node_modules/(?:@[^/]+/[^/]+|[^/]+)', + + // Options to tweak the appearance of your graph. See + // https://github.com/sverweij/dependency-cruiser/blob/main/doc/options-reference.md#reporteroptions + // If you don't specify a theme dependency-cruiser falls back to a built-in one. + // theme: { + // graph: { + // // splines: 'ortho' - straight lines; slow on big graphs + // // splines: 'true' - bezier curves; fast but not as nice as ortho + // splines: 'true' + // }, + // }, + }, + archi: { + // Pattern of modules to consolidate to. + collapsePattern: '^(?:packages|src|lib(s?)|app(s?)|bin|test(s?)|spec(s?))/[^/]+|node_modules/(?:@[^/]+/[^/]+|[^/]+)', + + // Options to tweak the appearance of your graph. If you don't specify a + // theme for 'archi' dependency-cruiser will use the one specified in the + // dot section above and otherwise use the default one. + // theme: { }, + }, + text: { + highlightFocused: true + }, + } + } +}; +// generated: dependency-cruiser@17.3.7 on 2026-01-28T14:30:16.611Z diff --git a/cli/commands/create-utils/CHANGELOG.md b/cli/commands/create-utils/CHANGELOG.md new file mode 100644 index 00000000000..00e1e585735 --- /dev/null +++ b/cli/commands/create-utils/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/cli-create-utils diff --git a/cli/commands/create-utils/README.md b/cli/commands/create-utils/README.md new file mode 100644 index 00000000000..62974ea9e45 --- /dev/null +++ b/cli/commands/create-utils/README.md @@ -0,0 +1,52 @@ +# @tsparticles/cli-create-utils + +Shared utilities used by `@tsparticles/cli-command-create` and all modular `create-*` command packages. + +## What It Provides + +- project scaffold generation (`createProjectTemplate`) +- interactive prompt helpers (`promptProjectData`) +- filesystem helpers (`getDestinationDir`, `getRepositoryUrl`, token replacement) +- template/package update helpers (`updatePackageFile`, `copyEmptyTemplateFiles`, `runInstall`, `runBuild`) +- string naming helpers (`capitalize`, `camelize`, `dash`) + +## Installation + +```bash +pnpm add @tsparticles/cli-create-utils +``` + +## Exports + +This package re-exports everything from: + +- `src/create-project.ts` +- `src/file-utils.ts` +- `src/prompt-utils.ts` +- `src/string-utils.ts` +- `src/template-utils.ts` + +## Typical Usage + +```ts +import { Command } from "commander"; +import { createProjectTemplate, promptProjectData } from "@tsparticles/cli-create-utils"; + +const cmd = new Command("shape"); + +cmd.argument(""); +cmd.action(async destination => { + const data = await promptProjectData({ + destination, + nameLabel: "shape", + }); + + await createProjectTemplate({ + description: data.description, + destination: data.destinationPath, + kind: "shape", + name: data.name, + repositoryUrl: data.repositoryUrl, + }); +}); +``` diff --git a/cli/commands/create-utils/eslint.config.js b/cli/commands/create-utils/eslint.config.js new file mode 100644 index 00000000000..7dc85e779b6 --- /dev/null +++ b/cli/commands/create-utils/eslint.config.js @@ -0,0 +1,22 @@ +import path from "path"; +import {fileURLToPath} from "url"; +import {defineConfig} from "eslint/config"; +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default defineConfig([ + tsParticlesESLintConfig, + { + languageOptions: { + parserOptions: { + project: [path.join(__dirname, "src", "tsconfig.json")], + tsconfigRootDir: __dirname, + sourceType: "module" + } + }, + rules: { + "no-console": "off" + } + } +]); diff --git a/palettes/confetti/confetti/.browserslistrc b/cli/commands/create-utils/files/empty-project/.browserslistrc similarity index 100% rename from palettes/confetti/confetti/.browserslistrc rename to cli/commands/create-utils/files/empty-project/.browserslistrc diff --git a/cli/commands/create-utils/files/empty-project/.gitignore b/cli/commands/create-utils/files/empty-project/.gitignore new file mode 100644 index 00000000000..424d6adc7c9 --- /dev/null +++ b/cli/commands/create-utils/files/empty-project/.gitignore @@ -0,0 +1,352 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +dist/ \ No newline at end of file diff --git a/palettes/confetti/confetti/LICENSE b/cli/commands/create-utils/files/empty-project/LICENSE similarity index 100% rename from palettes/confetti/confetti/LICENSE rename to cli/commands/create-utils/files/empty-project/LICENSE diff --git a/cli/commands/create-utils/files/empty-project/eslint.config.js b/cli/commands/create-utils/files/empty-project/eslint.config.js new file mode 100644 index 00000000000..baeb2b3f6c1 --- /dev/null +++ b/cli/commands/create-utils/files/empty-project/eslint.config.js @@ -0,0 +1,6 @@ +import { defineConfig } from "eslint/config"; +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; + +export default defineConfig([ + tsParticlesESLintConfig, +]); diff --git a/cli/commands/create-utils/files/empty-project/package.dist.json b/cli/commands/create-utils/files/empty-project/package.dist.json new file mode 100644 index 00000000000..c107d926a6c --- /dev/null +++ b/cli/commands/create-utils/files/empty-project/package.dist.json @@ -0,0 +1,78 @@ +{ + "name": "@tsparticles/empty-template", + "version": "4.0.0-beta.12", + "private": true, + "type": "module", + "author": "Matteo Bruni ", + "description": "tsParticles empty template", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/empty-template.git" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti" + ], + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/empty-template/issues" + }, + "main": "index.js", + "jsdelivr": "tsparticles.empty.template.min.js", + "unpkg": "tsparticles.empty.template.min.js", + "module": "index.js", + "types": "index.d.ts", + "peerDependencies": { + "@tsparticles/engine": "^4.0.0-beta.12" + } +} diff --git a/cli/commands/create-utils/files/empty-project/package.json b/cli/commands/create-utils/files/empty-project/package.json new file mode 100644 index 00000000000..673d363780d --- /dev/null +++ b/cli/commands/create-utils/files/empty-project/package.json @@ -0,0 +1,113 @@ +{ + "name": "@tsparticles/empty-template", + "version": "4.0.0-beta.12", + "private": true, + "type": "module", + "description": "tsParticles empty template", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/empty-template.git" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-preset" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/empty-template/issues" + }, + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "prettier": "@tsparticles/prettier-config", + "devDependencies": { + "@swc/core": "^1.15.33", + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/browserslist-config": "workspace:^", + "@tsparticles/depcruise-config": "workspace:^", + "@tsparticles/engine": "^4.0.0-beta.12", + "@tsparticles/eslint-config": "workspace:^", + "@tsparticles/prettier-config": "workspace:^", + "@tsparticles/tsconfig": "workspace:^", + "@tsparticles/webpack-plugin": "workspace:^", + "@types/webpack-env": "^1.18.8", + "browserslist": "^4.28.2", + "copyfiles": "^2.4.1", + "eslint": "^10.3.0", + "eslint-config-prettier": "^10.1.8", + "prettier": "^3.8.3", + "rimraf": "^6.1.3", + "swc-loader": "^0.2.7", + "terser-webpack-plugin": "^5.5.0", + "typescript": "^6.0.3", + "typescript-eslint": "^8.59.2", + "webpack": "^5.106.2", + "webpack-bundle-analyzer": "^5.3.0", + "webpack-cli": "^7.0.2" + }, + "peerDependencies": { + "@tsparticles/engine": "^4.0.0-beta.12" + } +} diff --git a/cli/commands/create-utils/files/empty-project/rollup.config.js b/cli/commands/create-utils/files/empty-project/rollup.config.js new file mode 100644 index 00000000000..b79d6aa2d80 --- /dev/null +++ b/cli/commands/create-utils/files/empty-project/rollup.config.js @@ -0,0 +1,16 @@ +import { loadParticlesTemplate } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")); + +export default loadParticlesTemplate({ + moduleName: "empty", + templateName: "Empty", + version: pkg.version, + dir: __dirname, +}); diff --git a/cli/commands/create-utils/files/empty-project/tsconfig.base.json b/cli/commands/create-utils/files/empty-project/tsconfig.base.json new file mode 100644 index 00000000000..a3febcd894f --- /dev/null +++ b/cli/commands/create-utils/files/empty-project/tsconfig.base.json @@ -0,0 +1,10 @@ +{ + "extends": "@tsparticles/tsconfig/dist/tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src", + "strictNullChecks": true + }, + "include": [ + "./src" + ] +} diff --git a/palettes/confetti/confetti/tsconfig.browser.json b/cli/commands/create-utils/files/empty-project/tsconfig.browser.json similarity index 100% rename from palettes/confetti/confetti/tsconfig.browser.json rename to cli/commands/create-utils/files/empty-project/tsconfig.browser.json diff --git a/palettes/confetti/confetti/tsconfig.json b/cli/commands/create-utils/files/empty-project/tsconfig.json similarity index 100% rename from palettes/confetti/confetti/tsconfig.json rename to cli/commands/create-utils/files/empty-project/tsconfig.json diff --git a/palettes/confetti/confetti/tsconfig.module.json b/cli/commands/create-utils/files/empty-project/tsconfig.module.json similarity index 100% rename from palettes/confetti/confetti/tsconfig.module.json rename to cli/commands/create-utils/files/empty-project/tsconfig.module.json diff --git a/palettes/confetti/confetti/tsconfig.types.json b/cli/commands/create-utils/files/empty-project/tsconfig.types.json similarity index 100% rename from palettes/confetti/confetti/tsconfig.types.json rename to cli/commands/create-utils/files/empty-project/tsconfig.types.json diff --git a/cli/commands/create-utils/package.json b/cli/commands/create-utils/package.json new file mode 100644 index 00000000000..cdea9be0fc2 --- /dev/null +++ b/cli/commands/create-utils/package.json @@ -0,0 +1,79 @@ +{ + "name": "@tsparticles/cli-create-utils", + "version": "4.0.0-beta.15", + "license": "MIT", + "type": "module", + "publishConfig": { + "access": "public", + "tagVersionPrefix": "v" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "cli/commands/create-utils" + }, + "prettier": "@tsparticles/prettier-config", + "scripts": { + "prettify:ci:src": "prettier --check ./src/*", + "prettify:ci:readme": "prettier --check ./README.md", + "prettify:src": "prettier --write ./src/*", + "prettify:readme": "prettier --write ./README.md", + "lint": "eslint src --ext .js,.jsx,.ts,.tsx --cache --cache-location .cache/eslint/.eslintcache --cache-strategy metadata --fix", + "lint:ci": "eslint src --ext .js,.jsx,.ts,.tsx --cache --cache-location .cache/eslint/.eslintcache --cache-strategy metadata", + "circular-deps": "depcruise src --include-only '^src' --validate --output-type err-long", + "compile": "pnpm run build:ts", + "compile:ci": "pnpm run build:ts", + "build:ts": "pnpm run build:ts:cjs", + "build:ts:cjs": "tsc -p src", + "test": "vitest run", + "build": "pnpm run clear:dist && pnpm run prettify:src && pnpm run lint && pnpm run compile && pnpm run circular-deps && pnpm run prettify:readme", + "build:ci": "pnpm run clear:dist && pnpm run prettify:ci:src && pnpm run lint:ci && pnpm run compile:ci && pnpm run prettify:ci:readme", + "clear:dist": "rimraf ./dist", + "prepack": "pnpm run build" + }, + "dependencies": { + "@swc/core": "^1.15.33", + "@tsparticles/depcruise-config": "workspace:^", + "@tsparticles/engine": "workspace:^", + "@tsparticles/eslint-config": "workspace:^", + "@tsparticles/prettier-config": "workspace:^", + "@tsparticles/tsconfig": "workspace:^", + "@tsparticles/webpack-plugin": "workspace:^", + "commander": "^14.0.3", + "dependency-cruiser": "^17.4.0", + "eslint": "^10.3.0", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-jsdoc": "^62.9.0", + "eslint-plugin-prettier": "^5.5.5", + "eslint-plugin-tsdoc": "^0.5.2", + "klaw": "^4.1.0", + "lookpath": "^1.2.3", + "path-scurry": "^2.0.2", + "prettier": "^3.8.3", + "prettier-plugin-multiline-arrays": "^4.1.8", + "prompts": "^2.4.2", + "rimraf": "^6.1.3", + "swc-loader": "^0.2.7", + "typescript": "^6.0.3", + "typescript-eslint": "^8.59.2", + "webpack": "^5.106.2" + }, + "devDependencies": { + "@types/estree": "^1.0.9", + "@types/klaw": "^3.0.7", + "@types/node": "^25.6.2", + "@types/prompts": "^2.4.9", + "@types/webpack-env": "^1.18.8", + "browserslist": "^4.28.2", + "copyfiles": "^2.4.1", + "cross-env": "^10.1.0", + "terser-webpack-plugin": "^5.5.0", + "ts-node": "^10.9.2", + "vitest": "^4.1.5", + "webpack-bundle-analyzer": "^5.3.0", + "webpack-cli": "^7.0.2" + }, + "description": "tsParticles CLI Utils", + "main": "dist/index.js", + "author": "Matteo Bruni " +} diff --git a/cli/commands/create-utils/renovate.json b/cli/commands/create-utils/renovate.json new file mode 100644 index 00000000000..df30aa6db3e --- /dev/null +++ b/cli/commands/create-utils/renovate.json @@ -0,0 +1,9 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "baseBranches": [ + "dev" + ], + "extends": [ + "config:base" + ] +} diff --git a/cli/commands/create-utils/src/create-project.ts b/cli/commands/create-utils/src/create-project.ts new file mode 100644 index 00000000000..744c15035c3 --- /dev/null +++ b/cli/commands/create-utils/src/create-project.ts @@ -0,0 +1,1154 @@ +/* eslint-disable sort-imports */ +import { mkdir, writeFile } from "node:fs/promises"; +import path from "node:path"; +import { camelize, capitalize, dash } from "./string-utils.js"; +import { + type IProjectMetadata, + copyEmptyTemplateFiles, + runBuild, + runInstall, + updatePackageDistFile, + updatePackageFile, +} from "./template-utils.js"; + +export type CreateProjectKind = + | "bundle" + | "effect" + | "interaction" + | "palette" + | "path" + | "plugin" + | "preset" + | "shape" + | "updater"; + +export type InteractionType = "external" | "generic" | "particles"; + +export type PluginType = "color-manager" | "easing" | "emitters-shape" | "export" | "generic"; + +type SubType = InteractionType | PluginType | undefined; + +export interface ICreateProjectOptions { + description: string; + destination: string; + kind: CreateProjectKind; + name: string; + repositoryUrl: string; + type?: SubType; +} + +interface IProjectConfig { + description: string; + fileName: string; + jsDelivrFileName: string; + kindLabel: string; + loadFunction: string; + moduleName: string; + packageName: string; + packageSuffix: string; + registerName: string; + rollupFactory: string; + rollupNameKey: string; + rollupNameValue: string; + srcFiles: Record; + withBundleFile: boolean; +} + +interface INameData { + camelName: string; + dashedName: string; + folderName: string; + pascalName: string; +} + +/** + * + * @param name + * @param destination + */ +function getNameData(name: string, destination: string): INameData { + const pascalName = capitalize(name.trim(), "-", "_", " "), + camelName = camelize(pascalName), + dashedName = dash(camelName), + folderName = path.basename(destination); + + return { + camelName, + dashedName, + folderName, + pascalName, + }; +} + +/** + * + * @param loadFunction + */ +function getNoopLazyIndex(loadFunction: string): string { + return `import type { Engine } from "@tsparticles/engine/lazy"; + +/** + * @param engine - The engine instance + */ +export async function ${loadFunction}(engine: Engine): Promise { + const { ${loadFunction}: load } = await import("./index.js"); + + await load(engine); +} +`; +} + +/** + * + * @param loadFunction + */ +function getBrowserFile(loadFunction: string): string { + return `import { ${loadFunction} } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + ${loadFunction}?: typeof ${loadFunction}; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.${loadFunction} = ${loadFunction}; + +export * from "./index.js"; +`; +} + +/** + * + * @param loadFunction + * @param reexportEngine + */ +function getBundleFile(loadFunction: string, reexportEngine: boolean): string { + return `import { ${loadFunction} } from "./index.js"; + +${reexportEngine ? 'export { tsParticles } from "@tsparticles/engine";' : ""} +export { ${loadFunction} } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + ${loadFunction}?: typeof ${loadFunction}; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; + +globalObject.${loadFunction} = ${loadFunction}; +`; +} + +/** + * + * @param kindLabel + * @param description + */ +function getProjectDescription(kindLabel: string, description: string): string { + return `tsParticles ${description} ${kindLabel}`; +} + +/** + * + * @param repositoryUrl + * @param packageSuffix + */ +function getRepoUrl(repositoryUrl: string, packageSuffix: string): string { + if (repositoryUrl) { + return repositoryUrl; + } + + return `https://github.com/tsparticles/${packageSuffix}.git`; +} + +/** + * + * @param config + */ +function getRollupConfig(config: IProjectConfig): string { + return `import { ${config.rollupFactory} } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")); + +export default ${config.rollupFactory}({ + moduleName: "${config.moduleName}", + ${config.rollupNameKey}: "${config.rollupNameValue}", + version: pkg.version, + dir: __dirname, +}); +`; +} + +/** + * + * @param config + */ +function getReadme(config: IProjectConfig): string { + return `[![banner](https://particles.js.org/images/banner2.png)](https://particles.js.org) + +# ${config.description} + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/${config.packageSuffix}/badge)](https://www.jsdelivr.com/package/npm/${config.packageSuffix}) +[![npmjs](https://badge.fury.io/js/${config.packageSuffix}.svg)](https://www.npmjs.com/package/${config.packageSuffix}) + +## Installation + +\`\`\`bash +npm install ${config.packageSuffix} +\`\`\` + +## Usage + +\`\`\`ts +import { tsParticles } from "@tsparticles/engine"; +import { ${config.loadFunction} } from "${config.packageSuffix}"; + +await ${config.loadFunction}(tsParticles); +\`\`\` +`; +} + +/** + * + * @param nameData + * @param description + */ +function createBundleConfig(nameData: INameData, description: string): IProjectConfig { + const loadFunction = `load${nameData.pascalName}`; + + return { + description: getProjectDescription("bundle", description), + fileName: `tsparticles.${nameData.camelName}.bundle.min.js`, + jsDelivrFileName: `tsparticles.${nameData.camelName}.bundle.min.js`, + kindLabel: "Bundle", + loadFunction, + moduleName: nameData.dashedName, + packageName: `@tsparticles/${nameData.dashedName}`, + packageSuffix: `@tsparticles/${nameData.dashedName}`, + registerName: nameData.pascalName, + rollupFactory: "loadParticlesBundle", + rollupNameKey: "bundleName", + rollupNameValue: nameData.pascalName, + srcFiles: { + "src/index.ts": `import { type Engine } from "@tsparticles/engine"; + +declare const __VERSION__: string; + +export async function ${loadFunction}(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async () => { + // TODO: load dependencies for this bundle + }); +} +`, + "src/index.lazy.ts": getNoopLazyIndex(loadFunction), + "src/browser.ts": getBrowserFile(loadFunction), + "src/bundle.ts": getBundleFile(loadFunction, true), + }, + withBundleFile: true, + }; +} + +/** + * + * @param nameData + * @param description + */ +function createEffectConfig(nameData: INameData, description: string): IProjectConfig { + const loadFunction = `load${nameData.pascalName}Effect`, + drawerName = `${nameData.pascalName}EffectDrawer`; + + return { + description: getProjectDescription("effect", description), + fileName: `tsparticles.effect.${nameData.camelName}.min.js`, + jsDelivrFileName: `tsparticles.effect.${nameData.camelName}.min.js`, + kindLabel: "Effect", + loadFunction, + moduleName: nameData.dashedName, + packageName: `@tsparticles/effect-${nameData.dashedName}`, + packageSuffix: `@tsparticles/effect-${nameData.dashedName}`, + registerName: nameData.camelName, + rollupFactory: "loadParticlesEffect", + rollupNameKey: "effectName", + rollupNameValue: nameData.pascalName, + srcFiles: { + "src/index.ts": `import { type Engine, type IEffectDrawer, type IShapeDrawData, type Particle } from "@tsparticles/engine"; + +declare const __VERSION__: string; + +class ${drawerName} implements IEffectDrawer { + drawAfter(_data: IShapeDrawData): void { + // TODO: implement drawAfter + } +} + +export async function ${loadFunction}(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(e => { + e.pluginManager.addEffect("${nameData.camelName}", () => { + return Promise.resolve(new ${drawerName}()); + }); + }); +} +`, + "src/index.lazy.ts": getNoopLazyIndex(loadFunction), + "src/browser.ts": getBrowserFile(loadFunction), + }, + withBundleFile: false, + }; +} + +/** + * + * @param nameData + * @param description + * @param type + */ +function createInteractionConfig(nameData: INameData, description: string, type: InteractionType): IProjectConfig { + const isExternal = type === "external" || type === "generic", + isParticles = type === "particles" || type === "generic"; + + let loadFunction = `load${nameData.pascalName}Interaction`, + packageName = `@tsparticles/interaction-${nameData.dashedName}`, + fileName = `tsparticles.interaction.${nameData.camelName}.min.js`, + rollupFactory = "loadParticlesInteraction"; + + if (type === "external") { + loadFunction = `loadExternal${nameData.pascalName}Interaction`; + packageName = `@tsparticles/interaction-external-${nameData.dashedName}`; + fileName = `tsparticles.interaction.external.${nameData.camelName}.min.js`; + rollupFactory = "loadParticlesInteractionExternal"; + } else if (type === "particles") { + loadFunction = `loadParticles${nameData.pascalName}Interaction`; + packageName = `@tsparticles/interaction-particles-${nameData.dashedName}`; + fileName = `tsparticles.interaction.particles.${nameData.camelName}.min.js`; + rollupFactory = "loadParticlesInteractionParticles"; + } + + return { + description: getProjectDescription("interaction", description), + fileName, + jsDelivrFileName: fileName, + kindLabel: "Interaction", + loadFunction, + moduleName: nameData.dashedName, + packageName, + packageSuffix: packageName, + registerName: nameData.camelName, + rollupFactory, + rollupNameKey: "pluginName", + rollupNameValue: nameData.pascalName, + srcFiles: { + "src/index.ts": `import { type Engine, type IDelta, type Particle } from "@tsparticles/engine"; + +declare const __VERSION__: string; + +interface IInteractivityData { + type?: string; +} + +interface IInteractor { + clear(): void; + init(): void; + interact(..._args: unknown[]): void; + isEnabled(..._args: unknown[]): boolean; + reset(): void; +} + +type InteractorFactory = (container: unknown) => Promise; + +type PluginManagerWithInteractors = Engine["pluginManager"] & { + addInteractor?: (name: string, interactor: InteractorFactory) => void; +}; + +${ + isExternal + ? `class External${nameData.pascalName}Interactor implements IInteractor { + clear(): void { + // TODO: implement clear + } + + init(): void { + // TODO: implement init + } + + interact(_data: IInteractivityData, _delta: IDelta): void { + // TODO: implement interact + } + + isEnabled(_data: IInteractivityData, _particle?: Particle): boolean { + return false; + } + + reset(): void { + // TODO: implement reset + } +} + +` + : "" +}${ + isParticles + ? `class Particles${nameData.pascalName}Interactor implements IInteractor { + clear(): void { + // TODO: implement clear + } + + init(): void { + // TODO: implement init + } + + interact(_particle: Particle, _data: IInteractivityData, _delta: IDelta): void { + // TODO: implement interact + } + + isEnabled(_particle: Particle, _data: IInteractivityData): boolean { + return false; + } + + reset(): void { + // TODO: implement reset + } +} + +` + : "" + }export async function ${loadFunction}(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(e => { + const pluginManager = e.pluginManager as PluginManagerWithInteractors; + +${ + isExternal + ? ` pluginManager.addInteractor?.("external${nameData.pascalName}", () => { + return Promise.resolve(new External${nameData.pascalName}Interactor()); + }); +` + : "" +}${ + isParticles + ? ` pluginManager.addInteractor?.("particles${nameData.pascalName}", () => { + return Promise.resolve(new Particles${nameData.pascalName}Interactor()); + }); +` + : "" + } }); +} +`, + "src/index.lazy.ts": getNoopLazyIndex(loadFunction), + "src/browser.ts": getBrowserFile(loadFunction), + }, + withBundleFile: false, + }; +} + +/** + * + * @param nameData + * @param description + */ +function createPaletteConfig(nameData: INameData, description: string): IProjectConfig { + const loadFunction = `load${nameData.pascalName}Palette`; + + return { + description: getProjectDescription("palette", description), + fileName: `tsparticles.palette.${nameData.camelName}.min.js`, + jsDelivrFileName: `tsparticles.palette.${nameData.camelName}.min.js`, + kindLabel: "Palette", + loadFunction, + moduleName: `palette-${nameData.dashedName}`, + packageName: `@tsparticles/palette-${nameData.dashedName}`, + packageSuffix: `@tsparticles/palette-${nameData.dashedName}`, + registerName: nameData.dashedName, + rollupFactory: "loadParticlesPalette", + rollupNameKey: "paletteName", + rollupNameValue: `${nameData.pascalName} Palette`, + srcFiles: { + "src/options.ts": `import type { ISourceOptions } from "@tsparticles/engine"; + +export const options: ISourceOptions = { + // TODO: palette options +}; +`, + "src/index.ts": `import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +export const paletteName = "${nameData.dashedName}"; + +export async function ${loadFunction}(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} +`, + "src/index.lazy.ts": getNoopLazyIndex(loadFunction), + "src/browser.ts": getBrowserFile(loadFunction), + }, + withBundleFile: false, + }; +} + +/** + * + * @param nameData + * @param description + */ +function createPathConfig(nameData: INameData, description: string): IProjectConfig { + const loadFunction = `load${nameData.pascalName}Path`, + generatorName = `${nameData.pascalName}PathGenerator`; + + return { + description: getProjectDescription("path", description), + fileName: `tsparticles.path.${nameData.camelName}.min.js`, + jsDelivrFileName: `tsparticles.path.${nameData.camelName}.min.js`, + kindLabel: "Path", + loadFunction, + moduleName: nameData.dashedName, + packageName: `@tsparticles/path-${nameData.dashedName}`, + packageSuffix: `@tsparticles/path-${nameData.dashedName}`, + registerName: nameData.camelName, + rollupFactory: "loadParticlesPath", + rollupNameKey: "pluginName", + rollupNameValue: nameData.pascalName, + srcFiles: { + "src/index.ts": `import { type Engine, type IDelta, type Particle, Vector } from "@tsparticles/engine"; + +declare const __VERSION__: string; + +interface IPathGenerator { + generate(particle: Particle, delta: IDelta): Vector; + init(): void; + reset(): void; + update(): void; +} + +type PluginManagerWithPath = Engine["pluginManager"] & { + addPathGenerator?: (name: string, initializer: (container: unknown) => Promise) => void; +}; + +class ${generatorName} implements IPathGenerator { + generate(_particle: Particle, _delta: IDelta): Vector { + return Vector.origin; + } + + init(): void { + // TODO: initialize generator + } + + reset(): void { + // TODO: reset state + } + + update(): void { + // TODO: update state + } +} + +export async function ${loadFunction}(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(e => { + const pluginManager = e.pluginManager as PluginManagerWithPath; + + pluginManager.addPathGenerator?.("${nameData.camelName}PathGenerator", () => { + return Promise.resolve(new ${generatorName}()); + }); + }); +} +`, + "src/index.lazy.ts": getNoopLazyIndex(loadFunction), + "src/browser.ts": getBrowserFile(loadFunction), + }, + withBundleFile: false, + }; +} + +/** + * + * @param nameData + * @param loadFunction + * @param pluginClass + */ +function createGenericPluginIndex(loadFunction: string, pluginClass: string): string { + return `import { type Engine } from "@tsparticles/engine"; +import { ${pluginClass} } from "./${pluginClass}.js"; + +declare const __VERSION__: string; + +export async function ${loadFunction}(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(e => { + e.pluginManager.addPlugin(new ${pluginClass}()); + }); +} +`; +} + +/** + * + * @param nameData + * @param description + * @param type + */ +function createPluginConfig(nameData: INameData, description: string, type: PluginType): IProjectConfig { + if (type === "generic") { + const loadFunction = `load${nameData.pascalName}Plugin`, + pluginClass = `${nameData.pascalName}Plugin`; + + return { + description: getProjectDescription("plugin", description), + fileName: `tsparticles.plugin.${nameData.camelName}.min.js`, + jsDelivrFileName: `tsparticles.plugin.${nameData.camelName}.min.js`, + kindLabel: "Plugin", + loadFunction, + moduleName: nameData.dashedName, + packageName: `@tsparticles/plugin-${nameData.dashedName}`, + packageSuffix: `@tsparticles/plugin-${nameData.dashedName}`, + registerName: nameData.camelName, + rollupFactory: "loadParticlesPlugin", + rollupNameKey: "pluginName", + rollupNameValue: nameData.pascalName, + srcFiles: { + "src/PluginInstance.ts": `import { type Container, type IContainerPlugin } from "@tsparticles/engine"; + +export class PluginInstance implements IContainerPlugin { + constructor(private readonly _container: Container) {} + + get pluginContainer(): Container { + return this._container; + } + + draw(): void { + // TODO: draw plugin content + } + + init(): void { + // TODO: init plugin instance + } + + particleBounce(): void { + // TODO: handle bounce + } + + reset(): void { + // TODO: reset plugin instance + } + + stop(): void { + // TODO: stop plugin instance + } +} +`, + "src/Plugin.ts": `import { type Container, type IPlugin, type ISourceOptions, type Options } from "@tsparticles/engine"; +import type { PluginInstance } from "./PluginInstance.js"; + +export class ${pluginClass} implements IPlugin { + readonly id = "${nameData.camelName}"; + + async getPlugin(container: Container): Promise { + const { PluginInstance } = await import("./PluginInstance.js"); + + return new PluginInstance(container); + } + + loadOptions(_container: Container, _options: Options, _source?: ISourceOptions): void { + // TODO: load plugin options + } + + needsPlugin(_options?: ISourceOptions): boolean { + return true; + } +} +`, + "src/index.ts": createGenericPluginIndex(loadFunction, pluginClass), + "src/index.lazy.ts": getNoopLazyIndex(loadFunction), + "src/browser.ts": getBrowserFile(loadFunction), + }, + withBundleFile: false, + }; + } + + if (type === "emitters-shape") { + const loadFunction = `loadEmittersShape${nameData.pascalName}`, + className = `${nameData.pascalName}EmittersShapeGenerator`; + + return { + description: getProjectDescription("emitters shape plugin", description), + fileName: `tsparticles.plugin.emitters.shape.${nameData.camelName}.min.js`, + jsDelivrFileName: `tsparticles.plugin.emitters.shape.${nameData.camelName}.min.js`, + kindLabel: "Plugin", + loadFunction, + moduleName: nameData.dashedName, + packageName: `@tsparticles/plugin-emitters-shape-${nameData.dashedName}`, + packageSuffix: `@tsparticles/plugin-emitters-shape-${nameData.dashedName}`, + registerName: nameData.dashedName, + rollupFactory: "loadParticlesPluginEmittersShape", + rollupNameKey: "pluginName", + rollupNameValue: nameData.pascalName, + srcFiles: { + "src/index.ts": `import { type Engine, type ICoordinates, type IDimension } from "@tsparticles/engine"; + +declare const __VERSION__: string; + +interface IEmitterShape { + init(): Promise; + randomPosition(): { offset: ICoordinates } | null; + resize(position: ICoordinates, size: IDimension): void; +} + +interface IEmitterShapeGenerator { + generate(container: unknown, position: ICoordinates, size: IDimension, fill: boolean, options: unknown): IEmitterShape; +} + +type PluginManagerWithEmitterShapes = Engine["pluginManager"] & { + addEmitterShapeGenerator?: (name: string, generator: IEmitterShapeGenerator) => void; +}; + +class ${className} implements IEmitterShapeGenerator { + generate(_container: unknown, position: ICoordinates): IEmitterShape { + return { + init: () => Promise.resolve(), + randomPosition: () => ({ offset: position }), + resize: () => { + // TODO: resize emitter shape + }, + }; + } +} + +export async function ${loadFunction}(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(e => { + const pluginManager = e.pluginManager as PluginManagerWithEmitterShapes; + + pluginManager.addEmitterShapeGenerator?.("${nameData.dashedName}", new ${className}()); + }); +} +`, + "src/index.lazy.ts": getNoopLazyIndex(loadFunction), + "src/browser.ts": getBrowserFile(loadFunction), + }, + withBundleFile: false, + }; + } + + if (type === "easing") { + const loadFunction = `loadEasing${nameData.pascalName}Plugin`; + + return { + description: getProjectDescription("easing plugin", description), + fileName: `tsparticles.plugin.easing.${nameData.camelName}.min.js`, + jsDelivrFileName: `tsparticles.plugin.easing.${nameData.camelName}.min.js`, + kindLabel: "Plugin", + loadFunction, + moduleName: nameData.dashedName, + packageName: `@tsparticles/plugin-easing-${nameData.dashedName}`, + packageSuffix: `@tsparticles/plugin-easing-${nameData.dashedName}`, + registerName: nameData.dashedName, + rollupFactory: "loadParticlesPluginEasing", + rollupNameKey: "pluginName", + rollupNameValue: nameData.pascalName, + srcFiles: { + "src/index.ts": `import { type Engine } from "@tsparticles/engine"; + +declare const __VERSION__: string; + +const easingName = "${nameData.camelName}"; + +function easing(value: number): number { + return value; +} + +export async function ${loadFunction}(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(e => { + e.pluginManager.addEasing(easingName, easing); + }); +} +`, + "src/index.lazy.ts": getNoopLazyIndex(loadFunction), + "src/browser.ts": getBrowserFile(loadFunction), + }, + withBundleFile: false, + }; + } + + if (type === "export") { + const loadFunction = `loadExport${nameData.pascalName}Plugin`, + pluginClass = `${nameData.pascalName}ExportPlugin`; + + return { + description: getProjectDescription("export plugin", description), + fileName: `tsparticles.plugin.export.${nameData.camelName}.min.js`, + jsDelivrFileName: `tsparticles.plugin.export.${nameData.camelName}.min.js`, + kindLabel: "Plugin", + loadFunction, + moduleName: nameData.dashedName, + packageName: `@tsparticles/plugin-export-${nameData.dashedName}`, + packageSuffix: `@tsparticles/plugin-export-${nameData.dashedName}`, + registerName: nameData.camelName, + rollupFactory: "loadParticlesPluginExport", + rollupNameKey: "pluginName", + rollupNameValue: nameData.pascalName, + srcFiles: { + "src/ExportPlugin.ts": `import { type Container, type IContainerPlugin, type IPlugin, type ISourceOptions, type Options } from "@tsparticles/engine"; + +class ${nameData.pascalName}ExportPluginInstance implements IContainerPlugin { + constructor(private readonly _container: Container) {} + + get pluginContainer(): Container { + return this._container; + } + + draw(): void { + // TODO: export draw + } + + init(): void { + // TODO: export init + } + + particleBounce(): void { + // TODO: export bounce + } + + reset(): void { + // TODO: export reset + } + + stop(): void { + // TODO: export stop + } +} + +export class ${pluginClass} implements IPlugin { + readonly id = "export-${nameData.camelName}"; + + async getPlugin(container: Container): Promise { + return new ${nameData.pascalName}ExportPluginInstance(container); + } + + loadOptions(_container: Container, _options: Options, _source?: ISourceOptions): void { + // TODO: load export options + } + + needsPlugin(_options?: ISourceOptions): boolean { + return true; + } +} +`, + "src/index.ts": createGenericPluginIndex(loadFunction, pluginClass), + "src/index.lazy.ts": getNoopLazyIndex(loadFunction), + "src/browser.ts": getBrowserFile(loadFunction), + }, + withBundleFile: false, + }; + } + + const loadFunction = `load${nameData.pascalName}ColorPlugin`, + managerClass = `${nameData.pascalName}ColorManager`; + + return { + description: getProjectDescription("color manager plugin", description), + fileName: `tsparticles.plugin.${nameData.camelName}Color.min.js`, + jsDelivrFileName: `tsparticles.plugin.${nameData.camelName}Color.min.js`, + kindLabel: "Plugin", + loadFunction, + moduleName: `${nameData.camelName}Color`, + packageName: `@tsparticles/plugin-${nameData.dashedName}-color`, + packageSuffix: `@tsparticles/plugin-${nameData.dashedName}-color`, + registerName: nameData.dashedName, + rollupFactory: "loadParticlesPlugin", + rollupNameKey: "pluginName", + rollupNameValue: `${nameData.pascalName} Color`, + srcFiles: { + "src/ColorManager.ts": `import { type IColor, type IColorManager, type IRangeColor, type IRgb, type IRgba } from "@tsparticles/engine"; + +export class ${managerClass} implements IColorManager { + accepts(input: string): boolean { + return input.startsWith("${nameData.camelName}("); + } + + handleColor(_color: IColor): IRgb | undefined { + return undefined; + } + + handleRangeColor(_color: IRangeColor): IRgb | undefined { + return undefined; + } + + parseString(_input: string): IRgba | undefined { + return undefined; + } +} +`, + "src/index.ts": `import { type Engine } from "@tsparticles/engine"; +import { ${managerClass} } from "./ColorManager.js"; + +declare const __VERSION__: string; + +export async function ${loadFunction}(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(e => { + e.pluginManager.addColorManager("${nameData.camelName}", new ${managerClass}()); + }); +} +`, + "src/index.lazy.ts": getNoopLazyIndex(loadFunction), + "src/browser.ts": getBrowserFile(loadFunction), + }, + withBundleFile: false, + }; +} + +/** + * + * @param nameData + * @param description + */ +function createPresetConfig(nameData: INameData, description: string): IProjectConfig { + const loadFunction = `load${nameData.pascalName}Preset`; + + return { + description: getProjectDescription("preset", description), + fileName: `tsparticles.preset.${nameData.camelName}.min.js`, + jsDelivrFileName: `tsparticles.preset.${nameData.camelName}.min.js`, + kindLabel: "Preset", + loadFunction, + moduleName: nameData.dashedName, + packageName: `@tsparticles/preset-${nameData.dashedName}`, + packageSuffix: `@tsparticles/preset-${nameData.dashedName}`, + registerName: nameData.camelName, + rollupFactory: "loadParticlesPreset", + rollupNameKey: "presetName", + rollupNameValue: nameData.pascalName, + srcFiles: { + "src/options.ts": `import type { ISourceOptions } from "@tsparticles/engine"; + +export const options: ISourceOptions = { + // TODO: preset options +}; +`, + "src/index.ts": `import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +declare const __VERSION__: string; + +export async function ${loadFunction}(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(e => { + e.pluginManager.addPreset("${nameData.camelName}", options); + }); +} +`, + "src/index.lazy.ts": getNoopLazyIndex(loadFunction), + "src/browser.ts": getBrowserFile(loadFunction), + "src/bundle.ts": getBundleFile(loadFunction, false), + }, + withBundleFile: true, + }; +} + +/** + * + * @param nameData + * @param description + */ +function createShapeConfig(nameData: INameData, description: string): IProjectConfig { + const loadFunction = `load${nameData.pascalName}Shape`, + className = `${nameData.pascalName}ShapeDrawer`; + + return { + description: getProjectDescription("shape", description), + fileName: `tsparticles.shape.${nameData.camelName}.min.js`, + jsDelivrFileName: `tsparticles.shape.${nameData.camelName}.min.js`, + kindLabel: "Shape", + loadFunction, + moduleName: nameData.dashedName, + packageName: `@tsparticles/shape-${nameData.dashedName}`, + packageSuffix: `@tsparticles/shape-${nameData.dashedName}`, + registerName: nameData.camelName, + rollupFactory: "loadParticlesShape", + rollupNameKey: "shapeName", + rollupNameValue: nameData.pascalName, + srcFiles: { + "src/ShapeDrawer.ts": `import { type IShapeDrawData, type IShapeDrawer } from "@tsparticles/engine"; + +export class ${className} implements IShapeDrawer { + readonly validTypes = ["${nameData.camelName}"] as const; + + draw(_data: IShapeDrawData): void { + // TODO: draw shape + } +} +`, + "src/index.ts": `import { type Engine } from "@tsparticles/engine"; +import { ${className} } from "./ShapeDrawer.js"; + +declare const __VERSION__: string; + +export async function ${loadFunction}(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(e => { + e.pluginManager.addShape(["${nameData.camelName}"], () => { + return Promise.resolve(new ${className}()); + }); + }); +} +`, + "src/index.lazy.ts": getNoopLazyIndex(loadFunction), + "src/browser.ts": getBrowserFile(loadFunction), + }, + withBundleFile: false, + }; +} + +/** + * + * @param nameData + * @param description + */ +function createUpdaterConfig(nameData: INameData, description: string): IProjectConfig { + const loadFunction = `load${nameData.pascalName}Updater`, + className = `${nameData.pascalName}Updater`; + + return { + description: getProjectDescription("updater", description), + fileName: `tsparticles.updater.${nameData.camelName}.min.js`, + jsDelivrFileName: `tsparticles.updater.${nameData.camelName}.min.js`, + kindLabel: "Updater", + loadFunction, + moduleName: nameData.dashedName, + packageName: `@tsparticles/updater-${nameData.dashedName}`, + packageSuffix: `@tsparticles/updater-${nameData.dashedName}`, + registerName: nameData.camelName, + rollupFactory: "loadParticlesUpdater", + rollupNameKey: "updaterName", + rollupNameValue: nameData.pascalName, + srcFiles: { + "src/Updater.ts": `import { type IDelta, type IParticleUpdater, type Particle } from "@tsparticles/engine"; + +export class ${className} implements IParticleUpdater { + init(_particle: Particle): void { + // TODO: init updater + } + + isEnabled(_particle: Particle): boolean { + return true; + } + + update(_particle: Particle, _delta: IDelta): void { + // TODO: update particle + } +} +`, + "src/index.ts": `import { type Engine } from "@tsparticles/engine"; +import { ${className} } from "./Updater.js"; + +declare const __VERSION__: string; + +export async function ${loadFunction}(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(e => { + e.pluginManager.addParticleUpdater("${nameData.camelName}", () => { + return Promise.resolve(new ${className}()); + }); + }); +} +`, + "src/index.lazy.ts": getNoopLazyIndex(loadFunction), + "src/browser.ts": getBrowserFile(loadFunction), + }, + withBundleFile: false, + }; +} + +/** + * + * @param options + * @param nameData + */ +function resolveProjectConfig(options: ICreateProjectOptions, nameData: INameData): IProjectConfig { + switch (options.kind) { + case "bundle": + return createBundleConfig(nameData, options.description); + case "effect": + return createEffectConfig(nameData, options.description); + case "interaction": + return createInteractionConfig( + nameData, + options.description, + (options.type as InteractionType | undefined) ?? "generic", + ); + case "palette": + return createPaletteConfig(nameData, options.description); + case "path": + return createPathConfig(nameData, options.description); + case "plugin": + return createPluginConfig(nameData, options.description, (options.type as PluginType | undefined) ?? "generic"); + case "preset": + return createPresetConfig(nameData, options.description); + case "shape": + return createShapeConfig(nameData, options.description); + case "updater": + return createUpdaterConfig(nameData, options.description); + default: + throw new Error(`Unsupported kind: ${String(options.kind)}`); + } +} + +/** + * + * @param destination + * @param srcFiles + */ +async function writeSourceFiles(destination: string, srcFiles: Record): Promise { + for (const [filePath, content] of Object.entries(srcFiles)) { + const targetPath = path.join(destination, filePath), + folderPath = path.dirname(targetPath); + + await mkdir(folderPath, { recursive: true }); + await writeFile(targetPath, content); + } +} + +/** + * + * @param options + */ +export async function createProjectTemplate(options: ICreateProjectOptions): Promise { + const nameData = getNameData(options.name, options.destination), + config = resolveProjectConfig(options, nameData), + repoUrl = getRepoUrl(options.repositoryUrl, config.packageSuffix), + metadata: IProjectMetadata = { + description: config.description, + directory: nameData.folderName, + packageName: config.packageName, + repoUrl, + unpkgFileName: config.jsDelivrFileName, + }; + + await copyEmptyTemplateFiles(options.destination); + await writeSourceFiles(options.destination, config.srcFiles); + await writeFile(path.join(options.destination, "rollup.config.js"), getRollupConfig(config)); + await writeFile(path.join(options.destination, "README.md"), getReadme(config)); + await updatePackageFile(options.destination, metadata); + await updatePackageDistFile(options.destination, metadata); + + await runInstall(options.destination); + await runBuild(options.destination); +} diff --git a/cli/commands/create-utils/src/file-utils.ts b/cli/commands/create-utils/src/file-utils.ts new file mode 100644 index 00000000000..ec5a7a31d8b --- /dev/null +++ b/cli/commands/create-utils/src/file-utils.ts @@ -0,0 +1,102 @@ +import { mkdir, readFile, readdir, writeFile } from "node:fs/promises"; +import { exec } from "node:child_process"; +import { existsSync } from "node:fs"; +import { lookpath } from "lookpath"; +import path from "node:path"; + +const jsonIndentation = 2; + +export interface ReplaceTokensOptions { + path: string; + tokens: ReplaceTokensData[]; +} + +export interface ReplaceTokensData { + from: string | RegExp; + to: string; +} + +export type JsonUpdater = (data: T) => T; + +/** + * + * @param options - + */ +export async function replaceTokensInFiles(options: ReplaceTokensOptions[]): Promise { + for (const item of options) { + const filePath = item.path; + + let data = await readFile(filePath, "utf-8"); + + for (const token of item.tokens) { + const regex = token.from instanceof RegExp ? token.from : new RegExp(token.from, "g"); + + data = data.replace(regex, token.to); + } + + await writeFile(filePath, data); + } +} + +/** + * + * @param options - + */ +export async function replaceTokensInFile(options: ReplaceTokensOptions): Promise { + await replaceTokensInFiles([options]); +} + +/** + * Updates a JSON file preserving standard indentation. + * @param filePath - The JSON file path + * @param updater - The updater callback + */ +export async function updateJsonFile(filePath: string, updater: JsonUpdater): Promise { + const data = JSON.parse(await readFile(filePath, "utf-8")) as T, + updatedData = updater(data); + + await writeFile(filePath, `${JSON.stringify(updatedData, undefined, jsonIndentation)}\n`); +} + +/** + * + * @param destination - + * @returns the destination directory path + */ +export async function getDestinationDir(destination: string): Promise { + const destPath = path.join(process.cwd(), destination), + destExists = existsSync(destPath); + + if (destExists) { + const destContents = await readdir(destPath), + destContentsNoGit = destContents.filter(t => t !== ".git" && t !== ".gitignore"); + + if (destContentsNoGit.length) { + throw new Error("Destination folder already exists and is not empty"); + } + } + + await mkdir(destPath, { recursive: true }); + + return destPath; +} + +/** + * @returns the repository URL + */ +export async function getRepositoryUrl(): Promise { + if (!(await lookpath("git"))) { + return ""; + } + + return new Promise(resolve => { + exec("git config --get remote.origin.url", (error, stdout) => { + if (error) { + resolve(""); + return; + } + + resolve(stdout.trim()); + }); + }); +} diff --git a/cli/commands/create-utils/src/index.ts b/cli/commands/create-utils/src/index.ts new file mode 100644 index 00000000000..b123d74ac17 --- /dev/null +++ b/cli/commands/create-utils/src/index.ts @@ -0,0 +1,5 @@ +export * from "./create-project.js"; +export * from "./file-utils.js"; +export * from "./prompt-utils.js"; +export * from "./string-utils.js"; +export * from "./template-utils.js"; diff --git a/cli/commands/create-utils/src/prompt-utils.ts b/cli/commands/create-utils/src/prompt-utils.ts new file mode 100644 index 00000000000..2dfb36f6980 --- /dev/null +++ b/cli/commands/create-utils/src/prompt-utils.ts @@ -0,0 +1,89 @@ +import { getDestinationDir, getRepositoryUrl } from "./file-utils.js"; +import prompts, { type PromptObject } from "prompts"; +import { capitalize } from "./string-utils.js"; +import path from "node:path"; + +export interface ISelectChoice { + title: string; + value: T; +} + +export interface IProjectPromptOptions { + destination: string; + nameLabel: string; + select?: { + choices: ISelectChoice[]; + initial: T; + message: string; + name: string; + }; +} + +export interface IProjectPromptResult { + description: string; + destinationPath: string; + name: string; + repositoryUrl: string; + type: T | undefined; +} + +/** + * Prompts for common project creation data. + * @param options - Prompt options + * @returns Prompt result with normalized values + */ +export async function promptProjectData( + options: IProjectPromptOptions, +): Promise> { + const destinationPath = await getDestinationDir(options.destination), + repositoryUrl = await getRepositoryUrl(), + initialName = destinationPath.split(path.sep).pop() ?? "", + questions: PromptObject[] = [ + { + type: "text", + name: "name", + message: `What is the name of the ${options.nameLabel}?`, + validate: (value: string) => (value ? true : "The name can't be empty"), + initial: initialName, + }, + { + type: "text", + name: "description", + message: `What is the description of the ${options.nameLabel}?`, + validate: (value: string) => (value ? true : "The description can't be empty"), + initial: capitalize(initialName), + }, + { + initial: repositoryUrl, + message: "What is the repository URL? (optional)", + name: "repositoryUrl", + type: "text", + }, + ]; + + if (options.select) { + questions.push({ + type: "select", + name: options.select.name, + message: options.select.message, + choices: options.select.choices, + initial: options.select.choices.findIndex(t => t.value === options.select?.initial), + }); + } + + const answers = (await prompts(questions)) as { + [key: string]: unknown; + description: string; + name: string; + repositoryUrl: string; + }, + type = options.select ? (answers[options.select.name] as T | undefined) : undefined; + + return { + description: answers.description.trim(), + destinationPath, + name: answers.name.trim(), + repositoryUrl: answers.repositoryUrl.trim(), + type, + }; +} diff --git a/cli/commands/create-utils/src/string-utils.ts b/cli/commands/create-utils/src/string-utils.ts new file mode 100644 index 00000000000..0424a3f1f7a --- /dev/null +++ b/cli/commands/create-utils/src/string-utils.ts @@ -0,0 +1,41 @@ +/** + * This function is used to capitalize a string. + * @param str - the string to capitalize (e.g. "my-string" -\> "MyString") + * @param splits - the characters used to split the string, if not provided the string will be considered a single word + * @returns the capitalized string + */ +export function capitalize(str: string, ...splits: string[]): string { + let res = str.replace(/./, c => c.toUpperCase()); + + for (const split of splits) { + res = res + .split(split) + .map(w => w.replace(/./, c => c.toUpperCase())) + .join(""); + } + + return res; +} + +/** + * This function is used to camelcase a string. + * @param str - the string to camelcase (e.g. "my-string" -\> "myString") + * @param splits - the characters used to split the string, if not provided the string will be considered a single word + * @returns the camelized string + */ +export function camelize(str: string, ...splits: string[]): string { + return capitalize(str, ...splits).replace(/./, c => c.toLowerCase()); +} + +/** + * This function is used to dash a string. + * @param str - the string to dash (e.g. "myString" -\> "my-string") + * @returns the dashed string + */ +export function dash(str: string): string { + const index = 0, + dashed = str.replace(/([A-Z])/g, g => `-${g[index]?.toLowerCase() ?? ""}`), + startPos = 1; + + return dashed.startsWith("-") ? dashed.substring(startPos) : dashed; +} diff --git a/cli/commands/create-utils/src/template-utils.ts b/cli/commands/create-utils/src/template-utils.ts new file mode 100644 index 00000000000..7984d0e9f91 --- /dev/null +++ b/cli/commands/create-utils/src/template-utils.ts @@ -0,0 +1,170 @@ +import * as childProcess from "node:child_process"; +import * as fsPromises from "node:fs/promises"; +import { replaceTokensInFile, updateJsonFile } from "./file-utils.js"; +import { lookpath } from "lookpath"; +import path from "node:path"; + +export interface IProjectMetadata { + description: string; + directory: string; + packageName: string; + repoUrl: string; + unpkgFileName: string; +} + +/** + * Updates the package.json file + * @param destPath - The path where the package.json file is located + * @param metadata - The project metadata used for updates + */ +export async function updatePackageFile(destPath: string, metadata: IProjectMetadata): Promise { + await updateJsonFile>(path.join(destPath, "package.json"), data => { + const publishConfig = (data["publishConfig"] ?? {}) as Record; + + return { + ...data, + name: metadata.packageName, + description: metadata.description, + repository: { + type: "git", + url: `git+${metadata.repoUrl}`, + directory: metadata.directory, + }, + bugs: { + url: metadata.repoUrl.replace(/\.git$/, "/issues"), + }, + publishConfig: { + ...publishConfig, + access: "public", + }, + private: undefined, + }; + }); + + await replaceTokensInFile({ + path: path.join(destPath, "package.json"), + tokens: [ + { + from: /"tsparticles.empty.template.min.js"/g, + to: `"${metadata.unpkgFileName}"`, + }, + ], + }); +} + +/** + * Updates the package.dist.json file with the new project name and description + * @param destPath - The path where the package.dist.json file is located + * @param metadata - The project metadata used for updates + */ +export async function updatePackageDistFile(destPath: string, metadata: IProjectMetadata): Promise { + await updateJsonFile>(path.join(destPath, "package.dist.json"), data => { + const publishConfig = (data["publishConfig"] ?? {}) as Record; + + return { + ...data, + name: metadata.packageName, + description: metadata.description, + repository: { + type: "git", + url: `git+${metadata.repoUrl}`, + directory: metadata.directory, + }, + bugs: { + url: metadata.repoUrl.replace(/\.git$/, "/issues"), + }, + publishConfig: { + ...publishConfig, + access: "public", + }, + private: undefined, + }; + }); + + await replaceTokensInFile({ + path: path.join(destPath, "package.dist.json"), + tokens: [ + { + from: /"tsparticles.empty.template.min.js"/g, + to: `"${metadata.unpkgFileName}"`, + }, + ], + }); +} + +/** + * Copies the empty template files to the destination path + * @param destPath - The path where the project will be created + */ +export async function copyEmptyTemplateFiles(destPath: string): Promise { + await fsPromises.cp(path.join(__dirname, "..", "files", "empty-project"), destPath, { + recursive: true, + force: true, + filter: copyFilter, + }); +} + +/** + * Filters the files to copy + * @param src - The source file path + * @returns true if the file should be copied + */ +export function copyFilter(src: string): boolean { + return !(src.endsWith("node_modules") || src.endsWith("dist")); +} + +/** + * Runs npm install in the given path + * @param destPath - The path where the project will be created + */ +export async function runInstall(destPath: string): Promise { + if (!(await lookpath("npm"))) { + return; + } + + return new Promise((resolve, reject) => { + childProcess.exec( + "npm install", + { + cwd: destPath, + }, + error => { + if (error) { + reject(error); + + return; + } + + resolve(); + }, + ); + }); +} + +/** + * Runs npm run build in the given path + * @param destPath - The path where the project will be build + */ +export async function runBuild(destPath: string): Promise { + if (!(await lookpath("npm"))) { + return; + } + + return new Promise((resolve, reject) => { + childProcess.exec( + "npm run build", + { + cwd: destPath, + }, + error => { + if (error) { + reject(error); + + return; + } + + resolve(); + }, + ); + }); +} diff --git a/cli/commands/create-utils/src/tsconfig.json b/cli/commands/create-utils/src/tsconfig.json new file mode 100644 index 00000000000..a86b208cb31 --- /dev/null +++ b/cli/commands/create-utils/src/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "rootDir": ".", + "outDir": "../dist" + }, + "references": [{ "path": "../" }], + "include": ["**/*"] +} diff --git a/cli/commands/create-utils/tests/.gitignore b/cli/commands/create-utils/tests/.gitignore new file mode 100644 index 00000000000..049ddcb6d6f --- /dev/null +++ b/cli/commands/create-utils/tests/.gitignore @@ -0,0 +1 @@ +tmp-files diff --git a/cli/commands/create-utils/tests/file-utils.test.ts b/cli/commands/create-utils/tests/file-utils.test.ts new file mode 100644 index 00000000000..53d99cf13ea --- /dev/null +++ b/cli/commands/create-utils/tests/file-utils.test.ts @@ -0,0 +1,109 @@ +import { afterAll, describe, it, expect } from "vitest"; +import { + getDestinationDir, + getRepositoryUrl, + replaceTokensInFile, + replaceTokensInFiles, +} from "../src"; +import { mkdir, readFile, rm, writeFile } from "node:fs/promises"; +import path from "node:path"; + +describe("file-utils", async () => { + const baseDir = path.resolve("tmp-files"); + + await mkdir(baseDir, { recursive: true }); + + describe("replace tokens in files", async () => { + await writeFile(path.join(baseDir, "files1.txt"), "test"); + await writeFile(path.join(baseDir, "files2.txt"), "test"); + + await replaceTokensInFiles([ + { + path: path.join(baseDir, "files1.txt"), + tokens: [ + { + from: "test", + to: "test1", + }, + ], + }, + { + path: path.join(baseDir, "files2.txt"), + tokens: [ + { + from: "test", + to: "test2", + }, + ], + }, + ]); + + it("should replace tokens in files", async () => { + const data1 = await readFile(path.join(baseDir, "files1.txt"), "utf8"), + data2 = await readFile(path.join(baseDir, "files2.txt"), "utf8"); + + expect(data1).toBe("test1"); + expect(data2).toBe("test2"); + }); + }); + + describe("replace tokens in file", async () => { + await writeFile(path.join(baseDir, "file1.txt"), "test"); + + await replaceTokensInFile({ + path: path.join(baseDir, "file1.txt"), + tokens: [ + { + from: "test", + to: "test1", + }, + ], + }); + + it("should replace tokens in files", async () => { + const data = await readFile(path.join(baseDir, "file1.txt"), "utf8"); + + expect(data).toBe("test1"); + }); + }); + + describe("get destination dir", async () => { + const destDir = await getDestinationDir(path.join("tmp-files", "baz")); + + it("should return the destination dir", () => { + expect(destDir).toBe(path.join(baseDir, "baz")); + }); + + it("should return the destination dir", async () => { + const destDir2 = await getDestinationDir(path.join("tmp-files", "baz")); + + expect(destDir2).toBe(path.join(baseDir, "baz")); + }); + + it("should throw exception", async () => { + await writeFile(path.join(baseDir, "baz", "tmp.txt"), ""); + + let ex = false; + + try { + await getDestinationDir(path.join("tmp-files", "baz")); + + console.log("never"); + } catch { + ex = true; + } + + expect(ex).toBe(true); + }); + }); + + describe("get repository url", () => { + it("should return the repository url", async () => { + expect(await getRepositoryUrl()).not.toBe(""); + }); + }); + + afterAll(async () => { + await rm(baseDir, { recursive: true, force: true }); + }); +}); diff --git a/cli/commands/create-utils/tests/string-utils.test.ts b/cli/commands/create-utils/tests/string-utils.test.ts new file mode 100644 index 00000000000..2c4d02f26a9 --- /dev/null +++ b/cli/commands/create-utils/tests/string-utils.test.ts @@ -0,0 +1,130 @@ +import { describe, it, expect } from "vitest"; +import { camelize, capitalize, dash } from "../src"; + +describe("capitalize", () => { + describe("empty string", () => { + it("should successfully compare empty strings", () => { + expect(capitalize("")).toBe(""); + }); + }); + + describe("lowercase string", () => { + it("should return capitalized string", () => { + expect(capitalize("test")).toBe("Test"); + }); + }); + + describe("capitalized string", () => { + it("should return capitalized string", () => { + expect(capitalize("Test")).toBe("Test"); + }); + }); + + describe("multiple lowercase words string", () => { + it("should return capitalized string, no split", () => { + expect(capitalize("test test")).toBe("Test test"); + }); + + it("should return capitalized string, split", () => { + expect(capitalize("test test", " ")).toBe("TestTest"); + }); + + it("should return capitalized string, wrong split", () => { + expect(capitalize("test test", ";")).toBe("Test test"); + }); + }); + + describe("multiple uppercase words string", () => { + it("should return capitalized string, no split", () => { + expect(capitalize("Test Test")).toBe("Test Test"); + }); + + it("should return capitalized string, split", () => { + expect(capitalize("Test Test", " ")).toBe("TestTest"); + }); + + it("should return capitalized string, wrong split", () => { + expect(capitalize("Test Test", ";")).toBe("Test Test"); + }); + }); +}); + +describe("camelize", () => { + describe("empty string", () => { + it("should successfully compare empty strings", () => { + expect(camelize("")).toBe(""); + }); + }); + + describe("lowercase string", () => { + it("should return camelized string", () => { + expect(camelize("test")).toBe("test"); + }); + }); + + describe("uppercase string", () => { + it("should return camelized string", () => { + expect(camelize("Test")).toBe("test"); + }); + }); + + describe("multiple lowercase words string", () => { + it("should return camelized string, no split", () => { + expect(camelize("test test")).toBe("test test"); + }); + + it("should return camelized string, split", () => { + expect(camelize("test test", " ")).toBe("testTest"); + }); + + it("should return camelized string, wrong split", () => { + expect(camelize("test test", ";")).toBe("test test"); + }); + }); + + describe("multiple uppercase words string", () => { + it("should return camelized string, no split", () => { + expect(camelize("Test Test")).toBe("test Test"); + }); + + it("should return camelized string, split", () => { + expect(camelize("Test Test", " ")).toBe("testTest"); + }); + + it("should return camelized string, wrong split", () => { + expect(camelize("Test Test", ";")).toBe("test Test"); + }); + }); +}); + +describe("dash", () => { + describe("empty string", () => { + it("should successfully compare empty strings", () => { + expect(dash("")).toBe(""); + }); + }); + + describe("lowercase string", () => { + it("should return dashed string", () => { + expect(dash("test")).toBe("test"); + }); + }); + + describe("uppercase string", () => { + it("should return dashed string", () => { + expect(dash("Test")).toBe("test"); + }); + }); + + describe("capitalized word string", () => { + it("should return dashed string", () => { + expect(dash("TestTest")).toBe("test-test"); + }); + }); + + describe("camelized word string", () => { + it("should return dashed string", () => { + expect(dash("testTest")).toBe("test-test"); + }); + }); +}); diff --git a/cli/commands/create-utils/tests/tsconfig.json b/cli/commands/create-utils/tests/tsconfig.json new file mode 100644 index 00000000000..aa0fb5c6317 --- /dev/null +++ b/cli/commands/create-utils/tests/tsconfig.json @@ -0,0 +1,15 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "rootDir": ".", + "target": "ES2021", + "types": ["node", "vitest"], + "allowJs": true, + "declaration": false, + "removeComments": true, + "importHelpers": false, + "esModuleInterop": true + }, + "references": [{ "path": "../src" }], + "include": ["**/*.ts"] +} diff --git a/cli/commands/create-utils/tsconfig.json b/cli/commands/create-utils/tsconfig.json new file mode 100644 index 00000000000..714efda86b6 --- /dev/null +++ b/cli/commands/create-utils/tsconfig.json @@ -0,0 +1,53 @@ +{ + "compilerOptions": { + "rootDir": ".", + "outDir": ".", + "resolveJsonModule": true, + "composite": true, + "target": "ESNext", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "lib": [ + "ESNext", + "ES2024", + "ES2023", + "ES2022", + "ES2021", + "ES2020", + "ES2019", + "ES2018", + "ES2017", + "ES2016", + "ES2015" + ], + "types": [ + "node", + "klaw", + "prompts", + "eslint" + ], + "strict": true, + "noImplicitAny": true, + "strictNullChecks": true, + "strictFunctionTypes": true, + "strictBindCallApply": true, + "strictPropertyInitialization": true, + "noImplicitThis": true, + "useUnknownInCatchVariables": true, + "alwaysStrict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "exactOptionalPropertyTypes": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedIndexedAccess": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "allowSyntheticDefaultImports": true + }, + "include": [ + "src/**/*" + ] +} diff --git a/cli/commands/create-utils/vitest.config.ts b/cli/commands/create-utils/vitest.config.ts new file mode 100644 index 00000000000..a9402f52831 --- /dev/null +++ b/cli/commands/create-utils/vitest.config.ts @@ -0,0 +1,11 @@ +import { defineConfig } from "vitest/config"; + +export default defineConfig({ + test: { + globals: true, + environment: "node", + include: ["tests/**/*.test.ts"], + testTimeout: 5 * 60 * 1000 + } +}); + diff --git a/cli/commands/create/.dependency-cruiser.cjs b/cli/commands/create/.dependency-cruiser.cjs new file mode 100644 index 00000000000..93e0d55a39d --- /dev/null +++ b/cli/commands/create/.dependency-cruiser.cjs @@ -0,0 +1,382 @@ +/** @type {import('dependency-cruiser').IConfiguration} */ +module.exports = { + forbidden: [ + { + name: 'no-circular', + severity: 'warn', + comment: + "This dependency is part of a circular relationship. You might want to revise " + + "your solution (i.e. use dependency inversion, make sure the modules have a single responsibility) ", + from: {}, + to: { + circular: true + } + }, + { + name: 'no-orphans', + comment: + "This is an orphan module - it's likely not used (anymore?). Either use it or " + + "remove it. If it's logical this module is an orphan (i.e. it's a config file), " + + "add an exception for it in your dependency-cruiser configuration. By default " + + "this rule does not scrutinize dot-files (e.g. .eslintrc.js), TypeScript declaration " + + "files (.d.ts), tsconfig.json and some of the babel and webpack configs.", + severity: 'warn', + from: { + orphan: true, + pathNot: [ + '(^|/)[.][^/]+[.](?:js|cjs|mjs|ts|cts|mts|json)$', // dot files + '[.]d[.]ts$', // TypeScript declaration files + '(^|/)tsconfig[.]json$', // TypeScript config + '(^|/)(?:babel|webpack)[.]config[.](?:js|cjs|mjs|ts|cts|mts|json)$' // other configs + ] + }, + to: {}, + }, + { + name: 'no-deprecated-core', + comment: + 'A module depends on a node core module that has been deprecated. Find an alternative - these are ' + + "bound to exist - node doesn't deprecate lightly.", + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'core' + ], + path: [ + '^v8/tools/codemap$', + '^v8/tools/consarray$', + '^v8/tools/csvparser$', + '^v8/tools/logreader$', + '^v8/tools/profile_view$', + '^v8/tools/profile$', + '^v8/tools/SourceMap$', + '^v8/tools/splaytree$', + '^v8/tools/tickprocessor-driver$', + '^v8/tools/tickprocessor$', + '^node-inspect/lib/_inspect$', + '^node-inspect/lib/internal/inspect_client$', + '^node-inspect/lib/internal/inspect_repl$', + '^async_hooks$', + '^punycode$', + '^domain$', + '^constants$', + '^sys$', + '^_linklist$', + '^_stream_wrap$' + ], + } + }, + { + name: 'not-to-deprecated', + comment: + 'This module uses a (version of an) npm module that has been deprecated. Either upgrade to a later ' + + 'version of that module, or find an alternative. Deprecated modules are a security risk.', + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'deprecated' + ] + } + }, + { + name: 'no-non-package-json', + severity: 'error', + comment: + "This module depends on an npm package that isn't in the 'dependencies' section of your package.json. " + + "That's problematic as the package either (1) won't be available on live (2 - worse) will be " + + "available on live with an non-guaranteed version. Fix it by adding the package to the dependencies " + + "in your package.json.", + from: {}, + to: { + dependencyTypes: [ + 'npm-no-pkg', + 'npm-unknown' + ] + } + }, + { + name: 'not-to-unresolvable', + comment: + "This module depends on a module that cannot be found ('resolved to disk'). If it's an npm " + + 'module: add it to your package.json. In all other cases you likely already know what to do.', + severity: 'error', + from: {}, + to: { + couldNotResolve: true + } + }, + { + name: 'no-duplicate-dep-types', + comment: + "Likely this module depends on an external ('npm') package that occurs more than once " + + "in your package.json i.e. bot as a devDependencies and in dependencies. This will cause " + + "maintenance problems later on.", + severity: 'warn', + from: {}, + to: { + moreThanOneDependencyType: true, + // as it's common to use a devDependency for type-only imports: don't + // consider type-only dependencyTypes for this rule + dependencyTypesNot: ["type-only"] + } + }, + + // rules you might want to tweak for your specific situation: + { + name: 'not-to-test', + comment: + "This module depends on code within a folder that should only contain tests. As tests don't " + + "implement functionality this is odd. Either you're writing a test outside the test folder " + + "or there's something in the test folder that isn't a test.", + severity: 'error', + from: { + pathNot: '^(tests)' + }, + to: { + path: '^(tests)' + } + }, + { + name: 'not-to-spec', + comment: + 'This module depends on a spec (test) file. The responsibility of a spec file is to test code. ' + + "If there's something in a spec that's of use to other modules, it doesn't have that single " + + 'responsibility anymore. Factor it out into (e.g.) a separate utility/ helper or a mock.', + severity: 'error', + from: {}, + to: { + path: '[.](?:spec|test)[.](?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$' + } + }, + { + name: 'not-to-dev-dep', + severity: 'error', + comment: + "This module depends on an npm package from the 'devDependencies' section of your " + + 'package.json. It looks like something that ships to production, though. To prevent problems ' + + "with npm packages that aren't there on production declare it (only!) in the 'dependencies'" + + 'section of your package.json. If this module is development only - add it to the ' + + 'from.pathNot re of the not-to-dev-dep rule in the dependency-cruiser configuration', + from: { + path: '^(src)', + pathNot: '[.](?:spec|test)[.](?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$' + }, + to: { + dependencyTypes: [ + 'npm-dev', + ], + // type only dependencies are not a problem as they don't end up in the + // production code or are ignored by the runtime. + dependencyTypesNot: [ + 'type-only' + ], + pathNot: [ + 'node_modules/@types/' + ] + } + }, + { + name: 'optional-deps-used', + severity: 'info', + comment: + "This module depends on an npm package that is declared as an optional dependency " + + "in your package.json. As this makes sense in limited situations only, it's flagged here. " + + "If you use an optional dependency here by design - add an exception to your" + + "dependency-cruiser configuration.", + from: {}, + to: { + dependencyTypes: [ + 'npm-optional' + ] + } + }, + { + name: 'peer-deps-used', + comment: + "This module depends on an npm package that is declared as a peer dependency " + + "in your package.json. This makes sense if your package is e.g. a plugin, but in " + + "other cases - maybe not so much. If the use of a peer dependency is intentional " + + "add an exception to your dependency-cruiser configuration.", + severity: 'warn', + from: {}, + to: { + dependencyTypes: [ + 'npm-peer' + ] + } + } + ], + options: { + // Which modules not to follow further when encountered + doNotFollow: { + // path: an array of regular expressions in strings to match against + path: ['node_modules'] + }, + + // Which modules to exclude + // exclude : { + // // path: an array of regular expressions in strings to match against + // path: '', + // }, + + // Which modules to exclusively include (array of regular expressions in strings) + // dependency-cruiser will skip everything that doesn't match this pattern + // includeOnly : [''], + + // List of module systems to cruise. + // When left out dependency-cruiser will fall back to the list of _all_ + // module systems it knows of ('amd', 'cjs', 'es6', 'tsd']). It's the + // default because it's the safe option. It comes at a performance penalty, though + // As in practice only commonjs ('cjs') and ecmascript modules ('es6') + // are in wide use, you can limit the moduleSystems to those. + // moduleSystems: ['cjs', 'es6'], + + // false: don't look at JSDoc imports (the default) + // true: detect dependencies in JSDoc-style import statements. + // Implies parser: 'tsc', which a.o. means the typescript compiler will need + // to be installed in the same spot you run dependency-cruiser from. + // detectJSDocImports: true, + + // false: don't look at process.getBuiltinModule calls (the default) + // true: dependency-cruiser will detect calls to process.getBuiltinModule/ + // globalThis.process.getBuiltinModule as imports. + // detectProcessBuiltinModuleCalls: true, + + // prefix for links in html, d2, mermaid and dot/ svg output (e.g. 'https://github.com/you/yourrepo/blob/main/' + // to open it on your online repo or `vscode://file/${process.cwd()}/` to + // open it in visual studio code), + // prefix: `vscode://file/${process.cwd()}/`, + + // suffix for links in output. E.g. put .html here if you use it to link to + // your coverage reports. + // suffix: '.html', + + // false (the default): ignore dependencies that only exist before typescript-to-javascript compilation + // true: also detect dependencies that only exist before typescript-to-javascript compilation + // 'specify': for each dependency identify whether it only exists before compilation or also after + // tsPreCompilationDeps: false, + + // list of extensions to scan that aren't javascript or compile-to-javascript. + // Empty by default. Only put extensions in here that you want to take into + // account that are _not_ parsable. + // extraExtensionsToScan: ['.json', '.jpg', '.png', '.svg', '.webp'], + + // if true combines the package.jsons found from the module up to the base + // folder the cruise is initiated from. Useful for how (some) mono-repos + // manage dependencies & dependency definitions. + // combinedDependencies: false, + + // if true leave symlinks untouched, otherwise use the realpath + // preserveSymlinks: false, + + // TypeScript project file ('tsconfig.json') to use for + // (1) compilation and + // (2) resolution (e.g. with the paths property) + // + // The (optional) fileName attribute specifies which file to take (relative to + // dependency-cruiser's current working directory). When not provided + // defaults to './tsconfig.json'. + tsConfig: { + fileName: 'src/tsconfig.json' + }, + + // Webpack configuration to use to get resolve options from. + // + // The (optional) fileName attribute specifies which file to take (relative + // to dependency-cruiser's current working directory. When not provided defaults + // to './webpack.conf.js'. + // + // The (optional) 'env' and 'arguments' attributes contain the parameters + // to be passed if your webpack config is a function and takes them (see + // webpack documentation for details) + // webpackConfig: { + // fileName: 'webpack.config.js', + // env: {}, + // arguments: {} + // }, + + // Babel config ('.babelrc', '.babelrc.json', '.babelrc.json5', ...) to use + // for compilation + // babelConfig: { + // fileName: '.babelrc', + // }, + + // List of strings you have in use in addition to cjs/ es6 requires + // & imports to declare module dependencies. Use this e.g. if you've + // re-declared require, use a require-wrapper or use window.require as + // a hack. + // exoticRequireStrings: [], + + // options to pass on to enhanced-resolve, the package dependency-cruiser + // uses to resolve module references to disk. The values below should be + // suitable for most situations + // + // If you use webpack: you can also set these in webpack.conf.js. The set + // there will override the ones specified here. + enhancedResolveOptions: { + // What to consider as an 'exports' field in package.jsons + exportsFields: ['exports'], + + // List of conditions to check for in the exports field. + // Only works when the 'exportsFields' array is non-empty. + conditionNames: ['import', 'require', 'node', 'default', 'types'], + + // The extensions, by default are the same as the ones dependency-cruiser + // can access (run `npx depcruise --info` to see which ones that are in + // _your_ environment). If that list is larger than you need you can pass + // the extensions you actually use (e.g. ['.js', '.jsx']). This can speed + // up module resolution, which is the most expensive step. + // extensions: [".js", ".jsx", ".ts", ".tsx", ".d.ts"], + + // What to consider a 'main' field in package.json + mainFields: ["module", "main", "types", "typings"], + + // A list of alias fields in package.jsons + // See https://github.com/defunctzombie/package-browser-field-spec and + // the webpack [resolve.alias](https://webpack.js.org/configuration/resolve/#resolvealiasfields) + // documentation. + // Defaults to an empty array (= don't use alias fields). + // aliasFields: ['browser'], + }, + + // skipAnalysisNotInRules will make dependency-cruiser execute + // analysis strictly necessary for checking the rule set only. + // See https://github.com/sverweij/dependency-cruiser/blob/main/doc/options-reference.md#skipanalysisnotinrules + skipAnalysisNotInRules: true, + + reporterOptions: { + dot: { + // Pattern of modules to consolidate to. The default pattern in this configuration + // collapses everything in node_modules to one folder deep so you see + // the external modules, but not their innards. + collapsePattern: 'node_modules/(?:@[^/]+/[^/]+|[^/]+)', + + // Options to tweak the appearance of your graph. See + // https://github.com/sverweij/dependency-cruiser/blob/main/doc/options-reference.md#reporteroptions + // If you don't specify a theme dependency-cruiser falls back to a built-in one. + // theme: { + // graph: { + // // splines: 'ortho' - straight lines; slow on big graphs + // // splines: 'true' - bezier curves; fast but not as nice as ortho + // splines: 'true' + // }, + // }, + }, + archi: { + // Pattern of modules to consolidate to. + collapsePattern: '^(?:packages|src|lib(s?)|app(s?)|bin|test(s?)|spec(s?))/[^/]+|node_modules/(?:@[^/]+/[^/]+|[^/]+)', + + // Options to tweak the appearance of your graph. If you don't specify a + // theme for 'archi' dependency-cruiser will use the one specified in the + // dot section above and otherwise use the default one. + // theme: { }, + }, + text: { + highlightFocused: true + }, + } + } +}; +// generated: dependency-cruiser@17.3.7 on 2026-01-28T14:30:16.611Z diff --git a/cli/commands/create/CHANGELOG.md b/cli/commands/create/CHANGELOG.md new file mode 100644 index 00000000000..07af37a0cfe --- /dev/null +++ b/cli/commands/create/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/cli-command-create diff --git a/cli/commands/create/README.md b/cli/commands/create/README.md new file mode 100644 index 00000000000..917b19119ee --- /dev/null +++ b/cli/commands/create/README.md @@ -0,0 +1,147 @@ +[![banner](https://particles.js.org/images/banner2.png)](https://particles.js.org) + +# tsParticles CLI + +## Installation + +### NPM + +```bash +npm install -g @tsparticles/cli-create +``` + +### Yarn + +```bash +yarn global add @tsparticles/cli-create +``` + +### PNPM + +```bash +pnpm global add @tsparticles/cli-create +``` + +## Usage + +### Help + +```bash +npx @tsparticles/cli-create --help +``` + +or + +```bash +tsparticles-create --help +``` + +### Create + +#### Bundle + +```bash +npx @tsparticles/cli-create bundle +``` + +or + +```bash +tsparticles-create bundle +``` + +#### Effect + +```bash +npx @tsparticles/cli-create effect +``` + +or + +```bash +tsparticles-create effect +``` + +#### Interaction + +```bash +npx @tsparticles/cli-create interaction +``` + +or + +```bash +tsparticles-create interaction +``` + +#### Palette + +```bash +npx @tsparticles/cli-create palette +``` + +or + +```bash +tsparticles-create palette +``` + +#### Path + +```bash +npx @tsparticles/cli-create path +``` + +or + +```bash +tsparticles-create path +``` + +#### Plugin + +```bash +npx @tsparticles/cli-create plugin +``` + +or + +```bash +tsparticles-create plugin +``` + +#### Preset + +```bash +npx @tsparticles/cli-create preset +``` + +or + +```bash +tsparticles-create preset +``` + +#### Shape + +```bash +npx @tsparticles/cli-create shape +``` + +or + +```bash +tsparticles-create shape +``` + +#### Updater + +```bash +npx @tsparticles/cli-create updater +``` + +or + +```bash +tsparticles-create updater +``` diff --git a/cli/commands/create/eslint.config.js b/cli/commands/create/eslint.config.js new file mode 100644 index 00000000000..7dc85e779b6 --- /dev/null +++ b/cli/commands/create/eslint.config.js @@ -0,0 +1,22 @@ +import path from "path"; +import {fileURLToPath} from "url"; +import {defineConfig} from "eslint/config"; +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default defineConfig([ + tsParticlesESLintConfig, + { + languageOptions: { + parserOptions: { + project: [path.join(__dirname, "src", "tsconfig.json")], + tsconfigRootDir: __dirname, + sourceType: "module" + } + }, + rules: { + "no-console": "off" + } + } +]); diff --git a/cli/commands/create/files/create-plugin/README.md b/cli/commands/create/files/create-plugin/README.md new file mode 100644 index 00000000000..bc0dd347042 --- /dev/null +++ b/cli/commands/create/files/create-plugin/README.md @@ -0,0 +1,74 @@ +[![banner](https://particles.js.org/images/banner2.png)](https://particles.js.org) + +# tsParticles Template Plugin + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/tsparticles-plugin-template/badge)](https://www.jsdelivr.com/package/npm/tsparticles-plugin-template) +[![npmjs](https://badge.fury.io/js/tsparticles-plugin-template.svg)](https://www.npmjs.com/package/tsparticles-plugin-template) +[![npmjs](https://img.shields.io/npm/dt/tsparticles-plugin-template)](https://www.npmjs.com/package/tsparticles-plugin-template) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/matteobruni/tsparticles) plugin for particles template. + +## How to use it + +### CDN / Vanilla JS / jQuery + +The CDN/Vanilla version JS has one required file in vanilla configuration: + +Including the `tsparticles.plugin.template.min.js` file will export the function to load the plugin: + +```javascript +loadTemplatePlugin; +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` and the plugin like this: + +```javascript +(async () => { + await loadTemplatePlugin(tsParticles); + + await tsParticles.load({ + id: "tsparticles", + options: { + /* options */ + }, + }); +})(); +``` + +### ESM / CommonJS + +This package is compatible also with ES or CommonJS modules, firstly this needs to be installed, like this: + +```shell +$ npm install tsparticles-plugin-template +``` + +or + +```shell +$ yarn add tsparticles-plugin-template +``` + +Then you need to import it in the app, like this: + +```javascript +const { tsParticles } = require("@tsparticles/engine"); +const { loadTemplatePlugin } = require("tsparticles-plugin-template"); + +(async () => { + await loadTemplatePlugin(tsParticles); +})(); +``` + +or + +```javascript +import { tsParticles } from "@tsparticles/engine"; +import { loadTemplatePlugin } from "tsparticles-plugin-template"; + +(async () => { + await loadTemplatePlugin(tsParticles); +})(); +``` diff --git a/cli/commands/create/files/create-plugin/src/PluginInstance.ts b/cli/commands/create/files/create-plugin/src/PluginInstance.ts new file mode 100644 index 00000000000..9572b6ddf4a --- /dev/null +++ b/cli/commands/create/files/create-plugin/src/PluginInstance.ts @@ -0,0 +1,18 @@ +import { /*type Container, type Engine,*/ type IContainerPlugin } from "@tsparticles/engine"; + +export class PluginInstance implements IContainerPlugin { + /* + private readonly _container; + private readonly _engine; + + constructor(container: Container, engine: Engine) { + /*this._container = container; + this._engine = engine; + } + */ + + async init(): Promise { + // add your plugin initialization here, replace the empty promise + return await Promise.resolve(); + } +} diff --git a/cli/commands/create/files/create-plugin/src/browser.ts b/cli/commands/create/files/create-plugin/src/browser.ts new file mode 100644 index 00000000000..068f16b7d5a --- /dev/null +++ b/cli/commands/create/files/create-plugin/src/browser.ts @@ -0,0 +1,10 @@ +import { loadTemplatePlugin } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadTemplatePlugin?: typeof loadTemplatePlugin; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadTemplatePlugin = loadTemplatePlugin; + +export * from "./index.js"; diff --git a/cli/commands/create/files/create-plugin/src/index.lazy.ts b/cli/commands/create/files/create-plugin/src/index.lazy.ts new file mode 100644 index 00000000000..64ecdf711ee --- /dev/null +++ b/cli/commands/create/files/create-plugin/src/index.lazy.ts @@ -0,0 +1,10 @@ +import type { Engine } from "@tsparticles/engine"; + +/** + * @param engine - The engine instance + */ +export async function loadTemplatePlugin(engine: Engine): Promise { + const { Plugin } = await import("./plugin.js"); + + await engine.addPlugin(new Plugin(/*engine*/)); +} diff --git a/cli/commands/create/files/create-plugin/src/index.ts b/cli/commands/create/files/create-plugin/src/index.ts new file mode 100644 index 00000000000..bf08be88d5a --- /dev/null +++ b/cli/commands/create/files/create-plugin/src/index.ts @@ -0,0 +1,9 @@ +import type { Engine } from "@tsparticles/engine"; +import { Plugin } from "./plugin.js"; + +/** + * @param engine - The engine instance + */ +export async function loadTemplatePlugin(engine: Engine): Promise { + await engine.addPlugin(new Plugin(/*engine*/)); +} diff --git a/cli/commands/create/files/create-plugin/src/plugin.ts b/cli/commands/create/files/create-plugin/src/plugin.ts new file mode 100644 index 00000000000..b6f944b1cbb --- /dev/null +++ b/cli/commands/create/files/create-plugin/src/plugin.ts @@ -0,0 +1,36 @@ +import { /*type Container, type Engine,*/ type IPlugin, type ISourceOptions, type Options } from "@tsparticles/engine"; +import type { PluginInstance } from "./PluginInstance.js"; + +/** + */ +export class Plugin implements IPlugin { + readonly id; + + //private readonly _engine; + + constructor(/*engine: Engine*/) { + this.id = "#template#"; + + //this._engine = engine; + } + + async getPlugin(/*container: Container*/): Promise { + const { PluginInstance } = await import("./PluginInstance.js"); + + return new PluginInstance(/*container, this._engine*/); + } + + loadOptions(_options: Options, _source?: ISourceOptions): void { + if (!this.needsPlugin()) { + // ignore plugin options when not needed + + return; + } + + // Load your options here + } + + needsPlugin(_options?: ISourceOptions): boolean { + return true; // add your condition here, replace true with condition if needed + } +} diff --git a/cli/commands/create/files/create-preset/README.md b/cli/commands/create/files/create-preset/README.md new file mode 100644 index 00000000000..2b92d033e04 --- /dev/null +++ b/cli/commands/create/files/create-preset/README.md @@ -0,0 +1,144 @@ +[![banner](https://particles.js.org/images/banner2.png)](https://particles.js.org) + +# tsParticles Template Preset + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/tsparticles-preset-template/badge)](https://www.jsdelivr.com/package/npm/tsparticles-preset-template) [![npmjs](https://badge.fury.io/js/tsparticles-preset-template.svg)](https://www.npmjs.com/package/tsparticles-preset-template) [![npmjs](https://img.shields.io/npm/dt/tsparticles-preset-template)](https://www.npmjs.com/package/tsparticles-preset-template) + +[tsParticles](https://github.com/matteobruni/tsparticles) preset template. + +## Sample + +![demo](https://raw.githubusercontent.com/tsparticles/preset-template/main/images/sample.png) + +## How to use it + +### CDN / Vanilla JS / jQuery + +The first step is installing [tsParticles](https://github.com/matteobruni/tsparticles) following the instructions for +vanilla javascript in the main project [here](https://github.com/matteobruni/tsparticles) + +Once installed you need one more script to be included in your page (or you can download that +from [jsDelivr](https://www.jsdelivr.com/package/npm/tsparticles-preset-template): + +```html + + +``` + +This script **MUST** be placed after the `tsParticles` one. + +#### Bundle + +A bundled script can also be used, this will include every needed plugin needed by the preset. + +```html + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async () => { + await tsParticles.load("tsparticles", { + preset: "template", + }); +})(); +``` + +#### Customization + +**Important** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +```javascript +(async () => { + await tsParticles.load("tsparticles", { + particles: { + shape: { + type: "square" + } + }, + preset: "template" + }); +})(); +``` + +Like in the sample above, the circles will be replaced by squares. + +### React.js / Preact / Inferno + +_The syntax for `React.js`, `Preact` and `Inferno` is the same_. + +This sample uses the class component syntax, but you can use hooks as well (if the library supports it). + +```javascript +import Particles from "react-particles"; +import { Engine } from "@tsparticles/engine"; +import { loadTemplatePreset } from "tsparticles-preset-template"; + +export class ParticlesContainer extends React.PureComponent { + // this customizes the component tsParticles installation + async customInit(engine: Engine) { + // this adds the preset to tsParticles, you can safely use the + await loadTemplatePreset(engine); + } + + render() { + const options = { + preset: "template", + }; + + return ; + } +} +``` + +### Vue (2.x and 3.x) + +_The syntax for `Vue.js 2.x` and `3.x` is the same_ + +```vue + +``` + +```js +async function particlesInit(engine: Engine) { + await loadTemplatePreset(main); +} +``` + +### Angular + +```html + + +``` + +```ts +async function particlesInit(engine: Engine): Promise { + loadTemplatePreset(engine); +} +``` + +### Svelte + +```sveltehtml + + +``` + +```js +let particlesInit = async (engine) => { + await loadTemplatePreset(engine); +}; +``` diff --git a/cli/commands/create/files/create-preset/images/sample.png b/cli/commands/create/files/create-preset/images/sample.png new file mode 100644 index 00000000000..83bb6477bd3 Binary files /dev/null and b/cli/commands/create/files/create-preset/images/sample.png differ diff --git a/cli/commands/create/files/create-preset/src/browser.ts b/cli/commands/create/files/create-preset/src/browser.ts new file mode 100644 index 00000000000..c8d4ebc079f --- /dev/null +++ b/cli/commands/create/files/create-preset/src/browser.ts @@ -0,0 +1,10 @@ +import { loadTemplatePreset } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadTemplatePreset?: typeof loadTemplatePreset; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadTemplatePreset = loadTemplatePreset; + +export * from "./index.js"; diff --git a/cli/commands/create/files/create-preset/src/bundle.ts b/cli/commands/create/files/create-preset/src/bundle.ts new file mode 100644 index 00000000000..4e42bfc05e4 --- /dev/null +++ b/cli/commands/create/files/create-preset/src/bundle.ts @@ -0,0 +1,17 @@ +import { loadTemplatePreset } from "./index.js"; + + +import { loadTemplatePreset } from "./index.js"; +import { tsParticles } from "@tsparticles/engine"; + +void loadTemplatePreset(tsParticles); + +export { loadTemplatePreset, tsParticles }; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadTemplatePreset?: typeof loadTemplatePreset; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; + +globalObject.loadTemplatePreset = loadTemplatePreset; diff --git a/cli/commands/create/files/create-preset/src/index.lazy.ts b/cli/commands/create/files/create-preset/src/index.lazy.ts new file mode 100644 index 00000000000..47d41e73d7d --- /dev/null +++ b/cli/commands/create/files/create-preset/src/index.lazy.ts @@ -0,0 +1,14 @@ +import type { Engine } from "@tsparticles/engine"; + +/** + * + * @param engine - the engine instance to load the preset into + */ +export async function loadTemplatePreset(engine: Engine): Promise { + const { options } = await import("./options.js"); + + // TODO: additional modules must be loaded here + + // Adds the preset to the engine, with the given options + await engine.addPreset("#template#", options); +} diff --git a/cli/commands/create/files/create-preset/src/index.ts b/cli/commands/create/files/create-preset/src/index.ts new file mode 100644 index 00000000000..37ba4598d92 --- /dev/null +++ b/cli/commands/create/files/create-preset/src/index.ts @@ -0,0 +1,13 @@ +import type { Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +/** + * + * @param engine - the engine instance to load the preset into + */ +export async function loadTemplatePreset(engine: Engine): Promise { + // TODO: additional modules must be loaded here + + // Adds the preset to the engine, with the given options + await engine.addPreset("#template#", options); +} diff --git a/cli/commands/create/files/create-preset/src/options.ts b/cli/commands/create/files/create-preset/src/options.ts new file mode 100644 index 00000000000..cbbe50d79b3 --- /dev/null +++ b/cli/commands/create/files/create-preset/src/options.ts @@ -0,0 +1,6 @@ +import type { ISourceOptions } from "@tsparticles/engine"; + +// The options used by the preset +export const options: ISourceOptions = { + // TODO: options here +}; diff --git a/cli/commands/create/files/create-shape/README.md b/cli/commands/create/files/create-shape/README.md new file mode 100644 index 00000000000..ad83ea06f04 --- /dev/null +++ b/cli/commands/create/files/create-shape/README.md @@ -0,0 +1,75 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Template Shape + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/tsparticles-shape-template/badge)](https://www.jsdelivr.com/package/npm/tsparticles-shape-template) +[![npmjs](https://badge.fury.io/js/tsparticles-shape-template.svg)](https://www.npmjs.com/package/tsparticles-shape-template) +[![npmjs](https://img.shields.io/npm/dt/tsparticles-shape-template)](https://www.npmjs.com/package/tsparticles-shape-template) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/matteobruni/tsparticles) additional template shape. + +## How to use it + +### CDN / Vanilla JS / jQuery + +The CDN/Vanilla version JS has one required file in vanilla configuration: + +Including the `tsparticles.shape.template.min.js` file will export the function to load the shape: + +```text +loadTemplateShape +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` and the shape like this: + +```javascript +(async () => { + await loadTemplateShape(tsParticles); + + await tsParticles.load({ + id: "tsparticles", + options: { + /* options */ + /* here you can use particles.shape.type: "template" */ + }, + }); +})(); +``` + +### ESM / CommonJS + +This package is compatible also with ES or CommonJS modules, firstly this needs to be installed, like this: + +```shell +$ npm install tsparticles-shape-template +``` + +or + +```shell +$ yarn add tsparticles-shape-template +``` + +Then you need to import it in the app, like this: + +```javascript +const { tsParticles } = require("@tsparticles/engine"); +const { loadTemplateShape } = require("tsparticles-shape-template"); + +(async () => { + await loadTemplateShape(tsParticles); +})(); +``` + +or + +```javascript +import { tsParticles } from "@tsparticles/engine"; +import { loadTemplateShape } from "tsparticles-shape-template"; + +(async () => { + await loadTemplateShape(tsParticles); +})(); +``` diff --git a/cli/commands/create/files/create-shape/src/ShapeDrawer.ts b/cli/commands/create/files/create-shape/src/ShapeDrawer.ts new file mode 100644 index 00000000000..62c22745ec5 --- /dev/null +++ b/cli/commands/create/files/create-shape/src/ShapeDrawer.ts @@ -0,0 +1,16 @@ +import type { IShapeDrawData, IShapeDrawer } from "@tsparticles/engine"; + +export class ShapeDrawer implements IShapeDrawer { + readonly validTypes = ["#template#"] as const; + + draw(_data: IShapeDrawData): void { + // draw the particle using the context + // which is already centered in the particle position + // colors are already handled, just draw the shape + // the bounds are -radius to radius + // delta is the frame time difference between the last frame and this one, in ms, use it for animated shapes + // pixelRatio is the canvas ratio used by the tsParticles instance, you may need it for density-independent shapes + // the parameters have an underscore prefix because they're not used in this example + // the underscore prefix can be removed for used parameters, the unused ones can be removed too + } +} diff --git a/cli/commands/create/files/create-shape/src/browser.ts b/cli/commands/create/files/create-shape/src/browser.ts new file mode 100644 index 00000000000..9bd1bcb8f5d --- /dev/null +++ b/cli/commands/create/files/create-shape/src/browser.ts @@ -0,0 +1,10 @@ +import { loadTemplateShape } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadTemplateShape?: typeof loadTemplateShape; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadTemplateShape = loadTemplateShape; + +export * from "./index.js"; diff --git a/cli/commands/create/files/create-shape/src/index.lazy.ts b/cli/commands/create/files/create-shape/src/index.lazy.ts new file mode 100644 index 00000000000..0ac332365c9 --- /dev/null +++ b/cli/commands/create/files/create-shape/src/index.lazy.ts @@ -0,0 +1,10 @@ +import type { Engine } from "@tsparticles/engine"; + +/** + * @param engine - the engine instance to load the shape into + */ +export async function loadTemplateShape(engine: Engine): Promise { + const { ShapeDrawer } = await import("./ShapeDrawer.js"); + + await engine.addShape(new ShapeDrawer()); +} diff --git a/cli/commands/create/files/create-shape/src/index.ts b/cli/commands/create/files/create-shape/src/index.ts new file mode 100644 index 00000000000..d90b3d6b326 --- /dev/null +++ b/cli/commands/create/files/create-shape/src/index.ts @@ -0,0 +1,9 @@ +import type { Engine } from "@tsparticles/engine"; +import { ShapeDrawer } from "./ShapeDrawer.js"; + +/** + * @param engine - the engine instance to load the shape into + */ +export async function loadTemplateShape(engine: Engine): Promise { + await engine.addShape(new ShapeDrawer()); +} diff --git a/cli/commands/create/package.json b/cli/commands/create/package.json new file mode 100644 index 00000000000..beb8408db63 --- /dev/null +++ b/cli/commands/create/package.json @@ -0,0 +1,82 @@ +{ + "name": "@tsparticles/cli-command-create", + "version": "4.0.0-beta.15", + "license": "MIT", + "type": "module", + "publishConfig": { + "access": "public", + "tagVersionPrefix": "v" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "cli/commands/create" + }, + "prettier": "@tsparticles/prettier-config", + "scripts": { + "prettify:ci:src": "prettier --check ./src/*", + "prettify:ci:readme": "prettier --check ./README.md", + "prettify:src": "prettier --write ./src/*", + "prettify:readme": "prettier --write ./README.md", + "lint": "eslint src --ext .js,.jsx,.ts,.tsx --cache --cache-location .cache/eslint/.eslintcache --cache-strategy metadata --fix", + "lint:ci": "eslint src --ext .js,.jsx,.ts,.tsx --cache --cache-location .cache/eslint/.eslintcache --cache-strategy metadata", + "circular-deps": "depcruise src --include-only '^src' --validate --output-type err-long", + "compile": "pnpm run build:ts", + "compile:ci": "pnpm run build:ts", + "build:ts": "pnpm run build:ts:cjs", + "build:ts:cjs": "tsc -p src", + "test": "vitest run", + "build": "pnpm run clear:dist && pnpm run prettify:src && pnpm run lint && pnpm run compile && pnpm run circular-deps && pnpm run prettify:readme", + "build:ci": "pnpm run clear:dist && pnpm run prettify:ci:src && pnpm run lint:ci && pnpm run compile:ci && pnpm run prettify:ci:readme", + "clear:dist": "rimraf ./dist", + "prepack": "pnpm run build" + }, + "peerDependencies": { + "commander": "^14" + }, + "dependencies": { + "@tsparticles/cli-command-create-bundle": "workspace:^", + "@tsparticles/cli-command-create-effect": "workspace:^", + "@tsparticles/cli-command-create-interaction": "workspace:^", + "@tsparticles/cli-command-create-palette": "workspace:^", + "@tsparticles/cli-command-create-path": "workspace:^", + "@tsparticles/cli-command-create-plugin": "workspace:^", + "@tsparticles/cli-command-create-preset": "workspace:^", + "@tsparticles/cli-command-create-shape": "workspace:^", + "@tsparticles/cli-command-create-updater": "workspace:^", + "@tsparticles/cli-create-utils": "workspace:^", + "@tsparticles/depcruise-config": "workspace:^", + "@tsparticles/eslint-config": "workspace:^", + "@tsparticles/prettier-config": "workspace:^", + "@tsparticles/tsconfig": "workspace:^", + "dependency-cruiser": "^17.4.0", + "eslint": "^10.3.0", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-jsdoc": "^62.9.0", + "eslint-plugin-prettier": "^5.5.5", + "eslint-plugin-tsdoc": "^0.5.2", + "prettier": "^3.8.3", + "rimraf": "^6.1.3", + "typescript": "^6.0.3", + "typescript-eslint": "^8.59.2" + }, + "devDependencies": { + "@types/estree": "^1.0.9", + "@types/klaw": "^3.0.7", + "@types/node": "^25.6.2", + "@types/prompts": "^2.4.9", + "@types/webpack-env": "^1.18.8", + "browserslist": "^4.28.2", + "commander": "^14.0.3", + "copyfiles": "^2.4.1", + "cross-env": "^10.1.0", + "terser-webpack-plugin": "^5.5.0", + "ts-node": "^10.9.2", + "vitest": "^4.1.5", + "webpack-bundle-analyzer": "^5.3.0", + "webpack-cli": "^7.0.2" + }, + "description": "tsParticles CLI", + "main": "dist/create.js", + "author": "Matteo Bruni " +} diff --git a/cli/commands/create/renovate.json b/cli/commands/create/renovate.json new file mode 100644 index 00000000000..df30aa6db3e --- /dev/null +++ b/cli/commands/create/renovate.json @@ -0,0 +1,9 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "baseBranches": [ + "dev" + ], + "extends": [ + "config:base" + ] +} diff --git a/cli/commands/create/src/create.ts b/cli/commands/create/src/create.ts new file mode 100644 index 00000000000..739264353d8 --- /dev/null +++ b/cli/commands/create/src/create.ts @@ -0,0 +1,26 @@ +import { Command } from "commander"; +import { bundleCreateCommand } from "@tsparticles/cli-command-create-bundle"; +import { effectCreateCommand } from "@tsparticles/cli-command-create-effect"; +import { interactionCreateCommand } from "@tsparticles/cli-command-create-interaction"; +import { paletteCreateCommand } from "@tsparticles/cli-command-create-palette"; +import { pathCreateCommand } from "@tsparticles/cli-command-create-path"; +import { pluginCreateCommand } from "@tsparticles/cli-command-create-plugin"; +import { presetCreateCommand } from "@tsparticles/cli-command-create-preset"; +import { shapeCreateCommand } from "@tsparticles/cli-command-create-shape"; +import { updaterCreateCommand } from "@tsparticles/cli-command-create-updater"; + +const createCommand = new Command("create"); + +createCommand.description("Create a new tsParticles project"); + +createCommand.addCommand(bundleCreateCommand); +createCommand.addCommand(effectCreateCommand); +createCommand.addCommand(interactionCreateCommand); +createCommand.addCommand(paletteCreateCommand); +createCommand.addCommand(pathCreateCommand); +createCommand.addCommand(pluginCreateCommand); +createCommand.addCommand(presetCreateCommand); +createCommand.addCommand(shapeCreateCommand); +createCommand.addCommand(updaterCreateCommand); + +export { createCommand }; diff --git a/cli/commands/create/src/tsconfig.json b/cli/commands/create/src/tsconfig.json new file mode 100644 index 00000000000..a86b208cb31 --- /dev/null +++ b/cli/commands/create/src/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "rootDir": ".", + "outDir": "../dist" + }, + "references": [{ "path": "../" }], + "include": ["**/*"] +} diff --git a/cli/commands/create/tests/.gitignore b/cli/commands/create/tests/.gitignore new file mode 100644 index 00000000000..049ddcb6d6f --- /dev/null +++ b/cli/commands/create/tests/.gitignore @@ -0,0 +1 @@ +tmp-files diff --git a/cli/commands/create/tests/create-plugin.test.ts b/cli/commands/create/tests/create-plugin.test.ts new file mode 100644 index 00000000000..c371a1426cc --- /dev/null +++ b/cli/commands/create/tests/create-plugin.test.ts @@ -0,0 +1,40 @@ +import { describe, it, expect } from "vitest"; +import { createPluginTemplate } from "../src/plugin/create-plugin.js"; +import { readFile, rm } from "node:fs/promises"; +import path from "node:path"; + +describe("create-plugin", () => { + it("should have created the plugin project", async () => { + const destDir = path.join(__dirname, "tmp-files", "foo-plugin"), + pkgPath = path.join(destDir, "package.json"); + + try { + await createPluginTemplate("foo", "Foo", "", destDir); + } catch (e) { + console.error(e); + } + + const pkgInfo = JSON.parse(await readFile(pkgPath, "utf-8")); + + expect(pkgInfo.name).toBe("tsparticles-plugin-foo"); + + await rm(destDir, { recursive: true, force: true }); + }); + + it("should have created the plugin project, w/ repo", async () => { + const destDir = path.join(__dirname, "tmp-files", "bar-plugin"); + + try { + await createPluginTemplate("bar", "Bar", "https://github.com/matteobruni/tsparticles", destDir); + } catch (e) { + console.error(e); + } + + const pkgPath = path.join(destDir, "package.json"), + pkgInfo = JSON.parse(await readFile(pkgPath, "utf-8")); + + expect(pkgInfo.name).toBe("tsparticles-plugin-bar"); + + await rm(destDir, { recursive: true, force: true }); + }); +}); diff --git a/cli/commands/create/tests/create-preset.test.ts b/cli/commands/create/tests/create-preset.test.ts new file mode 100644 index 00000000000..5fd31dd2bdf --- /dev/null +++ b/cli/commands/create/tests/create-preset.test.ts @@ -0,0 +1,40 @@ +import { describe, it, expect } from "vitest"; +import { readFile, rm } from "node:fs/promises"; +import { createPresetTemplate } from "../src/preset/create-preset.js"; +import path from "node:path"; + +describe("create-preset", () => { + it("should have created the preset project", async () => { + const destDir = path.join(__dirname, "tmp-files", "foo-preset"); + + try { + await createPresetTemplate("foo", "Foo", "", destDir); + } catch (e) { + console.error(e); + } + + const pkgPath = path.join(destDir, "package.json"), + pkgInfo = JSON.parse(await readFile(pkgPath, "utf-8")); + + expect(pkgInfo.name).toBe("tsparticles-preset-foo"); + + await rm(destDir, { recursive: true, force: true }); + }); + + it("should have created the preset project, w/ repo", async () => { + const destDir = path.join(__dirname, "tmp-files", "bar-preset"); + + try { + await createPresetTemplate("bar", "Bar", "https://github.com/matteobruni/tsparticles", destDir); + } catch (e) { + console.error(e); + } + + const pkgPath = path.join(destDir, "package.json"), + pkgInfo = JSON.parse(await readFile(pkgPath, "utf-8")); + + expect(pkgInfo.name).toBe("tsparticles-preset-bar"); + + await rm(destDir, { recursive: true, force: true }); + }); +}); diff --git a/cli/commands/create/tests/create-shape.test.ts b/cli/commands/create/tests/create-shape.test.ts new file mode 100644 index 00000000000..4907d8650e8 --- /dev/null +++ b/cli/commands/create/tests/create-shape.test.ts @@ -0,0 +1,40 @@ +import { describe, it, expect } from "vitest"; +import { readFile, rm } from "node:fs/promises"; +import { createShapeTemplate } from "../src/shape/create-shape.js"; +import path from "node:path"; + +describe("create-shape", () => { + it("should have created the shape project", async () => { + const destDir = path.join(__dirname, "tmp-files", "foo-shape"); + + try { + await createShapeTemplate("foo", "Foo", "", destDir); + } catch (e) { + console.error(e); + } + + const pkgPath = path.join(destDir, "package.json"), + pkgInfo = JSON.parse(await readFile(pkgPath, "utf-8")); + + expect(pkgInfo.name).toBe("tsparticles-shape-foo"); + + await rm(destDir, { recursive: true, force: true }); + }); + + it("should have created the shape project, w/ repo", async () => { + const destDir = path.join(__dirname, "tmp-files", "bar-shape"); + + try { + await createShapeTemplate("bar", "Bar", "https://github.com/matteobruni/tsparticles", destDir); + } catch (e) { + console.error(e); + } + + const pkgPath = path.join(destDir, "package.json"), + pkgInfo = JSON.parse(await readFile(pkgPath, "utf-8")); + + expect(pkgInfo.name).toBe("tsparticles-shape-bar"); + + await rm(destDir, { recursive: true, force: true }); + }); +}); diff --git a/cli/commands/create/tests/tsconfig.json b/cli/commands/create/tests/tsconfig.json new file mode 100644 index 00000000000..aa0fb5c6317 --- /dev/null +++ b/cli/commands/create/tests/tsconfig.json @@ -0,0 +1,15 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "rootDir": ".", + "target": "ES2021", + "types": ["node", "vitest"], + "allowJs": true, + "declaration": false, + "removeComments": true, + "importHelpers": false, + "esModuleInterop": true + }, + "references": [{ "path": "../src" }], + "include": ["**/*.ts"] +} diff --git a/cli/commands/create/tsconfig.json b/cli/commands/create/tsconfig.json new file mode 100644 index 00000000000..714efda86b6 --- /dev/null +++ b/cli/commands/create/tsconfig.json @@ -0,0 +1,53 @@ +{ + "compilerOptions": { + "rootDir": ".", + "outDir": ".", + "resolveJsonModule": true, + "composite": true, + "target": "ESNext", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "lib": [ + "ESNext", + "ES2024", + "ES2023", + "ES2022", + "ES2021", + "ES2020", + "ES2019", + "ES2018", + "ES2017", + "ES2016", + "ES2015" + ], + "types": [ + "node", + "klaw", + "prompts", + "eslint" + ], + "strict": true, + "noImplicitAny": true, + "strictNullChecks": true, + "strictFunctionTypes": true, + "strictBindCallApply": true, + "strictPropertyInitialization": true, + "noImplicitThis": true, + "useUnknownInCatchVariables": true, + "alwaysStrict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "exactOptionalPropertyTypes": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedIndexedAccess": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "allowSyntheticDefaultImports": true + }, + "include": [ + "src/**/*" + ] +} diff --git a/cli/commands/create/vitest.config.ts b/cli/commands/create/vitest.config.ts new file mode 100644 index 00000000000..a9402f52831 --- /dev/null +++ b/cli/commands/create/vitest.config.ts @@ -0,0 +1,11 @@ +import { defineConfig } from "vitest/config"; + +export default defineConfig({ + test: { + globals: true, + environment: "node", + include: ["tests/**/*.test.ts"], + testTimeout: 5 * 60 * 1000 + } +}); + diff --git a/cli/packages/cli-build/CHANGELOG.md b/cli/packages/cli-build/CHANGELOG.md new file mode 100644 index 00000000000..f2deeab7f2d --- /dev/null +++ b/cli/packages/cli-build/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/cli-build diff --git a/cli/packages/cli-build/README.md b/cli/packages/cli-build/README.md new file mode 100644 index 00000000000..a5f0702cbd0 --- /dev/null +++ b/cli/packages/cli-build/README.md @@ -0,0 +1,21 @@ +# @tsparticles/cli-build + +Minimal CLI for building tsParticles packages. This is a thin wrapper around `@tsparticles/cli-command-build` with no external dependencies to avoid circular dependency issues. + +## Installation + +```bash +npm install --save-dev @tsparticles/cli-build +# or +pnpm add -D @tsparticles/cli-build +# or +yarn add -D @tsparticles/cli-build +``` + +## Usage + +```bash +tsparticles-build [options] +``` + +For usage details, see the command package docs under `cli/commands/build`. diff --git a/cli/packages/cli-build/bin/tsparticles-build.cjs b/cli/packages/cli-build/bin/tsparticles-build.cjs new file mode 100755 index 00000000000..95d2d4252bc --- /dev/null +++ b/cli/packages/cli-build/bin/tsparticles-build.cjs @@ -0,0 +1,31 @@ +#!/usr/bin/env node + +const { Command } = require("commander"); +const { readFile } = require("node:fs/promises"); +const path = require("node:path"); + +(async () => { + const { buildCommand } = await import("@tsparticles/cli-command-build"), + rootPkgPath = path.join(__dirname, "..", "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + [, , firstArg] = process.argv, + directArgs = new Set(["build", "help", "-h", "--help", "-v", "--version"]), + commandArgv = + !firstArg || + firstArg.startsWith("-") || + !directArgs.has(firstArg) + ? [process.argv[0], process.argv[1], "build", ...process.argv.slice(2)] + : process.argv; + + const program = new Command(); + + program.name("tsparticles-build"); + program.description("tsParticles Build CLI"); + program.version(pkg.version, "-v, --version", "output the current version"); + program.addCommand(buildCommand); + program.parse(commandArgv); +})().catch((error) => { + console.error(error); + process.exit(1); +}); + diff --git a/cli/packages/cli-build/package.json b/cli/packages/cli-build/package.json new file mode 100644 index 00000000000..c8ada027f6d --- /dev/null +++ b/cli/packages/cli-build/package.json @@ -0,0 +1,35 @@ +{ + "name": "@tsparticles/cli-build", + "version": "4.0.0-beta.15", + "license": "MIT", + "type": "module", + "bin": { + "tsparticles-build": "bin/tsparticles-build.cjs" + }, + "publishConfig": { + "access": "public", + "tagVersionPrefix": "v" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "cli/packages/cli-build" + }, + "prettier": "@tsparticles/prettier-config", + "scripts": { + "prettify:ci:readme": "prettier --check ./README.md", + "prettify:readme": "prettier --write ./README.md", + "build": "pnpm run prettify:readme", + "build:ci": "pnpm run prettify:ci:readme", + "prepack": "pnpm run build" + }, + "dependencies": { + "@tsparticles/cli-command-build": "workspace:^", + "commander": "^14.0.3" + }, + "devDependencies": { + "@tsparticles/prettier-config": "workspace:^" + }, + "description": "tsParticles CLI - Build command only (no circular dependencies)", + "author": "Matteo Bruni " +} diff --git a/cli/packages/cli-build/project.json b/cli/packages/cli-build/project.json new file mode 100644 index 00000000000..38857ffd368 --- /dev/null +++ b/cli/packages/cli-build/project.json @@ -0,0 +1,17 @@ +{ + "name": "@tsparticles/cli-build", + "$schema": "https://json.schemastore.org/nx-project.json", + "projectType": "library", + "sourceRoot": "cli/packages/cli-build", + "targets": { + "build": { + "executor": "nx:run-commands", + "options": { + "commands": ["pnpm run build"], + "cwd": "cli/packages/cli-build" + }, + "dependsOn": ["^build"] + } + } +} + diff --git a/cli/packages/cli-create/CHANGELOG.md b/cli/packages/cli-create/CHANGELOG.md new file mode 100644 index 00000000000..daafd4c11a2 --- /dev/null +++ b/cli/packages/cli-create/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/cli-create diff --git a/cli/packages/cli-create/README.md b/cli/packages/cli-create/README.md new file mode 100644 index 00000000000..3d56e0a8862 --- /dev/null +++ b/cli/packages/cli-create/README.md @@ -0,0 +1,40 @@ +# @tsparticles/cli-create + +Minimal CLI for scaffolding tsParticles packages. This is a thin wrapper around `@tsparticles/cli-command-create`. + +## Installation + +```bash +npm install --save-dev @tsparticles/cli-create +# or +pnpm add -D @tsparticles/cli-create +# or +yarn add -D @tsparticles/cli-create +``` + +## Usage + +```bash +tsparticles-create [options] +``` + +The wrapper automatically prepends `create` when omitted, so these are equivalent: + +```bash +tsparticles-create plugin my-plugin +tsparticles-create create plugin my-plugin +``` + +Supported subcommands: + +- `bundle` +- `effect` +- `interaction` +- `palette` +- `path` +- `plugin` +- `preset` +- `shape` +- `updater` + +For full examples, see `cli/commands/create/README.md`. diff --git a/cli/packages/cli-create/bin/tsparticles-create.cjs b/cli/packages/cli-create/bin/tsparticles-create.cjs new file mode 100755 index 00000000000..cddf742ae6c --- /dev/null +++ b/cli/packages/cli-create/bin/tsparticles-create.cjs @@ -0,0 +1,32 @@ +#!/usr/bin/env node + +const { Command } = require("commander"); +const { readFile } = require("node:fs/promises"); +const path = require("node:path"); + +(async () => { + const { createCommand } = await import("@tsparticles/cli-command-create"), + rootPkgPath = path.join(__dirname, "..", "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + [, , firstArg] = process.argv, + directArgs = new Set(["create", "help", "-h", "--help", "-v", "--version"]), + commandArgv = + !firstArg || + firstArg.startsWith("-") || + !directArgs.has(firstArg) + ? [process.argv[0], process.argv[1], "create", ...process.argv.slice(2)] + : process.argv; + + const program = new Command(); + + program.name("tsparticles-create"); + program.description("tsParticles Create CLI"); + program.version(pkg.version, "-v, --version", "output the current version"); + program.addCommand(createCommand); + program.parse(commandArgv); +})().catch((error) => { + console.error(error); + process.exit(1); +}); + + diff --git a/cli/packages/cli-create/package.json b/cli/packages/cli-create/package.json new file mode 100644 index 00000000000..2394c23baf8 --- /dev/null +++ b/cli/packages/cli-create/package.json @@ -0,0 +1,35 @@ +{ + "name": "@tsparticles/cli-create", + "version": "4.0.0-beta.15", + "license": "MIT", + "type": "module", + "bin": { + "tsparticles-create": "bin/tsparticles-create.cjs" + }, + "publishConfig": { + "access": "public", + "tagVersionPrefix": "v" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "cli/packages/cli-create" + }, + "prettier": "@tsparticles/prettier-config", + "scripts": { + "prettify:ci:readme": "prettier --check ./README.md", + "prettify:readme": "prettier --write ./README.md", + "build": "pnpm run prettify:readme", + "build:ci": "pnpm run prettify:ci:readme", + "prepack": "pnpm run build" + }, + "dependencies": { + "@tsparticles/cli-command-create": "workspace:^", + "commander": "^14.0.3" + }, + "devDependencies": { + "@tsparticles/prettier-config": "workspace:^" + }, + "description": "tsParticles CLI - Create command only", + "author": "Matteo Bruni " +} diff --git a/cli/packages/cli-create/project.json b/cli/packages/cli-create/project.json new file mode 100644 index 00000000000..a833009742a --- /dev/null +++ b/cli/packages/cli-create/project.json @@ -0,0 +1,18 @@ +{ + "name": "@tsparticles/cli-create", + "$schema": "https://json.schemastore.org/nx-project.json", + "projectType": "library", + "sourceRoot": "cli/packages/cli-create", + "targets": { + "build": { + "executor": "nx:run-commands", + "options": { + "commands": ["pnpm run build"], + "cwd": "cli/packages/cli-create" + }, + "dependsOn": ["^build"] + } + } +} + + diff --git a/cli/packages/nx-plugin/CHANGELOG.md b/cli/packages/nx-plugin/CHANGELOG.md new file mode 100644 index 00000000000..0d374c4e06f --- /dev/null +++ b/cli/packages/nx-plugin/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/cli-nx-plugin diff --git a/cli/packages/nx-plugin/README.md b/cli/packages/nx-plugin/README.md new file mode 100644 index 00000000000..d83414fde45 --- /dev/null +++ b/cli/packages/nx-plugin/README.md @@ -0,0 +1,42 @@ +[![banner](https://particles.js.org/images/banner2.png)](https://particles.js.org) + +# tsParticles Nx Plugin + +Internal Nx plugin used by the `tsParticles CLI` workspace. + +## What it does + +The plugin augments package-based Nx projects under `commands/*`, `packages/*`, and `utils/*` with canonical tsParticles build-step aliases. + +It is enabled in the workspace `nx.json` via the `@tsparticles/cli-nx-plugin` entry in `plugins`. + +### Canonical aliases inferred by the plugin + +| Canonical target | Script fallback | +| ---------------- | ------------------------------------- | +| `clean` | `clear:dist` | +| `prettify` | `prettify:src` or `format` | +| `prettify:ci` | `prettify:ci:src` | +| `tsc` | `compile`, `build:ts`, or `typecheck` | +| `bundle:webpack` | `build:bundle:webpack` | +| `bundle:rollup` | `build:bundle:rollup` | +| `distfiles` | `build:distfiles` | + +This allows Nx-friendly commands such as: + +```bash +pnpm nx run @tsparticles/cli-command-build:tsc +pnpm nx run @tsparticles/cli-command-build:clean +``` + +without forcing every package to rename its existing npm scripts. + +## Verify plugin behavior + +From the `cli` root: + +```bash +pnpm nx show project @tsparticles/cli-command-build --json +pnpm nx show projects --withTarget tsc +pnpm nx run @tsparticles/cli-nx-plugin:test +``` diff --git a/cli/packages/nx-plugin/eslint.config.js b/cli/packages/nx-plugin/eslint.config.js new file mode 100644 index 00000000000..00361f302ac --- /dev/null +++ b/cli/packages/nx-plugin/eslint.config.js @@ -0,0 +1,23 @@ +import path from "path"; +import { fileURLToPath } from "url"; +import { defineConfig } from "eslint/config"; +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default defineConfig([ + tsParticlesESLintConfig, + { + languageOptions: { + parserOptions: { + project: [path.join(__dirname, "src", "tsconfig.json")], + tsconfigRootDir: __dirname, + sourceType: "module", + }, + }, + rules: { + "no-console": "off", + }, + }, +]); + diff --git a/cli/packages/nx-plugin/package.json b/cli/packages/nx-plugin/package.json new file mode 100644 index 00000000000..09bce6e11da --- /dev/null +++ b/cli/packages/nx-plugin/package.json @@ -0,0 +1,54 @@ +{ + "name": "@tsparticles/cli-nx-plugin", + "version": "4.0.0-beta.15", + "license": "MIT", + "type": "module", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "cli/packages/nx-plugin" + }, + "prettier": "@tsparticles/prettier-config", + "publishConfig": { + "access": "public", + "tagVersionPrefix": "v" + }, + "scripts": { + "prettify:ci:src": "prettier --check ./src/*", + "prettify:ci:readme": "prettier --check ./README.md", + "prettify:src": "prettier --write ./src/*", + "prettify:readme": "prettier --write ./README.md", + "lint": "eslint src --ext .js,.jsx,.ts,.tsx --cache --cache-location .cache/eslint/.eslintcache --cache-strategy metadata --fix", + "lint:ci": "eslint src --ext .js,.jsx,.ts,.tsx --cache --cache-location .cache/eslint/.eslintcache --cache-strategy metadata", + "build": "pnpm run prettify:src && pnpm run lint && pnpm run test && pnpm run prettify:readme", + "build:ci": "pnpm run prettify:ci:src && pnpm run lint:ci && pnpm run test:ci && pnpm run prettify:ci:readme", + "clear:dist": "rimraf ./dist", + "test": "vitest run", + "test:ci": "vitest run", + "prepack": "pnpm run build" + }, + "dependencies": { + "@nx/devkit": "^22.7.1", + "@tsparticles/eslint-config": "workspace:^", + "@tsparticles/prettier-config": "workspace:^", + "@tsparticles/tsconfig": "workspace:^", + "eslint": "^10.3.0", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-jsdoc": "^62.9.0", + "eslint-plugin-prettier": "^5.5.5", + "eslint-plugin-tsdoc": "^0.5.2", + "nx": "^22.7.1", + "prettier": "^3.8.3", + "prettier-plugin-multiline-arrays": "^4.1.8", + "rimraf": "^6.1.3", + "typescript": "^6.0.3", + "typescript-eslint": "^8.59.2", + "vitest": "^4.1.5" + }, + "devDependencies": { + "@types/node": "^25.6.2" + }, + "description": "tsParticles Nx plugin", + "main": "src/index.ts", + "author": "Matteo Bruni " +} diff --git a/cli/packages/nx-plugin/project.json b/cli/packages/nx-plugin/project.json new file mode 100644 index 00000000000..fef824f3547 --- /dev/null +++ b/cli/packages/nx-plugin/project.json @@ -0,0 +1,19 @@ +{ + "name": "@tsparticles/cli-nx-plugin", + "root": "cli/packages/nx-plugin", + "sourceRoot": "cli/packages/nx-plugin/src", + "targets": { + "build": { + "options": { + "main": "cli/packages/nx-plugin/src/index.ts" + } + }, + "build:ci": { + "options": { + "main": "cli/packages/nx-plugin/src/index.ts" + } + } + }, + "tags": ["type:tooling", "scope:nx"] +} + diff --git a/cli/packages/nx-plugin/src/canonical-targets.ts b/cli/packages/nx-plugin/src/canonical-targets.ts new file mode 100644 index 00000000000..477e1622137 --- /dev/null +++ b/cli/packages/nx-plugin/src/canonical-targets.ts @@ -0,0 +1,115 @@ +/* eslint-disable jsdoc/require-jsdoc */ +import type { ProjectConfiguration } from "@nx/devkit"; + +interface TsParticlesAliasDefinition { + alias: string; + candidates: readonly string[]; + description: string; +} + +const pnpmRunPrefix = "pnpm run", + cliPrefixLength = 4; + +export const tsParticlesAliasDefinitions: readonly TsParticlesAliasDefinition[] = [ + { + alias: "clean", + candidates: ["clear:dist"], + description: "Canonical tsParticles clean target.", + }, + { + alias: "prettify", + candidates: ["prettify:src", "format"], + description: "Canonical tsParticles source formatting target.", + }, + { + alias: "prettify:ci", + candidates: ["prettify:ci:src"], + description: "Canonical tsParticles CI formatting target.", + }, + { + alias: "tsc", + candidates: ["compile", "build:ts", "typecheck"], + description: "Canonical tsParticles TypeScript build target.", + }, + { + alias: "bundle:webpack", + candidates: ["build:bundle:webpack"], + description: "Canonical tsParticles Webpack bundle target.", + }, + { + alias: "bundle:rollup", + candidates: ["build:bundle:rollup"], + description: "Canonical tsParticles Rollup bundle target.", + }, + { + alias: "distfiles", + candidates: ["build:distfiles"], + description: "Canonical tsParticles dist files target.", + }, +] as const; + +function createAliasTarget( + scriptName: string, + scriptContent: string, + description: string, +): NonNullable[string] { + return { + executor: "nx:run-script", + options: { + script: scriptName, + }, + metadata: { + description, + runCommand: `${pnpmRunPrefix} ${scriptName}`, + scriptContent, + }, + parallelism: true, + }; +} + +export function createCanonicalAliasTargets( + scripts?: Record, +): NonNullable { + const targets: NonNullable = {}; + + if (!scripts) { + return targets; + } + + for (const definition of tsParticlesAliasDefinitions) { + if (scripts[definition.alias]) { + continue; + } + + const scriptName = definition.candidates.find(candidate => !!scripts[candidate]); + + if (!scriptName) { + continue; + } + + const scriptContent = scripts[scriptName]; + + if (!scriptContent) { + continue; + } + + targets[definition.alias] = createAliasTarget(scriptName, scriptContent, definition.description); + } + + return targets; +} + +export function isTsParticlesWorkspacePackage(packageJsonPath: string): boolean { + const normalizedPath = packageJsonPath.replaceAll("\\", "/"), + pathFromWorkspaceRoot = normalizedPath.startsWith("cli/") ? normalizedPath.slice(cliPrefixLength) : normalizedPath; + + if (normalizedPath.includes("/files/")) { + return false; + } + + return ( + pathFromWorkspaceRoot.startsWith("commands/") || + pathFromWorkspaceRoot.startsWith("packages/") || + pathFromWorkspaceRoot.startsWith("utils/") + ); +} diff --git a/cli/packages/nx-plugin/src/create-nodes.ts b/cli/packages/nx-plugin/src/create-nodes.ts new file mode 100644 index 00000000000..d157560ffcb --- /dev/null +++ b/cli/packages/nx-plugin/src/create-nodes.ts @@ -0,0 +1,101 @@ +import { type CreateNodesV2, createNodesFromFiles, readJsonFile } from "@nx/devkit"; +import { createCanonicalAliasTargets, isTsParticlesWorkspacePackage } from "./canonical-targets.ts"; +import { dirname, join } from "node:path"; + +interface TsParticlesPackageJson { + name?: string; + scripts?: Record; +} + +const emptyCount = 0; + +/** + * @param scriptName - + * @returns - + */ +function createScriptTarget(scriptName: string): Record { + return { + executor: "nx:run-script", + options: { + script: scriptName, + }, + parallelism: true, + }; +} + +/** + * @param scripts - + * @returns - + */ +function createFallbackScriptTargets(scripts?: Record): Record { + const targets: Record = {}; + + if (!scripts) { + return targets; + } + + if (scripts["build"]) { + targets["build"] = createScriptTarget("build"); + } + + if (scripts["build:ci"]) { + targets["build:ci"] = createScriptTarget("build:ci"); + } + + return targets; +} + +/** + * @param packageJsonPath - + * @param workspaceRoot - + * @returns - + */ +function createProjectAugmentation(packageJsonPath: string, workspaceRoot: string): Record { + if (!isTsParticlesWorkspacePackage(packageJsonPath)) { + return {}; + } + + const packageJson = readJsonFile(join(workspaceRoot, packageJsonPath)), + aliasTargets = createCanonicalAliasTargets(packageJson.scripts), + fallbackTargets = createFallbackScriptTargets(packageJson.scripts), + aliasTargetNames = Object.keys(aliasTargets), + fallbackTargetNames = Object.keys(fallbackTargets), + projectTargets = { + ...fallbackTargets, + ...aliasTargets, + }, + targetNames = Object.keys(projectTargets); + + if (!packageJson.name || targetNames.length === emptyCount) { + return {}; + } + + const projectRoot = dirname(packageJsonPath); + + return { + projects: { + [projectRoot]: { + name: packageJson.name, + root: projectRoot, + targets: projectTargets, + metadata: { + targetGroups: { + ...(fallbackTargetNames.length > emptyCount ? { "tsParticles Nx fallback": fallbackTargetNames } : {}), + ...(aliasTargetNames.length > emptyCount ? { "tsParticles Nx aliases": aliasTargetNames } : {}), + }, + }, + }, + }, + }; +} + +export const createNodesV2: CreateNodesV2 = [ + "**/package.json", + (configFiles, options, context): ReturnType => + createNodesFromFiles( + packageJsonPath => createProjectAugmentation(packageJsonPath, context.workspaceRoot), + configFiles, + options, + context, + ), +]; diff --git a/cli/packages/nx-plugin/src/index.ts b/cli/packages/nx-plugin/src/index.ts new file mode 100644 index 00000000000..71a85bd896c --- /dev/null +++ b/cli/packages/nx-plugin/src/index.ts @@ -0,0 +1,9 @@ +import { createNodesV2 } from "./create-nodes.ts"; + +const plugin = { + name: "@tsparticles/cli-nx-plugin", + createNodesV2, +}; + +export default plugin; +export { createNodesV2 }; diff --git a/cli/packages/nx-plugin/src/tsconfig.json b/cli/packages/nx-plugin/src/tsconfig.json new file mode 100644 index 00000000000..6df8505fd8b --- /dev/null +++ b/cli/packages/nx-plugin/src/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "rootDir": "." + }, + "include": ["**/*"] +} diff --git a/cli/packages/nx-plugin/tests/create-nodes.test.ts b/cli/packages/nx-plugin/tests/create-nodes.test.ts new file mode 100644 index 00000000000..1afd2c2cc11 --- /dev/null +++ b/cli/packages/nx-plugin/tests/create-nodes.test.ts @@ -0,0 +1,54 @@ +/// +import { describe, expect, it } from "vitest"; +import { createCanonicalAliasTargets, isTsParticlesWorkspacePackage } from "../src/canonical-targets.js"; + +describe("createCanonicalAliasTargets", () => { + it("creates aliases for canonical tsParticles Nx targets", () => { + const targets = createCanonicalAliasTargets({ + "build:bundle:webpack": "webpack --config webpack.config.js", + "build:bundle:rollup": "rollup -c rollup.config.mjs", + compile: "pnpm run build:ts", + "prettify:ci:src": "prettier --check ./src/*", + "prettify:src": "prettier --write ./src/*", + "clear:dist": "rimraf ./dist", + }); + + expect(Object.keys(targets).sort()).toEqual([ + "bundle:rollup", + "bundle:webpack", + "clean", + "prettify", + "prettify:ci", + "tsc", + ]); + expect(targets["tsc"]?.options).toEqual({ script: "compile" }); + expect(targets["clean"]?.options).toEqual({ script: "clear:dist" }); + }); + + it("does not override targets already present as scripts", () => { + const targets = createCanonicalAliasTargets({ + prettify: "custom formatter", + "prettify:src": "prettier --write ./src/*", + compile: "pnpm run build:ts", + tsc: "tsc -p src", + }); + + expect(targets["prettify"]).toBeUndefined(); + expect(targets["tsc"]).toBeUndefined(); + }); +}); + +describe("isTsParticlesWorkspacePackage", () => { + it("matches workspace package roots used by the merged CLI monorepo", () => { + expect(isTsParticlesWorkspacePackage("cli/commands/build/package.json")).toBe(true); + expect(isTsParticlesWorkspacePackage("cli/packages/nx-plugin/package.json")).toBe(true); + expect(isTsParticlesWorkspacePackage("cli/commands/create-utils/files/empty-project/package.json")).toBe(false); + expect(isTsParticlesWorkspacePackage("commands/build/package.json")).toBe(true); + expect(isTsParticlesWorkspacePackage("package.json")).toBe(false); + }); +}); + + + + + diff --git a/cli/packages/nx-plugin/tsconfig.json b/cli/packages/nx-plugin/tsconfig.json new file mode 100644 index 00000000000..6c0eebbbade --- /dev/null +++ b/cli/packages/nx-plugin/tsconfig.json @@ -0,0 +1,36 @@ +{ + "compilerOptions": { + "rootDir": ".", + "resolveJsonModule": true, + "noEmit": true, + "allowImportingTsExtensions": true, + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "Bundler", + "lib": ["ESNext", "ES2024", "ES2023", "ES2022", "ES2021", "ES2020", "ES2019", "ES2018", "ES2017", "ES2016", "ES2015"], + "types": ["node"], + "strict": true, + "noImplicitAny": true, + "strictNullChecks": true, + "strictFunctionTypes": true, + "strictBindCallApply": true, + "strictPropertyInitialization": true, + "noImplicitThis": true, + "useUnknownInCatchVariables": true, + "alwaysStrict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "exactOptionalPropertyTypes": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedIndexedAccess": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "allowSyntheticDefaultImports": true + }, + "include": ["src/**/*"] +} + + diff --git a/cli/packages/nx-plugin/vitest.config.ts b/cli/packages/nx-plugin/vitest.config.ts new file mode 100644 index 00000000000..0688f4e6001 --- /dev/null +++ b/cli/packages/nx-plugin/vitest.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from "vitest/config"; + +export default defineConfig({ + test: { + include: ["tests/**/*.test.ts"], + }, +}); + diff --git a/cli/tsconfig.json b/cli/tsconfig.json new file mode 100644 index 00000000000..efcaf309ae3 --- /dev/null +++ b/cli/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "target": "ESNext", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "types": ["node"] + } +} + diff --git a/cli/utils/README.md b/cli/utils/README.md new file mode 100644 index 00000000000..b35149c13cd --- /dev/null +++ b/cli/utils/README.md @@ -0,0 +1,56 @@ +# tsParticles Utils Monorepo + +Shared build and tooling utilities used across the [tsParticles ecosystem](https://github.com/matteobruni/tsparticles). + +## Packages + +- [`@tsparticles/browserslist-config`](./browserslist-config/README.md): shared Browserslist targets +- [`@tsparticles/depcruise-config`](./depcruise-config/README.md): shared Dependency Cruiser rules and loader +- [`@tsparticles/eslint-config`](./eslint-config/README.md): shared ESLint 10 flat config +- [`@tsparticles/prettier-config`](./prettier-config/README.md): shared Prettier config +- [`@tsparticles/tsconfig`](./tsconfig/README.md): shared TypeScript config presets +- [`@tsparticles/webpack-plugin`](./webpack-config/README.md): helper functions to generate tsParticles webpack configs + +## Requirements + +- `node` (current active LTS recommended) +- `pnpm` `10.x` + +## Workspace Setup + +```bash +pnpm install +``` + +## Useful Commands + +Run from repository root. + +```bash +# build all packages +pnpm nx run-many -t build + +# build all packages in CI mode +pnpm nx run-many -t build:ci + +# build only affected projects +pnpm nx affected -t build +``` + +## Release Flow + +Versioning and publishing are managed with Nx Release using conventional commits. + +```bash +# pre-release version bump +pnpm run version:alpha +pnpm run version:beta + +# publish packages already versioned in package.json +pnpm run publish:alpha +pnpm run publish:beta +``` + +## License + +MIT diff --git a/cli/utils/browserslist-config/.gitignore b/cli/utils/browserslist-config/.gitignore new file mode 100644 index 00000000000..b1866059e68 --- /dev/null +++ b/cli/utils/browserslist-config/.gitignore @@ -0,0 +1,3 @@ +dist +node_modules +.DS_Store diff --git a/cli/utils/browserslist-config/CHANGELOG.md b/cli/utils/browserslist-config/CHANGELOG.md new file mode 100644 index 00000000000..5b858fcb743 --- /dev/null +++ b/cli/utils/browserslist-config/CHANGELOG.md @@ -0,0 +1,14 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/browserslist-config + +## [3.4.7](https://github.com/tsparticles/utils/compare/v3.4.6...v3.4.7) (2026-04-15) + +### Features + +- prepared browserslist config package ([ad5d6f0](https://github.com/tsparticles/utils/commit/ad5d6f0a229b69b479b69b9955aff4d049414a31)) diff --git a/palettes/confetti/confettiGold/LICENSE b/cli/utils/browserslist-config/LICENSE similarity index 100% rename from palettes/confetti/confettiGold/LICENSE rename to cli/utils/browserslist-config/LICENSE diff --git a/cli/utils/browserslist-config/README.md b/cli/utils/browserslist-config/README.md new file mode 100644 index 00000000000..8ebc93e72e9 --- /dev/null +++ b/cli/utils/browserslist-config/README.md @@ -0,0 +1,48 @@ +# @tsparticles/browserslist-config + +Shared Browserslist targets for tsParticles packages. + +## Installation + +```bash +pnpm add -D @tsparticles/browserslist-config browserslist +``` + +## Included Query + +Current configuration (`src/index.js` export): + +```js +module.exports = [ + "since 2021", + "not dead", +]; +``` + +## Usage + +Add this to your package `package.json`: + +```json +{ + "browserslist": [ + "extends @tsparticles/browserslist-config" + ] +} +``` + +Then verify with: + +```bash +pnpm exec browserslist +``` + +## Build (package maintainers) + +```bash +pnpm run build +``` + +## License + +MIT diff --git a/cli/utils/browserslist-config/package.json b/cli/utils/browserslist-config/package.json new file mode 100644 index 00000000000..b9127697f49 --- /dev/null +++ b/cli/utils/browserslist-config/package.json @@ -0,0 +1,29 @@ +{ + "name": "@tsparticles/browserslist-config", + "version": "4.0.0-beta.15", + "description": "tsParticles default Browserslist configuration", + "main": "dist/index.js", + "license": "MIT", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "cli/utils/browserslist-config" + }, + "publishConfig": { + "access": "public" + }, + "files": [ + "dist/" + ], + "scripts": { + "build": "cpx \"./src/**.*\" ./dist/", + "build:ci": "cpx \"./src/**.*\" ./dist/" + }, + "devDependencies": { + "browserslist": "^4.28.2", + "cpx2": "^8.0.2" + }, + "peerDependencies": { + "browserslist": "^4" + } +} diff --git a/cli/utils/browserslist-config/src/index.js b/cli/utils/browserslist-config/src/index.js new file mode 100644 index 00000000000..bed509107c1 --- /dev/null +++ b/cli/utils/browserslist-config/src/index.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = [ + "since 2021", + "not dead", +]; diff --git a/cli/utils/depcruise-config/CHANGELOG.md b/cli/utils/depcruise-config/CHANGELOG.md new file mode 100644 index 00000000000..9199083249e --- /dev/null +++ b/cli/utils/depcruise-config/CHANGELOG.md @@ -0,0 +1,104 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/depcruise-config + +## [3.4.7](https://github.com/tsparticles/utils/compare/v3.4.6...v3.4.7) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/depcruise-config + +## [3.4.6](https://github.com/tsparticles/utils/compare/v3.4.5...v3.4.6) (2026-04-05) + +**Note:** Version bump only for package @tsparticles/depcruise-config + +## [3.4.5](https://github.com/tsparticles/utils/compare/v3.4.4...v3.4.5) (2026-04-02) + +**Note:** Version bump only for package @tsparticles/depcruise-config + +## [3.4.4](https://github.com/tsparticles/utils/compare/v3.4.3...v3.4.4) (2026-04-02) + +**Note:** Version bump only for package @tsparticles/depcruise-config + +## [3.4.3](https://github.com/tsparticles/utils/compare/v3.4.2...v3.4.3) (2026-04-01) + +**Note:** Version bump only for package @tsparticles/depcruise-config + +## [3.4.2](https://github.com/tsparticles/utils/compare/v3.4.1...v3.4.2) (2026-03-31) + +**Note:** Version bump only for package @tsparticles/depcruise-config + +## [3.4.1](https://github.com/tsparticles/utils/compare/v3.4.0...v3.4.1) (2026-03-31) + +**Note:** Version bump only for package @tsparticles/depcruise-config + +# [3.4.0](https://github.com/tsparticles/utils/compare/v3.3.5...v3.4.0) (2026-03-31) + +**Note:** Version bump only for package @tsparticles/depcruise-config + +## [3.3.5](https://github.com/tsparticles/utils/compare/v3.3.4...v3.3.5) (2026-03-19) + +**Note:** Version bump only for package @tsparticles/depcruise-config + +## [3.3.4](https://github.com/tsparticles/utils/compare/v3.3.3...v3.3.4) (2026-03-16) + +**Note:** Version bump only for package @tsparticles/depcruise-config + +## [3.3.3](https://github.com/tsparticles/utils/compare/v3.3.2...v3.3.3) (2026-03-13) + +**Note:** Version bump only for package @tsparticles/depcruise-config + +## [3.3.2](https://github.com/tsparticles/utils/compare/v3.3.1...v3.3.2) (2026-03-11) + +**Note:** Version bump only for package @tsparticles/depcruise-config + +## [3.3.1](https://github.com/tsparticles/utils/compare/v3.3.0...v3.3.1) (2026-03-10) + +**Note:** Version bump only for package @tsparticles/depcruise-config + +# [3.3.0](https://github.com/tsparticles/utils/compare/v3.2.0...v3.3.0) (2026-03-08) + +**Note:** Version bump only for package @tsparticles/depcruise-config + +# [3.2.0](https://github.com/tsparticles/utils/compare/v3.1.9...v3.2.0) (2026-03-02) + +**Note:** Version bump only for package @tsparticles/depcruise-config + +## [3.1.9](https://github.com/tsparticles/utils/compare/v3.1.8...v3.1.9) (2026-02-24) + +**Note:** Version bump only for package @tsparticles/depcruise-config + +## [3.1.8](https://github.com/tsparticles/utils/compare/v3.1.7...v3.1.8) (2026-02-24) + +**Note:** Version bump only for package @tsparticles/depcruise-config + +## [3.1.7](https://github.com/tsparticles/utils/compare/v3.1.6...v3.1.7) (2026-02-24) + +**Note:** Version bump only for package @tsparticles/depcruise-config + +## [3.1.6](https://github.com/tsparticles/utils/compare/v3.1.5...v3.1.6) (2026-02-24) + +**Note:** Version bump only for package @tsparticles/depcruise-config + +## [3.1.5](https://github.com/tsparticles/utils/compare/v3.1.4...v3.1.5) (2026-02-24) + +**Note:** Version bump only for package @tsparticles/depcruise-config + +## [3.1.4](https://github.com/tsparticles/utils/compare/v3.1.3...v3.1.4) (2026-02-24) + +**Note:** Version bump only for package @tsparticles/depcruise-config + +## [3.1.3](https://github.com/tsparticles/utils/compare/v3.1.2...v3.1.3) (2026-02-24) + +### Bug Fixes + +- fixed publish scope ([7999291](https://github.com/tsparticles/utils/commit/7999291e558d931335a03366ddd2cd75a6d8bc2c)) + +## [3.1.2](https://github.com/tsparticles/utils/compare/v3.1.1...v3.1.2) (2026-02-02) + +### Features + +- add initial configuration files and setup for dependency-cruiser ([d166f87](https://github.com/tsparticles/utils/commit/d166f873e259c76047b0a061b10702061833c1d2)) diff --git a/palettes/confetti/confettiMonochromeBlue/LICENSE b/cli/utils/depcruise-config/LICENSE similarity index 100% rename from palettes/confetti/confettiMonochromeBlue/LICENSE rename to cli/utils/depcruise-config/LICENSE diff --git a/cli/utils/depcruise-config/README.md b/cli/utils/depcruise-config/README.md new file mode 100644 index 00000000000..23bb93b4945 --- /dev/null +++ b/cli/utils/depcruise-config/README.md @@ -0,0 +1,44 @@ +# @tsparticles/depcruise-config + +Shared Dependency Cruiser configuration for tsParticles packages. + +It exports: + +- `defaultConfig`: a reusable baseline ruleset +- `loadDependencyCruiserConfig(cwd?)`: async helper that loads local config files if present, otherwise falls back to `defaultConfig` + +## Installation + +```bash +pnpm add -D @tsparticles/depcruise-config dependency-cruiser +``` + +## Usage + +```ts +import { defaultConfig, loadDependencyCruiserConfig } from "@tsparticles/depcruise-config"; + +const config = await loadDependencyCruiserConfig(); +// fallback behavior: +// - loads .dependency-cruiser.cjs / .js / .mjs from cwd +// - returns defaultConfig when none are found +``` + +To use the shared defaults directly in your local file: + +```js +// .dependency-cruiser.mjs +import { defaultConfig } from "@tsparticles/depcruise-config"; + +export default defaultConfig; +``` + +## Build (package maintainers) + +```bash +pnpm run build +``` + +## License + +MIT diff --git a/cli/utils/depcruise-config/eslint.config.js b/cli/utils/depcruise-config/eslint.config.js new file mode 100644 index 00000000000..ea1f81c8524 --- /dev/null +++ b/cli/utils/depcruise-config/eslint.config.js @@ -0,0 +1,3 @@ +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; + +export default tsParticlesESLintConfig; diff --git a/cli/utils/depcruise-config/package.json b/cli/utils/depcruise-config/package.json new file mode 100644 index 00000000000..ff4349ef21b --- /dev/null +++ b/cli/utils/depcruise-config/package.json @@ -0,0 +1,60 @@ +{ + "name": "@tsparticles/depcruise-config", + "version": "4.0.0-beta.15", + "private": false, + "type": "module", + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "cli/utils/depcruise-config" + }, + "main": "dist/index.cjs", + "module": "dist/index.js", + "types": "dist/index.d.ts", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js", + "require": "./dist/index.cjs", + "default": "./dist/index.js" + } + }, + "files": [ + "dist" + ], + "scripts": { + "prettify:ci:src": "prettier --check ./src/*", + "prettify:ci:readme": "prettier --check ./README.md", + "prettify:src": "prettier --write ./src/*", + "prettify:readme": "prettier --write ./README.md", + "lint": "eslint src --ext .js,.jsx,.ts,.tsx --fix", + "lint:ci": "eslint src --ext .js,.jsx,.ts,.tsx", + "compile": "tsup", + "compile:ci": "tsup", + "build": "pnpm run prettify:src && pnpm run lint && pnpm run compile && pnpm run prettify:readme", + "build:ci": "pnpm run prettify:ci:src && pnpm run lint:ci && pnpm run compile && pnpm run prettify:ci:readme", + "prepack": "pnpm run build" + }, + "peerDependencies": { + "dependency-cruiser": "^17" + }, + "devDependencies": { + "@stylistic/eslint-plugin": "^5.10.0", + "@tsparticles/eslint-config": "workspace:^", + "@tsparticles/prettier-config": "workspace:^", + "@types/node": "^25.6.2", + "dependency-cruiser": "^17.4.0", + "eslint": "^10.3.0", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-jsdoc": "^62.9.0", + "eslint-plugin-tsdoc": "^0.5.2", + "prettier": "^3.8.3", + "prettier-plugin-multiline-arrays": "^4.1.8", + "tsup": "^8.5.1", + "typescript": "^6.0.3", + "typescript-eslint": "^8.59.2" + } +} diff --git a/cli/utils/depcruise-config/src/bootstrap.mjs b/cli/utils/depcruise-config/src/bootstrap.mjs new file mode 100644 index 00000000000..490f7404796 --- /dev/null +++ b/cli/utils/depcruise-config/src/bootstrap.mjs @@ -0,0 +1,40 @@ +/* eslint-disable sort-imports, @typescript-eslint/explicit-function-return-type, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access */ +import fs from "node:fs"; +import path from "node:path"; +import { fileURLToPath, pathToFileURL } from "node:url"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + packageRoot = path.resolve(__dirname, ".."), + workspaceRoot = path.resolve(packageRoot, "..", "..", ".."), + localDist = path.join(packageRoot, "dist", "index.js"), + pnpmStorePath = path.join(workspaceRoot, "node_modules", ".pnpm"); + +/** + * + */ +function findPublishedDist() { + if (!fs.existsSync(pnpmStorePath)) { + return undefined; + } + + const candidates = fs + .readdirSync(pnpmStorePath) + .filter((entry) => entry.startsWith("@tsparticles+depcruise-config@")) + .map((entry) => + path.join(pnpmStorePath, entry, "node_modules", "@tsparticles", "depcruise-config", "dist", "index.js"), + ); + + return candidates.find((candidate) => fs.existsSync(candidate)); +} + +const resolvedEntry = fs.existsSync(localDist) ? localDist : findPublishedDist(); + +if (!resolvedEntry) { + throw new Error("Cannot resolve a built depcruise-config entrypoint from the workspace package or pnpm store."); +} + +const moduleExports = await import(pathToFileURL(resolvedEntry).href); + +export const defaultConfig = moduleExports.defaultConfig; +export const loadDependencyCruiserConfig = moduleExports.loadDependencyCruiserConfig; diff --git a/cli/utils/depcruise-config/src/defaultConfig.ts b/cli/utils/depcruise-config/src/defaultConfig.ts new file mode 100644 index 00000000000..a6b8b5d7dce --- /dev/null +++ b/cli/utils/depcruise-config/src/defaultConfig.ts @@ -0,0 +1,366 @@ +import type { IConfiguration } from "dependency-cruiser"; + +export const defaultConfig: IConfiguration = { + forbidden: [ + { + name: "no-circular", + severity: "warn", + comment: + "This dependency is part of a circular relationship. You might want to revise " + + "your solution (i.e. use dependency inversion, make sure the modules have a single responsibility) ", + from: {}, + to: { + circular: true, + }, + }, + { + name: "no-orphans", + comment: + "This is an orphan module - it's likely not used (anymore?). Either use it or " + + "remove it. If it's logical this module is an orphan (i.e. it's a config file), " + + "add an exception for it in your dependency-cruiser configuration. By default " + + "this rule does not scrutinize dot-files (e.g. .eslintrc.js), TypeScript declaration " + + "files (.d.ts), tsconfig.json and some of the babel and webpack configs.", + severity: "warn", + from: { + orphan: true, + pathNot: [ + "(^|/)[.][^/]+[.](?:js|cjs|mjs|ts|cts|mts|json)$", // dot files + "[.]d[.]ts$", // TypeScript declaration files + "(^|/)tsconfig[.]json$", // TypeScript config + "(^|/)(?:babel|webpack)[.]config[.](?:js|cjs|mjs|ts|cts|mts|json)$", // other configs + ], + }, + to: {}, + }, + { + name: "no-deprecated-core", + comment: + "A module depends on a node core module that has been deprecated. Find an alternative - these are " + + "bound to exist - node doesn't deprecate lightly.", + severity: "warn", + from: {}, + to: { + dependencyTypes: ["core"], + path: [ + "^v8/tools/codemap$", + "^v8/tools/consarray$", + "^v8/tools/csvparser$", + "^v8/tools/logreader$", + "^v8/tools/profile_view$", + "^v8/tools/profile$", + "^v8/tools/SourceMap$", + "^v8/tools/splaytree$", + "^v8/tools/tickprocessor-driver$", + "^v8/tools/tickprocessor$", + "^node-inspect/lib/_inspect$", + "^node-inspect/lib/internal/inspect_client$", + "^node-inspect/lib/internal/inspect_repl$", + "^async_hooks$", + "^punycode$", + "^domain$", + "^constants$", + "^sys$", + "^_linklist$", + "^_stream_wrap$", + ], + }, + }, + { + name: "not-to-deprecated", + comment: + "This module uses a (version of an) npm module that has been deprecated. Either upgrade to a later " + + "version of that module, or find an alternative. Deprecated modules are a security risk.", + severity: "warn", + from: {}, + to: { + dependencyTypes: ["deprecated"], + }, + }, + { + name: "no-non-package-json", + severity: "error", + comment: + "This module depends on an npm package that isn't in the 'dependencies' section of your package.json. " + + "That's problematic as the package either (1) won't be available on live (2 - worse) will be " + + "available on live with an non-guaranteed version. Fix it by adding the package to the dependencies " + + "in your package.json.", + from: {}, + to: { + dependencyTypes: ["npm-no-pkg", "npm-unknown"], + }, + }, + { + name: "not-to-unresolvable", + comment: + "This module depends on a module that cannot be found ('resolved to disk'). If it's an npm " + + "module: add it to your package.json. In all other cases you likely already know what to do.", + severity: "error", + from: {}, + to: { + couldNotResolve: true, + }, + }, + { + name: "no-duplicate-dep-types", + comment: + "Likely this module depends on an external ('npm') package that occurs more than once " + + "in your package.json i.e. bot as a devDependencies and in dependencies. This will cause " + + "maintenance problems later on.", + severity: "warn", + from: {}, + to: { + moreThanOneDependencyType: true, + // as it's common to use a devDependency for type-only imports: don't + // consider type-only dependencyTypes for this rule + dependencyTypesNot: ["type-only"], + }, + }, + + // rules you might want to tweak for your specific situation: + { + name: "not-to-test", + comment: + "This module depends on code within a folder that should only contain tests. As tests don't " + + "implement functionality this is odd. Either you're writing a test outside the test folder " + + "or there's something in the test folder that isn't a test.", + severity: "error", + from: { + pathNot: "^(tests)", + }, + to: { + path: "^(tests)", + }, + }, + { + name: "not-to-spec", + comment: + "This module depends on a spec (test) file. The responsibility of a spec file is to test code. " + + "If there's something in a spec that's of use to other modules, it doesn't have that single " + + "responsibility anymore. Factor it out into (e.g.) a separate utility/ helper or a mock.", + severity: "error", + from: {}, + to: { + path: "[.](?:spec|test)[.](?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$", + }, + }, + { + name: "not-to-dev-dep", + severity: "error", + comment: + "This module depends on an npm package from the 'devDependencies' section of your " + + "package.json. It looks like something that ships to production, though. To prevent problems " + + "with npm packages that aren't there on production declare it (only!) in the 'dependencies'" + + "section of your package.json. If this module is development only - add it to the " + + "from.pathNot re of the not-to-dev-dep rule in the dependency-cruiser configuration", + from: { + path: "^(src)", + pathNot: "[.](?:spec|test)[.](?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$", + }, + to: { + dependencyTypes: ["npm-dev"], + // type only dependencies are not a problem as they don't end up in the + // production code or are ignored by the runtime. + dependencyTypesNot: ["type-only"], + pathNot: ["node_modules/@types/"], + }, + }, + { + name: "optional-deps-used", + severity: "info", + comment: + "This module depends on an npm package that is declared as an optional dependency " + + "in your package.json. As this makes sense in limited situations only, it's flagged here. " + + "If you use an optional dependency here by design - add an exception to your" + + "dependency-cruiser configuration.", + from: {}, + to: { + dependencyTypes: ["npm-optional"], + }, + }, + { + name: "peer-deps-used", + comment: + "This module depends on an npm package that is declared as a peer dependency " + + "in your package.json. This makes sense if your package is e.g. a plugin, but in " + + "other cases - maybe not so much. If the use of a peer dependency is intentional " + + "add an exception to your dependency-cruiser configuration.", + severity: "warn", + from: {}, + to: { + dependencyTypes: ["npm-peer"], + }, + }, + ], + options: { + // Which modules not to follow further when encountered + doNotFollow: { + // path: an array of regular expressions in strings to match against + path: ["node_modules"], + }, + + // Which modules to exclude + // exclude : { + // // path: an array of regular expressions in strings to match against + // path: '', + // }, + + // Which modules to exclusively include (array of regular expressions in strings) + // dependency-cruiser will skip everything that doesn't match this pattern + // includeOnly : [''], + + // List of module systems to cruise. + // When left out dependency-cruiser will fall back to the list of _all_ + // module systems it knows of ('amd', 'cjs', 'es6', 'tsd']). It's the + // default because it's the safe option. It comes at a performance penalty, though + // As in practice only commonjs ('cjs') and ecmascript modules ('es6') + // are in wide use, you can limit the moduleSystems to those. + // moduleSystems: ['cjs', 'es6'], + + // false: don't look at JSDoc imports (the default) + // true: detect dependencies in JSDoc-style import statements. + // Implies parser: 'tsc', which a.o. means the typescript compiler will need + // to be installed in the same spot you run dependency-cruiser from. + // detectJSDocImports: true, + + // false: don't look at process.getBuiltinModule calls (the default) + // true: dependency-cruiser will detect calls to process.getBuiltinModule/ + // globalThis.process.getBuiltinModule as imports. + // detectProcessBuiltinModuleCalls: true, + + // prefix for links in html, d2, mermaid and dot/ svg output (e.g. 'https://github.com/you/yourrepo/blob/main/' + // to open it on your online repo or `vscode://file/${process.cwd()}/` to + // open it in visual studio code), + // prefix: `vscode://file/${process.cwd()}/`, + + // suffix for links in output. E.g. put .html here if you use it to link to + // your coverage reports. + // suffix: '.html', + + // false (the default): ignore dependencies that only exist before typescript-to-javascript compilation + // true: also detect dependencies that only exist before typescript-to-javascript compilation + // 'specify': for each dependency identify whether it only exists before compilation or also after + // tsPreCompilationDeps: false, + + // list of extensions to scan that aren't javascript or compile-to-javascript. + // Empty by default. Only put extensions in here that you want to take into + // account that are _not_ parsable. + // extraExtensionsToScan: ['.json', '.jpg', '.png', '.svg', '.webp'], + + // if true combines the package.jsons found from the module up to the base + // folder the cruise is initiated from. Useful for how (some) mono-repos + // manage dependencies & dependency definitions. + // combinedDependencies: false, + + // if true leave symlinks untouched, otherwise use the realpath + // preserveSymlinks: false, + + // TypeScript project file ('tsconfig.json') to use for + // (1) compilation and + // (2) resolution (e.g. with the paths property) + // + // The (optional) fileName attribute specifies which file to take (relative to + // dependency-cruiser's current working directory). When not provided + // defaults to './tsconfig.json'. + // tsConfig: { + // fileName: './tsconfig.json' + // }, + + // Webpack configuration to use to get resolve options from. + // + // The (optional) fileName attribute specifies which file to take (relative + // to dependency-cruiser's current working directory. When not provided defaults + // to './webpack.conf.js'. + // + // The (optional) 'env' and 'arguments' attributes contain the parameters + // to be passed if your webpack config is a function and takes them (see + // webpack documentation for details) + // webpackConfig: { + // fileName: 'webpack.config.js', + // env: {}, + // arguments: {} + // }, + + // Babel config ('.babelrc', '.babelrc.json', '.babelrc.json5', ...) to use + // for compilation + // babelConfig: { + // fileName: '.babelrc', + // }, + + // List of strings you have in use in addition to cjs/ es6 requires + // & imports to declare module dependencies. Use this e.g. if you've + // re-declared require, use a require-wrapper or use window.require as + // a hack. + // exoticRequireStrings: [], + + // options to pass on to enhanced-resolve, the package dependency-cruiser + // uses to resolve module references to disk. The values below should be + // suitable for most situations + // + // If you use webpack: you can also set these in webpack.conf.js. The set + // there will override the ones specified here. + enhancedResolveOptions: { + // What to consider as an 'exports' field in package.jsons + exportsFields: ["exports"], + + // List of conditions to check for in the exports field. + // Only works when the 'exportsFields' array is non-empty. + conditionNames: ["import", "require", "node", "default", "types"], + + // The extensions, by default are the same as the ones dependency-cruiser + // can access (run `npx depcruise --info` to see which ones that are in + // _your_ environment). If that list is larger than you need you can pass + // the extensions you actually use (e.g. ['.js', '.jsx']). This can speed + // up module resolution, which is the most expensive step. + // extensions: [".js", ".jsx", ".ts", ".tsx", ".d.ts"], + + // What to consider a 'main' field in package.json + mainFields: ["module", "main", "types", "typings"], + + // A list of alias fields in package.jsons + // See https://github.com/defunctzombie/package-browser-field-spec and + // the webpack [resolve.alias](https://webpack.js.org/configuration/resolve/#resolvealiasfields) + // documentation. + // Defaults to an empty array (= don't use alias fields). + // aliasFields: ['browser'], + }, + + // skipAnalysisNotInRules will make dependency-cruiser execute + // analysis strictly necessary for checking the rule set only. + // See https://github.com/sverweij/dependency-cruiser/blob/main/doc/options-reference.md#skipanalysisnotinrules + skipAnalysisNotInRules: true, + + reporterOptions: { + dot: { + // Pattern of modules to consolidate to. The default pattern in this configuration + // collapses everything in node_modules to one folder deep so you see + // the external modules, but not their innards. + collapsePattern: "node_modules/(?:@[^/]+/[^/]+|[^/]+)", + + // Options to tweak the appearance of your graph. See + // https://github.com/sverweij/dependency-cruiser/blob/main/doc/options-reference.md#reporteroptions + // If you don't specify a theme dependency-cruiser falls back to a built-in one. + // theme: { + // graph: { + // // splines: 'ortho' - straight lines; slow on big graphs + // // splines: 'true' - bezier curves; fast but not as nice as ortho + // splines: 'true' + // }, + // }, + }, + archi: { + // Pattern of modules to consolidate to. + collapsePattern: + "^(?:packages|src|lib(s?)|app(s?)|bin|test(s?)|spec(s?))/[^/]+|node_modules/(?:@[^/]+/[^/]+|[^/]+)", + + // Options to tweak the appearance of your graph. If you don't specify a + // theme for 'archi' dependency-cruiser will use the one specified in the + // dot section above and otherwise use the default one. + // theme: { }, + }, + text: { + highlightFocused: true, + }, + }, + }, +}; diff --git a/cli/utils/depcruise-config/src/index.ts b/cli/utils/depcruise-config/src/index.ts new file mode 100644 index 00000000000..33bfcd51e91 --- /dev/null +++ b/cli/utils/depcruise-config/src/index.ts @@ -0,0 +1,2 @@ +export { defaultConfig } from "./defaultConfig.js"; +export { loadDependencyCruiserConfig } from "./loadConfig.js"; diff --git a/cli/utils/depcruise-config/src/loadConfig.ts b/cli/utils/depcruise-config/src/loadConfig.ts new file mode 100644 index 00000000000..0b21ebbef4e --- /dev/null +++ b/cli/utils/depcruise-config/src/loadConfig.ts @@ -0,0 +1,45 @@ +import type { IConfiguration } from "dependency-cruiser"; +import { defaultConfig } from "./defaultConfig.js"; +import fs from "node:fs"; +import path from "node:path"; +import { pathToFileURL } from "node:url"; + +const CONFIG_FILES = [ + ".dependency-cruiser.cjs", + ".dependency-cruiser.js", + ".dependency-cruiser.mjs", +]; + +/** + * Type guard for config module import. + * @param value - the imported module + * @returns true if the imported module is a config object + */ +function isConfigModule(value: unknown): value is { default?: IConfiguration } { + return typeof value === "object" && value !== null; +} + +/** + * Loads the Dependency Cruiser configuration. + * @param cwd - The current working directory. + * @returns The loaded Dependency Cruiser configuration or the default one. + */ +export async function loadDependencyCruiserConfig(cwd = process.cwd()): Promise { + for (const file of CONFIG_FILES) { + const fullPath = path.join(cwd, file); + + if (fs.existsSync(fullPath)) { + const mod: unknown = await import(pathToFileURL(fullPath).href); + + if (isConfigModule(mod) && mod.default) { + return mod.default; + } + + if (isConfigModule(mod)) { + return mod as IConfiguration; + } + } + } + + return defaultConfig; +} diff --git a/cli/utils/depcruise-config/tsconfig.json b/cli/utils/depcruise-config/tsconfig.json new file mode 100644 index 00000000000..b5ff457bf5b --- /dev/null +++ b/cli/utils/depcruise-config/tsconfig.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "strict": true, + "declaration": true, + "declarationMap": true, + "outDir": "dist", + "esModuleInterop": true, + "resolveJsonModule": true, + "forceConsistentCasingInFileNames": true, + "sourceRoot": "src", + "sourceMap": true, + "types": ["node"] + } +} diff --git a/cli/utils/depcruise-config/tsup.config.ts b/cli/utils/depcruise-config/tsup.config.ts new file mode 100644 index 00000000000..84f1bb361fe --- /dev/null +++ b/cli/utils/depcruise-config/tsup.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from "tsup"; + +export default defineConfig({ + entry: ["src/index.ts"], + format: ["esm", "cjs"], + dts: true, + clean: true, +}); diff --git a/cli/utils/eslint-config/.gitignore b/cli/utils/eslint-config/.gitignore new file mode 100644 index 00000000000..4f9cbbe5e0b --- /dev/null +++ b/cli/utils/eslint-config/.gitignore @@ -0,0 +1,3 @@ +dist +node_modules +.DS_Store \ No newline at end of file diff --git a/cli/utils/eslint-config/CHANGELOG.md b/cli/utils/eslint-config/CHANGELOG.md new file mode 100644 index 00000000000..08bb6d2e20c --- /dev/null +++ b/cli/utils/eslint-config/CHANGELOG.md @@ -0,0 +1,363 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/eslint-config + +## [3.4.7](https://github.com/tsparticles/utils/compare/v3.4.6...v3.4.7) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/eslint-config + +## [3.4.6](https://github.com/tsparticles/utils/compare/v3.4.5...v3.4.6) (2026-04-05) + +**Note:** Version bump only for package @tsparticles/eslint-config + +## [3.4.5](https://github.com/tsparticles/utils/compare/v3.4.4...v3.4.5) (2026-04-02) + +**Note:** Version bump only for package @tsparticles/eslint-config + +## [3.4.4](https://github.com/tsparticles/utils/compare/v3.4.3...v3.4.4) (2026-04-02) + +**Note:** Version bump only for package @tsparticles/eslint-config + +## [3.4.3](https://github.com/tsparticles/utils/compare/v3.4.2...v3.4.3) (2026-04-01) + +**Note:** Version bump only for package @tsparticles/eslint-config + +## [3.4.2](https://github.com/tsparticles/utils/compare/v3.4.1...v3.4.2) (2026-03-31) + +**Note:** Version bump only for package @tsparticles/eslint-config + +## [3.4.1](https://github.com/tsparticles/utils/compare/v3.4.0...v3.4.1) (2026-03-31) + +**Note:** Version bump only for package @tsparticles/eslint-config + +# [3.4.0](https://github.com/tsparticles/utils/compare/v3.3.5...v3.4.0) (2026-03-31) + +**Note:** Version bump only for package @tsparticles/eslint-config + +## [3.3.5](https://github.com/tsparticles/utils/compare/v3.3.4...v3.3.5) (2026-03-19) + +**Note:** Version bump only for package @tsparticles/eslint-config + +## [3.3.4](https://github.com/tsparticles/utils/compare/v3.3.3...v3.3.4) (2026-03-16) + +**Note:** Version bump only for package @tsparticles/eslint-config + +## [3.3.3](https://github.com/tsparticles/utils/compare/v3.3.2...v3.3.3) (2026-03-13) + +**Note:** Version bump only for package @tsparticles/eslint-config + +## [3.3.2](https://github.com/tsparticles/utils/compare/v3.3.1...v3.3.2) (2026-03-11) + +**Note:** Version bump only for package @tsparticles/eslint-config + +## [3.3.1](https://github.com/tsparticles/utils/compare/v3.3.0...v3.3.1) (2026-03-10) + +**Note:** Version bump only for package @tsparticles/eslint-config + +# [3.3.0](https://github.com/tsparticles/utils/compare/v3.2.0...v3.3.0) (2026-03-08) + +**Note:** Version bump only for package @tsparticles/eslint-config + +# [3.2.0](https://github.com/tsparticles/utils/compare/v3.1.9...v3.2.0) (2026-03-02) + +**Note:** Version bump only for package @tsparticles/eslint-config + +## [3.1.9](https://github.com/tsparticles/utils/compare/v3.1.8...v3.1.9) (2026-02-24) + +**Note:** Version bump only for package @tsparticles/eslint-config + +## [3.1.8](https://github.com/tsparticles/utils/compare/v3.1.7...v3.1.8) (2026-02-24) + +**Note:** Version bump only for package @tsparticles/eslint-config + +## [3.1.7](https://github.com/tsparticles/utils/compare/v3.1.6...v3.1.7) (2026-02-24) + +**Note:** Version bump only for package @tsparticles/eslint-config + +## [3.1.6](https://github.com/tsparticles/utils/compare/v3.1.5...v3.1.6) (2026-02-24) + +**Note:** Version bump only for package @tsparticles/eslint-config + +## [3.1.5](https://github.com/tsparticles/utils/compare/v3.1.4...v3.1.5) (2026-02-24) + +**Note:** Version bump only for package @tsparticles/eslint-config + +## [3.1.4](https://github.com/tsparticles/utils/compare/v3.1.3...v3.1.4) (2026-02-24) + +**Note:** Version bump only for package @tsparticles/eslint-config + +## [3.1.3](https://github.com/tsparticles/utils/compare/v3.1.2...v3.1.3) (2026-02-24) + +**Note:** Version bump only for package @tsparticles/eslint-config + +## [3.1.1](https://github.com/tsparticles/utils/compare/v3.1.0...v3.1.1) (2026-02-02) + +**Note:** Version bump only for package @tsparticles/eslint-config + +# [3.1.0](https://github.com/tsparticles/utils/compare/v3.0.14...v3.1.0) (2026-02-01) + +**Note:** Version bump only for package @tsparticles/eslint-config + +## [3.0.13](https://github.com/tsparticles/utils/compare/v3.0.12...v3.0.13) (2026-01-27) + +**Note:** Version bump only for package @tsparticles/eslint-config + +## [3.0.12](https://github.com/tsparticles/utils/compare/v3.0.11...v3.0.12) (2026-01-27) + +**Note:** Version bump only for package @tsparticles/eslint-config + +## [3.0.11](https://github.com/tsparticles/utils/compare/v3.0.10...v3.0.11) (2026-01-22) + +**Note:** Version bump only for package @tsparticles/eslint-config + +## [3.0.10](https://github.com/tsparticles/utils/compare/v3.0.9...v3.0.10) (2026-01-22) + +### Bug Fixes + +- **deps:** update dependency eslint-plugin-jsdoc to v62 ([7bffdcd](https://github.com/tsparticles/utils/commit/7bffdcd38d071ac1a8ff8c2d10993507ee2ffc08)) + +## [3.0.9](https://github.com/tsparticles/utils/compare/v3.0.8...v3.0.9) (2025-12-30) + +**Note:** Version bump only for package @tsparticles/eslint-config + +## [3.0.7](https://github.com/tsparticles/utils/compare/v3.0.6...v3.0.7) (2025-12-28) + +**Note:** Version bump only for package @tsparticles/eslint-config + +## [3.0.6](https://github.com/tsparticles/utils/compare/v3.0.5...v3.0.6) (2025-12-20) + +**Note:** Version bump only for package @tsparticles/eslint-config + +## [3.0.5](https://github.com/tsparticles/utils/compare/v3.0.4...v3.0.5) (2025-08-31) + +**Note:** Version bump only for package @tsparticles/eslint-config + +## [3.0.3](https://github.com/tsparticles/utils/compare/v3.0.2...v3.0.3) (2025-08-31) + +**Note:** Version bump only for package @tsparticles/eslint-config + +## [3.0.2](https://github.com/tsparticles/utils/compare/v3.0.1...v3.0.2) (2025-08-31) + +**Note:** Version bump only for package @tsparticles/eslint-config + +## [3.0.1](https://github.com/tsparticles/utils/compare/v2.3.0...v3.0.1) (2025-08-31) + +### Bug Fixes + +- fixed config ([c94929a](https://github.com/tsparticles/utils/commit/c94929a98f0fd764b750730e45e8efc62a3010bd)) + +# [3.0.0](https://github.com/tsparticles/utils/compare/v2.3.0...v3.0.0) (2025-08-31) + +### Bug Fixes + +- fixed config ([c94929a](https://github.com/tsparticles/utils/commit/c94929a98f0fd764b750730e45e8efc62a3010bd)) + +# [2.3.0](https://github.com/tsparticles/utils/compare/v2.2.1...v2.3.0) (2024-03-06) + +**Note:** Version bump only for package @tsparticles/eslint-config + +## [2.2.1](https://github.com/tsparticles/utils/compare/v2.2.0...v2.2.1) (2024-03-02) + +**Note:** Version bump only for package @tsparticles/eslint-config + +# [2.2.0](https://github.com/tsparticles/utils/compare/v2.1.7...v2.2.0) (2024-03-02) + +**Note:** Version bump only for package @tsparticles/eslint-config + +## [2.1.6](https://github.com/tsparticles/utils/compare/v2.1.5...v2.1.6) (2024-02-26) + +**Note:** Version bump only for package @tsparticles/eslint-config + +## [2.1.4](https://github.com/tsparticles/utils/compare/v2.1.3...v2.1.4) (2024-01-31) + +**Note:** Version bump only for package @tsparticles/eslint-config + +# [2.1.0](https://github.com/tsparticles/utils/compare/v2.0.5...v2.1.0) (2024-01-28) + +**Note:** Version bump only for package @tsparticles/eslint-config + +## [2.0.5](https://github.com/tsparticles/utils/compare/v2.0.4...v2.0.5) (2024-01-14) + +### Bug Fixes + +- **deps:** update dependency eslint-plugin-jsdoc to v48 ([bc2be62](https://github.com/tsparticles/utils/commit/bc2be6245096e0c455ffd406f72605fbf6efc2a8)) + +## [2.0.4](https://github.com/tsparticles/utils/compare/v2.0.3...v2.0.4) (2023-12-13) + +**Note:** Version bump only for package @tsparticles/eslint-config + +## [2.0.3](https://github.com/tsparticles/utils/compare/v2.0.2...v2.0.3) (2023-12-13) + +**Note:** Version bump only for package @tsparticles/eslint-config + +## [2.0.2](https://github.com/tsparticles/utils/compare/v2.0.1...v2.0.2) (2023-12-13) + +**Note:** Version bump only for package @tsparticles/eslint-config + +## 2.0.1 (2023-12-12) + +### Bug Fixes + +- **deps:** update dependency eslint-config-prettier to v9 ([b950d9f](https://github.com/tsparticles/utils/commit/b950d9f2eeca55228d613d6db00ffba0402d0634)) +- **deps:** update dependency eslint-plugin-jsdoc to v44 ([b00f1fd](https://github.com/tsparticles/utils/commit/b00f1fd85756fb21c0eb3625f032d27fc1332659)) +- **deps:** update dependency eslint-plugin-jsdoc to v45 ([4d0e75c](https://github.com/tsparticles/utils/commit/4d0e75c42cbde77cf5413c1322423b6e04085d09)) +- **deps:** update dependency eslint-plugin-jsdoc to v46 ([91247e7](https://github.com/tsparticles/utils/commit/91247e794b3d8275afe12740fdd178a8e69b8b75)) + +### Features + +- added additional externals parameter to webpack plugin ([01c94e8](https://github.com/tsparticles/utils/commit/01c94e8aea203c6c277cc612848a2b22a928a230)) +- added effects support ([d1e1743](https://github.com/tsparticles/utils/commit/d1e17431a2b1af081f62f0e52bc7436e3b83e863)) +- added eslint-plugin-import for enforcing .js at the end of every import ([be58415](https://github.com/tsparticles/utils/commit/be5841584f4b3a6d6b011031548e8c1929b05c2c)) + +# [2.0.0](https://github.com/tsparticles/utils/compare/@tsparticles/eslint-config@2.0.0-beta.8...@tsparticles/eslint-config@2.0.0) (2023-11-21) + +**Note:** Version bump only for package @tsparticles/eslint-config + +# [2.0.0-beta.8](https://github.com/tsparticles/utils/compare/@tsparticles/eslint-config@2.0.0-beta.7...@tsparticles/eslint-config@2.0.0-beta.8) (2023-11-20) + +**Note:** Version bump only for package @tsparticles/eslint-config + +# [2.0.0-beta.7](https://github.com/tsparticles/utils/compare/@tsparticles/eslint-config@2.0.0-beta.6...@tsparticles/eslint-config@2.0.0-beta.7) (2023-11-14) + +**Note:** Version bump only for package @tsparticles/eslint-config + +# [2.0.0-beta.6](https://github.com/tsparticles/utils/compare/@tsparticles/eslint-config@2.0.0-beta.5...@tsparticles/eslint-config@2.0.0-beta.6) (2023-11-07) + +**Note:** Version bump only for package @tsparticles/eslint-config + +# [2.0.0-beta.5](https://github.com/tsparticles/utils/compare/@tsparticles/eslint-config@2.0.0-beta.4...@tsparticles/eslint-config@2.0.0-beta.5) (2023-11-01) + +**Note:** Version bump only for package @tsparticles/eslint-config + +# [2.0.0-beta.4](https://github.com/tsparticles/utils/compare/@tsparticles/eslint-config@2.0.0-beta.3...@tsparticles/eslint-config@2.0.0-beta.4) (2023-10-26) + +### Features + +- added effects support ([d1e1743](https://github.com/tsparticles/utils/commit/d1e17431a2b1af081f62f0e52bc7436e3b83e863)) + +# [2.0.0-beta.3](https://github.com/tsparticles/utils/compare/@tsparticles/eslint-config@2.0.0-beta.2...@tsparticles/eslint-config@2.0.0-beta.3) (2023-10-22) + +**Note:** Version bump only for package @tsparticles/eslint-config + +# [2.0.0-beta.2](https://github.com/tsparticles/utils/compare/@tsparticles/eslint-config@2.0.0-beta.1...@tsparticles/eslint-config@2.0.0-beta.2) (2023-10-02) + +**Note:** Version bump only for package @tsparticles/eslint-config + +# [2.0.0-beta.1](https://github.com/tsparticles/utils/compare/@tsparticles/eslint-config@2.0.0-beta.0...@tsparticles/eslint-config@2.0.0-beta.1) (2023-08-26) + +**Note:** Version bump only for package @tsparticles/eslint-config + +# [2.0.0-beta.0](https://github.com/tsparticles/utils/compare/@tsparticles/eslint-config@1.20.0...@tsparticles/eslint-config@2.0.0-beta.0) (2023-08-25) + +**Note:** Version bump only for package @tsparticles/eslint-config + +# [1.20.0](https://github.com/tsparticles/utils/compare/@tsparticles/eslint-config@1.19.0...@tsparticles/eslint-config@1.20.0) (2023-08-08) + +### Bug Fixes + +- **deps:** update dependency eslint-config-prettier to v9 ([b950d9f](https://github.com/tsparticles/utils/commit/b950d9f2eeca55228d613d6db00ffba0402d0634)) + +# [1.19.0](https://github.com/tsparticles/utils/compare/@tsparticles/eslint-config@1.18.0...@tsparticles/eslint-config@1.19.0) (2023-08-03) + +**Note:** Version bump only for package @tsparticles/eslint-config + +# [1.18.0](https://github.com/tsparticles/utils/compare/@tsparticles/eslint-config@1.17.0...@tsparticles/eslint-config@1.18.0) (2023-07-15) + +**Note:** Version bump only for package @tsparticles/eslint-config + +# [1.17.0](https://github.com/tsparticles/utils/compare/@tsparticles/eslint-config@1.16.0...@tsparticles/eslint-config@1.17.0) (2023-07-10) + +**Note:** Version bump only for package @tsparticles/eslint-config + +# [1.16.0](https://github.com/tsparticles/utils/compare/@tsparticles/eslint-config@1.15.0...@tsparticles/eslint-config@1.16.0) (2023-07-10) + +**Note:** Version bump only for package @tsparticles/eslint-config + +# [1.15.0](https://github.com/tsparticles/utils/compare/@tsparticles/eslint-config@1.14.0...@tsparticles/eslint-config@1.15.0) (2023-07-05) + +**Note:** Version bump only for package @tsparticles/eslint-config + +# [1.14.0](https://github.com/tsparticles/utils/compare/@tsparticles/eslint-config@1.13.3...@tsparticles/eslint-config@1.14.0) (2023-06-29) + +### Features + +- added additional externals parameter to webpack plugin ([01c94e8](https://github.com/tsparticles/utils/commit/01c94e8aea203c6c277cc612848a2b22a928a230)) + +## [1.13.3](https://github.com/tsparticles/utils/compare/@tsparticles/eslint-config@1.13.2...@tsparticles/eslint-config@1.13.3) (2023-06-21) + +**Note:** Version bump only for package @tsparticles/eslint-config + +## [1.13.2](https://github.com/tsparticles/utils/compare/@tsparticles/eslint-config@1.13.1...@tsparticles/eslint-config@1.13.2) (2023-06-20) + +**Note:** Version bump only for package @tsparticles/eslint-config + +## [1.13.1](https://github.com/tsparticles/utils/compare/@tsparticles/eslint-config@1.13.0...@tsparticles/eslint-config@1.13.1) (2023-06-20) + +### Features + +- added eslint-plugin-import for enforcing .js at the end of every import ([be58415](https://github.com/tsparticles/utils/commit/be5841584f4b3a6d6b011031548e8c1929b05c2c)) + +# [1.13.0](https://github.com/tsparticles/utils/compare/@tsparticles/eslint-config@1.12.1...@tsparticles/eslint-config@1.13.0) (2023-06-20) + +**Note:** Version bump only for package @tsparticles/eslint-config + +## [1.12.1](https://github.com/tsparticles/utils/compare/@tsparticles/eslint-config@1.12.0...@tsparticles/eslint-config@1.12.1) (2023-06-05) + +**Note:** Version bump only for package @tsparticles/eslint-config + +# [1.12.0](https://github.com/tsparticles/utils/compare/@tsparticles/eslint-config@1.11.0...@tsparticles/eslint-config@1.12.0) (2023-06-04) + +### Bug Fixes + +- **deps:** update dependency eslint-plugin-jsdoc to v44 ([b00f1fd](https://github.com/tsparticles/utils/commit/b00f1fd85756fb21c0eb3625f032d27fc1332659)) +- **deps:** update dependency eslint-plugin-jsdoc to v45 ([4d0e75c](https://github.com/tsparticles/utils/commit/4d0e75c42cbde77cf5413c1322423b6e04085d09)) +- **deps:** update dependency eslint-plugin-jsdoc to v46 ([91247e7](https://github.com/tsparticles/utils/commit/91247e794b3d8275afe12740fdd178a8e69b8b75)) + +# [1.11.0](https://github.com/tsparticles/utils/compare/@tsparticles/eslint-config@1.10.0...@tsparticles/eslint-config@1.11.0) (2023-04-18) + +**Note:** Version bump only for package @tsparticles/eslint-config + +# [1.10.0](https://github.com/tsparticles/utils/compare/@tsparticles/eslint-config@1.9.1...@tsparticles/eslint-config@1.10.0) (2023-04-14) + +**Note:** Version bump only for package @tsparticles/eslint-config + +## [1.9.1](https://github.com/tsparticles/utils/compare/@tsparticles/eslint-config@1.9.0...@tsparticles/eslint-config@1.9.1) (2023-04-11) + +**Note:** Version bump only for package @tsparticles/eslint-config + +# [1.9.0](https://github.com/tsparticles/utils/compare/@tsparticles/eslint-config@1.8.0...@tsparticles/eslint-config@1.9.0) (2023-04-11) + +**Note:** Version bump only for package @tsparticles/eslint-config + +# [1.8.0](https://github.com/tsparticles/utils/compare/@tsparticles/eslint-config@1.7.0...@tsparticles/eslint-config@1.8.0) (2023-04-09) + +**Note:** Version bump only for package @tsparticles/eslint-config + +# [1.7.0](https://github.com/tsparticles/utils/compare/@tsparticles/eslint-config@1.6.0...@tsparticles/eslint-config@1.7.0) (2023-03-17) + +**Note:** Version bump only for package @tsparticles/eslint-config + +# [1.6.0](https://github.com/tsparticles/utils/compare/@tsparticles/eslint-config@1.5.0...@tsparticles/eslint-config@1.6.0) (2023-01-20) + +**Note:** Version bump only for package @tsparticles/eslint-config + +# [1.5.0](https://github.com/tsparticles/utils/compare/@tsparticles/eslint-config@1.4.0...@tsparticles/eslint-config@1.5.0) (2022-12-23) + +**Note:** Version bump only for package @tsparticles/eslint-config + +# [1.4.0](https://github.com/tsparticles/utils/compare/@tsparticles/eslint-config@1.3.2...@tsparticles/eslint-config@1.4.0) (2022-12-06) + +**Note:** Version bump only for package @tsparticles/eslint-config + +## [1.3.2](https://github.com/tsparticles/utils/compare/@tsparticles/eslint-config@1.3.1...@tsparticles/eslint-config@1.3.2) (2022-10-28) + +**Note:** Version bump only for package @tsparticles/eslint-config + +## 1.3.1 (2022-10-28) + +**Note:** Version bump only for package @tsparticles/eslint-config diff --git a/palettes/confetti/confettiMonochromeGreen/LICENSE b/cli/utils/eslint-config/LICENSE similarity index 100% rename from palettes/confetti/confettiMonochromeGreen/LICENSE rename to cli/utils/eslint-config/LICENSE diff --git a/cli/utils/eslint-config/README.md b/cli/utils/eslint-config/README.md new file mode 100644 index 00000000000..3d057dc9da6 --- /dev/null +++ b/cli/utils/eslint-config/README.md @@ -0,0 +1,40 @@ +# @tsparticles/eslint-config + +Shared ESLint 10 flat configuration for tsParticles TypeScript projects. + +## Installation + +```bash +pnpm add -D @tsparticles/eslint-config eslint typescript +``` + +## Usage + +Create an `eslint.config.mjs` (or `.js`) file in your project: + +```js +import config from "@tsparticles/eslint-config"; + +export default config; +``` + +Then run ESLint as usual: + +```bash +pnpm exec eslint . +``` + +## Notes + +- The config is optimized for TypeScript projects and uses type-aware linting when a local `tsconfig.json` is found. +- It includes recommended sets for JavaScript, TypeScript, JSDoc, TSDoc, stylistic rules, and Prettier integration. + +## Build (package maintainers) + +```bash +pnpm run build +``` + +## License + +MIT diff --git a/cli/utils/eslint-config/eslint.config.js b/cli/utils/eslint-config/eslint.config.js new file mode 100644 index 00000000000..fdca1e77be2 --- /dev/null +++ b/cli/utils/eslint-config/eslint.config.js @@ -0,0 +1,238 @@ +import { defineConfig, globalIgnores } from "eslint/config"; +import js from "@eslint/js"; +import jsdoc from "eslint-plugin-jsdoc"; +import prettierConfig from "eslint-config-prettier/flat"; +import prettierPlugin from "eslint-plugin-prettier"; +import prettierRecommended from "eslint-plugin-prettier/recommended"; +import stylistic from "@stylistic/eslint-plugin"; +import tsdoc from "eslint-plugin-tsdoc"; +import tseslint from "typescript-eslint"; + +export default defineConfig([ + globalIgnores(["dist", "node_modules"]), + js.configs.recommended, + stylistic.configs.recommended, + jsdoc.configs["flat/recommended-typescript"], + ...tseslint.configs.strictTypeChecked, + ...tseslint.configs.stylisticTypeChecked, + { + plugins: { + "@stylistic": stylistic, + "@typescript-eslint": tseslint.plugin, + jsdoc, + tsdoc, + prettier: prettierPlugin, + }, + languageOptions: { + parser: tseslint.parser, + parserOptions: { + project: "./tsconfig.json", + tsconfigRootDir: import.meta.url, + }, + }, + rules: { + // --- stylistic --- + "@stylistic/arrow-parens": ["error", "as-needed"], + "@stylistic/arrow-spacing": "error", + "@stylistic/comma-spacing": ["error"], + "@stylistic/keyword-spacing": "error", + "@stylistic/no-extra-semi": "error", + "@stylistic/quote-props": ["error", "as-needed"], + "@stylistic/quotes": ["error", "double", { allowTemplateLiterals: true, avoidEscape: true }], + "@stylistic/semi": ["error", "always"], + "@stylistic/space-before-blocks": "error", + "@stylistic/space-in-parens": ["error", "never"], + "@stylistic/space-infix-ops": "error", + "@stylistic/spaced-comment": ["error", "always", { block: { balanced: true } }], + + // --- typescript-eslint --- + "@typescript-eslint/consistent-generic-constructors": ["error", "constructor"], + "@typescript-eslint/consistent-type-exports": "error", + "@typescript-eslint/consistent-type-imports": "error", + "@typescript-eslint/explicit-function-return-type": "error", + "@typescript-eslint/explicit-member-accessibility": ["error", { accessibility: "no-public" }], + "@typescript-eslint/member-ordering": [ + "error", + { + default: { + memberTypes: [ + "signature", + "public-static-field", + "protected-static-field", + "private-static-field", + "public-decorated-field", + "protected-decorated-field", + "private-decorated-field", + "public-instance-field", + "protected-instance-field", + "private-instance-field", + "public-abstract-field", + "protected-abstract-field", + "public-field", + "protected-field", + "private-field", + "static-field", + "instance-field", + "abstract-field", + "decorated-field", + "field", + "public-constructor", + "protected-constructor", + "private-constructor", + "constructor", + ["public-static-get", "public-static-set"], + ["protected-static-get", "protected-static-set"], + ["private-static-get", "private-static-set"], + ["public-decorated-get", "public-decorated-set"], + ["protected-decorated-get", "protected-decorated-set"], + ["private-decorated-get", "private-decorated-set"], + ["public-instance-get", "public-instance-set"], + ["protected-instance-get", "protected-instance-set"], + ["private-instance-get", "private-instance-set"], + ["public-abstract-get", "public-abstract-set"], + ["protected-abstract-get", "protected-abstract-set"], + ["public-get", "public-set"], + ["protected-get", "protected-set"], + ["private-get", "private-set"], + ["static-get", "static-set"], + ["instance-get", "instance-set"], + ["abstract-get", "abstract-set"], + ["decorated-get", "decorated-set"], + ["get", "set"], + "public-static-method", + "protected-static-method", + "private-static-method", + "public-decorated-method", + "protected-decorated-method", + "private-decorated-method", + "public-instance-method", + "protected-instance-method", + "private-instance-method", + "public-abstract-method", + "protected-abstract-method", + "public-method", + "protected-method", + "private-method", + "static-method", + "instance-method", + "abstract-method", + "decorated-method", + "method", + ], + order: "alphabetically", + }, + }, + ], + "@typescript-eslint/no-empty-function": "error", + "@typescript-eslint/no-empty-object-type": "warn", + "@typescript-eslint/no-explicit-any": "error", + "@typescript-eslint/no-floating-promises": "error", + "@typescript-eslint/no-inferrable-types": "error", + "@typescript-eslint/no-magic-numbers": [ + "error", + { + ignoreEnums: true, + ignoreNumericLiteralTypes: true, + ignoreReadonlyClassProperties: true, + }, + ], + "@typescript-eslint/no-misused-promises": "error", + "@typescript-eslint/no-restricted-types": "warn", + "@typescript-eslint/no-unnecessary-condition": "error", + "@typescript-eslint/no-unnecessary-type-arguments": "error", + "@typescript-eslint/no-unnecessary-type-assertion": "error", + "@typescript-eslint/no-unused-expressions": "error", + "@typescript-eslint/no-unused-vars": [ + "error", + { + argsIgnorePattern: "^_", + caughtErrorsIgnorePattern: "^_", + destructuredArrayIgnorePattern: "^_", + varsIgnorePattern: "^_", + }, + ], + "@typescript-eslint/no-useless-constructor": "error", + "@typescript-eslint/no-require-imports": "error", + "@typescript-eslint/no-wrapper-object-types": "warn", + "@typescript-eslint/only-throw-error": "error", + "@typescript-eslint/prefer-nullish-coalescing": "error", + "@typescript-eslint/prefer-optional-chain": "error", + "@typescript-eslint/prefer-readonly": "error", + "@typescript-eslint/restrict-template-expressions": [ + "error", + { + allowNumber: true, + allowBoolean: true, + allowNullish: true, + allowRegExp: true, + }, + ], + "@typescript-eslint/switch-exhaustiveness-check": [ + "error", + { + allowDefaultCaseForExhaustiveSwitch: true, + considerDefaultExhaustiveForUnions: true, + }, + ], + + // --- core rules --- + "constructor-super": "error", + curly: ["error", "all"], + "no-alert": "error", + "no-case-declarations": "error", + "no-console": "error", + "no-debugger": "error", + "no-duplicate-case": "error", + "no-duplicate-imports": "error", + "no-empty": "error", + "no-empty-pattern": "error", + "no-extra-boolean-cast": "error", + "no-func-assign": "error", + "no-inner-declarations": "error", + "no-irregular-whitespace": "error", + "no-nested-ternary": "error", + "no-prototype-builtins": "error", + "no-restricted-syntax": "error", + "no-self-assign": "error", + "no-this-before-super": "error", + "no-unexpected-multiline": "error", + "no-unneeded-ternary": "error", + "no-unreachable": "error", + "no-unsafe-finally": "error", + "no-unused-labels": "error", + "no-useless-catch": "error", + "no-useless-computed-key": "error", + "no-useless-concat": "error", + "no-useless-escape": "error", + "no-useless-rename": "error", + "no-useless-return": "error", + "no-var": "error", + "one-var": ["error", "consecutive"], + "prefer-arrow-callback": "error", + "prefer-const": "error", + "prefer-object-spread": "error", + "prefer-template": "error", + "sort-imports": [ + "error", + { + allowSeparatedGroups: false, + ignoreCase: false, + ignoreDeclarationSort: false, + ignoreMemberSort: false, + memberSyntaxSortOrder: ["none", "all", "multiple", "single"], + }, + ], + "tsdoc/syntax": "warn", + "valid-typeof": "error", + yoda: ["error", "never", { exceptRange: true }], + + // duplicate rules (replaced by @typescript-eslint) + "no-empty-function": "off", + "no-magic-numbers": "off", + "no-unused-expressions": "off", + "no-useless-constructor": "off", + }, + }, + prettierConfig, + prettierRecommended, +]); diff --git a/cli/utils/eslint-config/package.json b/cli/utils/eslint-config/package.json new file mode 100644 index 00000000000..5b44c15ee36 --- /dev/null +++ b/cli/utils/eslint-config/package.json @@ -0,0 +1,56 @@ +{ + "name": "@tsparticles/eslint-config", + "version": "4.0.0-beta.15", + "description": "tsParticles default ESLint Configuration (ESLint 10 + Flat Config)", + "type": "module", + "main": "dist/eslint.config.js", + "types": "dist/eslint.config.d.ts", + "exports": { + ".": { + "types": "./dist/eslint.config.d.ts", + "import": "./dist/eslint.config.js", + "default": "./dist/eslint.config.js" + } + }, + "license": "MIT", + "files": [ + "dist/eslint.config.js", + "dist/eslint.config.d.ts" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "cli/utils/eslint-config" + }, + "publishConfig": { + "access": "public" + }, + "scripts": { + "build": "pnpm run lint && tsc", + "build:ci": "pnpm run lint:ci && tsc", + "lint": "eslint -c src/eslint.config.ts ./src --fix", + "lint:ci": "eslint -c src/eslint.config.ts ./src" + }, + "prettier": "@tsparticles/prettier-config", + "peerDependencies": { + "eslint": "^10" + }, + "dependencies": { + "@eslint/js": "^10.0.1", + "@stylistic/eslint-plugin": "^5.10.0", + "@tsparticles/prettier-config": "workspace:^", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-jsdoc": "^62.9.0", + "eslint-plugin-prettier": "^5.5.5", + "eslint-plugin-tsdoc": "^0.5.2", + "jiti": "^2.7.0", + "prettier": "^3.8.3", + "prettier-plugin-multiline-arrays": "^4.1.8", + "typescript": "^6.0.3", + "typescript-eslint": "^8.59.2" + }, + "devDependencies": { + "@types/node": "^25.6.2", + "eslint": "^10.3.0" + } +} diff --git a/cli/utils/eslint-config/src/bootstrap.mjs b/cli/utils/eslint-config/src/bootstrap.mjs new file mode 100644 index 00000000000..7bb90b3cb31 --- /dev/null +++ b/cli/utils/eslint-config/src/bootstrap.mjs @@ -0,0 +1,39 @@ +/* eslint-disable jsdoc/require-returns, sort-imports, @typescript-eslint/explicit-function-return-type, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access */ +import fs from "node:fs"; +import path from "node:path"; +import { fileURLToPath, pathToFileURL } from "node:url"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + packageRoot = path.resolve(__dirname, ".."), + workspaceRoot = path.resolve(packageRoot, "..", "..", ".."), + localDist = path.join(packageRoot, "dist", "eslint.config.js"), + pnpmStorePath = path.join(workspaceRoot, "node_modules", ".pnpm"); + +/** + * + */ +function findPublishedDist() { + if (!fs.existsSync(pnpmStorePath)) { + return undefined; + } + + const candidates = fs + .readdirSync(pnpmStorePath) + .filter((entry) => entry.startsWith("@tsparticles+eslint-config@")) + .map((entry) => + path.join(pnpmStorePath, entry, "node_modules", "@tsparticles", "eslint-config", "dist", "eslint.config.js"), + ); + + return candidates.find((candidate) => fs.existsSync(candidate)); +} + +const resolvedEntry = fs.existsSync(localDist) ? localDist : findPublishedDist(); + +if (!resolvedEntry) { + throw new Error("Cannot resolve a built eslint-config entrypoint from the workspace package or pnpm store."); +} + +const moduleExports = await import(pathToFileURL(resolvedEntry).href); + +export default moduleExports.default; diff --git a/cli/utils/eslint-config/src/eslint.config.ts b/cli/utils/eslint-config/src/eslint.config.ts new file mode 100644 index 00000000000..91a828d3173 --- /dev/null +++ b/cli/utils/eslint-config/src/eslint.config.ts @@ -0,0 +1,249 @@ +import { defineConfig, globalIgnores } from "eslint/config"; +import fs from "node:fs"; +import js from "@eslint/js"; +import jsdoc from "eslint-plugin-jsdoc"; +import path from "node:path"; +import prettierConfig from "eslint-config-prettier/flat"; +import prettierPlugin from "eslint-plugin-prettier"; +import prettierRecommended from "eslint-plugin-prettier/recommended"; +import stylistic from "@stylistic/eslint-plugin"; +import tsdoc from "eslint-plugin-tsdoc"; +import tseslint from "typescript-eslint"; + +const consumerDir = process.cwd(), + consumerTsconfig = path.resolve(consumerDir, "tsconfig.json"), + parserProject = fs.existsSync(consumerTsconfig) ? consumerTsconfig : undefined, + strictTypeCheckedConfigs = tseslint.configs.strictTypeChecked as unknown[], + stylisticTypeCheckedConfigs = tseslint.configs.stylisticTypeChecked as unknown[], + tsParticlesConfig = { + plugins: { + "@stylistic": stylistic, + "@typescript-eslint": tseslint.plugin, + jsdoc, + tsdoc, + prettier: prettierPlugin, + }, + languageOptions: { + parser: tseslint.parser, + parserOptions: parserProject + ? { + project: parserProject, + tsconfigRootDir: consumerDir, + } + : undefined, + }, + rules: { + // --- stylistic --- + "@stylistic/arrow-parens": ["error", "as-needed"], + "@stylistic/arrow-spacing": "error", + "@stylistic/comma-spacing": ["error"], + "@stylistic/keyword-spacing": "error", + "@stylistic/no-extra-semi": "error", + "@stylistic/quote-props": ["error", "as-needed"], + "@stylistic/quotes": ["error", "double", { allowTemplateLiterals: true, avoidEscape: true }], + "@stylistic/semi": ["error", "always"], + "@stylistic/space-before-blocks": "error", + "@stylistic/space-in-parens": ["error", "never"], + "@stylistic/space-infix-ops": "error", + "@stylistic/spaced-comment": ["error", "always", { block: { balanced: true } }], + + // --- typescript-eslint --- + "@typescript-eslint/consistent-generic-constructors": ["error", "constructor"], + "@typescript-eslint/consistent-type-exports": "error", + "@typescript-eslint/consistent-type-imports": "error", + "@typescript-eslint/explicit-function-return-type": "error", + "@typescript-eslint/explicit-member-accessibility": ["error", { accessibility: "no-public" }], + "@typescript-eslint/member-ordering": [ + "error", + { + default: { + memberTypes: [ + "signature", + "public-static-field", + "protected-static-field", + "private-static-field", + "public-decorated-field", + "protected-decorated-field", + "private-decorated-field", + "public-instance-field", + "protected-instance-field", + "private-instance-field", + "public-abstract-field", + "protected-abstract-field", + "public-field", + "protected-field", + "private-field", + "static-field", + "instance-field", + "abstract-field", + "decorated-field", + "field", + "public-constructor", + "protected-constructor", + "private-constructor", + "constructor", + ["public-static-get", "public-static-set"], + ["protected-static-get", "protected-static-set"], + ["private-static-get", "private-static-set"], + ["public-decorated-get", "public-decorated-set"], + ["protected-decorated-get", "protected-decorated-set"], + ["private-decorated-get", "private-decorated-set"], + ["public-instance-get", "public-instance-set"], + ["protected-instance-get", "protected-instance-set"], + ["private-instance-get", "private-instance-set"], + ["public-abstract-get", "public-abstract-set"], + ["protected-abstract-get", "protected-abstract-set"], + ["public-get", "public-set"], + ["protected-get", "protected-set"], + ["private-get", "private-set"], + ["static-get", "static-set"], + ["instance-get", "instance-set"], + ["abstract-get", "abstract-set"], + ["decorated-get", "decorated-set"], + ["get", "set"], + "public-static-method", + "protected-static-method", + "private-static-method", + "public-decorated-method", + "protected-decorated-method", + "private-decorated-method", + "public-instance-method", + "protected-instance-method", + "private-instance-method", + "public-abstract-method", + "protected-abstract-method", + "public-method", + "protected-method", + "private-method", + "static-method", + "instance-method", + "abstract-method", + "decorated-method", + "method", + ], + order: "alphabetically", + }, + }, + ], + "@typescript-eslint/no-empty-function": "error", + "@typescript-eslint/no-empty-object-type": "warn", + "@typescript-eslint/no-explicit-any": "error", + "@typescript-eslint/no-floating-promises": "error", + "@typescript-eslint/no-inferrable-types": "error", + "@typescript-eslint/no-magic-numbers": [ + "error", + { + ignoreEnums: true, + ignoreNumericLiteralTypes: true, + ignoreReadonlyClassProperties: true, + }, + ], + "@typescript-eslint/no-misused-promises": "error", + "@typescript-eslint/no-restricted-types": "warn", + "@typescript-eslint/no-unnecessary-condition": "error", + "@typescript-eslint/no-unnecessary-type-arguments": "off", + "@typescript-eslint/no-unnecessary-type-assertion": "error", + "@typescript-eslint/no-unused-expressions": "error", + "@typescript-eslint/no-unused-vars": [ + "error", + { + argsIgnorePattern: "^_", + caughtErrorsIgnorePattern: "^_", + destructuredArrayIgnorePattern: "^_", + varsIgnorePattern: "^_", + }, + ], + "@typescript-eslint/no-useless-constructor": "error", + "@typescript-eslint/no-require-imports": "error", + "@typescript-eslint/no-wrapper-object-types": "warn", + "@typescript-eslint/only-throw-error": "error", + "@typescript-eslint/prefer-nullish-coalescing": "error", + "@typescript-eslint/prefer-optional-chain": "error", + "@typescript-eslint/prefer-readonly": "error", + "@typescript-eslint/restrict-template-expressions": [ + "error", + { + allowNumber: true, + allowBoolean: true, + allowNullish: true, + allowRegExp: true, + }, + ], + "@typescript-eslint/switch-exhaustiveness-check": [ + "error", + { + allowDefaultCaseForExhaustiveSwitch: true, + considerDefaultExhaustiveForUnions: true, + }, + ], + + // --- core rules --- + "constructor-super": "error", + curly: ["error", "all"], + "no-alert": "error", + "no-case-declarations": "error", + "no-console": "error", + "no-debugger": "error", + "no-duplicate-case": "error", + "no-duplicate-imports": "error", + "no-empty": "error", + "no-empty-pattern": "error", + "no-extra-boolean-cast": "error", + "no-func-assign": "error", + "no-inner-declarations": "error", + "no-irregular-whitespace": "error", + "no-nested-ternary": "error", + "no-prototype-builtins": "error", + "no-restricted-syntax": "error", + "no-self-assign": "error", + "no-this-before-super": "error", + "no-unexpected-multiline": "error", + "no-unneeded-ternary": "error", + "no-unreachable": "error", + "no-unsafe-finally": "error", + "no-unused-labels": "error", + "no-useless-catch": "error", + "no-useless-computed-key": "error", + "no-useless-concat": "error", + "no-useless-escape": "error", + "no-useless-rename": "error", + "no-useless-return": "error", + "no-var": "error", + "one-var": ["error", "consecutive"], + "prefer-arrow-callback": "error", + "prefer-const": "error", + "prefer-object-spread": "error", + "prefer-template": "error", + "sort-imports": [ + "error", + { + allowSeparatedGroups: false, + ignoreCase: false, + ignoreDeclarationSort: false, + ignoreMemberSort: false, + memberSyntaxSortOrder: ["none", "all", "multiple", "single"], + }, + ], + "tsdoc/syntax": "warn", + "valid-typeof": "error", + yoda: ["error", "never", { exceptRange: true }], + + // duplicate rules (replaced by @typescript-eslint) + "no-empty-function": "off", + "no-magic-numbers": "off", + "no-unused-expressions": "off", + "no-useless-constructor": "off", + }, + } as unknown; + +export default defineConfig([ + globalIgnores(["dist", "node_modules"]), + js.configs.recommended, + stylistic.configs.recommended, + jsdoc.configs["flat/recommended-typescript"], + ...strictTypeCheckedConfigs, + ...stylisticTypeCheckedConfigs, + tsParticlesConfig, + prettierConfig, + prettierRecommended, +] as never); diff --git a/cli/utils/eslint-config/tsconfig.json b/cli/utils/eslint-config/tsconfig.json new file mode 100644 index 00000000000..d43dd7e26c2 --- /dev/null +++ b/cli/utils/eslint-config/tsconfig.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "strict": true, + "declaration": true, + "declarationMap": true, + "outDir": "dist", + "esModuleInterop": true, + "resolveJsonModule": true, + "forceConsistentCasingInFileNames": true, + "sourceRoot": "./src", + "rootDir": "./src", + "sourceMap": true, + "types": ["node"] + } +} diff --git a/cli/utils/prettier-config/.gitignore b/cli/utils/prettier-config/.gitignore new file mode 100644 index 00000000000..4f9cbbe5e0b --- /dev/null +++ b/cli/utils/prettier-config/.gitignore @@ -0,0 +1,3 @@ +dist +node_modules +.DS_Store \ No newline at end of file diff --git a/cli/utils/prettier-config/CHANGELOG.md b/cli/utils/prettier-config/CHANGELOG.md new file mode 100644 index 00000000000..d8e405bca47 --- /dev/null +++ b/cli/utils/prettier-config/CHANGELOG.md @@ -0,0 +1,204 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/prettier-config + +## [3.4.7](https://github.com/tsparticles/utils/compare/v3.4.6...v3.4.7) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/prettier-config + +## [3.4.6](https://github.com/tsparticles/utils/compare/v3.4.5...v3.4.6) (2026-04-05) + +**Note:** Version bump only for package @tsparticles/prettier-config + +## [3.4.5](https://github.com/tsparticles/utils/compare/v3.4.4...v3.4.5) (2026-04-02) + +**Note:** Version bump only for package @tsparticles/prettier-config + +## [3.4.4](https://github.com/tsparticles/utils/compare/v3.4.3...v3.4.4) (2026-04-02) + +**Note:** Version bump only for package @tsparticles/prettier-config + +## [3.4.3](https://github.com/tsparticles/utils/compare/v3.4.2...v3.4.3) (2026-04-01) + +**Note:** Version bump only for package @tsparticles/prettier-config + +## [3.4.2](https://github.com/tsparticles/utils/compare/v3.4.1...v3.4.2) (2026-03-31) + +**Note:** Version bump only for package @tsparticles/prettier-config + +## [3.4.1](https://github.com/tsparticles/utils/compare/v3.4.0...v3.4.1) (2026-03-31) + +**Note:** Version bump only for package @tsparticles/prettier-config + +# [3.4.0](https://github.com/tsparticles/utils/compare/v3.3.5...v3.4.0) (2026-03-31) + +**Note:** Version bump only for package @tsparticles/prettier-config + +## [3.3.5](https://github.com/tsparticles/utils/compare/v3.3.4...v3.3.5) (2026-03-19) + +**Note:** Version bump only for package @tsparticles/prettier-config + +## [3.3.4](https://github.com/tsparticles/utils/compare/v3.3.3...v3.3.4) (2026-03-16) + +**Note:** Version bump only for package @tsparticles/prettier-config + +## [3.3.3](https://github.com/tsparticles/utils/compare/v3.3.2...v3.3.3) (2026-03-13) + +**Note:** Version bump only for package @tsparticles/prettier-config + +## [3.3.2](https://github.com/tsparticles/utils/compare/v3.3.1...v3.3.2) (2026-03-11) + +**Note:** Version bump only for package @tsparticles/prettier-config + +## [3.3.1](https://github.com/tsparticles/utils/compare/v3.3.0...v3.3.1) (2026-03-10) + +**Note:** Version bump only for package @tsparticles/prettier-config + +# [3.3.0](https://github.com/tsparticles/utils/compare/v3.2.0...v3.3.0) (2026-03-08) + +**Note:** Version bump only for package @tsparticles/prettier-config + +# [3.2.0](https://github.com/tsparticles/utils/compare/v3.1.9...v3.2.0) (2026-03-02) + +**Note:** Version bump only for package @tsparticles/prettier-config + +## [3.1.9](https://github.com/tsparticles/utils/compare/v3.1.8...v3.1.9) (2026-02-24) + +**Note:** Version bump only for package @tsparticles/prettier-config + +## [3.1.8](https://github.com/tsparticles/utils/compare/v3.1.7...v3.1.8) (2026-02-24) + +**Note:** Version bump only for package @tsparticles/prettier-config + +## [3.1.7](https://github.com/tsparticles/utils/compare/v3.1.6...v3.1.7) (2026-02-24) + +**Note:** Version bump only for package @tsparticles/prettier-config + +## [3.1.6](https://github.com/tsparticles/utils/compare/v3.1.5...v3.1.6) (2026-02-24) + +**Note:** Version bump only for package @tsparticles/prettier-config + +## [3.1.5](https://github.com/tsparticles/utils/compare/v3.1.4...v3.1.5) (2026-02-24) + +**Note:** Version bump only for package @tsparticles/prettier-config + +## [3.1.4](https://github.com/tsparticles/utils/compare/v3.1.3...v3.1.4) (2026-02-24) + +**Note:** Version bump only for package @tsparticles/prettier-config + +## [3.1.3](https://github.com/tsparticles/utils/compare/v3.1.2...v3.1.3) (2026-02-24) + +**Note:** Version bump only for package @tsparticles/prettier-config + +## [3.0.11](https://github.com/tsparticles/utils/compare/v3.0.10...v3.0.11) (2026-01-22) + +**Note:** Version bump only for package @tsparticles/prettier-config + +## [3.0.10](https://github.com/tsparticles/utils/compare/v3.0.9...v3.0.10) (2026-01-22) + +**Note:** Version bump only for package @tsparticles/prettier-config + +## [3.0.7](https://github.com/tsparticles/utils/compare/v3.0.6...v3.0.7) (2025-12-28) + +**Note:** Version bump only for package @tsparticles/prettier-config + +## [3.0.6](https://github.com/tsparticles/utils/compare/v3.0.5...v3.0.6) (2025-12-20) + +**Note:** Version bump only for package @tsparticles/prettier-config + +## [3.0.1](https://github.com/tsparticles/utils/compare/v2.3.0...v3.0.1) (2025-08-31) + +**Note:** Version bump only for package @tsparticles/prettier-config + +# [3.0.0](https://github.com/tsparticles/utils/compare/v2.3.0...v3.0.0) (2025-08-31) + +**Note:** Version bump only for package @tsparticles/prettier-config + +## [2.1.6](https://github.com/tsparticles/utils/compare/v2.1.5...v2.1.6) (2024-02-26) + +**Note:** Version bump only for package @tsparticles/prettier-config + +# [2.1.0](https://github.com/tsparticles/utils/compare/v2.0.5...v2.1.0) (2024-01-28) + +**Note:** Version bump only for package @tsparticles/prettier-config + +## [2.0.5](https://github.com/tsparticles/utils/compare/v2.0.4...v2.0.5) (2024-01-14) + +**Note:** Version bump only for package @tsparticles/prettier-config + +## 2.0.1 (2023-12-12) + +**Note:** Version bump only for package @tsparticles/prettier-config + +# [2.0.0](https://github.com/tsparticles/utils/compare/@tsparticles/prettier-config@2.0.0-beta.5...@tsparticles/prettier-config@2.0.0) (2023-11-21) + +**Note:** Version bump only for package @tsparticles/prettier-config + +# [2.0.0-beta.5](https://github.com/tsparticles/utils/compare/@tsparticles/prettier-config@2.0.0-beta.4...@tsparticles/prettier-config@2.0.0-beta.5) (2023-11-20) + +**Note:** Version bump only for package @tsparticles/prettier-config + +# [2.0.0-beta.4](https://github.com/tsparticles/utils/compare/@tsparticles/prettier-config@2.0.0-beta.3...@tsparticles/prettier-config@2.0.0-beta.4) (2023-11-14) + +**Note:** Version bump only for package @tsparticles/prettier-config + +# [2.0.0-beta.3](https://github.com/tsparticles/utils/compare/@tsparticles/prettier-config@2.0.0-beta.2...@tsparticles/prettier-config@2.0.0-beta.3) (2023-10-22) + +**Note:** Version bump only for package @tsparticles/prettier-config + +# [2.0.0-beta.2](https://github.com/tsparticles/utils/compare/@tsparticles/prettier-config@2.0.0-beta.1...@tsparticles/prettier-config@2.0.0-beta.2) (2023-10-02) + +**Note:** Version bump only for package @tsparticles/prettier-config + +# [2.0.0-beta.1](https://github.com/tsparticles/utils/compare/@tsparticles/prettier-config@2.0.0-beta.0...@tsparticles/prettier-config@2.0.0-beta.1) (2023-08-26) + +**Note:** Version bump only for package @tsparticles/prettier-config + +# [2.0.0-beta.0](https://github.com/tsparticles/utils/compare/@tsparticles/prettier-config@1.12.0...@tsparticles/prettier-config@2.0.0-beta.0) (2023-08-25) + +**Note:** Version bump only for package @tsparticles/prettier-config + +# [1.12.0](https://github.com/tsparticles/utils/compare/@tsparticles/prettier-config@1.11.0...@tsparticles/prettier-config@1.12.0) (2023-08-03) + +**Note:** Version bump only for package @tsparticles/prettier-config + +# [1.11.0](https://github.com/tsparticles/utils/compare/@tsparticles/prettier-config@1.10.0...@tsparticles/prettier-config@1.11.0) (2023-07-05) + +**Note:** Version bump only for package @tsparticles/prettier-config + +# [1.10.0](https://github.com/tsparticles/utils/compare/@tsparticles/prettier-config@1.9.0...@tsparticles/prettier-config@1.10.0) (2023-06-04) + +**Note:** Version bump only for package @tsparticles/prettier-config + +# [1.9.0](https://github.com/tsparticles/utils/compare/@tsparticles/prettier-config@1.8.0...@tsparticles/prettier-config@1.9.0) (2023-04-18) + +**Note:** Version bump only for package @tsparticles/prettier-config + +# [1.8.0](https://github.com/tsparticles/utils/compare/@tsparticles/prettier-config@1.7.0...@tsparticles/prettier-config@1.8.0) (2023-04-14) + +**Note:** Version bump only for package @tsparticles/prettier-config + +# [1.7.0](https://github.com/tsparticles/utils/compare/@tsparticles/prettier-config@1.6.0...@tsparticles/prettier-config@1.7.0) (2023-03-17) + +**Note:** Version bump only for package @tsparticles/prettier-config + +# [1.6.0](https://github.com/tsparticles/utils/compare/@tsparticles/prettier-config@1.5.0...@tsparticles/prettier-config@1.6.0) (2023-01-20) + +**Note:** Version bump only for package @tsparticles/prettier-config + +# [1.5.0](https://github.com/tsparticles/utils/compare/@tsparticles/prettier-config@1.4.0...@tsparticles/prettier-config@1.5.0) (2022-12-23) + +**Note:** Version bump only for package @tsparticles/prettier-config + +# [1.4.0](https://github.com/tsparticles/utils/compare/@tsparticles/prettier-config@1.3.1...@tsparticles/prettier-config@1.4.0) (2022-12-06) + +**Note:** Version bump only for package @tsparticles/prettier-config + +## 1.3.1 (2022-10-28) + +**Note:** Version bump only for package @tsparticles/prettier-config diff --git a/palettes/confetti/confettiMonochromePink/LICENSE b/cli/utils/prettier-config/LICENSE similarity index 100% rename from palettes/confetti/confettiMonochromePink/LICENSE rename to cli/utils/prettier-config/LICENSE diff --git a/cli/utils/prettier-config/README.md b/cli/utils/prettier-config/README.md new file mode 100644 index 00000000000..ce92ebf49b4 --- /dev/null +++ b/cli/utils/prettier-config/README.md @@ -0,0 +1,45 @@ +# @tsparticles/prettier-config + +Shared Prettier configuration for tsParticles projects. + +## Installation + +```bash +pnpm add -D @tsparticles/prettier-config prettier +``` + +## Usage + +In your `package.json`: + +```json +{ + "prettier": "@tsparticles/prettier-config" +} +``` + +Or in `.prettierrc`: + +```json +"@tsparticles/prettier-config" +``` + +## Defaults + +Key defaults from the shared config: + +- `semi: true` +- `singleQuote: false` +- `printWidth: 120` +- `endOfLine: lf` +- includes `prettier-plugin-multiline-arrays` + +## Build (package maintainers) + +```bash +pnpm run build +``` + +## License + +MIT diff --git a/cli/utils/prettier-config/package.json b/cli/utils/prettier-config/package.json new file mode 100644 index 00000000000..3b3756ae9f4 --- /dev/null +++ b/cli/utils/prettier-config/package.json @@ -0,0 +1,36 @@ +{ + "name": "@tsparticles/prettier-config", + "version": "4.0.0-beta.15", + "description": "tsParticles default Prettier Configuration", + "main": "dist/index.cjs", + "exports": { + ".": "./dist/index.cjs" + }, + "license": "MIT", + "files": [ + "dist/index.cjs", + "dist/prettier-config.json" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "cli/utils/prettier-config" + }, + "publishConfig": { + "access": "public" + }, + "scripts": { + "build": "cpx \"./src/**.*\" ./dist/", + "build:ci": "cpx \"./src/**.*\" ./dist/" + }, + "peerDependencies": { + "prettier": "^3" + }, + "dependencies": { + "prettier-plugin-multiline-arrays": "^4.1.8" + }, + "devDependencies": { + "cpx2": "^8.0.2", + "prettier": "^3.8.3" + } +} diff --git a/cli/utils/prettier-config/src/index.cjs b/cli/utils/prettier-config/src/index.cjs new file mode 100644 index 00000000000..86b5e25ff79 --- /dev/null +++ b/cli/utils/prettier-config/src/index.cjs @@ -0,0 +1 @@ +module.exports = require("./prettier-config.json"); diff --git a/cli/utils/prettier-config/src/prettier-config.json b/cli/utils/prettier-config/src/prettier-config.json new file mode 100644 index 00000000000..6f314ea452f --- /dev/null +++ b/cli/utils/prettier-config/src/prettier-config.json @@ -0,0 +1,34 @@ +{ + "$schema": "http://json.schemastore.org/prettierrc", + "singleQuote": false, + "semi": true, + "printWidth": 120, + "endOfLine": "lf", + "plugins": ["prettier-plugin-multiline-arrays"], + "overrides": [ + { + "files": [ + "*.js", + "*.ts", + "*.jsx", + "*.tsx", + "*.vue", + "*.svelte", + "*.html", + "*.json", + "*.md" + ], + "options": { + "tabWidth": 2, + "arrowParens": "avoid" + } + }, + { + "files": "*.riot", + "options": { + "parser": "mdx", + "bracketSameLine": true + } + } + ] +} diff --git a/cli/utils/rollup-plugin/.browserslistrc b/cli/utils/rollup-plugin/.browserslistrc new file mode 100644 index 00000000000..fb811e7a9d2 --- /dev/null +++ b/cli/utils/rollup-plugin/.browserslistrc @@ -0,0 +1,2 @@ +since 2021 +not dead diff --git a/cli/utils/rollup-plugin/.gitignore b/cli/utils/rollup-plugin/.gitignore new file mode 100644 index 00000000000..b1866059e68 --- /dev/null +++ b/cli/utils/rollup-plugin/.gitignore @@ -0,0 +1,3 @@ +dist +node_modules +.DS_Store diff --git a/cli/utils/rollup-plugin/CHANGELOG.md b/cli/utils/rollup-plugin/CHANGELOG.md new file mode 100644 index 00000000000..a6c222241a9 --- /dev/null +++ b/cli/utils/rollup-plugin/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/rollup-plugin diff --git a/palettes/confetti/confettiNeon/LICENSE b/cli/utils/rollup-plugin/LICENSE similarity index 100% rename from palettes/confetti/confettiNeon/LICENSE rename to cli/utils/rollup-plugin/LICENSE diff --git a/cli/utils/rollup-plugin/README.md b/cli/utils/rollup-plugin/README.md new file mode 100644 index 00000000000..73f08a1c0f0 --- /dev/null +++ b/cli/utils/rollup-plugin/README.md @@ -0,0 +1,67 @@ +# @tsparticles/rollup-plugin + +Utility package that generates Rollup configurations for tsParticles engine, bundles, plugins, presets, shapes, paths, interactions, effects, templates, palettes, updaters, and utils. + +## Installation + +```bash +pnpm add -D @tsparticles/rollup-plugin rollup +``` + +## Exports + +```ts +import { + createParticlesBuild, + loadParticlesBundle, + loadParticlesEffect, + loadParticlesEngine, + loadParticlesInteraction, + loadParticlesInteractionExternal, + loadParticlesInteractionParticles, + loadParticlesPalette, + loadParticlesPath, + loadParticlesPlugin, + loadParticlesPluginEasing, + loadParticlesPluginEmittersShape, + loadParticlesPluginExport, + loadParticlesPreset, + loadParticlesShape, + loadParticlesTemplate, + loadParticlesUpdater, + loadParticlesUtil, +} from "@tsparticles/rollup-plugin"; +``` + +## Basic Example + +```ts +import { loadParticlesPlugin } from "@tsparticles/rollup-plugin"; + +export default loadParticlesPlugin({ + bundle: true, + dir: process.cwd(), + moduleName: "your-plugin", + pluginName: "Your Plugin", + progress: false, + version: "1.0.0", +}); +``` + +The helpers return Rollup config objects (or arrays of configs) ready to be exported from your `rollup.config` file. + +## Notes + +- Output files are generated in each consumer package `dist` directory. +- Helpers support optional external mappings through `additionalExternals` where applicable. +- Bundle/non-bundle variants are generated depending on the helper and input options. + +## Build (package maintainers) + +```bash +pnpm run build +``` + +## License + +MIT diff --git a/cli/utils/rollup-plugin/eslint.config.js b/cli/utils/rollup-plugin/eslint.config.js new file mode 100644 index 00000000000..ea1f81c8524 --- /dev/null +++ b/cli/utils/rollup-plugin/eslint.config.js @@ -0,0 +1,3 @@ +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; + +export default tsParticlesESLintConfig; diff --git a/cli/utils/rollup-plugin/package.json b/cli/utils/rollup-plugin/package.json new file mode 100644 index 00000000000..3288231042b --- /dev/null +++ b/cli/utils/rollup-plugin/package.json @@ -0,0 +1,72 @@ +{ + "name": "@tsparticles/rollup-plugin", + "version": "4.0.0-beta.15", + "description": "Rollup build utilities for tsParticles", + "private": false, + "type": "module", + "main": "dist/index.cjs", + "module": "dist/index.js", + "types": "dist/index.d.ts", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js", + "require": "./dist/index.cjs", + "default": "./dist/index.js" + } + }, + "license": "MIT", + "files": [ + "dist" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "cli/utils/rollup-plugin" + }, + "publishConfig": { + "access": "public" + }, + "scripts": { + "prettify:ci:src": "prettier --check ./src/*", + "prettify:ci:readme": "prettier --check ./README.md", + "prettify:src": "prettier --write ./src/*", + "prettify:readme": "prettier --write ./README.md", + "lint": "eslint src --ext .js,.jsx,.ts,.tsx --fix", + "lint:ci": "eslint src --ext .js,.jsx,.ts,.tsx", + "compile": "pnpm run compile:rollup", + "compile:ci": "pnpm run compile:rollup", + "compile:rollup": "rollup -c rollup.config.mjs", + "clean": "rimraf ./dist", + "build": "pnpm run clean && pnpm run prettify:src && pnpm run lint && pnpm run compile && pnpm run prettify:readme", + "build:ci": "pnpm run clean && pnpm run prettify:ci:src && pnpm run lint:ci && pnpm run compile && pnpm run prettify:ci:readme", + "watch": "rollup -c rollup.config.mjs -w", + "prepack": "pnpm run build" + }, + "prettier": "@tsparticles/prettier-config", + "peerDependencies": { + "rollup": "^4" + }, + "dependencies": { + "@rollup/plugin-node-resolve": "^16.0.3", + "@rollup/plugin-replace": "^6.0.3", + "@rollup/plugin-terser": "^1.0.0", + "@stylistic/eslint-plugin": "^5.10.0", + "@tsparticles/eslint-config": "workspace:^", + "@tsparticles/prettier-config": "workspace:^", + "eslint": "^10.3.0", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-jsdoc": "^62.9.0", + "eslint-plugin-tsdoc": "^0.5.2", + "prettier": "^3.8.3", + "prettier-plugin-multiline-arrays": "^4.1.8", + "rollup-plugin-visualizer": "^7.0.1" + }, + "devDependencies": { + "@rollup/plugin-typescript": "^12.3.0", + "@types/node": "^25.6.2", + "rimraf": "^6.1.3", + "typescript": "^6.0.3", + "typescript-eslint": "^8.59.2" + } +} diff --git a/cli/utils/rollup-plugin/rollup.config.mjs b/cli/utils/rollup-plugin/rollup.config.mjs new file mode 100644 index 00000000000..421db1b9f6a --- /dev/null +++ b/cli/utils/rollup-plugin/rollup.config.mjs @@ -0,0 +1,21 @@ +import typescript from "@rollup/plugin-typescript"; +import { builtinModules } from "node:module"; + +export default { + input: "src/index.ts", + external: [ + ...builtinModules, + ...builtinModules.map(m => `node:${m}`), + "rollup", + "node:path", + "@rollup/plugin-node-resolve", + "@rollup/plugin-replace", + "@rollup/plugin-terser", + "rollup-plugin-visualizer" + ], + output: [ + { file: "dist/index.js", format: "esm" }, + { file: "dist/index.cjs", format: "cjs" } + ], + plugins: [typescript()] +}; \ No newline at end of file diff --git a/cli/utils/rollup-plugin/src/buildMap.ts b/cli/utils/rollup-plugin/src/buildMap.ts new file mode 100644 index 00000000000..534d7f16de0 --- /dev/null +++ b/cli/utils/rollup-plugin/src/buildMap.ts @@ -0,0 +1,118 @@ +export type ParticlesBuildType = + | "bundle" + | "effect" + | "engine" + | "interaction" + | "interactionExternal" + | "interactionParticles" + | "palette" + | "path" + | "plugin" + | "pluginEasing" + | "pluginEmittersShape" + | "pluginExport" + | "preset" + | "shape" + | "template" + | "updater" + | "util"; + +import type { ParticlesBuildParams } from "./types"; + +interface BuildDefinition { + banner: (p: ParticlesBuildParams) => string; + format: string; + hasBundle?: boolean; + minBanner: (p: ParticlesBuildParams) => string; +} + +export const buildMap: Record = { + bundle: { + format: "", + hasBundle: true, + banner: ({ version }) => `tsParticles v${version}`, + minBanner: ({ version, bundleName }) => `tsParticles ${bundleName ?? ""} v${version}`, + }, + effect: { + format: "effect", + banner: ({ version }) => `Effect v${version}`, + minBanner: ({ version, effectName }) => `tsParticles ${effectName} Effect v${version}`, + }, + engine: { + format: "engine", + banner: ({ version }) => `tsParticles Engine v${version}`, + minBanner: ({ version }) => `tsParticles Engine v${version}`, + }, + interaction: { + format: "interaction", + banner: ({ version }) => `Interaction v${version}`, + minBanner: ({ version }) => `Interaction v${version}`, + }, + interactionExternal: { + format: "interaction.external", + banner: ({ version }) => `External Interaction v${version}`, + minBanner: ({ version }) => `External Interaction v${version}`, + }, + interactionParticles: { + format: "interaction.particles", + banner: ({ version }) => `Particles Interaction v${version}`, + minBanner: ({ version }) => `Particles Interaction v${version}`, + }, + palette: { + format: "palette", + banner: ({ version }) => `Palette v${version}`, + minBanner: ({ version }) => `Palette v${version}`, + }, + path: { + format: "path", + banner: ({ version }) => `Path v${version}`, + minBanner: ({ version }) => `Path v${version}`, + }, + plugin: { + format: "plugin", + banner: ({ version }) => `Plugin v${version}`, + minBanner: ({ version, pluginName }) => `tsParticles ${pluginName} Plugin v${version}`, + }, + pluginEasing: { + format: "plugin.easing", + banner: ({ version }) => `Easing Plugin v${version}`, + minBanner: ({ version }) => `Easing Plugin v${version}`, + }, + pluginEmittersShape: { + format: "plugin.emitters.shape", + banner: ({ version }) => `Emitters Shape v${version}`, + minBanner: ({ version }) => `Emitters Shape v${version}`, + }, + pluginExport: { + format: "plugin.export", + banner: ({ version }) => `Export Plugin v${version}`, + minBanner: ({ version }) => `Export Plugin v${version}`, + }, + preset: { + format: "preset", + hasBundle: true, + banner: ({ version }) => `Preset v${version}`, + minBanner: ({ version }) => `Preset v${version}`, + }, + shape: { + format: "shape", + banner: ({ version }) => `Shape v${version}`, + minBanner: ({ version }) => `Shape v${version}`, + }, + template: { + format: "template", + banner: ({ version }) => `Template v${version}`, + minBanner: ({ version }) => `Template v${version}`, + }, + updater: { + format: "updater", + banner: ({ version }) => `Updater v${version}`, + minBanner: ({ version }) => `Updater v${version}`, + }, + util: { + format: "", + hasBundle: false, + banner: ({ version }) => `Utility v${version}`, + minBanner: ({ version, bundleName }) => `tsParticles ${bundleName ?? "Utility"} v${version}`, + }, +}; diff --git a/cli/utils/rollup-plugin/src/config/createConfig.ts b/cli/utils/rollup-plugin/src/config/createConfig.ts new file mode 100644 index 00000000000..b68ae68183d --- /dev/null +++ b/cli/utils/rollup-plugin/src/config/createConfig.ts @@ -0,0 +1,18 @@ +import { createLazyRuntimeConfig, createSingleConfig } from "./createSingleConfig"; +import type { ConfigParams } from "../types"; +import type { RollupOptions } from "rollup"; + +export const createConfig = (params: ConfigParams): RollupOptions[] => { + const configs = [createSingleConfig(params, false, false), createSingleConfig(params, true, false)]; + + if (params.includeLazy) { + configs.push( + createLazyRuntimeConfig(params, false), + createSingleConfig(params, false, true), + createLazyRuntimeConfig(params, true), + createSingleConfig(params, true, true), + ); + } + + return configs; +}; diff --git a/cli/utils/rollup-plugin/src/config/createSingleConfig.ts b/cli/utils/rollup-plugin/src/config/createSingleConfig.ts new file mode 100644 index 00000000000..b85332ad388 --- /dev/null +++ b/cli/utils/rollup-plugin/src/config/createSingleConfig.ts @@ -0,0 +1,407 @@ +import type { ConfigParams, UmdBuildKind, UmdPolicyData } from "../types"; +import type { Plugin, RenderedChunk, RollupOptions } from "rollup"; +import { getExternal, getGlobals } from "./externals"; +import fs from "node:fs"; +import { getEntry } from "./entry"; +import { getUmdGlobalsBootstrap } from "./umdPolicy"; +import { nodeResolve } from "@rollup/plugin-node-resolve"; +import path from "node:path"; +import replace from "@rollup/plugin-replace"; +import terser from "@rollup/plugin-terser"; +import { visualizer } from "rollup-plugin-visualizer"; + +const EMPTY_SIZE = 0, + FIRST_INDEX = 0, + EXPECTED_COUNT = 1, + FIRST_CAPTURE_GROUP = 1, + toJsBanner = (text: string): string => { + return `/* ${text} */`; + }, + temporaryUmdGlobal = "tsparticlesInternalExports", + lazyWrapperVirtualPrefix = "\0tsparticles-lazy-wrapper:", + // Public export predicate per kind + getPublicExports = (exports: string[], kind: UmdBuildKind): string[] => { + const fixedPublicMap: Record, string> = { + confetti: "confetti", + engine: "tsParticles", + fireworks: "fireworks", + pjs: "initPjs", + }; + + if (kind === "bundle") { + // Bundles expose load* functions AND the tsParticles instance (needed for bundle users) + return exports.filter(t => /^load[A-Z]/.test(t) || t === "tsParticles"); + } + + if (kind === "package") { + return exports.filter(t => /^load[A-Z]/.test(t)); + } + + const requiredExport = fixedPublicMap[kind]; + + if (!exports.includes(requiredExport)) { + throw new Error(`UMD public export policy violated: missing ${requiredExport}`); + } + + return [requiredExport]; + }, + validatePublicExports = (publicExports: string[], allExports: string[], kind: UmdBuildKind): void => { + const fixedPublicMap: Record, string> = { + confetti: "confetti", + engine: "tsParticles", + fireworks: "fireworks", + pjs: "initPjs", + }; + + if (kind !== "bundle" && kind !== "package") { + const required = fixedPublicMap[kind]; + + if (!allExports.includes(required)) { + throw new Error(`UMD public export policy violated: missing ${required}`); + } + + if (publicExports.length !== EXPECTED_COUNT || publicExports[FIRST_INDEX] !== required) { + throw new Error(`UMD public export policy violated: ${kind} can expose only ${required}`); + } + + return; + } + + // For bundle/package: only load* (and tsParticles for bundle) are allowed on window + const invalid = publicExports.filter(t => !/^load[A-Z]/.test(t) && t !== "tsParticles"); + + if (invalid.length > EMPTY_SIZE) { + throw new Error( + `UMD public export policy violated: only load* exports (and tsParticles for bundles) are allowed on window, found ${invalid.join(", ")}`, + ); + } + }, + /** + * Build the namespace initialization expression to use as the UMD factory's first argument. + * Example: scope = "__tsParticlesInternals.engine" + * Result: "(global.__tsParticlesInternals = global.__tsParticlesInternals || {}, global.__tsParticlesInternals.engine = global.__tsParticlesInternals.engine || {})" + * + * This is used to REPLACE `global.window = global.tsparticlesInternalExports || {}` in the UMD wrapper, + * so that rollup writes all exports directly into the correct namespace object. + * @param scope + */ + buildGlobalNamespaceInit = (scope: string): string => { + const segments = scope.split("."), + inits: string[] = []; + let currentPath = "global"; + + for (const segment of segments) { + currentPath += `.${segment}`; + inits.push(`${currentPath} = ${currentPath} || {}`); + } + + return `(${inits.join(", ")})`; + }, + /** + * Replace the UMD factory's exports target (global.window = ...) with the correct namespace path. + * This makes rollup write all `exports.X = X` directly into __tsParticlesInternals.. + * @param code + * @param scope + */ + redirectUmdExportsToNamespace = (code: string, scope: string): string => { + const namespaceInit = buildGlobalNamespaceInit(scope); + + return ( + code + // multi-dependency case: factory(global.window = ..., globalDep1, ...) + .replaceAll(`factory(global.window = global.${temporaryUmdGlobal} || {}, `, `factory(${namespaceInit}, `) + .replaceAll(`factory(global.window = {}, `, `factory(${namespaceInit}, `) + // single case: factory(global.window = ...) + .replaceAll(`factory(global.window = global.${temporaryUmdGlobal} || {})`, `factory(${namespaceInit})`) + .replaceAll(`factory(global.window = {})`, `factory(${namespaceInit})`) + ); + }, + /** + * Build the code that copies public exports from the namespace to window. + * Reads from globalThis.__tsParticlesInternals.. after the factory has run. + * @param scope + * @param publicExports + */ + buildWindowExposureCode = (scope: string, publicExports: string[]): string => { + if (publicExports.length === EMPTY_SIZE) { + return ""; + } + + const assignments = publicExports.map(exp => `${exp}: (globalThis.${scope} || {}).${exp}`).join(", "); + + return `Object.assign(globalThis.window || globalThis, { ${assignments} });\n`; + }, + buildBundleEngineAliasCode = (umdPolicy: UmdPolicyData): string => { + if (umdPolicy.kind !== "bundle") { + return ""; + } + + // Keep backward compatibility for packages that still resolve engine externals from internals.engine. + return ( + `globalThis.__tsParticlesInternals = globalThis.__tsParticlesInternals || {};\n` + + `if (!globalThis.__tsParticlesInternals.engine || !globalThis.__tsParticlesInternals.engine.tsParticles) {\n` + + ` globalThis.__tsParticlesInternals.engine = globalThis.${umdPolicy.scope} || {};\n` + + `}\n` + ); + }, + buildLazyRuntimePath = (name: string): string => { + return `chunks/${name}.js`; + }, + getLazyRuntimeInputPath = (dir: string): string => { + return path.resolve(dir, "dist/browser/index.lazy.js"); + }, + parseNamedExports = (content: string): string[] => { + const exports = new Set(); + + for (const match of content.matchAll( + /export\s+(?:async\s+)?(?:function|class|const|let|var)\s+([A-Za-z_$][\w$]*)/g, + )) { + exports.add(match[FIRST_CAPTURE_GROUP]); + } + + for (const match of content.matchAll(/export\s*{([^}]+)}(?!\s*from)/g)) { + const values = match[FIRST_CAPTURE_GROUP].split(",") + .map(value => value.trim()) + .filter(Boolean) + .map(value => + value + .split(/\s+as\s+/) + .pop() + ?.trim(), + ) + .filter((value): value is string => Boolean(value)); + + for (const value of values) { + exports.add(value); + } + } + + return [...exports]; + }, + resolveLazyEntryExports = (filePath: string, visited = new Set()): string[] => { + if (visited.has(filePath) || !fs.existsSync(filePath)) { + return []; + } + + visited.add(filePath); + + const content = fs.readFileSync(filePath, "utf8"), + exports = new Set(parseNamedExports(content)); + + for (const match of content.matchAll(/export\s+(?:\*|{[^}]+})\s+from\s+["'](.+?)["']/g)) { + const specifier = match[FIRST_CAPTURE_GROUP]; + + if (!specifier.startsWith(".")) { + continue; + } + + const resolvedPath = path.resolve(path.dirname(filePath), specifier), + normalizedPath = path.extname(resolvedPath) ? resolvedPath : `${resolvedPath}.js`; + + for (const value of resolveLazyEntryExports(normalizedPath, visited)) { + exports.add(value); + } + } + + return [...exports]; + }, + createLazyWrapperEntryPlugin = (params: ConfigParams, min: boolean): Plugin => { + const { dir, umdPolicy } = params, + { name } = getEntry({ ...params.entry, dir, min, lazy: true }), + runtimePath = buildLazyRuntimePath(name), + runtimeInputPath = getLazyRuntimeInputPath(dir), + lazyExports = resolveLazyEntryExports(runtimeInputPath), + publicExports = getPublicExports( + [...new Set(umdPolicy.kind === "bundle" ? [...lazyExports, "tsParticles"] : lazyExports)], + umdPolicy.kind, + ), + needsEngineExports = publicExports.includes("tsParticles") || umdPolicy.kind === "bundle", + exportedDeclarations = publicExports + .filter(exp => exp !== "tsParticles") + .map( + exp => + `const ${exp} = async (...args) => { const module = await getLazyModule(); return module.${exp}(...args); };`, + ) + .join("\n"), + tsParticlesExport = publicExports.includes("tsParticles") ? "const tsParticles = engineExports.tsParticles;" : "", + namedExports = publicExports.join(", "), + engineBootstrap = needsEngineExports + ? [ + "globalThis.__tsParticlesInternals = globalThis.__tsParticlesInternals || {};", + "globalThis.__tsParticlesInternals.engine = globalThis.__tsParticlesInternals.engine || engineExports;", + ].join("\n") + : "", + imports = needsEngineExports ? 'import * as engineExports from "@tsparticles/engine";\n' : "", + source = `${imports} +const currentScript = typeof document !== "undefined" ? document.currentScript : undefined; +const runtimeUrl = new URL("${runtimePath}", currentScript?.src ?? globalThis.location?.href ?? "/").href; +let lazyModulePromise; +const dynamicImport = new Function("path", "return import(path);"); +const getLazyModule = () => { + lazyModulePromise ??= dynamicImport(runtimeUrl); + + return lazyModulePromise; +}; +${engineBootstrap} +${tsParticlesExport} +${exportedDeclarations} +export { ${namedExports} }; +`; + + return { + name: "tsparticles-lazy-wrapper-entry", + resolveId(id: string): string | null { + return id === `${lazyWrapperVirtualPrefix}${name}` ? id : null; + }, + load(id: string): string | null { + return id === `${lazyWrapperVirtualPrefix}${name}` ? source : null; + }, + }; + }, + exposeEntryExports = (enabled: boolean, umdPolicy?: UmdPolicyData): Plugin => { + return { + name: "expose-entry-exports", + renderChunk(code: string, chunk: RenderedChunk): { code: string; map: null } | null { + if (!enabled || !chunk.isEntry) { + return null; + } + + const exports = chunk.exports.filter(t => t !== "default"); + + // No exports at all - just bootstrap namespace and clean up + if (exports.length === EMPTY_SIZE) { + if (!umdPolicy) { + return null; + } + + const umdCode = redirectUmdExportsToNamespace(code, umdPolicy.scope); + + return { + code: `${getUmdGlobalsBootstrap(temporaryUmdGlobal)}${umdCode}\ndelete (globalThis.window || globalThis).${temporaryUmdGlobal};\n`, + map: null, + }; + } + + // No UMD policy (e.g. ESM lazy split bundles) - expose all to window (old behavior) + if (!umdPolicy) { + const assignments = exports.map(t => `${t}: ${t}`).join(", "); + + return { + code: `${code}\nObject.assign(globalThis.window || globalThis, { ${assignments} });\n`, + map: null, + }; + } + + // With UMD policy: + // 1) Redirect factory's exports target to the internal namespace + // 2) After factory runs, copy public exports from namespace to window + const publicExports = getPublicExports(exports, umdPolicy.kind); + + validatePublicExports(publicExports, exports, umdPolicy.kind); + + // The key step: replace factory's first arg so rollup writes all exports to __tsParticlesInternals. + const umdCode = redirectUmdExportsToNamespace(code, umdPolicy.scope), + // Read public exports from the namespace and expose on window + windowCode = buildWindowExposureCode(umdPolicy.scope, publicExports), + engineAliasCode = buildBundleEngineAliasCode(umdPolicy); + + return { + code: + `${getUmdGlobalsBootstrap(temporaryUmdGlobal)}${umdCode}\n${windowCode}${engineAliasCode}` + + `delete (globalThis.window || globalThis).${temporaryUmdGlobal};\n`, + map: null, + }; + }, + }; + }; + +export const createSingleConfig = (params: ConfigParams, min: boolean, lazy: boolean): RollupOptions => { + const { additionalExternals, banner, bundle, dir, entry, minBanner, version } = params, + { name, input } = getEntry({ ...entry, dir, min, lazy }), + wrapperEntryPlugin = lazy ? createLazyWrapperEntryPlugin(params, min) : undefined; + + if (lazy) { + return { + input: `${lazyWrapperVirtualPrefix}${name}`, + external: getExternal({ bundle, additionalExternals }), + plugins: [ + wrapperEntryPlugin, + nodeResolve({ + browser: true, + }), + replace({ + preventAssignment: true, + __VERSION__: JSON.stringify(version), + }), + exposeEntryExports(true, params.umdPolicy), + min && terser(), + ].filter(Boolean), + output: { + file: path.resolve(dir, "dist", `${name}.js`), + format: "umd", + name: temporaryUmdGlobal, + globals: getGlobals(additionalExternals, bundle), + banner: toJsBanner(min ? minBanner : banner), + // inlineDynamicImports must be true for UMD (Rollup doesn't support code-splitting in UMD format). + // The actual lazy loading is handled at runtime via `new Function("path", "return import(path)")` + // which Rollup cannot see/inline — so setting this to true has no effect on lazy behaviour. + inlineDynamicImports: true, + }, + }; + } + + return { + input, + external: getExternal({ bundle, additionalExternals }), + plugins: [ + nodeResolve({ + browser: true, + }), + replace({ + preventAssignment: true, + __VERSION__: JSON.stringify(version), + }), + exposeEntryExports(true, params.umdPolicy), + !min && + visualizer({ + filename: path.resolve(dir, "dist/report.html"), + }), + min && terser(), + ].filter(Boolean), + output: { + file: path.resolve(dir, "dist", `${name}.js`), + format: "umd", + name: temporaryUmdGlobal, + globals: getGlobals(additionalExternals, bundle), + banner: toJsBanner(min ? minBanner : banner), + inlineDynamicImports: true, + }, + }; +}; + +export const createLazyRuntimeConfig = (params: ConfigParams, min: boolean): RollupOptions => { + const { additionalExternals, banner, bundle, dir, entry, minBanner, version } = params, + { name } = getEntry({ ...entry, dir, min, lazy: true }); + + return { + input: getLazyRuntimeInputPath(dir), + external: getExternal({ bundle, additionalExternals }), + plugins: [ + nodeResolve({ + browser: true, + }), + replace({ + preventAssignment: true, + __VERSION__: JSON.stringify(version), + }), + min && terser(), + ].filter(Boolean), + output: { + dir: path.resolve(dir, "dist"), + format: "es", + entryFileNames: buildLazyRuntimePath(name), + chunkFileNames: min ? "chunks/[name]-[hash].min.js" : "chunks/[name]-[hash].js", + banner: toJsBanner(min ? minBanner : banner), + }, + }; +}; diff --git a/cli/utils/rollup-plugin/src/config/entry.ts b/cli/utils/rollup-plugin/src/config/entry.ts new file mode 100644 index 00000000000..80f831cacae --- /dev/null +++ b/cli/utils/rollup-plugin/src/config/entry.ts @@ -0,0 +1,30 @@ +import fs from "node:fs"; +import path from "node:path"; + +export interface EntryParams { + bundle: boolean; + dir: string; + format: string; + lazy: boolean; + min: boolean; + name?: string; +} + +export const getEntry = (data: EntryParams): { input: string; name: string } => { + const { bundle, dir, format, lazy, min, name } = data, + fileName = bundle ? "bundle" : "index", + browserFileName = "browser", + completeFileName = lazy ? `${fileName}.lazy` : fileName, + completeBrowserFileName = lazy ? `${browserFileName}.lazy` : browserFileName, + browserCandidate = path.resolve(dir, "dist/browser", `${completeBrowserFileName}.js`), + inputFileName = !bundle && fs.existsSync(browserCandidate) ? completeBrowserFileName : completeFileName, + fixFormat = format ? `.${format}` : "", + fixName = name ? `.${name}` : "", + fixMin = min ? ".min" : "", + fixLazy = lazy ? ".lazy" : ""; + + return { + input: `./dist/browser/${inputFileName}.js`, + name: `tsparticles${fixFormat}${fixName}${fixLazy}${fixMin}`, + }; +}; diff --git a/cli/utils/rollup-plugin/src/config/externals.ts b/cli/utils/rollup-plugin/src/config/externals.ts new file mode 100644 index 00000000000..648a29634d9 --- /dev/null +++ b/cli/utils/rollup-plugin/src/config/externals.ts @@ -0,0 +1,51 @@ +import type { ExternalData } from "../types"; +import type { ExternalOption } from "rollup"; +import { getUmdGlobalForExternal } from "./umdPolicy"; + +interface Params { + additionalExternals?: ExternalData[]; + bundle?: boolean; +} + +const defaultGlobal = "window", + getRootGlobal = (external: ExternalData): string => { + const root = external.data.root; + + if (Array.isArray(root)) { + return root.filter((t): t is string => typeof t === "string").join(".") || defaultGlobal; + } + + return typeof root === "string" ? root : defaultGlobal; + }; + +export const getExternal = ({ bundle, additionalExternals = [] }: Params): ExternalOption => { + if (bundle) { + return additionalExternals.filter(e => !e.bundle).map(e => e.name); + } + + return [ + ...additionalExternals.map(e => e.name), + /^tsparticles$/, + /^tsparticles-/, + /^@tsparticles\//, + ]; +}; + +export const getGlobals = (additionalExternals: ExternalData[] = [], bundle?: boolean): ((id: string) => string) => { + const globalsAdditional = bundle ? additionalExternals.filter(e => !e.bundle) : additionalExternals, + additionalMap = new Map(globalsAdditional.map(e => [e.name, getRootGlobal(e)])); + + return (id: string) => { + if (additionalMap.has(id)) { + return additionalMap.get(id) ?? defaultGlobal; + } + + const tsparticlesGlobal = getUmdGlobalForExternal(id); + + if (tsparticlesGlobal) { + return tsparticlesGlobal; + } + + return defaultGlobal; + }; +}; diff --git a/cli/utils/rollup-plugin/src/config/umdPolicy.ts b/cli/utils/rollup-plugin/src/config/umdPolicy.ts new file mode 100644 index 00000000000..7f559c18013 --- /dev/null +++ b/cli/utils/rollup-plugin/src/config/umdPolicy.ts @@ -0,0 +1,289 @@ +import type { UmdBuildKind, UmdPolicyData } from "../types"; +import type { ParticlesBuildType } from "../buildMap"; + +const FIRST_INDEX = 0, + INDEX_AFTER_FIRST = 1, + internalRoot = "__tsParticlesInternals", + toScopeSegment = (value: string): string => { + const normalized = value + .replaceAll(/([a-z\d])([A-Z])/g, "$1-$2") + .replaceAll(/[._\s]+/g, "-") + .toLowerCase(); + + return normalized + .split("-") + .filter(Boolean) + .map((segment, index) => + index === FIRST_INDEX ? segment : `${segment[FIRST_INDEX].toUpperCase()}${segment.slice(INDEX_AFTER_FIRST)}`, + ) + .join(""); + }, + resolveBundleScope = (moduleName?: string): string => { + if (!moduleName) { + return "full"; + } + + return toScopeSegment(moduleName); + }, + resolveKind = (scope: string): UmdBuildKind => { + if (scope === "pjs") { + return "pjs"; + } + + if (scope === "confetti") { + return "confetti"; + } + + if (scope === "fireworks") { + return "fireworks"; + } + + return "bundle"; + }, + buildTypePrefix: Record, string> = { + effect: "effects", + interaction: "interactions", + interactionExternal: "interactions", + interactionParticles: "interactions", + palette: "palettes", + path: "paths", + plugin: "plugins", + pluginEasing: "plugins", + pluginEmittersShape: "plugins.emittersShapes", + pluginExport: "plugins", + preset: "presets", + shape: "shapes", + template: "utils", + updater: "updaters", + }, + /** + * Qualifies a raw module-name leaf with a type-specific prefix so that + * `getUmdPolicyData` produces the same namespace as `getUmdGlobalForExternal`. + * Without this, `interactionExternal "parallax"` would land on + * `interactions.parallax` while the non-bundled consumer expects + * `interactions.externalParallax`, causing a UMD global mismatch. + */ + leafPrefixes: Partial> = { + interactionExternal: "external-", + interactionParticles: "particles-", + pluginEasing: "easing-", + }, + qualifyLeaf = (type: ParticlesBuildType, rawLeaf: string): string => { + const prefix = leafPrefixes[type]; + + return prefix ? `${prefix}${rawLeaf}` : rawLeaf; + }; + +export const getUmdPolicyData = (type: ParticlesBuildType, moduleName?: string): UmdPolicyData => { + if (type === "engine") { + return { + kind: "engine", + scope: `${internalRoot}.engine`, + }; + } + + if (type === "bundle") { + const scope = resolveBundleScope(moduleName); + + return { + kind: resolveKind(scope), + scope: `${internalRoot}.bundles.${scope}`, + }; + } + + if (type === "util") { + // Util packages use the moduleName as-is (dots as separators), e.g. "canvas.utils" -> "__tsParticlesInternals.canvas.utils" + // This must match the getUmdGlobalForExternal fallback for deps that reference these packages. + return { + kind: "package", + scope: `${internalRoot}.${moduleName ?? "util"}`, + }; + } + + const prefix = buildTypePrefix[type], + rawLeaf = moduleName ?? "default", + leaf = toScopeSegment(qualifyLeaf(type, rawLeaf)); + + return { + kind: "package", + scope: `${internalRoot}.${prefix}.${leaf}`, + }; +}; + +const buildScopedPath = (prefix: string, rawLeaf: string): string => { + const leaf = toScopeSegment(rawLeaf); + + return `${internalRoot}.${prefix}.${leaf}`; + }, + bundleLeafGlobals = new Map( + ["all", "basic", "confetti", "fireworks", "pjs", "slim"].map(leaf => [leaf, `${internalRoot}.bundles.${leaf}`]), + ), + scopedPrefixRules: { + prefix: string; + scope: string; + transform?: (segment: string) => string; + }[] = [ + { + // @tsparticles/plugin-export-image -> __tsParticlesInternals.plugins.image + prefix: "plugin-export-", + scope: "plugins", + }, + { + prefix: "plugin-emitters-shape-", + scope: "plugins.emittersShapes", + }, + { + prefix: "plugin-", + scope: "plugins", + }, + { + prefix: "interaction-external-", + scope: "interactions", + transform: segment => `external-${segment}`, + }, + { + prefix: "interaction-particles-", + scope: "interactions", + transform: segment => `particles-${segment}`, + }, + { + prefix: "interaction-", + scope: "interactions", + }, + { + prefix: "effect-", + scope: "effects", + }, + { + prefix: "path-", + scope: "paths", + }, + { + prefix: "shape-", + scope: "shapes", + }, + { + prefix: "updater-", + scope: "updaters", + }, + { + prefix: "palette-", + scope: "palettes", + }, + { + prefix: "preset-", + scope: "presets", + }, + ], + getScopedGlobalFromPrefix = (leaf: string): string | undefined => { + for (const rule of scopedPrefixRules) { + if (!leaf.startsWith(rule.prefix)) { + continue; + } + + const segment = leaf.slice(rule.prefix.length); + + return buildScopedPath(rule.scope, rule.transform ? rule.transform(segment) : segment); + } + + return undefined; + }, + getScopedGlobalForLeaf = (leaf: string): string => { + const directLeafMap = new Map([ + ["engine", `${internalRoot}.engine`], + // Util packages: not "path plugins" but helper utilities; map to their actual scope + ["path-utils", `${internalRoot}.path.utils`], + ["canvas-utils", `${internalRoot}.canvas.utils`], + // Historical package name mismatch: @tsparticles/path-zig-zag exposes paths.zigzag. + ["path-zig-zag", `${internalRoot}.paths.zigzag`], + // Historical package name mismatch: @tsparticles/plugin-poisson-disc exposes plugins.poisson. + ["plugin-poisson-disc", `${internalRoot}.plugins.poisson`], + ...bundleLeafGlobals, + ]), + bundleLeaf = directLeafMap.get(leaf); + + if (bundleLeaf) { + return bundleLeaf; + } + + const scopedLeaf = getScopedGlobalFromPrefix(leaf); + + if (scopedLeaf) { + return scopedLeaf; + } + + return `${internalRoot}.${leaf.split("-").map(toScopeSegment).join(".")}`; + }; + +export const getUmdGlobalForExternal = (id: string): string | undefined => { + if (id === "tsparticles") { + return `${internalRoot}.bundles.full`; + } + + if (id.startsWith("tsparticles-")) { + return buildScopedPath("bundles", id.slice("tsparticles-".length)); + } + + if (!id.startsWith("@tsparticles/")) { + return undefined; + } + + return getScopedGlobalForLeaf(id.slice("@tsparticles/".length)); +}; + +export const getUmdGlobalsBootstrap = (temporaryGlobalName?: string): string => { + const temporaryBootstrap = temporaryGlobalName ? `g.${temporaryGlobalName}=g.${temporaryGlobalName}||{};` : "", + // Pre-create namespaces (including nested ones) to avoid eager UMD external lookups + // crashing on missing branches like plugins.emittersShapes.circle. + namespaces = [ + "bundles", + "effects", + "engine", + "interactions", + "palettes", + "paths", + "plugins", + "plugins.emittersShapes", + "presets", + "shapes", + "updaters", + "utils", + "canvas", + "canvas.utils", + "path", + "path.utils", + ], + namespacesBootstrap = namespaces + .map(namespace => { + const segments = namespace.split("."); + let currentPath = "g.__tsParticlesInternals"; + + return segments + .map(segment => { + currentPath += `.${segment}`; + + return `${currentPath}=${currentPath}||{};`; + }) + .join(""); + }) + .join(""); + + return ( + `(function(g){g.__tsParticlesInternals=g.__tsParticlesInternals||{};${namespacesBootstrap}` + + `var __tsProxyFactory=typeof Proxy!=="undefined"?function(obj){return new Proxy(obj,{get:function(target,key){if(!(key in target)){target[key]={};}return target[key];}});}:function(obj){return obj;};` + + `g.__tsParticlesInternals.bundles=__tsProxyFactory(g.__tsParticlesInternals.bundles);` + + `g.__tsParticlesInternals.effects=__tsProxyFactory(g.__tsParticlesInternals.effects);` + + `g.__tsParticlesInternals.interactions=__tsProxyFactory(g.__tsParticlesInternals.interactions);` + + `g.__tsParticlesInternals.palettes=__tsProxyFactory(g.__tsParticlesInternals.palettes);` + + `g.__tsParticlesInternals.paths=__tsProxyFactory(g.__tsParticlesInternals.paths);` + + `g.__tsParticlesInternals.plugins=__tsProxyFactory(g.__tsParticlesInternals.plugins);` + + `g.__tsParticlesInternals.plugins.emittersShapes=__tsProxyFactory(g.__tsParticlesInternals.plugins.emittersShapes);` + + `g.__tsParticlesInternals.presets=__tsProxyFactory(g.__tsParticlesInternals.presets);` + + `g.__tsParticlesInternals.shapes=__tsProxyFactory(g.__tsParticlesInternals.shapes);` + + `g.__tsParticlesInternals.updaters=__tsProxyFactory(g.__tsParticlesInternals.updaters);` + + `g.__tsParticlesInternals.utils=__tsProxyFactory(g.__tsParticlesInternals.utils);` + + `g.__tsParticlesInternals.canvas=__tsProxyFactory(g.__tsParticlesInternals.canvas);` + + `g.__tsParticlesInternals.path=__tsProxyFactory(g.__tsParticlesInternals.path);` + + `${temporaryBootstrap}})(typeof globalThis!=="undefined"?globalThis:typeof window!=="undefined"?window:this);\n` + ); +}; diff --git a/cli/utils/rollup-plugin/src/createParticlesBuild.ts b/cli/utils/rollup-plugin/src/createParticlesBuild.ts new file mode 100644 index 00000000000..869f8853b8a --- /dev/null +++ b/cli/utils/rollup-plugin/src/createParticlesBuild.ts @@ -0,0 +1,55 @@ +import { type ParticlesBuildType, buildMap } from "./buildMap"; +import type { ParticlesBuildParams } from "./types"; +import type { RollupOptions } from "rollup"; +import { createConfig } from "./config/createConfig"; +import { getUmdPolicyData } from "./config/umdPolicy"; + +export const createParticlesBuild = (type: ParticlesBuildType, params: ParticlesBuildParams): RollupOptions[] => { + const def = buildMap[type], + dir = params.dir, + version = params.version, + additionalExternals = params.additionalExternals, + moduleName = params.moduleName, + bundle = params.bundle, + umdPolicy = getUmdPolicyData(type, moduleName), + banner = def.banner(params), + minBanner = def.minBanner(params), + base = createConfig({ + entry: { + format: def.format, + name: moduleName, + bundle: false, + }, + version, + banner, + minBanner, + dir, + bundle: false, + includeLazy: false, + umdPolicy, + additionalExternals, + }); + + if (def.hasBundle && (bundle ?? true)) { + return [ + ...base, + ...createConfig({ + entry: { + format: def.format, + name: moduleName ? `${moduleName}.bundle` : "bundle", + bundle: true, + }, + version, + banner, + minBanner, + dir, + bundle: true, + includeLazy: false, + umdPolicy, + additionalExternals, + }), + ]; + } + + return base; +}; diff --git a/cli/utils/rollup-plugin/src/index.ts b/cli/utils/rollup-plugin/src/index.ts new file mode 100644 index 00000000000..e4b678331e7 --- /dev/null +++ b/cli/utils/rollup-plugin/src/index.ts @@ -0,0 +1,46 @@ +import type { ParticlesBuildParams } from "./types"; +import type { RollupOptions } from "rollup"; +import { createParticlesBuild } from "./createParticlesBuild"; + +export const loadParticlesBundle = (p: ParticlesBuildParams): RollupOptions[] => createParticlesBuild("bundle", p); + +export const loadParticlesPlugin = (p: ParticlesBuildParams): RollupOptions[] => createParticlesBuild("plugin", p); + +export const loadParticlesEngine = (p: ParticlesBuildParams): RollupOptions[] => createParticlesBuild("engine", p); + +export const loadParticlesEffect = (p: ParticlesBuildParams): RollupOptions[] => createParticlesBuild("effect", p); + +export const loadParticlesInteraction = (p: ParticlesBuildParams): RollupOptions[] => + createParticlesBuild("interaction", p); + +export const loadParticlesInteractionExternal = (p: ParticlesBuildParams): RollupOptions[] => + createParticlesBuild("interactionExternal", p); + +export const loadParticlesInteractionParticles = (p: ParticlesBuildParams): RollupOptions[] => + createParticlesBuild("interactionParticles", p); + +export const loadParticlesPalette = (p: ParticlesBuildParams): RollupOptions[] => createParticlesBuild("palette", p); + +export const loadParticlesPath = (p: ParticlesBuildParams): RollupOptions[] => createParticlesBuild("path", p); + +export const loadParticlesPluginEasing = (p: ParticlesBuildParams): RollupOptions[] => + createParticlesBuild("pluginEasing", p); + +export const loadParticlesPluginEmittersShape = (p: ParticlesBuildParams): RollupOptions[] => + createParticlesBuild("pluginEmittersShape", p); + +export const loadParticlesPluginExport = (p: ParticlesBuildParams): RollupOptions[] => + createParticlesBuild("pluginExport", p); + +export const loadParticlesPreset = (p: ParticlesBuildParams): RollupOptions[] => createParticlesBuild("preset", p); + +export const loadParticlesShape = (p: ParticlesBuildParams): RollupOptions[] => createParticlesBuild("shape", p); + +export const loadParticlesTemplate = (p: ParticlesBuildParams): RollupOptions[] => createParticlesBuild("template", p); + +export const loadParticlesUpdater = (p: ParticlesBuildParams): RollupOptions[] => createParticlesBuild("updater", p); + +export const loadParticlesUtil = (p: ParticlesBuildParams): RollupOptions[] => createParticlesBuild("util", p); + +export { createParticlesBuild } from "./createParticlesBuild"; +export type { ParticlesBuildType } from "./buildMap"; diff --git a/cli/utils/rollup-plugin/src/types.ts b/cli/utils/rollup-plugin/src/types.ts new file mode 100644 index 00000000000..c42b4b26248 --- /dev/null +++ b/cli/utils/rollup-plugin/src/types.ts @@ -0,0 +1,44 @@ +export interface ExternalData { + bundle: boolean; + data: Record; + name: string; +} + +export type UmdBuildKind = "bundle" | "confetti" | "engine" | "fireworks" | "package" | "pjs"; + +export interface UmdPolicyData { + kind: UmdBuildKind; + scope: string; +} + +export interface ConfigParams { + additionalExternals?: ExternalData[]; + banner: string; + bundle?: boolean; + dir: string; + entry: { + bundle: boolean; + format: string; + name?: string; + }; + includeLazy?: boolean; + minBanner: string; + umdPolicy: UmdPolicyData; + version: string; +} + +export interface ParticlesBuildParams { + [key: string]: unknown; + additionalExternals?: ExternalData[]; + bundle?: boolean; + bundleName?: string; + dir: string; + effectName?: string; + moduleName?: string; + pluginName?: string; + presetName?: string; + shapeName?: string; + templateName?: string; + updaterName?: string; + version: string; +} diff --git a/cli/utils/rollup-plugin/tsconfig.json b/cli/utils/rollup-plugin/tsconfig.json new file mode 100644 index 00000000000..ff00f616054 --- /dev/null +++ b/cli/utils/rollup-plugin/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "ESNext", + "rootDir": "src", + "outDir": "dist", + "declaration": true, + "declarationMap": true, + "moduleResolution": "bundler", + "ignoreDeprecations": "6.0", + "strict": true, + "esModuleInterop": true, + "types": [ + "node" + ] + }, + "include": [ + "src" + ] +} \ No newline at end of file diff --git a/cli/utils/tsconfig/.gitignore b/cli/utils/tsconfig/.gitignore new file mode 100644 index 00000000000..6acc570d587 --- /dev/null +++ b/cli/utils/tsconfig/.gitignore @@ -0,0 +1,3 @@ +node_modules +dist +.DS_Store \ No newline at end of file diff --git a/cli/utils/tsconfig/CHANGELOG.md b/cli/utils/tsconfig/CHANGELOG.md new file mode 100644 index 00000000000..6e79a028795 --- /dev/null +++ b/cli/utils/tsconfig/CHANGELOG.md @@ -0,0 +1,216 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/tsconfig + +## [3.4.7](https://github.com/tsparticles/utils/compare/v3.4.6...v3.4.7) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/tsconfig + +## [3.4.6](https://github.com/tsparticles/utils/compare/v3.4.5...v3.4.6) (2026-04-05) + +**Note:** Version bump only for package @tsparticles/tsconfig + +## [3.4.5](https://github.com/tsparticles/utils/compare/v3.4.4...v3.4.5) (2026-04-02) + +**Note:** Version bump only for package @tsparticles/tsconfig + +## [3.4.4](https://github.com/tsparticles/utils/compare/v3.4.3...v3.4.4) (2026-04-02) + +**Note:** Version bump only for package @tsparticles/tsconfig + +## [3.4.3](https://github.com/tsparticles/utils/compare/v3.4.2...v3.4.3) (2026-04-01) + +**Note:** Version bump only for package @tsparticles/tsconfig + +## [3.4.2](https://github.com/tsparticles/utils/compare/v3.4.1...v3.4.2) (2026-03-31) + +**Note:** Version bump only for package @tsparticles/tsconfig + +## [3.4.1](https://github.com/tsparticles/utils/compare/v3.4.0...v3.4.1) (2026-03-31) + +**Note:** Version bump only for package @tsparticles/tsconfig + +# [3.4.0](https://github.com/tsparticles/utils/compare/v3.3.5...v3.4.0) (2026-03-31) + +**Note:** Version bump only for package @tsparticles/tsconfig + +## [3.3.5](https://github.com/tsparticles/utils/compare/v3.3.4...v3.3.5) (2026-03-19) + +**Note:** Version bump only for package @tsparticles/tsconfig + +## [3.3.4](https://github.com/tsparticles/utils/compare/v3.3.3...v3.3.4) (2026-03-16) + +**Note:** Version bump only for package @tsparticles/tsconfig + +## [3.3.3](https://github.com/tsparticles/utils/compare/v3.3.2...v3.3.3) (2026-03-13) + +**Note:** Version bump only for package @tsparticles/tsconfig + +## [3.3.2](https://github.com/tsparticles/utils/compare/v3.3.1...v3.3.2) (2026-03-11) + +**Note:** Version bump only for package @tsparticles/tsconfig + +## [3.3.1](https://github.com/tsparticles/utils/compare/v3.3.0...v3.3.1) (2026-03-10) + +**Note:** Version bump only for package @tsparticles/tsconfig + +# [3.3.0](https://github.com/tsparticles/utils/compare/v3.2.0...v3.3.0) (2026-03-08) + +**Note:** Version bump only for package @tsparticles/tsconfig + +# [3.2.0](https://github.com/tsparticles/utils/compare/v3.1.9...v3.2.0) (2026-03-02) + +**Note:** Version bump only for package @tsparticles/tsconfig + +## [3.1.9](https://github.com/tsparticles/utils/compare/v3.1.8...v3.1.9) (2026-02-24) + +**Note:** Version bump only for package @tsparticles/tsconfig + +## [3.1.8](https://github.com/tsparticles/utils/compare/v3.1.7...v3.1.8) (2026-02-24) + +**Note:** Version bump only for package @tsparticles/tsconfig + +## [3.1.7](https://github.com/tsparticles/utils/compare/v3.1.6...v3.1.7) (2026-02-24) + +**Note:** Version bump only for package @tsparticles/tsconfig + +## [3.1.6](https://github.com/tsparticles/utils/compare/v3.1.5...v3.1.6) (2026-02-24) + +**Note:** Version bump only for package @tsparticles/tsconfig + +## [3.1.5](https://github.com/tsparticles/utils/compare/v3.1.4...v3.1.5) (2026-02-24) + +**Note:** Version bump only for package @tsparticles/tsconfig + +## [3.1.4](https://github.com/tsparticles/utils/compare/v3.1.3...v3.1.4) (2026-02-24) + +**Note:** Version bump only for package @tsparticles/tsconfig + +## [3.1.3](https://github.com/tsparticles/utils/compare/v3.1.2...v3.1.3) (2026-02-24) + +**Note:** Version bump only for package @tsparticles/tsconfig + +# [3.1.0](https://github.com/tsparticles/utils/compare/v3.0.14...v3.1.0) (2026-02-01) + +**Note:** Version bump only for package @tsparticles/tsconfig + +## [3.0.14](https://github.com/tsparticles/utils/compare/v3.0.13...v3.0.14) (2026-01-30) + +**Note:** Version bump only for package @tsparticles/tsconfig + +## [3.0.9](https://github.com/tsparticles/utils/compare/v3.0.8...v3.0.9) (2025-12-30) + +**Note:** Version bump only for package @tsparticles/tsconfig + +## [3.0.8](https://github.com/tsparticles/utils/compare/v3.0.7...v3.0.8) (2025-12-30) + +**Note:** Version bump only for package @tsparticles/tsconfig + +## [3.0.6](https://github.com/tsparticles/utils/compare/v3.0.5...v3.0.6) (2025-12-20) + +**Note:** Version bump only for package @tsparticles/tsconfig + +## [3.0.5](https://github.com/tsparticles/utils/compare/v3.0.4...v3.0.5) (2025-08-31) + +**Note:** Version bump only for package @tsparticles/tsconfig + +## [3.0.4](https://github.com/tsparticles/utils/compare/v3.0.3...v3.0.4) (2025-08-31) + +**Note:** Version bump only for package @tsparticles/tsconfig + +## [3.0.1](https://github.com/tsparticles/utils/compare/v2.3.0...v3.0.1) (2025-08-31) + +**Note:** Version bump only for package @tsparticles/tsconfig + +# [3.0.0](https://github.com/tsparticles/utils/compare/v2.3.0...v3.0.0) (2025-08-31) + +**Note:** Version bump only for package @tsparticles/tsconfig + +# [2.3.0](https://github.com/tsparticles/utils/compare/v2.2.1...v2.3.0) (2024-03-06) + +**Note:** Version bump only for package @tsparticles/tsconfig + +## [2.1.7](https://github.com/tsparticles/utils/compare/v2.1.6...v2.1.7) (2024-02-26) + +**Note:** Version bump only for package @tsparticles/tsconfig + +## [2.1.6](https://github.com/tsparticles/utils/compare/v2.1.5...v2.1.6) (2024-02-26) + +**Note:** Version bump only for package @tsparticles/tsconfig + +## 2.0.1 (2023-12-12) + +### Features + +- added additional externals parameter to webpack plugin ([01c94e8](https://github.com/tsparticles/utils/commit/01c94e8aea203c6c277cc612848a2b22a928a230)) + +# [2.0.0](https://github.com/tsparticles/utils/compare/@tsparticles/tsconfig@2.0.0-beta.2...@tsparticles/tsconfig@2.0.0) (2023-11-21) + +**Note:** Version bump only for package @tsparticles/tsconfig + +# [2.0.0-beta.2](https://github.com/tsparticles/utils/compare/@tsparticles/tsconfig@2.0.0-beta.1...@tsparticles/tsconfig@2.0.0-beta.2) (2023-11-20) + +**Note:** Version bump only for package @tsparticles/tsconfig + +# [2.0.0-beta.1](https://github.com/tsparticles/utils/compare/@tsparticles/tsconfig@2.0.0-beta.0...@tsparticles/tsconfig@2.0.0-beta.1) (2023-08-26) + +**Note:** Version bump only for package @tsparticles/tsconfig + +# [2.0.0-beta.0](https://github.com/tsparticles/utils/compare/@tsparticles/tsconfig@1.14.0...@tsparticles/tsconfig@2.0.0-beta.0) (2023-08-25) + +**Note:** Version bump only for package @tsparticles/tsconfig + +# [1.14.0](https://github.com/tsparticles/utils/compare/@tsparticles/tsconfig@1.13.0...@tsparticles/tsconfig@1.14.0) (2023-06-29) + +### Features + +- added additional externals parameter to webpack plugin ([01c94e8](https://github.com/tsparticles/utils/commit/01c94e8aea203c6c277cc612848a2b22a928a230)) + +# [1.13.0](https://github.com/tsparticles/utils/compare/@tsparticles/tsconfig@1.12.0...@tsparticles/tsconfig@1.13.0) (2023-06-04) + +**Note:** Version bump only for package @tsparticles/tsconfig + +# [1.12.0](https://github.com/tsparticles/utils/compare/@tsparticles/tsconfig@1.11.0...@tsparticles/tsconfig@1.12.0) (2023-04-18) + +**Note:** Version bump only for package @tsparticles/tsconfig + +# [1.11.0](https://github.com/tsparticles/utils/compare/@tsparticles/tsconfig@1.10.0...@tsparticles/tsconfig@1.11.0) (2023-04-14) + +**Note:** Version bump only for package @tsparticles/tsconfig + +# [1.10.0](https://github.com/tsparticles/utils/compare/@tsparticles/tsconfig@1.9.0...@tsparticles/tsconfig@1.10.0) (2023-04-12) + +**Note:** Version bump only for package @tsparticles/tsconfig + +# [1.9.0](https://github.com/tsparticles/utils/compare/@tsparticles/tsconfig@1.8.0...@tsparticles/tsconfig@1.9.0) (2023-04-11) + +**Note:** Version bump only for package @tsparticles/tsconfig + +# [1.8.0](https://github.com/tsparticles/utils/compare/@tsparticles/tsconfig@1.7.0...@tsparticles/tsconfig@1.8.0) (2023-03-17) + +**Note:** Version bump only for package @tsparticles/tsconfig + +# [1.7.0](https://github.com/tsparticles/utils/compare/@tsparticles/tsconfig@1.6.0...@tsparticles/tsconfig@1.7.0) (2023-01-20) + +**Note:** Version bump only for package @tsparticles/tsconfig + +# [1.6.0](https://github.com/tsparticles/utils/compare/@tsparticles/tsconfig@1.5.0...@tsparticles/tsconfig@1.6.0) (2022-12-23) + +**Note:** Version bump only for package @tsparticles/tsconfig + +# [1.5.0](https://github.com/tsparticles/utils/compare/@tsparticles/tsconfig@1.4.0...@tsparticles/tsconfig@1.5.0) (2022-12-06) + +**Note:** Version bump only for package @tsparticles/tsconfig + +# [1.4.0](https://github.com/tsparticles/utils/compare/@tsparticles/tsconfig@1.3.1...@tsparticles/tsconfig@1.4.0) (2022-11-02) + +**Note:** Version bump only for package @tsparticles/tsconfig + +## 1.3.1 (2022-10-28) + +**Note:** Version bump only for package @tsparticles/tsconfig diff --git a/palettes/confetti/confettiPastel/LICENSE b/cli/utils/tsconfig/LICENSE similarity index 100% rename from palettes/confetti/confettiPastel/LICENSE rename to cli/utils/tsconfig/LICENSE diff --git a/cli/utils/tsconfig/README.md b/cli/utils/tsconfig/README.md new file mode 100644 index 00000000000..770f728b3ca --- /dev/null +++ b/cli/utils/tsconfig/README.md @@ -0,0 +1,43 @@ +# @tsparticles/tsconfig + +Shared TypeScript configuration presets for tsParticles packages. + +## Installation + +```bash +pnpm add -D @tsparticles/tsconfig typescript +``` + +## Available Presets + +- `@tsparticles/tsconfig/tsconfig.base.json`: strict baseline shared options +- `@tsparticles/tsconfig/tsconfig.json`: NodeNext-oriented preset +- `@tsparticles/tsconfig/tsconfig.module.json`: ES module + Bundler resolution preset +- `@tsparticles/tsconfig/tsconfig.browser.json`: browser-focused module preset +- `@tsparticles/tsconfig/tsconfig.types.json`: declarations-only preset + +## Usage + +```json +{ + "extends": "@tsparticles/tsconfig/tsconfig.json" +} +``` + +For type declarations only builds: + +```json +{ + "extends": "@tsparticles/tsconfig/tsconfig.types.json" +} +``` + +## Build (package maintainers) + +```bash +pnpm run build +``` + +## License + +MIT diff --git a/cli/utils/tsconfig/package.json b/cli/utils/tsconfig/package.json new file mode 100644 index 00000000000..ae34caec092 --- /dev/null +++ b/cli/utils/tsconfig/package.json @@ -0,0 +1,28 @@ +{ + "name": "@tsparticles/tsconfig", + "version": "4.0.0-beta.15", + "description": "tsParticles default TypeScript Compiler Configuration", + "license": "MIT", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "cli/utils/tsconfig" + }, + "publishConfig": { + "access": "public" + }, + "files": [ + "dist/" + ], + "scripts": { + "build": "cpx \"./src/**.*\" ./dist/", + "build:ci": "cpx \"./src/**.*\" ./dist/" + }, + "peerDependencies": { + "typescript": "^6" + }, + "devDependencies": { + "cpx2": "^8.0.2", + "typescript": "^6.0.3" + } +} diff --git a/cli/utils/tsconfig/src/tsconfig.base.json b/cli/utils/tsconfig/src/tsconfig.base.json new file mode 100644 index 00000000000..3cdd8617970 --- /dev/null +++ b/cli/utils/tsconfig/src/tsconfig.base.json @@ -0,0 +1,40 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "compilerOptions": { + "allowJs": true, + "allowSyntheticDefaultImports": true, + "alwaysStrict": true, + "declaration": false, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "importHelpers": false, + "lib": [ + "ESNext", + "DOM", + "DOM.Iterable" + ], + "noFallthroughCasesInSwitch": true, + "noEmitOnError": true, + "noErrorTruncation": true, + "noImplicitOverride": true, + "noImplicitAny": true, + "noImplicitReturns": true, + "noImplicitThis": true, + "noPropertyAccessFromIndexSignature": true, + "noUncheckedIndexedAccess": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "removeComments": true, + "skipLibCheck": true, + "strict": true, + "strictNullChecks": true, + "strictFunctionTypes": true, + "strictBindCallApply": true, + "strictPropertyInitialization": true, + "target": "ES2022", + "types": [], + "useDefineForClassFields": true, + "useUnknownInCatchVariables": true, + "verbatimModuleSyntax": false + } +} diff --git a/cli/utils/tsconfig/src/tsconfig.browser.json b/cli/utils/tsconfig/src/tsconfig.browser.json new file mode 100644 index 00000000000..ec3f5ecff68 --- /dev/null +++ b/cli/utils/tsconfig/src/tsconfig.browser.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "module": "ESNext", + "moduleResolution": "Bundler", + } +} diff --git a/cli/utils/tsconfig/src/tsconfig.json b/cli/utils/tsconfig/src/tsconfig.json new file mode 100644 index 00000000000..48e0265b18e --- /dev/null +++ b/cli/utils/tsconfig/src/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "module": "NodeNext", + "moduleResolution": "NodeNext", + } +} diff --git a/cli/utils/tsconfig/src/tsconfig.module.json b/cli/utils/tsconfig/src/tsconfig.module.json new file mode 100644 index 00000000000..ec3f5ecff68 --- /dev/null +++ b/cli/utils/tsconfig/src/tsconfig.module.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "module": "ESNext", + "moduleResolution": "Bundler", + } +} diff --git a/cli/utils/tsconfig/src/tsconfig.types.json b/cli/utils/tsconfig/src/tsconfig.types.json new file mode 100644 index 00000000000..e6375b9ad7b --- /dev/null +++ b/cli/utils/tsconfig/src/tsconfig.types.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "module": "ESNext", + "moduleResolution": "Bundler", + "declaration": true, + "emitDeclarationOnly": true + } +} diff --git a/cli/utils/webpack-config/.browserslistrc b/cli/utils/webpack-config/.browserslistrc new file mode 100644 index 00000000000..e917af02222 --- /dev/null +++ b/cli/utils/webpack-config/.browserslistrc @@ -0,0 +1,2 @@ +since 2021 +not dead \ No newline at end of file diff --git a/cli/utils/webpack-config/.gitignore b/cli/utils/webpack-config/.gitignore new file mode 100644 index 00000000000..4f9cbbe5e0b --- /dev/null +++ b/cli/utils/webpack-config/.gitignore @@ -0,0 +1,3 @@ +dist +node_modules +.DS_Store \ No newline at end of file diff --git a/cli/utils/webpack-config/CHANGELOG.md b/cli/utils/webpack-config/CHANGELOG.md new file mode 100644 index 00000000000..58cc1aef0fe --- /dev/null +++ b/cli/utils/webpack-config/CHANGELOG.md @@ -0,0 +1,444 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/webpack-plugin + +## [3.4.7](https://github.com/tsparticles/utils/compare/v3.4.6...v3.4.7) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +## [3.4.6](https://github.com/tsparticles/utils/compare/v3.4.5...v3.4.6) (2026-04-05) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +## [3.4.5](https://github.com/tsparticles/utils/compare/v3.4.4...v3.4.5) (2026-04-02) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +## [3.4.4](https://github.com/tsparticles/utils/compare/v3.4.3...v3.4.4) (2026-04-02) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +## [3.4.3](https://github.com/tsparticles/utils/compare/v3.4.2...v3.4.3) (2026-04-01) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +## [3.4.2](https://github.com/tsparticles/utils/compare/v3.4.1...v3.4.2) (2026-03-31) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +## [3.4.1](https://github.com/tsparticles/utils/compare/v3.4.0...v3.4.1) (2026-03-31) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +# [3.4.0](https://github.com/tsparticles/utils/compare/v3.3.5...v3.4.0) (2026-03-31) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +## [3.3.5](https://github.com/tsparticles/utils/compare/v3.3.4...v3.3.5) (2026-03-19) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +## [3.3.4](https://github.com/tsparticles/utils/compare/v3.3.3...v3.3.4) (2026-03-16) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +## [3.3.3](https://github.com/tsparticles/utils/compare/v3.3.2...v3.3.3) (2026-03-13) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +## [3.3.2](https://github.com/tsparticles/utils/compare/v3.3.1...v3.3.2) (2026-03-11) + +### Bug Fixes + +- fixed palette config ([a4cf370](https://github.com/tsparticles/utils/commit/a4cf37096a55e28e16ca72be8b1d2896bf3ecb2c)) + +## [3.3.1](https://github.com/tsparticles/utils/compare/v3.3.0...v3.3.1) (2026-03-10) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +# [3.3.0](https://github.com/tsparticles/utils/compare/v3.2.0...v3.3.0) (2026-03-08) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +# [3.2.0](https://github.com/tsparticles/utils/compare/v3.1.9...v3.2.0) (2026-03-02) + +### Features + +- added progress flag to webpack config ([cb3aadb](https://github.com/tsparticles/utils/commit/cb3aadb8eb9447ac4ef3230b19eaf26432593264)) + +## [3.1.9](https://github.com/tsparticles/utils/compare/v3.1.8...v3.1.9) (2026-02-24) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +## [3.1.8](https://github.com/tsparticles/utils/compare/v3.1.7...v3.1.8) (2026-02-24) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +## [3.1.7](https://github.com/tsparticles/utils/compare/v3.1.6...v3.1.7) (2026-02-24) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +## [3.1.6](https://github.com/tsparticles/utils/compare/v3.1.5...v3.1.6) (2026-02-24) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +## [3.1.5](https://github.com/tsparticles/utils/compare/v3.1.4...v3.1.5) (2026-02-24) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +## [3.1.4](https://github.com/tsparticles/utils/compare/v3.1.3...v3.1.4) (2026-02-24) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +## [3.1.3](https://github.com/tsparticles/utils/compare/v3.1.2...v3.1.3) (2026-02-24) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +## [3.1.2](https://github.com/tsparticles/utils/compare/v3.1.1...v3.1.2) (2026-02-02) + +### Features + +- add initial configuration files and setup for dependency-cruiser ([d166f87](https://github.com/tsparticles/utils/commit/d166f873e259c76047b0a061b10702061833c1d2)) + +## [3.1.1](https://github.com/tsparticles/utils/compare/v3.1.0...v3.1.1) (2026-02-02) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +# [3.1.0](https://github.com/tsparticles/utils/compare/v3.0.14...v3.1.0) (2026-02-01) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +## [3.0.13](https://github.com/tsparticles/utils/compare/v3.0.12...v3.0.13) (2026-01-27) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +## [3.0.12](https://github.com/tsparticles/utils/compare/v3.0.11...v3.0.12) (2026-01-27) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +## [3.0.11](https://github.com/tsparticles/utils/compare/v3.0.10...v3.0.11) (2026-01-22) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +## [3.0.10](https://github.com/tsparticles/utils/compare/v3.0.9...v3.0.10) (2026-01-22) + +### Bug Fixes + +- **deps:** update dependency eslint-plugin-jsdoc to v62 ([7bffdcd](https://github.com/tsparticles/utils/commit/7bffdcd38d071ac1a8ff8c2d10993507ee2ffc08)) + +## [3.0.9](https://github.com/tsparticles/utils/compare/v3.0.8...v3.0.9) (2025-12-30) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +## [3.0.7](https://github.com/tsparticles/utils/compare/v3.0.6...v3.0.7) (2025-12-28) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +## [3.0.6](https://github.com/tsparticles/utils/compare/v3.0.5...v3.0.6) (2025-12-20) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +## [3.0.5](https://github.com/tsparticles/utils/compare/v3.0.4...v3.0.5) (2025-08-31) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +## [3.0.3](https://github.com/tsparticles/utils/compare/v3.0.2...v3.0.3) (2025-08-31) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +## [3.0.2](https://github.com/tsparticles/utils/compare/v3.0.1...v3.0.2) (2025-08-31) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +## [3.0.1](https://github.com/tsparticles/utils/compare/v2.3.0...v3.0.1) (2025-08-31) + +### Bug Fixes + +- fixed a wrong string ([880cd9d](https://github.com/tsparticles/utils/commit/880cd9d804da498780c788753c9a8f4096f18858)) + +# [3.0.0](https://github.com/tsparticles/utils/compare/v2.3.0...v3.0.0) (2025-08-31) + +### Bug Fixes + +- fixed a wrong string ([880cd9d](https://github.com/tsparticles/utils/commit/880cd9d804da498780c788753c9a8f4096f18858)) + +# [2.3.0](https://github.com/tsparticles/utils/compare/v2.2.1...v2.3.0) (2024-03-06) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +## [2.2.1](https://github.com/tsparticles/utils/compare/v2.2.0...v2.2.1) (2024-03-02) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +# [2.2.0](https://github.com/tsparticles/utils/compare/v2.1.7...v2.2.0) (2024-03-02) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +## [2.1.6](https://github.com/tsparticles/utils/compare/v2.1.5...v2.1.6) (2024-02-26) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +## [2.1.5](https://github.com/tsparticles/utils/compare/v2.1.4...v2.1.5) (2024-01-31) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +## [2.1.4](https://github.com/tsparticles/utils/compare/v2.1.3...v2.1.4) (2024-01-31) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +## [2.1.3](https://github.com/tsparticles/utils/compare/v2.1.2...v2.1.3) (2024-01-28) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +## [2.1.2](https://github.com/tsparticles/utils/compare/v2.1.1...v2.1.2) (2024-01-28) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +## [2.1.1](https://github.com/tsparticles/utils/compare/v2.1.0...v2.1.1) (2024-01-28) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +# [2.1.0](https://github.com/tsparticles/utils/compare/v2.0.5...v2.1.0) (2024-01-28) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +## [2.0.5](https://github.com/tsparticles/utils/compare/v2.0.4...v2.0.5) (2024-01-14) + +### Bug Fixes + +- **deps:** update dependency eslint-plugin-jsdoc to v48 ([bc2be62](https://github.com/tsparticles/utils/commit/bc2be6245096e0c455ffd406f72605fbf6efc2a8)) + +## [2.0.4](https://github.com/tsparticles/utils/compare/v2.0.3...v2.0.4) (2023-12-13) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +## [2.0.3](https://github.com/tsparticles/utils/compare/v2.0.2...v2.0.3) (2023-12-13) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +## [2.0.2](https://github.com/tsparticles/utils/compare/v2.0.1...v2.0.2) (2023-12-13) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +## 2.0.1 (2023-12-12) + +### Bug Fixes + +- **deps:** update dependency eslint-config-prettier to v9 ([b950d9f](https://github.com/tsparticles/utils/commit/b950d9f2eeca55228d613d6db00ffba0402d0634)) + +### Features + +- added additional externals parameter to webpack plugin ([01c94e8](https://github.com/tsparticles/utils/commit/01c94e8aea203c6c277cc612848a2b22a928a230)) +- added effects support ([d1e1743](https://github.com/tsparticles/utils/commit/d1e17431a2b1af081f62f0e52bc7436e3b83e863)) +- added version to webpack output ([496fcbb](https://github.com/tsparticles/utils/commit/496fcbb98c64cdb37c874bfbf8f9c3172806ef58)) + +# [2.0.0](https://github.com/tsparticles/utils/compare/@tsparticles/webpack-plugin@2.0.0-beta.14...@tsparticles/webpack-plugin@2.0.0) (2023-11-21) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +# [2.0.0-beta.14](https://github.com/tsparticles/utils/compare/@tsparticles/webpack-plugin@2.0.0-beta.13...@tsparticles/webpack-plugin@2.0.0-beta.14) (2023-11-21) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +# [2.0.0-beta.13](https://github.com/tsparticles/utils/compare/@tsparticles/webpack-plugin@2.0.0-beta.12...@tsparticles/webpack-plugin@2.0.0-beta.13) (2023-11-20) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +# [2.0.0-beta.12](https://github.com/tsparticles/utils/compare/@tsparticles/webpack-plugin@2.0.0-beta.11...@tsparticles/webpack-plugin@2.0.0-beta.12) (2023-11-15) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +# [2.0.0-beta.11](https://github.com/tsparticles/utils/compare/@tsparticles/webpack-plugin@2.0.0-beta.10...@tsparticles/webpack-plugin@2.0.0-beta.11) (2023-11-14) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +# [2.0.0-beta.10](https://github.com/tsparticles/utils/compare/@tsparticles/webpack-plugin@2.0.0-beta.9...@tsparticles/webpack-plugin@2.0.0-beta.10) (2023-11-13) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +# [2.0.0-beta.9](https://github.com/tsparticles/utils/compare/@tsparticles/webpack-plugin@2.0.0-beta.8...@tsparticles/webpack-plugin@2.0.0-beta.9) (2023-11-09) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +# [2.0.0-beta.8](https://github.com/tsparticles/utils/compare/@tsparticles/webpack-plugin@2.0.0-beta.7...@tsparticles/webpack-plugin@2.0.0-beta.8) (2023-11-07) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +# [2.0.0-beta.7](https://github.com/tsparticles/utils/compare/@tsparticles/webpack-plugin@2.0.0-beta.6...@tsparticles/webpack-plugin@2.0.0-beta.7) (2023-11-03) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +# [2.0.0-beta.6](https://github.com/tsparticles/utils/compare/@tsparticles/webpack-plugin@2.0.0-beta.5...@tsparticles/webpack-plugin@2.0.0-beta.6) (2023-11-03) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +# [2.0.0-beta.5](https://github.com/tsparticles/utils/compare/@tsparticles/webpack-plugin@2.0.0-beta.4...@tsparticles/webpack-plugin@2.0.0-beta.5) (2023-11-01) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +# [2.0.0-beta.4](https://github.com/tsparticles/utils/compare/@tsparticles/webpack-plugin@2.0.0-beta.3...@tsparticles/webpack-plugin@2.0.0-beta.4) (2023-10-26) + +### Features + +- added effects support ([d1e1743](https://github.com/tsparticles/utils/commit/d1e17431a2b1af081f62f0e52bc7436e3b83e863)) + +# [2.0.0-beta.3](https://github.com/tsparticles/utils/compare/@tsparticles/webpack-plugin@2.0.0-beta.2...@tsparticles/webpack-plugin@2.0.0-beta.3) (2023-10-22) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +# [2.0.0-beta.2](https://github.com/tsparticles/utils/compare/@tsparticles/webpack-plugin@2.0.0-beta.1...@tsparticles/webpack-plugin@2.0.0-beta.2) (2023-10-02) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +# [2.0.0-beta.1](https://github.com/tsparticles/utils/compare/@tsparticles/webpack-plugin@2.0.0-beta.0...@tsparticles/webpack-plugin@2.0.0-beta.1) (2023-08-26) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +# [2.0.0-beta.0](https://github.com/tsparticles/utils/compare/@tsparticles/webpack-plugin@1.24.0...@tsparticles/webpack-plugin@2.0.0-beta.0) (2023-08-25) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +# [1.24.0](https://github.com/tsparticles/utils/compare/@tsparticles/webpack-plugin@1.23.0...@tsparticles/webpack-plugin@1.24.0) (2023-08-08) + +### Bug Fixes + +- **deps:** update dependency eslint-config-prettier to v9 ([b950d9f](https://github.com/tsparticles/utils/commit/b950d9f2eeca55228d613d6db00ffba0402d0634)) + +# [1.23.0](https://github.com/tsparticles/utils/compare/@tsparticles/webpack-plugin@1.22.0...@tsparticles/webpack-plugin@1.23.0) (2023-08-03) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +# [1.22.0](https://github.com/tsparticles/utils/compare/@tsparticles/webpack-plugin@1.21.0...@tsparticles/webpack-plugin@1.22.0) (2023-07-23) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +# [1.21.0](https://github.com/tsparticles/utils/compare/@tsparticles/webpack-plugin@1.20.0...@tsparticles/webpack-plugin@1.21.0) (2023-07-15) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +# [1.20.0](https://github.com/tsparticles/utils/compare/@tsparticles/webpack-plugin@1.19.0...@tsparticles/webpack-plugin@1.20.0) (2023-07-10) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +# [1.19.0](https://github.com/tsparticles/utils/compare/@tsparticles/webpack-plugin@1.18.0...@tsparticles/webpack-plugin@1.19.0) (2023-07-10) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +# [1.18.0](https://github.com/tsparticles/utils/compare/@tsparticles/webpack-plugin@1.17.1...@tsparticles/webpack-plugin@1.18.0) (2023-07-08) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +## [1.17.1](https://github.com/tsparticles/utils/compare/@tsparticles/webpack-plugin@1.17.0...@tsparticles/webpack-plugin@1.17.1) (2023-07-05) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +# [1.17.0](https://github.com/tsparticles/utils/compare/@tsparticles/webpack-plugin@1.16.0...@tsparticles/webpack-plugin@1.17.0) (2023-07-05) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +# [1.16.0](https://github.com/tsparticles/utils/compare/@tsparticles/webpack-plugin@1.15.5...@tsparticles/webpack-plugin@1.16.0) (2023-06-29) + +### Features + +- added additional externals parameter to webpack plugin ([01c94e8](https://github.com/tsparticles/utils/commit/01c94e8aea203c6c277cc612848a2b22a928a230)) + +## [1.15.5](https://github.com/tsparticles/utils/compare/@tsparticles/webpack-plugin@1.15.4...@tsparticles/webpack-plugin@1.15.5) (2023-06-21) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +## [1.15.4](https://github.com/tsparticles/utils/compare/@tsparticles/webpack-plugin@1.15.3...@tsparticles/webpack-plugin@1.15.4) (2023-06-20) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +## [1.15.3](https://github.com/tsparticles/utils/compare/@tsparticles/webpack-plugin@1.15.2...@tsparticles/webpack-plugin@1.15.3) (2023-06-20) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +## [1.15.2](https://github.com/tsparticles/utils/compare/@tsparticles/webpack-plugin@1.15.1...@tsparticles/webpack-plugin@1.15.2) (2023-06-20) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +## [1.15.1](https://github.com/tsparticles/utils/compare/@tsparticles/webpack-plugin@1.15.0...@tsparticles/webpack-plugin@1.15.1) (2023-06-20) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +# [1.15.0](https://github.com/tsparticles/utils/compare/@tsparticles/webpack-plugin@1.14.1...@tsparticles/webpack-plugin@1.15.0) (2023-06-20) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +## [1.14.1](https://github.com/tsparticles/utils/compare/@tsparticles/webpack-plugin@1.14.0...@tsparticles/webpack-plugin@1.14.1) (2023-06-05) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +# [1.14.0](https://github.com/tsparticles/utils/compare/@tsparticles/webpack-plugin@1.13.0...@tsparticles/webpack-plugin@1.14.0) (2023-06-04) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +# [1.13.0](https://github.com/tsparticles/utils/compare/@tsparticles/webpack-plugin@1.12.0...@tsparticles/webpack-plugin@1.13.0) (2023-04-18) + +**Note:** Version bump only for package @tsparticles/webpack-plugin + +# 1.12.0 (2023-04-14) + +### Features + +- added version to webpack output ([496fcbb](https://github.com/tsparticles/utils/commit/496fcbb98c64cdb37c874bfbf8f9c3172806ef58)) + +## [1.11.1](https://github.com/tsparticles/utils/compare/webpack-tsparticles-plugin@1.11.0...webpack-tsparticles-plugin@1.11.1) (2023-04-11) + +**Note:** Version bump only for package webpack-tsparticles-plugin + +# [1.11.0](https://github.com/tsparticles/utils/compare/webpack-tsparticles-plugin@1.10.0...webpack-tsparticles-plugin@1.11.0) (2023-04-11) + +**Note:** Version bump only for package webpack-tsparticles-plugin + +# [1.10.0](https://github.com/tsparticles/utils/compare/webpack-tsparticles-plugin@1.9.0...webpack-tsparticles-plugin@1.10.0) (2023-04-09) + +**Note:** Version bump only for package webpack-tsparticles-plugin + +# [1.9.0](https://github.com/tsparticles/utils/compare/webpack-tsparticles-plugin@1.8.1...webpack-tsparticles-plugin@1.9.0) (2023-03-17) + +**Note:** Version bump only for package webpack-tsparticles-plugin + +## [1.8.1](https://github.com/tsparticles/utils/compare/webpack-tsparticles-plugin@1.8.0...webpack-tsparticles-plugin@1.8.1) (2023-02-07) + +**Note:** Version bump only for package webpack-tsparticles-plugin + +# [1.8.0](https://github.com/tsparticles/utils/compare/webpack-tsparticles-plugin@1.7.0...webpack-tsparticles-plugin@1.8.0) (2023-02-07) + +### Features + +- added version to webpack output ([496fcbb](https://github.com/tsparticles/utils/commit/496fcbb98c64cdb37c874bfbf8f9c3172806ef58)) + +# [1.7.0](https://github.com/tsparticles/utils/compare/webpack-tsparticles-plugin@1.6.0...webpack-tsparticles-plugin@1.7.0) (2023-01-20) + +**Note:** Version bump only for package webpack-tsparticles-plugin + +# [1.6.0](https://github.com/tsparticles/utils/compare/webpack-tsparticles-plugin@1.5.1...webpack-tsparticles-plugin@1.6.0) (2022-12-23) + +**Note:** Version bump only for package webpack-tsparticles-plugin + +## [1.5.1](https://github.com/tsparticles/utils/compare/webpack-tsparticles-plugin@1.5.0...webpack-tsparticles-plugin@1.5.1) (2022-12-07) + +**Note:** Version bump only for package webpack-tsparticles-plugin + +# [1.5.0](https://github.com/tsparticles/utils/compare/webpack-tsparticles-plugin@1.4.3...webpack-tsparticles-plugin@1.5.0) (2022-12-06) + +**Note:** Version bump only for package webpack-tsparticles-plugin + +## [1.4.3](https://github.com/tsparticles/utils/compare/webpack-tsparticles-plugin@1.4.2...webpack-tsparticles-plugin@1.4.3) (2022-10-28) + +**Note:** Version bump only for package webpack-tsparticles-plugin + +## [1.4.2](https://github.com/tsparticles/utils/compare/webpack-tsparticles-plugin@1.4.1...webpack-tsparticles-plugin@1.4.2) (2022-10-28) + +**Note:** Version bump only for package webpack-tsparticles-plugin + +## 1.4.1 (2022-10-28) + +**Note:** Version bump only for package webpack-tsparticles-plugin diff --git a/palettes/confetti/confettiPatriotic/LICENSE b/cli/utils/webpack-config/LICENSE similarity index 100% rename from palettes/confetti/confettiPatriotic/LICENSE rename to cli/utils/webpack-config/LICENSE diff --git a/cli/utils/webpack-config/README.md b/cli/utils/webpack-config/README.md new file mode 100644 index 00000000000..9ade105e949 --- /dev/null +++ b/cli/utils/webpack-config/README.md @@ -0,0 +1,65 @@ +# @tsparticles/webpack-plugin + +Utility package that generates webpack configurations for tsParticles engine, bundles, plugins, presets, shapes, paths, interactions, effects, templates, palettes, and updaters. + +## Installation + +```bash +pnpm add -D @tsparticles/webpack-plugin webpack webpack-cli +``` + +## Exports + +```ts +import { + loadParticlesBundle, + loadParticlesEffect, + loadParticlesEngine, + loadParticlesInteraction, + loadParticlesInteractionExternal, + loadParticlesInteractionParticles, + loadParticlesPalette, + loadParticlesPath, + loadParticlesPlugin, + loadParticlesPluginEasing, + loadParticlesPluginEmittersShape, + loadParticlesPluginExport, + loadParticlesPreset, + loadParticlesShape, + loadParticlesTemplate, + loadParticlesUpdater, +} from "@tsparticles/webpack-plugin"; +``` + +## Basic Example + +```ts +import { loadParticlesPlugin } from "@tsparticles/webpack-plugin"; + +export default loadParticlesPlugin({ + bundle: true, + dir: process.cwd(), + moduleName: "your-plugin", + pluginName: "Your Plugin", + progress: false, + version: "1.0.0", +}); +``` + +The helpers return webpack config objects (or arrays of configs) ready to be exported from your `webpack.config` file. + +## Notes + +- Output files are generated in each consumer package `dist` directory. +- Helpers support optional external mappings through `additionalExternals` where applicable. +- Bundle/non-bundle variants are generated depending on the helper and input options. + +## Build (package maintainers) + +```bash +pnpm run build +``` + +## License + +MIT diff --git a/cli/utils/webpack-config/eslint.config.js b/cli/utils/webpack-config/eslint.config.js new file mode 100644 index 00000000000..ea1f81c8524 --- /dev/null +++ b/cli/utils/webpack-config/eslint.config.js @@ -0,0 +1,3 @@ +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; + +export default tsParticlesESLintConfig; diff --git a/cli/utils/webpack-config/package.json b/cli/utils/webpack-config/package.json new file mode 100644 index 00000000000..ca0f58ecd70 --- /dev/null +++ b/cli/utils/webpack-config/package.json @@ -0,0 +1,69 @@ +{ + "name": "@tsparticles/webpack-plugin", + "version": "4.0.0-beta.15", + "type": "module", + "main": "dist/webpack-tsparticles.js", + "types": "dist/webpack-tsparticles.d.ts", + "exports": { + ".": { + "types": "./dist/webpack-tsparticles.d.ts", + "import": "./dist/webpack-tsparticles.js", + "default": "./dist/webpack-tsparticles.js" + } + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "cli/utils/webpack-config" + }, + "publishConfig": { + "access": "public" + }, + "scripts": { + "prettify:ci:src": "prettier --check ./src/*", + "prettify:ci:readme": "prettier --check ./README.md", + "prettify:src": "prettier --write ./src/*", + "prettify:readme": "prettier --write ./README.md", + "lint": "eslint src --ext .js,.jsx,.ts,.tsx --fix", + "lint:ci": "eslint src --ext .js,.jsx,.ts,.tsx", + "compile": "pnpm run build:ts", + "compile:ci": "pnpm run build:ts", + "build:ts": "pnpm run build:ts:cjs", + "build:ts:cjs": "tsc", + "build": "pnpm run clear:dist && pnpm run prettify:src && pnpm run lint && pnpm run compile && pnpm run prettify:readme", + "build:ci": "pnpm run clear:dist && pnpm run prettify:ci:src && pnpm run lint:ci && pnpm run compile && pnpm run prettify:ci:readme", + "clear:dist": "rimraf ./dist", + "prepack": "pnpm run build" + }, + "prettier": "@tsparticles/prettier-config", + "peerDependencies": { + "webpack": "^5" + }, + "dependencies": { + "@stylistic/eslint-plugin": "^5.10.0", + "@swc/core": "^1.15.33", + "@tsparticles/eslint-config": "workspace:^", + "@tsparticles/prettier-config": "workspace:^", + "browserslist": "^4.28.2", + "eslint": "^10.3.0", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-jsdoc": "^62.9.0", + "eslint-plugin-tsdoc": "^0.5.2", + "prettier": "^3.8.3", + "prettier-plugin-multiline-arrays": "^4.1.8", + "swc-loader": "^0.2.7", + "terser-webpack-plugin": "^5.5.0", + "typescript": "^6.0.3", + "typescript-eslint": "^8.59.2", + "webpack-bundle-analyzer": "^5.3.0", + "webpack-cli": "^7.0.2" + }, + "devDependencies": { + "@types/node": "^25.6.2", + "@types/webpack-bundle-analyzer": "^4.7.0", + "@types/webpack-env": "^1.18.8", + "rimraf": "^6.1.3", + "webpack": "^5.106.2" + } +} diff --git a/cli/utils/webpack-config/src/bootstrap.mjs b/cli/utils/webpack-config/src/bootstrap.mjs new file mode 100644 index 00000000000..88f27c337b5 --- /dev/null +++ b/cli/utils/webpack-config/src/bootstrap.mjs @@ -0,0 +1,62 @@ +/* eslint-disable sort-imports, @typescript-eslint/explicit-function-return-type, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access */ +import fs from "node:fs"; +import path from "node:path"; +import { fileURLToPath, pathToFileURL } from "node:url"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + packageRoot = path.resolve(__dirname, ".."), + workspaceRoot = path.resolve(packageRoot, "..", "..", ".."), + localDist = path.join(packageRoot, "dist", "webpack-tsparticles.js"), + pnpmStorePath = path.join(workspaceRoot, "node_modules", ".pnpm"); + +/** + * + */ +function findPublishedDist() { + if (!fs.existsSync(pnpmStorePath)) { + return undefined; + } + + const candidates = fs + .readdirSync(pnpmStorePath) + .filter((entry) => entry.startsWith("@tsparticles+webpack-plugin@")) + .map((entry) => + path.join( + pnpmStorePath, + entry, + "node_modules", + "@tsparticles", + "webpack-plugin", + "dist", + "webpack-tsparticles.js", + ), + ); + + return candidates.find((candidate) => fs.existsSync(candidate)); +} + +const resolvedEntry = fs.existsSync(localDist) ? localDist : findPublishedDist(); + +if (!resolvedEntry) { + throw new Error("Cannot resolve a built webpack-plugin entrypoint from the workspace package or pnpm store."); +} + +const moduleExports = await import(pathToFileURL(resolvedEntry).href); + +export const loadParticlesBundle = moduleExports.loadParticlesBundle; +export const loadParticlesEffect = moduleExports.loadParticlesEffect; +export const loadParticlesEngine = moduleExports.loadParticlesEngine; +export const loadParticlesInteraction = moduleExports.loadParticlesInteraction; +export const loadParticlesInteractionExternal = moduleExports.loadParticlesInteractionExternal; +export const loadParticlesInteractionParticles = moduleExports.loadParticlesInteractionParticles; +export const loadParticlesPalette = moduleExports.loadParticlesPalette; +export const loadParticlesPath = moduleExports.loadParticlesPath; +export const loadParticlesPlugin = moduleExports.loadParticlesPlugin; +export const loadParticlesPluginEasing = moduleExports.loadParticlesPluginEasing; +export const loadParticlesPluginEmittersShape = moduleExports.loadParticlesPluginEmittersShape; +export const loadParticlesPluginExport = moduleExports.loadParticlesPluginExport; +export const loadParticlesPreset = moduleExports.loadParticlesPreset; +export const loadParticlesShape = moduleExports.loadParticlesShape; +export const loadParticlesTemplate = moduleExports.loadParticlesTemplate; +export const loadParticlesUpdater = moduleExports.loadParticlesUpdater; diff --git a/cli/utils/webpack-config/src/bundles/buildBundle.ts b/cli/utils/webpack-config/src/bundles/buildBundle.ts new file mode 100644 index 00000000000..9d8de6ff1c4 --- /dev/null +++ b/cli/utils/webpack-config/src/bundles/buildBundle.ts @@ -0,0 +1,57 @@ +import type { ExternalData } from "../common/ExternalData.js"; +import { getConfig } from "../common/getConfig.js"; + +interface BundleParams { + additionalExternals?: ExternalData[]; + bundle?: boolean; + bundleName: string; + dir: string; + moduleName: string; + progress: boolean; + version: string; +} + +/** + * @param params - + * @returns the webpack config + */ +function loadParticlesBundle(params: BundleParams): unknown { + const { additionalExternals, bundle, bundleName, dir, moduleName, progress, version } = params, + fixBundleName = bundleName ? `${bundleName} ` : "", + banner = `Author : Matteo Bruni +MIT license: https://opensource.org/licenses/MIT +Demo / Generator : https://particles.js.org/ +GitHub : https://www.github.com/matteobruni/tsparticles +How to use? : Check the GitHub README +v${version}`, + minBanner = `tsParticles ${fixBundleName}v${version} by Matteo Bruni`, + configs = getConfig({ + entry: { format: "", name: moduleName, bundle: false }, + version, + banner, + minBanner: minBanner, + dir, + bundle: false, + progress, + additionalExternals, + }); + + if (bundle ?? true) { + configs.push( + ...getConfig({ + entry: { format: "", name: moduleName ? `${moduleName}.bundle` : "bundle", bundle: true }, + version, + banner, + minBanner: minBanner, + dir, + bundle: true, + progress, + additionalExternals, + }), + ); + } + + return configs; +} + +export { loadParticlesBundle }; diff --git a/cli/utils/webpack-config/src/common/ExternalData.ts b/cli/utils/webpack-config/src/common/ExternalData.ts new file mode 100644 index 00000000000..11cd2357c77 --- /dev/null +++ b/cli/utils/webpack-config/src/common/ExternalData.ts @@ -0,0 +1,5 @@ +export interface ExternalData { + bundle: boolean; + data: Record; + name: string; +} diff --git a/cli/utils/webpack-config/src/common/getConfig.ts b/cli/utils/webpack-config/src/common/getConfig.ts new file mode 100644 index 00000000000..9fc6826606c --- /dev/null +++ b/cli/utils/webpack-config/src/common/getConfig.ts @@ -0,0 +1,129 @@ +import { BundleAnalyzerPlugin } from "webpack-bundle-analyzer"; +import type { ExternalData } from "./ExternalData.js"; +import TerserPlugin from "terser-webpack-plugin"; +import { getEntry } from "./getEntry.js"; +import { getExternals } from "./getExternals.js"; +import path from "node:path"; +import webpack from "webpack"; + +interface ConfigParams { + additionalExternals?: ExternalData[]; + banner: string; + bundle?: boolean; + dir: string; + entry: { + bundle: boolean; + format: string; + name?: string; + }; + minBanner: string; + progress: boolean; + version: string; +} + +/** + * + * @param params - + * @param min - + * @param lazy - + * @returns the webpack configuration + */ +function getSingleConfig(params: ConfigParams, min: boolean, lazy: boolean): unknown { + const { additionalExternals, banner, bundle, dir, entry, minBanner, version } = params; + + return { + entry: getEntry({ ...entry, min, lazy }), + target: "web", + mode: min ? "production" : "development", + output: { + path: path.resolve(dir, "dist"), + filename: "[name].js", + library: { + type: "umd2", + }, + globalObject: "this", + chunkFilename: min ? "[name].min.js" : "[name].js", + }, + resolve: { + extensions: [".cjs", ".mjs", ".js", ".json"], + }, + externals: getExternals({ bundle, additionalExternals }), + module: { + rules: [ + { + test: /\.m?js$/, + exclude: /node_modules/, + use: { + loader: "swc-loader", + options: { + jsc: { + parser: { + syntax: "ecmascript", + }, + target: "es2022", + }, + module: { + type: "es6", + }, + }, + }, + }, + ], + }, + plugins: [ + new webpack.DefinePlugin({ + __VERSION__: JSON.stringify(version), + }), + new webpack.BannerPlugin({ + banner, + exclude: /\.min\.js$/, + }), + new webpack.BannerPlugin({ + banner: minBanner, + include: /\.min\.js$/, + }), + params.progress ? new webpack.ProgressPlugin() : undefined, + new BundleAnalyzerPlugin({ + openAnalyzer: false, + analyzerMode: "static", + excludeAssets: /\.min\.js$/, + reportFilename: "report.html", + }), + ].filter(Boolean), + optimization: { + minimize: min, + concatenateModules: false, + minimizer: [ + new TerserPlugin({ + include: /\.min\.js$/, + minify: TerserPlugin.swcMinify, + parallel: true, + terserOptions: { + compress: { + unused: true, + dead_code: true, + }, + mangle: true, + format: { + comments: false, + }, + }, + }), + ], + }, + performance: { + hints: false, + }, + }; +} + +const getConfig = (params: ConfigParams): unknown[] => { + return [ + getSingleConfig(params, false, false), + getSingleConfig(params, true, false), + getSingleConfig(params, false, true), + getSingleConfig(params, true, true), + ]; +}; + +export { getConfig }; diff --git a/cli/utils/webpack-config/src/common/getEntry.ts b/cli/utils/webpack-config/src/common/getEntry.ts new file mode 100644 index 00000000000..b6cc38c213e --- /dev/null +++ b/cli/utils/webpack-config/src/common/getEntry.ts @@ -0,0 +1,24 @@ +interface IEntryParams { + bundle: boolean; + format: string; + lazy: boolean; + min: boolean; + name?: string; +} + +const getEntry = (data: IEntryParams): unknown => { + const { bundle, format, lazy, min, name } = data, + fileName = bundle ? "bundle" : "index", + completeFileName = lazy ? `${fileName}.lazy` : fileName, + fixFormat = format ? `.${format}` : "", + fixName = name ? `.${name}` : "", + fixMin = min ? ".min" : "", + fixLazy = lazy ? ".lazy" : "", + obj = {} as Record; + + obj[`tsparticles${fixFormat}${fixName}${fixLazy}${fixMin}`] = `./dist/browser/${completeFileName}.js`; + + return obj; +}; + +export { getEntry }; diff --git a/cli/utils/webpack-config/src/common/getExternals.ts b/cli/utils/webpack-config/src/common/getExternals.ts new file mode 100644 index 00000000000..7fe165c3a97 --- /dev/null +++ b/cli/utils/webpack-config/src/common/getExternals.ts @@ -0,0 +1,47 @@ +import type { ExternalData } from "./ExternalData.js"; + +const getExternalObject = (name: string): unknown => { + return { + commonjs: name, + commonjs2: name, + amd: name, + root: "window", + }; +}; + +interface ExternalsParams { + additionalExternals?: ExternalData[]; + bundle?: boolean; +} + +const transformExternal = (external: ExternalData): unknown => { + return { + [external.name]: external.data, + }; + }, + getExternals = (params: ExternalsParams): unknown[] => { + const { additionalExternals, bundle } = params, + externals = additionalExternals ?? []; + + if (bundle) { + return externals.filter(t => !t.bundle).map(transformExternal); + } + + return [ + ...externals.map(transformExternal), + function ({ request }: { request: string | undefined }, cb: (err?: Error | null, data?: unknown) => void): void { + if ( + request && + (request === "tsparticles" || request.startsWith("tsparticles-") || request.startsWith("@tsparticles/")) + ) { + cb(null, getExternalObject(request)); + + return; + } + + cb(); + }, + ]; + }; + +export { getExternals }; diff --git a/cli/utils/webpack-config/src/effects/buildEffect.ts b/cli/utils/webpack-config/src/effects/buildEffect.ts new file mode 100644 index 00000000000..9504434d360 --- /dev/null +++ b/cli/utils/webpack-config/src/effects/buildEffect.ts @@ -0,0 +1,39 @@ +import type { ExternalData } from "../common/ExternalData.js"; +import { getConfig } from "../common/getConfig.js"; + +interface EffectParams { + additionalExternals?: ExternalData[]; + dir: string; + effectName: string; + moduleName: string; + progress: boolean; + version: string; +} + +/** + * @param params - + * @returns the webpack config + */ +function loadParticlesEffect(params: EffectParams): unknown { + const { moduleName, effectName, version, dir, additionalExternals, progress } = params, + banner = `Author : Matteo Bruni +MIT license: https://opensource.org/licenses/MIT +Demo / Generator : https://particles.js.org/ +GitHub : https://www.github.com/matteobruni/tsparticles +How to use? : Check the GitHub README +v${version}`, + minBanner = `tsParticles ${effectName} Effect v${version} by Matteo Bruni`; + + return getConfig({ + entry: { format: "effect", name: moduleName, bundle: false }, + version, + banner, + minBanner: minBanner, + dir, + bundle: false, + progress, + additionalExternals, + }); +} + +export { loadParticlesEffect }; diff --git a/cli/utils/webpack-config/src/engine/buildEngine.ts b/cli/utils/webpack-config/src/engine/buildEngine.ts new file mode 100644 index 00000000000..fc2b82ff528 --- /dev/null +++ b/cli/utils/webpack-config/src/engine/buildEngine.ts @@ -0,0 +1,39 @@ +import type { ExternalData } from "../common/ExternalData.js"; +import { getConfig } from "../common/getConfig.js"; + +interface EngineParams { + additionalExternals?: ExternalData[]; + dir: string; + progress: boolean; + version: string; +} + +/** + * @param params - + * @returns the webpack config + */ +function loadParticlesEngine(params: EngineParams): unknown { + const { additionalExternals, dir, version, progress } = params, + banner = `tsParticles Engine v${version} +Author: Matteo Bruni +MIT license: https://opensource.org/licenses/MIT +Website: https://particles.js.org/ +Confetti Website: https://confetti.js.org +GitHub: https://www.github.com/matteobruni/tsparticles +How to use?: Check the GitHub README +------------------------------------------------------`, + minBanner = `tsParticles Engine v${version} by Matteo Bruni`; + + return getConfig({ + entry: { format: "engine", bundle: false }, + version, + banner, + minBanner: minBanner, + dir, + bundle: false, + progress, + additionalExternals, + }); +} + +export { loadParticlesEngine }; diff --git a/cli/utils/webpack-config/src/interactions/buildInteraction.ts b/cli/utils/webpack-config/src/interactions/buildInteraction.ts new file mode 100644 index 00000000000..67d49b7e607 --- /dev/null +++ b/cli/utils/webpack-config/src/interactions/buildInteraction.ts @@ -0,0 +1,43 @@ +import type { ExternalData } from "../common/ExternalData.js"; +import { getConfig } from "../common/getConfig.js"; + +interface InteractionParams { + additionalExternals?: ExternalData[]; + dir: string; + moduleName: string; + pluginName: string; + progress: boolean; + version: string; +} + +/** + * @param params - + * @returns the webpack config + */ +function loadParticlesInteraction(params: InteractionParams): unknown { + const { moduleName, pluginName, version, dir, additionalExternals, progress } = params, + banner = `Author : Matteo Bruni +MIT license: https://opensource.org/licenses/MIT +Demo / Generator : https://particles.js.org/ +GitHub : https://www.github.com/matteobruni/tsparticles +How to use? : Check the GitHub README +v${version}`, + minBanner = `tsParticles ${pluginName} Interaction v${version} by Matteo Bruni`; + + return getConfig({ + entry: { + format: "interaction", + name: moduleName, + bundle: false, + }, + version, + banner, + minBanner: minBanner, + dir, + bundle: false, + progress, + additionalExternals, + }); +} + +export { loadParticlesInteraction }; diff --git a/cli/utils/webpack-config/src/interactions/external/buildInteractionExternal.ts b/cli/utils/webpack-config/src/interactions/external/buildInteractionExternal.ts new file mode 100644 index 00000000000..d9567fa931d --- /dev/null +++ b/cli/utils/webpack-config/src/interactions/external/buildInteractionExternal.ts @@ -0,0 +1,43 @@ +import type { ExternalData } from "../../common/ExternalData.js"; +import { getConfig } from "../../common/getConfig.js"; + +interface InteractionExternalParams { + additionalExternals?: ExternalData[]; + dir: string; + moduleName: string; + pluginName: string; + progress: boolean; + version: string; +} + +/** + * @param params - + * @returns the webpack config + */ +function loadParticlesInteractionExternal(params: InteractionExternalParams): unknown { + const { moduleName, pluginName, version, dir, additionalExternals, progress } = params, + banner = `Author : Matteo Bruni +MIT license: https://opensource.org/licenses/MIT +Demo / Generator : https://particles.js.org/ +GitHub : https://www.github.com/matteobruni/tsparticles +How to use? : Check the GitHub README +v${version}`, + minBanner = `tsParticles ${pluginName} External Interaction v${version} by Matteo Bruni`; + + return getConfig({ + entry: { + format: "interaction.external", + name: moduleName, + bundle: false, + }, + version, + banner, + minBanner: minBanner, + dir, + bundle: false, + progress, + additionalExternals, + }); +} + +export { loadParticlesInteractionExternal }; diff --git a/cli/utils/webpack-config/src/interactions/particles/buildInteractionParticles.ts b/cli/utils/webpack-config/src/interactions/particles/buildInteractionParticles.ts new file mode 100644 index 00000000000..85eeff1b19a --- /dev/null +++ b/cli/utils/webpack-config/src/interactions/particles/buildInteractionParticles.ts @@ -0,0 +1,43 @@ +import type { ExternalData } from "../../common/ExternalData.js"; +import { getConfig } from "../../common/getConfig.js"; + +interface InteractionParticlesParams { + additionalExternals?: ExternalData[]; + dir: string; + moduleName: string; + pluginName: string; + progress: boolean; + version: string; +} + +/** + * @param params - + * @returns the webpack config + */ +function loadParticlesInteractionParticles(params: InteractionParticlesParams): unknown { + const { moduleName, pluginName, version, dir, additionalExternals, progress } = params, + banner = `Author : Matteo Bruni +MIT license: https://opensource.org/licenses/MIT +Demo / Generator : https://particles.js.org/ +GitHub : https://www.github.com/matteobruni/tsparticles +How to use? : Check the GitHub README +v${version}`, + minBanner = `tsParticles ${pluginName} Particles Interaction v${version} by Matteo Bruni`; + + return getConfig({ + entry: { + format: "interaction.particles", + name: moduleName, + bundle: false, + }, + version, + banner, + minBanner: minBanner, + dir, + bundle: false, + progress, + additionalExternals, + }); +} + +export { loadParticlesInteractionParticles }; diff --git a/cli/utils/webpack-config/src/palettes/buildPalette.ts b/cli/utils/webpack-config/src/palettes/buildPalette.ts new file mode 100644 index 00000000000..7d3a3357ec9 --- /dev/null +++ b/cli/utils/webpack-config/src/palettes/buildPalette.ts @@ -0,0 +1,41 @@ +import type { ExternalData } from "../common/ExternalData.js"; +import { getConfig } from "../common/getConfig.js"; + +interface PaletteParams { + additionalExternals?: ExternalData[]; + dir: string; + moduleName: string; + paletteName: string; + progress: boolean; + version: string; +} + +/** + * @param params - + * @returns the webpack config + */ +function loadParticlesPalette(params: PaletteParams): unknown { + const { moduleName, paletteName, version, dir, additionalExternals, progress } = params, + banner = `Author : Matteo Bruni +MIT license: https://opensource.org/licenses/MIT +Demo / Generator : https://particles.js.org/ +GitHub : https://www.github.com/matteobruni/tsparticles +How to use? : Check the GitHub README +v${version}`, + minBanner = `tsParticles ${paletteName} Palette v${version} by Matteo Bruni`; + + return [ + ...getConfig({ + entry: { format: "palette", name: moduleName, bundle: false }, + version, + banner, + minBanner: minBanner, + dir, + bundle: false, + additionalExternals, + progress, + }), + ]; +} + +export { loadParticlesPalette }; diff --git a/cli/utils/webpack-config/src/paths/buildPath.ts b/cli/utils/webpack-config/src/paths/buildPath.ts new file mode 100644 index 00000000000..f5027b4eb5b --- /dev/null +++ b/cli/utils/webpack-config/src/paths/buildPath.ts @@ -0,0 +1,43 @@ +import type { ExternalData } from "../common/ExternalData.js"; +import { getConfig } from "../common/getConfig.js"; + +interface PathParams { + additionalExternals?: ExternalData[]; + dir: string; + moduleName: string; + pluginName: string; + progress: boolean; + version: string; +} + +/** + * @param params - + * @returns the webpack config + */ +function loadParticlesPath(params: PathParams): unknown { + const { moduleName, pluginName, version, dir, additionalExternals, progress } = params, + banner = `Author : Matteo Bruni +MIT license: https://opensource.org/licenses/MIT +Demo / Generator : https://particles.js.org/ +GitHub : https://www.github.com/matteobruni/tsparticles +How to use? : Check the GitHub README +v${version}`, + minBanner = `tsParticles ${pluginName} Path v${version} by Matteo Bruni`; + + return getConfig({ + entry: { + format: "path", + name: moduleName, + bundle: false, + }, + version, + banner, + minBanner: minBanner, + dir, + bundle: false, + progress, + additionalExternals, + }); +} + +export { loadParticlesPath }; diff --git a/cli/utils/webpack-config/src/plugins/buildPlugin.ts b/cli/utils/webpack-config/src/plugins/buildPlugin.ts new file mode 100644 index 00000000000..b6e8dc24933 --- /dev/null +++ b/cli/utils/webpack-config/src/plugins/buildPlugin.ts @@ -0,0 +1,63 @@ +import type { ExternalData } from "../common/ExternalData.js"; +import { getConfig } from "../common/getConfig.js"; + +interface PluginParams { + additionalExternals?: ExternalData[]; + bundle: boolean; + dir: string; + moduleName: string; + pluginName: string; + progress: boolean; + version: string; +} + +/** + * @param params - + * @returns the webpack config + */ +function loadParticlesPlugin(params: PluginParams): unknown { + const { moduleName, pluginName, version, dir, bundle, additionalExternals, progress } = params, + banner = `Author : Matteo Bruni +MIT license: https://opensource.org/licenses/MIT +Demo / Generator : https://particles.js.org/ +GitHub : https://www.github.com/matteobruni/tsparticles +How to use? : Check the GitHub README +v${version}`, + minBanner = `tsParticles ${pluginName} Plugin v${version} by Matteo Bruni`; + + return bundle + ? [ + ...getConfig({ + entry: { format: "plugin", name: moduleName, bundle: false }, + version, + banner, + minBanner: minBanner, + dir, + bundle: false, + additionalExternals, + progress, + }), + ...getConfig({ + entry: { format: "plugin", name: `${moduleName}.bundle`, bundle: true }, + version, + banner, + minBanner: minBanner, + dir, + bundle: true, + additionalExternals, + progress, + }), + ] + : getConfig({ + entry: { format: "plugin", name: moduleName, bundle: false }, + version, + banner, + minBanner: minBanner, + dir, + bundle: false, + additionalExternals, + progress, + }); +} + +export { loadParticlesPlugin }; diff --git a/cli/utils/webpack-config/src/plugins/easings/buildEasing.ts b/cli/utils/webpack-config/src/plugins/easings/buildEasing.ts new file mode 100644 index 00000000000..2edc8b2c278 --- /dev/null +++ b/cli/utils/webpack-config/src/plugins/easings/buildEasing.ts @@ -0,0 +1,63 @@ +import type { ExternalData } from "../../common/ExternalData.js"; +import { getConfig } from "../../common/getConfig.js"; + +interface EasingParams { + additionalExternals?: ExternalData[]; + bundle: boolean; + dir: string; + moduleName: string; + pluginName: string; + progress: boolean; + version: string; +} + +/** + * @param params - + * @returns the webpack config + */ +function loadParticlesPluginEasing(params: EasingParams): unknown { + const { moduleName, pluginName, version, dir, bundle, additionalExternals, progress } = params, + banner = `Author : Matteo Bruni +MIT license: https://opensource.org/licenses/MIT +Demo / Generator : https://particles.js.org/ +GitHub : https://www.github.com/matteobruni/tsparticles +How to use? : Check the GitHub README +v${version}`, + minBanner = `tsParticles Easing ${pluginName} Plugin v${version} by Matteo Bruni`; + + return bundle + ? [ + ...getConfig({ + entry: { format: "plugin.easing", name: moduleName, bundle: false }, + version, + banner, + minBanner: minBanner, + dir, + bundle: false, + progress, + additionalExternals, + }), + ...getConfig({ + entry: { format: "plugin.easing", name: `${moduleName}.bundle`, bundle: true }, + version, + banner, + minBanner: minBanner, + dir, + bundle: true, + progress, + additionalExternals, + }), + ] + : getConfig({ + entry: { format: "plugin.easing", name: moduleName, bundle: false }, + version, + banner, + minBanner: minBanner, + dir, + bundle: false, + progress, + additionalExternals, + }); +} + +export { loadParticlesPluginEasing }; diff --git a/cli/utils/webpack-config/src/plugins/emittersShapes/buildEmittersShape.ts b/cli/utils/webpack-config/src/plugins/emittersShapes/buildEmittersShape.ts new file mode 100644 index 00000000000..4b7c2738a68 --- /dev/null +++ b/cli/utils/webpack-config/src/plugins/emittersShapes/buildEmittersShape.ts @@ -0,0 +1,63 @@ +import type { ExternalData } from "../../common/ExternalData.js"; +import { getConfig } from "../../common/getConfig.js"; + +interface EmittersShapeParams { + additionalExternals?: ExternalData[]; + bundle: boolean; + dir: string; + moduleName: string; + pluginName: string; + progress: boolean; + version: string; +} + +/** + * @param params - + * @returns the webpack config + */ +function loadParticlesPluginEmittersShape(params: EmittersShapeParams): unknown { + const { moduleName, pluginName, version, dir, bundle, additionalExternals, progress } = params, + banner = `Author : Matteo Bruni +MIT license: https://opensource.org/licenses/MIT +Demo / Generator : https://particles.js.org/ +GitHub : https://www.github.com/matteobruni/tsparticles +How to use? : Check the GitHub README +v${version}`, + minBanner = `tsParticles Emitters Shape ${pluginName} Plugin v${version} by Matteo Bruni`; + + return bundle + ? [ + ...getConfig({ + entry: { format: "plugin.emitters.shape", name: moduleName, bundle: false }, + version, + banner, + minBanner: minBanner, + dir, + bundle: false, + additionalExternals, + progress, + }), + ...getConfig({ + entry: { format: "plugin.emitters.shape", name: `${moduleName}.bundle`, bundle: true }, + version, + banner, + minBanner: minBanner, + dir, + bundle: true, + additionalExternals, + progress, + }), + ] + : getConfig({ + entry: { format: "plugin.emitters.shape", name: moduleName, bundle: false }, + version, + banner, + minBanner: minBanner, + dir, + bundle: false, + additionalExternals, + progress, + }); +} + +export { loadParticlesPluginEmittersShape }; diff --git a/cli/utils/webpack-config/src/plugins/exports/buildExport.ts b/cli/utils/webpack-config/src/plugins/exports/buildExport.ts new file mode 100644 index 00000000000..fa4154f41f8 --- /dev/null +++ b/cli/utils/webpack-config/src/plugins/exports/buildExport.ts @@ -0,0 +1,63 @@ +import type { ExternalData } from "../../common/ExternalData.js"; +import { getConfig } from "../../common/getConfig.js"; + +interface ExportParams { + additionalExternals?: ExternalData[]; + bundle: boolean; + dir: string; + moduleName: string; + pluginName: string; + progress: boolean; + version: string; +} + +/** + * @param params - + * @returns the webpack config + */ +function loadParticlesPluginExport(params: ExportParams): unknown { + const { moduleName, pluginName, version, dir, bundle, additionalExternals, progress } = params, + banner = `Author : Matteo Bruni +MIT license: https://opensource.org/licenses/MIT +Demo / Generator : https://particles.js.org/ +GitHub : https://www.github.com/matteobruni/tsparticles +How to use? : Check the GitHub README +v${version}`, + minBanner = `tsParticles Export ${pluginName} Plugin v${version} by Matteo Bruni`; + + return bundle + ? [ + ...getConfig({ + entry: { format: "plugin.export", name: moduleName, bundle: false }, + version, + banner, + minBanner: minBanner, + dir, + bundle: false, + additionalExternals, + progress, + }), + ...getConfig({ + entry: { format: "plugin.export", name: `${moduleName}.bundle`, bundle: true }, + version, + banner, + minBanner: minBanner, + dir, + bundle: true, + additionalExternals, + progress, + }), + ] + : getConfig({ + entry: { format: "plugin.export", name: moduleName, bundle: false }, + version, + banner, + minBanner: minBanner, + dir, + bundle: false, + additionalExternals, + progress, + }); +} + +export { loadParticlesPluginExport }; diff --git a/cli/utils/webpack-config/src/presets/buildPreset.ts b/cli/utils/webpack-config/src/presets/buildPreset.ts new file mode 100644 index 00000000000..e531064d7f1 --- /dev/null +++ b/cli/utils/webpack-config/src/presets/buildPreset.ts @@ -0,0 +1,51 @@ +import type { ExternalData } from "../common/ExternalData.js"; +import { getConfig } from "../common/getConfig.js"; + +interface PresetParams { + additionalExternals?: ExternalData[]; + dir: string; + moduleName: string; + presetName: string; + progress: boolean; + version: string; +} + +/** + * @param params - + * @returns the webpack config + */ +function loadParticlesPreset(params: PresetParams): unknown { + const { moduleName, presetName, version, dir, additionalExternals, progress } = params, + banner = `Author : Matteo Bruni +MIT license: https://opensource.org/licenses/MIT +Demo / Generator : https://particles.js.org/ +GitHub : https://www.github.com/matteobruni/tsparticles +How to use? : Check the GitHub README +v${version}`, + minBanner = `tsParticles ${presetName} Preset v${version} by Matteo Bruni`; + + return [ + ...getConfig({ + entry: { format: "preset", name: moduleName, bundle: false }, + version, + banner, + minBanner: minBanner, + dir, + bundle: false, + additionalExternals, + progress, + }), + ...getConfig({ + entry: { format: "preset", name: `${moduleName}.bundle`, bundle: true }, + version, + banner, + minBanner: minBanner, + dir, + bundle: true, + additionalExternals, + progress, + }), + ]; +} + +export { loadParticlesPreset }; diff --git a/cli/utils/webpack-config/src/shapes/buildShape.ts b/cli/utils/webpack-config/src/shapes/buildShape.ts new file mode 100644 index 00000000000..0f550b61839 --- /dev/null +++ b/cli/utils/webpack-config/src/shapes/buildShape.ts @@ -0,0 +1,39 @@ +import type { ExternalData } from "../common/ExternalData.js"; +import { getConfig } from "../common/getConfig.js"; + +interface ShapeParams { + additionalExternals?: ExternalData[]; + dir: string; + moduleName: string; + progress: boolean; + shapeName: string; + version: string; +} + +/** + * @param params - + * @returns the webpack config + */ +function loadParticlesShape(params: ShapeParams): unknown { + const { moduleName, shapeName, version, dir, additionalExternals, progress } = params, + banner = `Author : Matteo Bruni +MIT license: https://opensource.org/licenses/MIT +Demo / Generator : https://particles.js.org/ +GitHub : https://www.github.com/matteobruni/tsparticles +How to use? : Check the GitHub README +v${version}`, + minBanner = `tsParticles ${shapeName} Shape v${version} by Matteo Bruni`; + + return getConfig({ + entry: { format: "shape", name: moduleName, bundle: false }, + version, + banner, + minBanner: minBanner, + dir, + bundle: false, + additionalExternals, + progress, + }); +} + +export { loadParticlesShape }; diff --git a/cli/utils/webpack-config/src/templates/buildTemplate.ts b/cli/utils/webpack-config/src/templates/buildTemplate.ts new file mode 100644 index 00000000000..432257ed767 --- /dev/null +++ b/cli/utils/webpack-config/src/templates/buildTemplate.ts @@ -0,0 +1,51 @@ +import type { ExternalData } from "../common/ExternalData.js"; +import { getConfig } from "../common/getConfig.js"; + +interface TemplateParams { + additionalExternals?: ExternalData[]; + dir: string; + moduleName: string; + progress: boolean; + templateName: string; + version: string; +} + +/** + * @param params - + * @returns the webpack config + */ +function loadParticlesTemplate(params: TemplateParams): unknown { + const { moduleName, templateName, version, dir, additionalExternals, progress } = params, + banner = `Author : Matteo Bruni +MIT license: https://opensource.org/licenses/MIT +Demo / Generator : https://particles.js.org/ +GitHub : https://www.github.com/matteobruni/tsparticles +How to use? : Check the GitHub README +v${version}`, + minBanner = `tsParticles ${templateName} Template v${version} by Matteo Bruni`; + + return [ + ...getConfig({ + entry: { format: "template", name: moduleName, bundle: false }, + version, + banner, + minBanner: minBanner, + dir, + bundle: false, + additionalExternals, + progress, + }), + ...getConfig({ + entry: { format: "template", name: `${moduleName}.bundle`, bundle: true }, + version, + banner, + minBanner: minBanner, + dir, + bundle: true, + additionalExternals, + progress, + }), + ]; +} + +export { loadParticlesTemplate }; diff --git a/cli/utils/webpack-config/src/updaters/buildUpdater.ts b/cli/utils/webpack-config/src/updaters/buildUpdater.ts new file mode 100644 index 00000000000..9a132c9c87b --- /dev/null +++ b/cli/utils/webpack-config/src/updaters/buildUpdater.ts @@ -0,0 +1,39 @@ +import type { ExternalData } from "../common/ExternalData.js"; +import { getConfig } from "../common/getConfig.js"; + +interface UpdaterParams { + additionalExternals?: ExternalData[]; + dir: string; + moduleName: string; + progress: boolean; + updaterName: string; + version: string; +} + +/** + * @param params - + * @returns the webpack config + */ +function loadParticlesUpdater(params: UpdaterParams): unknown { + const { moduleName, updaterName, version, dir, additionalExternals, progress } = params, + banner = `Author : Matteo Bruni +MIT license: https://opensource.org/licenses/MIT +Demo / Generator : https://particles.js.org/ +GitHub : https://www.github.com/matteobruni/tsparticles +How to use? : Check the GitHub README +v${version}`, + minBanner = `tsParticles ${updaterName} Updater v${version} by Matteo Bruni`; + + return getConfig({ + entry: { format: "updater", name: moduleName, bundle: false }, + version, + banner, + minBanner: minBanner, + dir, + bundle: false, + progress, + additionalExternals, + }); +} + +export { loadParticlesUpdater }; diff --git a/cli/utils/webpack-config/src/webpack-tsparticles.ts b/cli/utils/webpack-config/src/webpack-tsparticles.ts new file mode 100644 index 00000000000..fc42b36de17 --- /dev/null +++ b/cli/utils/webpack-config/src/webpack-tsparticles.ts @@ -0,0 +1,35 @@ +import { loadParticlesBundle } from "./bundles/buildBundle.js"; +import { loadParticlesEffect } from "./effects/buildEffect.js"; +import { loadParticlesEngine } from "./engine/buildEngine.js"; +import { loadParticlesInteraction } from "./interactions/buildInteraction.js"; +import { loadParticlesInteractionExternal } from "./interactions/external/buildInteractionExternal.js"; +import { loadParticlesInteractionParticles } from "./interactions/particles/buildInteractionParticles.js"; +import { loadParticlesPalette } from "./palettes/buildPalette.js"; +import { loadParticlesPath } from "./paths/buildPath.js"; +import { loadParticlesPlugin } from "./plugins/buildPlugin.js"; +import { loadParticlesPluginEasing } from "./plugins/easings/buildEasing.js"; +import { loadParticlesPluginEmittersShape } from "./plugins/emittersShapes/buildEmittersShape.js"; +import { loadParticlesPluginExport } from "./plugins/exports/buildExport.js"; +import { loadParticlesPreset } from "./presets/buildPreset.js"; +import { loadParticlesShape } from "./shapes/buildShape.js"; +import { loadParticlesTemplate } from "./templates/buildTemplate.js"; +import { loadParticlesUpdater } from "./updaters/buildUpdater.js"; + +export { + loadParticlesBundle, + loadParticlesEffect, + loadParticlesEngine, + loadParticlesInteraction, + loadParticlesInteractionExternal, + loadParticlesInteractionParticles, + loadParticlesPalette, + loadParticlesPath, + loadParticlesPlugin, + loadParticlesPluginEasing, + loadParticlesPluginEmittersShape, + loadParticlesPluginExport, + loadParticlesPreset, + loadParticlesShape, + loadParticlesTemplate, + loadParticlesUpdater, +}; diff --git a/cli/utils/webpack-config/tsconfig.json b/cli/utils/webpack-config/tsconfig.json new file mode 100644 index 00000000000..b35d2fa835b --- /dev/null +++ b/cli/utils/webpack-config/tsconfig.json @@ -0,0 +1,80 @@ +{ + "compilerOptions": { + /* Basic Options */ + // "incremental": true, /* Enable incremental compilation */ + "target": "ES2022", + /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */ + "module": "NodeNext", + /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ + "lib": ["ESNext", "ES2024", "ES2023", "ES2022", "ES2021", "ES2020", "ES2019", "ES2018", "ES2017", "ES2016", "ES2015", "DOM"], + /* Specify library files to be included in the compilation. */ + // "allowJs": true, /* Allow javascript files to be compiled. */ + // "checkJs": true, /* Report errors in .js files. */ + // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ + "declaration": true, + /* Generates corresponding '.d.ts' file. */ + // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ + // "sourceMap": true, /* Generates corresponding '.map' file. */ + // "outFile": "./", /* Concatenate and emit output to single file. */ + "outDir": "./dist", + /* Redirect output structure to the directory. */ + "rootDir": "./src", + /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ + // "composite": true, /* Enable project compilation */ + // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ + "removeComments": true, + /* Do not emit comments to output. */ + // "noEmit": true, /* Do not emit outputs. */ + "importHelpers": false, + /* Import emit helpers from 'tslib'. */ + // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ + // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ + + /* Strict Type-Checking Options */ + "strict": true, + /* Enable all strict type-checking options. */ + "noImplicitAny": true, + /* Raise error on expressions and declarations with an implied 'any' type. */ + "strictNullChecks": true, + /* Enable strict null checks. */ + "strictFunctionTypes": true, /* Enable strict checking of function types. */ + "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ + "strictPropertyInitialization": true, + /* Enable strict checking of property initialization in classes. */ + "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ + "alwaysStrict": true, + /* Parse in strict mode and emit "use strict" for each source file. */ + + /* Additional Checks */ + "noUnusedLocals": true, /* Report errors on unused locals. */ + "noUnusedParameters": true, /* Report errors on unused parameters. */ + "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + "noFallthroughCasesInSwitch": true, + /* Report errors for fallthrough cases in switch statement. */ + + /* Module Resolution Options */ + "moduleResolution": "NodeNext", + /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ + // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ + // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ + // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ + // "typeRoots": [], /* List of folders to include type definitions from. */ + "types": ["node"] /* Type declaration files to be included in compilation. */, + // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ + "esModuleInterop": true, + /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ + // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + + /* Source Map Options */ + // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ + // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ + + /* Experimental Options */ + // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ + // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ + "resolveJsonModule": true + } +} diff --git a/demo/angular/CHANGELOG.md b/demo/angular/CHANGELOG.md index 6d8cadf005d..77d77c5e58a 100644 --- a/demo/angular/CHANGELOG.md +++ b/demo/angular/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/angular-demo + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) ### Features diff --git a/demo/angular/package.json b/demo/angular/package.json index f25cfc83e66..1119243c4d1 100644 --- a/demo/angular/package.json +++ b/demo/angular/package.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/angular-demo", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "scripts": { "ng": "ng", "start": "ng serve -o", diff --git a/demo/astro/CHANGELOG.md b/demo/astro/CHANGELOG.md index bfd68b58486..ca2e59d6afe 100644 --- a/demo/astro/CHANGELOG.md +++ b/demo/astro/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/astro-demo + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/astro-demo diff --git a/demo/astro/README.md b/demo/astro/README.md index 8252739a4a0..9f6111742e2 100644 --- a/demo/astro/README.md +++ b/demo/astro/README.md @@ -48,3 +48,35 @@ All commands are run from the root of the project, from a terminal: ## 👀 Want to learn more? Feel free to check [our documentation](https://docs.astro.build) or jump into our [Discord server](https://astro.build/chat). + +## Running the tsParticles demo locally + +The demo uses the @tsparticles/astro wrapper. In local dev the browser needs a browser-ready +ESM entry for the wrapper. The easiest way to run the demo locally is: + +1. Install deps at the repo root: `pnpm install` +2. Start the demo dev server: + +```bash +cd demo/astro +pnpm dev +``` + +3. Open the local URL reported by Astro. + +Dev note: the demo places a small importmap and a client-init script before the Particles component so that +the browser loads the wrapper's browser entry and the core bundle in dev. The importmap looks like this: + +```html + +``` + +Then a small client script calls `initParticlesEngine(...)` before the component is upgraded so the wrapper +can detect initialization and proceed without throwing. diff --git a/demo/astro/astro.config.mjs b/demo/astro/astro.config.mjs index 882e6515a67..7115234a693 100644 --- a/demo/astro/astro.config.mjs +++ b/demo/astro/astro.config.mjs @@ -1,4 +1,14 @@ import { defineConfig } from 'astro/config'; +import { resolve } from 'node:path'; // https://astro.build/config -export default defineConfig({}); +// Use aliases to ensure server-side imports get the server entry (source +// workspace file) while client-side module imports (exact package root) +// resolve to the browser ESM entry in node_modules. +export default defineConfig({ + vite: { + resolve: { + alias: {}, + }, + }, +}); diff --git a/demo/astro/package.json b/demo/astro/package.json index 5808631e51d..dafa4c2b9c5 100644 --- a/demo/astro/package.json +++ b/demo/astro/package.json @@ -1,7 +1,7 @@ { "name": "@tsparticles/astro-demo", "type": "module", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "private": true, "scripts": { "dev": "astro dev", diff --git a/demo/astro/src/pages/index.astro b/demo/astro/src/pages/index.astro index 89b4d80a204..17d28c6445f 100644 --- a/demo/astro/src/pages/index.astro +++ b/demo/astro/src/pages/index.astro @@ -1,44 +1,50 @@ --- -import Particles, { initParticlesEngine } from "@tsparticles/astro"; +import Particles from "@tsparticles/astro"; import type { ISourceOptions } from "@tsparticles/engine"; -import { loadFull } from "tsparticles"; import Layout from "../layouts/Layout.astro"; import Card from "../components/Card.astro"; -await initParticlesEngine(async (engine) => { - await loadFull(engine); -}); - const options: ISourceOptions = { - background: { - color: { - value: "#fff" - } + background: { + color: { + value: "#f00" + } + }, + particles: { + paint: { + color: { + value: "#000" + }, + }, + links: { + color: "#000", + enable: true }, - fullScreen: { - zIndex: -1 + number: { + value: 100 }, - particles: { - color: { - value: "#000" - }, - links: { - color: "#000", - enable: true - }, - number: { - value: 100 - }, - move: { - enable: true - } + move: { + enable: true } + } }; ---
+ +

Welcome to Astro

diff --git a/demo/electron/.gitignore b/demo/electron/.gitignore new file mode 100644 index 00000000000..5fb201c4cbb --- /dev/null +++ b/demo/electron/.gitignore @@ -0,0 +1 @@ +electron-demo-darwin-arm64/ \ No newline at end of file diff --git a/demo/electron/CHANGELOG.md b/demo/electron/CHANGELOG.md index 009e0b2f832..433c6851aef 100644 --- a/demo/electron/CHANGELOG.md +++ b/demo/electron/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/electron-demo + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/electron-demo diff --git a/demo/electron/app/index.js b/demo/electron/app/index.cjs similarity index 100% rename from demo/electron/app/index.js rename to demo/electron/app/index.cjs diff --git a/demo/electron/client/client.js b/demo/electron/client/client.js index 2791d770126..b787385c440 100644 --- a/demo/electron/client/client.js +++ b/demo/electron/client/client.js @@ -1,9 +1,9 @@ import { tsParticles } from "@tsparticles/engine"; import { loadFull } from "tsparticles"; -import { basic } from "@tsparticles/configs"; +import configs from "@tsparticles/configs"; document.addEventListener("DOMContentLoaded", async () => { await loadFull(tsParticles); - await tsParticles.load({ options: basic }); + await tsParticles.load({ options: configs.basic }); }); diff --git a/demo/electron/package.json b/demo/electron/package.json index ad909c4660f..d1ffd840621 100644 --- a/demo/electron/package.json +++ b/demo/electron/package.json @@ -1,12 +1,13 @@ { "name": "@tsparticles/electron-demo", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "", - "main": "app/index.js", + "main": "app/index.cjs", "private": true, "scripts": { "start": "pnpm run build:client && electron .", - "build:client": "webpack --mode production" + "build": "pnpm run build:client && pnpx @electron/packager . electron-demo", + "build:client": "webpack --config webpack.config.cjs --mode production" }, "keywords": [ "electron" @@ -14,12 +15,117 @@ "author": "Matteo Bruni ", "license": "MIT", "dependencies": { + "@tsparticles/basic": "workspace:*", "@tsparticles/configs": "workspace:*", "@tsparticles/engine": "workspace:*", + "@tsparticles/interaction-external-attract": "workspace:*", + "@tsparticles/interaction-external-bounce": "workspace:*", + "@tsparticles/interaction-external-bubble": "workspace:*", + "@tsparticles/interaction-external-connect": "workspace:*", + "@tsparticles/interaction-external-destroy": "workspace:*", + "@tsparticles/interaction-external-drag": "workspace:*", + "@tsparticles/interaction-external-grab": "workspace:*", + "@tsparticles/interaction-external-parallax": "workspace:*", + "@tsparticles/interaction-external-pause": "workspace:*", + "@tsparticles/interaction-external-push": "workspace:*", + "@tsparticles/interaction-external-remove": "workspace:*", + "@tsparticles/interaction-external-repulse": "workspace:*", + "@tsparticles/interaction-external-slow": "workspace:*", + "@tsparticles/interaction-external-trail": "workspace:*", + "@tsparticles/interaction-particles-attract": "workspace:*", + "@tsparticles/interaction-particles-collisions": "workspace:*", + "@tsparticles/interaction-particles-links": "workspace:*", + "@tsparticles/plugin-absorbers": "workspace:*", + "@tsparticles/plugin-easing-quad": "workspace:*", + "@tsparticles/plugin-emitters": "workspace:*", + "@tsparticles/plugin-emitters-shape-circle": "workspace:*", + "@tsparticles/plugin-emitters-shape-square": "workspace:*", + "@tsparticles/plugin-hex-color": "workspace:*", + "@tsparticles/plugin-hsl-color": "workspace:*", + "@tsparticles/plugin-interactivity": "workspace:*", + "@tsparticles/plugin-move": "workspace:*", + "@tsparticles/plugin-rgb-color": "workspace:*", + "@tsparticles/shape-circle": "workspace:*", + "@tsparticles/shape-emoji": "workspace:*", + "@tsparticles/shape-image": "workspace:*", + "@tsparticles/shape-line": "workspace:*", + "@tsparticles/shape-polygon": "workspace:*", + "@tsparticles/shape-square": "workspace:*", + "@tsparticles/shape-star": "workspace:*", + "@tsparticles/shape-text": "workspace:*", + "@tsparticles/slim": "workspace:*", + "@tsparticles/updater-destroy": "workspace:*", + "@tsparticles/updater-life": "workspace:*", + "@tsparticles/updater-opacity": "workspace:*", + "@tsparticles/updater-out-modes": "workspace:*", + "@tsparticles/updater-paint": "workspace:*", + "@tsparticles/updater-roll": "workspace:*", + "@tsparticles/updater-rotate": "workspace:*", + "@tsparticles/updater-size": "workspace:*", + "@tsparticles/updater-tilt": "workspace:*", + "@tsparticles/updater-twinkle": "workspace:*", + "@tsparticles/updater-wobble": "workspace:*", "tsparticles": "workspace:*" }, "devDependencies": { - "electron": "^41.2.0" + "@electron/asar": "^4.2.0", + "@electron/get": "^5.0.0", + "@electron/notarize": "^3.1.1", + "@electron/osx-sign": "^2.4.0", + "@electron/packager": "^20.0.0", + "@electron/universal": "^3.0.4", + "@electron/windows-sign": "^2.0.3", + "@malept/cross-spawn-promise": "^2.0.0", + "@sec-ant/readable-stream": "^0.6.0", + "@types/node": "^25.6.0", + "@xmldom/xmldom": "^0.9.10", + "author-regex": "^1.0.0", + "balanced-match": "^4.0.4", + "brace-expansion": "^5.0.5", + "buffer-crc32": "^1.0.0", + "commander": "^14.0.3", + "cross-spawn": "^7.0.6", + "debug": "^4.4.3", + "electron": "^41.3.0", + "env-paths": "^4.0.0", + "err-code": "^3.0.1", + "extract-zip": "^2.0.1", + "filename-reserved-regex": "^4.0.0", + "filenamify": "^7.0.1", + "flora-colossus": "^3.0.2", + "galactus": "^2.0.2", + "get-stream": "^9.0.1", + "glob": "^13.0.6", + "graceful-fs": "^4.2.11", + "is-safe-filename": "^0.1.1", + "is-stream": "^4.0.1", + "isbinaryfile": "^6.0.0", + "isexe": "^4.0.0", + "junk": "^4.0.1", + "lru-cache": "^11.3.5", + "minimatch": "^10.2.5", + "minipass": "^7.1.3", + "ms": "^2.1.3", + "parse-author": "^2.0.0", + "path-key": "^4.0.0", + "path-scurry": "^2.0.2", + "pe-library": "^2.0.1", + "pend": "^1.2.0", + "plist": "^4.0.0", + "postject": "^1.0.0-alpha.6", + "progress": "^2.0.3", + "promise-retry": "^2.0.1", + "resedit": "^3.0.2", + "retry": "^0.13.1", + "semver": "^7.7.4", + "shebang-command": "^2.0.0", + "shebang-regex": "^4.0.0", + "sumchecker": "^3.0.1", + "undici-types": "^8.1.0", + "which": "^6.0.1", + "xmlbuilder": "^15.1.1", + "yargs-parser": "^22.0.0", + "yauzl": "^3.3.0" }, "type": "module" } diff --git a/demo/electron/webpack.config.cjs b/demo/electron/webpack.config.cjs new file mode 100644 index 00000000000..037f4fa1139 --- /dev/null +++ b/demo/electron/webpack.config.cjs @@ -0,0 +1,9 @@ +const path = require("path"); + +module.exports = { + entry: "./client/client.js", + output: { + path: path.resolve(__dirname, "client", "dist"), + filename: "bundle.js", + }, +}; diff --git a/demo/electron/webpack.config.js b/demo/electron/webpack.config.js deleted file mode 100644 index 5e1bf76cf88..00000000000 --- a/demo/electron/webpack.config.js +++ /dev/null @@ -1,9 +0,0 @@ -import path from "node:path"; - -export default { - entry: './client/client.js', - output: { - path: path.resolve(__dirname, 'client', 'dist'), - filename: 'bundle.js', - }, -}; diff --git a/demo/ember/.ember-cli b/demo/ember/.ember-cli new file mode 100644 index 00000000000..163515bbbef --- /dev/null +++ b/demo/ember/.ember-cli @@ -0,0 +1,4 @@ +{ + "disableAnalytics": false, + "isTypeScriptProject": true +} diff --git a/demo/ember/.eslintrc.js b/demo/ember/.eslintrc.js new file mode 100644 index 00000000000..7184a95bd2c --- /dev/null +++ b/demo/ember/.eslintrc.js @@ -0,0 +1,16 @@ +"use strict"; + +module.exports = { + root: true, + parserOptions: { + ecmaVersion: "latest", + sourceType: "module", + }, + env: { + browser: true, + es6: true, + node: true, + }, + extends: ["eslint:recommended"], + ignorePatterns: ["dist/", "tmp/", "node_modules/"], +}; diff --git a/demo/ember/.gitignore b/demo/ember/.gitignore new file mode 100644 index 00000000000..7c23d4a13c7 --- /dev/null +++ b/demo/ember/.gitignore @@ -0,0 +1,11 @@ +/dist +/tmp +/coverage +/.idea +/.ember-try +/.eslintcache +/node_modules +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* diff --git a/demo/ember/.template-lintrc.js b/demo/ember/.template-lintrc.js new file mode 100644 index 00000000000..d1311e1163d --- /dev/null +++ b/demo/ember/.template-lintrc.js @@ -0,0 +1,5 @@ +"use strict"; + +module.exports = { + extends: "recommended", +}; diff --git a/demo/ember/CHANGELOG.md b/demo/ember/CHANGELOG.md new file mode 100644 index 00000000000..8dfab6e2b27 --- /dev/null +++ b/demo/ember/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/ember-demo diff --git a/demo/ember/README.md b/demo/ember/README.md new file mode 100644 index 00000000000..1ab560038c3 --- /dev/null +++ b/demo/ember/README.md @@ -0,0 +1,23 @@ +# Ember Demo + +Standalone Ember demo for `@tsparticles/ember`. + +## Usage + +From the repository root: + +```bash +pnpm i +pnpm run build +cd demo/ember +pnpm start +``` + +Open `http://localhost:4200`. + +## Scripts + +- `pnpm start` starts Ember dev server +- `pnpm build` builds the demo app +- `pnpm build:ci` builds in production mode +- `pnpm test` runs demo tests diff --git a/demo/ember/app/app.ts b/demo/ember/app/app.ts new file mode 100644 index 00000000000..e122ec3d364 --- /dev/null +++ b/demo/ember/app/app.ts @@ -0,0 +1,16 @@ +import Application from "@ember/application"; +import Resolver from "ember-resolver"; +import loadInitializers from "ember-load-initializers"; +// The environment module is emitted under the package namespace in the +// compiled output (e.g. @tsparticles/ember-demo/config/environment). Import +// using the package-scoped name so runtime module ids match the AMD/ESM +// modules generated by the build. +import config from "@tsparticles/ember-demo/config/environment"; + +export default class App extends Application { + modulePrefix = config.modulePrefix; + podModulePrefix = config.podModulePrefix; + Resolver = Resolver; +} + +loadInitializers(App, config.modulePrefix); diff --git a/demo/ember/app/config/environment.d.ts b/demo/ember/app/config/environment.d.ts new file mode 100644 index 00000000000..b7f0ecbf2c7 --- /dev/null +++ b/demo/ember/app/config/environment.d.ts @@ -0,0 +1,10 @@ +declare const config: { + environment: string; + modulePrefix: string; + podModulePrefix: string; + locationType: "history" | "hash" | "none" | "auto"; + rootURL: string; + APP: Record; +}; + +export default config; diff --git a/demo/ember/app/controllers/application.ts b/demo/ember/app/controllers/application.ts new file mode 100644 index 00000000000..0da7c3af677 --- /dev/null +++ b/demo/ember/app/controllers/application.ts @@ -0,0 +1,33 @@ +import Controller from "@ember/controller"; +import { tracked } from "@glimmer/tracking"; +import type { Container, Engine } from "@tsparticles/engine"; +import { loadSnowPreset } from "@tsparticles/preset-snow"; +import { initParticlesEngine } from "@tsparticles/ember/utils/init-particles-engine"; +import { loadFull } from "tsparticles"; +import { CONFETTI_OPTIONS, LINK_OPTIONS } from "../utils/options"; + +export default class ApplicationController extends Controller { + @tracked isConfettiVisible = false; + + options = LINK_OPTIONS; + confetti = CONFETTI_OPTIONS; + + // Use a typed args parameter for compatibility with Ember/TS + constructor(...args: any[]) { + super(...(args as [object?])); + + // Defer particles engine initialization to client runtime. Ember apps + // may run in FastBoot (server) where window/document are not available. + // Guard and initialize only on the client. + if (typeof window !== "undefined") { + void initParticlesEngine(async (engine: Engine) => { + await loadFull(engine); + await loadSnowPreset(engine); + }); + } + } + + loadedCallback(container: Container) { + console.log("Particles loaded", container); + } +} diff --git a/demo/ember/app/index.html b/demo/ember/app/index.html new file mode 100644 index 00000000000..220a112f65e --- /dev/null +++ b/demo/ember/app/index.html @@ -0,0 +1,26 @@ + + + + + tsParticles Ember Demo + + + + {{content-for "head"}} + + + + + + {{content-for "head-footer"}} + + + {{content-for "body"}} + + + + + + {{content-for "body-footer"}} + + diff --git a/demo/ember/app/router.ts b/demo/ember/app/router.ts new file mode 100644 index 00000000000..d7c944c5b5b --- /dev/null +++ b/demo/ember/app/router.ts @@ -0,0 +1,10 @@ +import EmberRouter from "@ember/routing/router"; +// Match the package-scoped module id used in generated bundles. +import config from "@tsparticles/ember-demo/config/environment"; + +export default class Router extends EmberRouter { + location = config.locationType; + rootURL = config.rootURL; +} + +Router.map(function () {}); diff --git a/demo/ember/app/styles/app.css b/demo/ember/app/styles/app.css new file mode 100644 index 00000000000..f1153ba9bb4 --- /dev/null +++ b/demo/ember/app/styles/app.css @@ -0,0 +1,17 @@ +#title { + color: #ffffff; + padding: 20px; +} + +body { + margin: 0; + background-color: #1f263b; + font-family: + -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; +} + +.fixed-size-particles, +.fixed-size-snow { + width: 500px; + height: 500px; +} diff --git a/demo/ember/app/templates/application.hbs b/demo/ember/app/templates/application.hbs new file mode 100644 index 00000000000..15be66e4703 --- /dev/null +++ b/demo/ember/app/templates/application.hbs @@ -0,0 +1,28 @@ +{{page-title "tsParticles Ember Demo"}} + +

tsParticles Ember Demo

+ + + + + + + +{{#if this.isConfettiVisible}} + +{{/if}} diff --git a/demo/ember/app/utils/options.ts b/demo/ember/app/utils/options.ts new file mode 100644 index 00000000000..52ab8db9445 --- /dev/null +++ b/demo/ember/app/utils/options.ts @@ -0,0 +1,162 @@ +export const LINK_OPTIONS = { + particles: { + color: { + value: "#ffffff", + }, + links: { + color: "#ffffff", + distance: 150, + enable: true, + opacity: 0.5, + width: 1, + }, + collisions: { + enable: true, + }, + move: { + enable: true, + random: false, + speed: 2, + straight: false, + }, + number: { + density: { + enable: true, + area: 800, + }, + value: 80, + }, + opacity: { + value: 0.5, + }, + shape: { + type: "circle", + }, + size: { + value: { min: 1, max: 5 }, + }, + }, + detectRetina: true, +}; + +export const CONFETTI_OPTIONS = { + fullScreen: { + zIndex: 1, + }, + emitters: { + life: { + count: 0, + duration: 3, + }, + position: { + x: 50, + y: 100, + }, + rate: { + quantity: 5, + delay: 0.15, + }, + }, + particles: { + color: { + value: ["#1E00FF", "#FF0061", "#E1FF00", "#00FF9E"], + }, + move: { + decay: 0.05, + direction: "top", + enable: true, + gravity: { + enable: true, + }, + outModes: { + top: "none", + default: "destroy", + }, + speed: { + min: 50, + max: 100, + }, + }, + number: { + value: 0, + }, + opacity: { + value: 1, + }, + rotate: { + value: { + min: 0, + max: 360, + }, + direction: "random", + animation: { + enable: true, + speed: 30, + }, + }, + tilt: { + direction: "random", + enable: true, + value: { + min: 0, + max: 360, + }, + animation: { + enable: true, + speed: 30, + }, + }, + size: { + value: 3, + animation: { + enable: true, + startValue: "min", + count: 1, + speed: 16, + sync: true, + }, + }, + roll: { + darken: { + enable: true, + value: 25, + }, + enlighten: { + enable: true, + value: 25, + }, + enable: true, + speed: { + min: 5, + max: 15, + }, + }, + wobble: { + distance: 30, + enable: true, + speed: { + min: -7, + max: 7, + }, + }, + shape: { + type: ["circle", "square"], + options: {}, + }, + }, + responsive: [ + { + maxWidth: 1024, + options: { + particles: { + move: { + speed: { + min: 33, + max: 66, + }, + }, + }, + }, + }, + ], +}; diff --git a/demo/ember/config/environment.js b/demo/ember/config/environment.js new file mode 100644 index 00000000000..288b1540db8 --- /dev/null +++ b/demo/ember/config/environment.js @@ -0,0 +1,28 @@ +"use strict"; + +module.exports = function (environment) { + const ENV = { + // Use the package name (including scope) so the runtime module prefix + // matches the module ids generated by the build (they are scoped + // under @tsparticles/ember-demo). This avoids runtime loader mismatches + // where the boot code requires "ember-demo/app" but modules are defined + // as "@tsparticles/ember-demo/app". + modulePrefix: "@tsparticles/ember-demo", + environment, + rootURL: "/", + locationType: "history", + EmberENV: { + FEATURES: {}, + EXTEND_PROTOTYPES: false, + }, + APP: {}, + }; + + if (environment === "test") { + ENV.locationType = "none"; + ENV.APP.rootElement = "#ember-testing"; + ENV.APP.autoboot = false; + } + + return ENV; +}; diff --git a/demo/ember/config/optional-features.json b/demo/ember/config/optional-features.json new file mode 100644 index 00000000000..b26286e2ecd --- /dev/null +++ b/demo/ember/config/optional-features.json @@ -0,0 +1,6 @@ +{ + "application-template-wrapper": false, + "default-async-observers": true, + "jquery-integration": false, + "template-only-glimmer-components": true +} diff --git a/demo/ember/config/targets.js b/demo/ember/config/targets.js new file mode 100644 index 00000000000..2eb519be65f --- /dev/null +++ b/demo/ember/config/targets.js @@ -0,0 +1,7 @@ +"use strict"; + +const browsers = ["last 1 Chrome versions", "last 1 Firefox versions", "last 1 Safari versions"]; + +module.exports = { + browsers, +}; diff --git a/demo/ember/ember-cli-build.js b/demo/ember/ember-cli-build.js new file mode 100644 index 00000000000..ca8dab0672a --- /dev/null +++ b/demo/ember/ember-cli-build.js @@ -0,0 +1,9 @@ +"use strict"; + +const EmberApp = require("ember-cli/lib/broccoli/ember-app"); + +module.exports = function (defaults) { + const app = new EmberApp(defaults, {}); + + return app.toTree(); +}; diff --git a/demo/ember/package.json b/demo/ember/package.json new file mode 100644 index 00000000000..d529dcce986 --- /dev/null +++ b/demo/ember/package.json @@ -0,0 +1,63 @@ +{ + "name": "@tsparticles/ember-demo", + "version": "4.0.0-beta.15", + "private": true, + "description": "Ember demo for @tsparticles/ember", + "engines": { + "node": "14.* || 16.* || >= 18" + }, + "scripts": { + "start": "ember serve", + "build": "ember build", + "build:ci": "ember build --environment production", + "test": "ember test" + }, + "dependencies": { + "@glimmer/tracking": "^1.1.2", + "@tsparticles/ember": "workspace:^", + "@tsparticles/engine": "workspace:^", + "@tsparticles/preset-snow": "workspace:^", + "ember-auto-import": "^2.13.1", + "ember-cli-babel": "^8.3.1", + "ember-cli-htmlbars": "^7.0.1", + "ember-cli-typescript": "^5.3.0", + "ember-load-initializers": "^3.0.1", + "ember-modifier": "^4.3.0", + "ember-page-title": "^9.0.3", + "ember-resolver": "^13.2.0", + "ember-source": "~6.12.0", + "tsparticles": "workspace:^" + }, + "devDependencies": { + "@babel/core": "7.29.0", + "@ember/optional-features": "^3.0.0", + "@ember/test-helpers": "^5.4.1", + "@tsconfig/ember": "^3.0.12", + "@types/ember": "^4.0.11", + "@types/ember__application": "^4.0.11", + "@types/ember__controller": "^4.0.12", + "@types/ember__routing": "^4.0.23", + "@types/node": "^25.6.0", + "@types/qunit": "^2.19.13", + "broccoli-asset-rev": "^3.0.0", + "ember-cli": "~6.12.0", + "ember-cli-dependency-checker": "^3.4.0", + "ember-cli-inject-live-reload": "^2.1.0", + "ember-cli-sri": "^2.1.1", + "ember-cli-terser": "^4.0.2", + "ember-qunit": "^9.0.4", + "ember-template-lint": "^7.9.3", + "eslint": "^10.2.1", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-ember": "^13.0.0", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-prettier": "^5.5.5", + "eslint-plugin-qunit": "^8.2.6", + "loader.js": "^4.7.0", + "prettier": "^3.8.3", + "qunit": "^2.25.0", + "qunit-dom": "^3.5.1", + "typescript": "^6.0.3", + "webpack": "^5.106.2" + } +} diff --git a/demo/ember/testem.js b/demo/ember/testem.js new file mode 100644 index 00000000000..bf1618a14a2 --- /dev/null +++ b/demo/ember/testem.js @@ -0,0 +1,22 @@ +"use strict"; + +module.exports = { + test_page: "tests/index.html?hidepassed", + disable_watching: true, + launch_in_ci: ["Chrome"], + launch_in_dev: ["Chrome"], + browser_start_timeout: 120, + browser_args: { + Chrome: { + ci: [ + process.env.CI ? "--no-sandbox" : null, + "--headless", + "--disable-dev-shm-usage", + "--disable-software-rasterizer", + "--mute-audio", + "--remote-debugging-port=0", + "--window-size=1440,900", + ].filter(Boolean), + }, + }, +}; diff --git a/demo/ember/tsconfig.json b/demo/ember/tsconfig.json new file mode 100644 index 00000000000..e575c78d4b8 --- /dev/null +++ b/demo/ember/tsconfig.json @@ -0,0 +1,25 @@ +{ + "extends": "@tsconfig/ember/tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "ignoreDeprecations": "6.0", + "paths": { + "ember-demo/*": [ + "app/*" + ], + "@tsparticles/ember-demo/*": [ + "app/*" + ], + "@tsparticles/ember": [ + "../../wrappers/ember/addon" + ], + "@tsparticles/ember/*": [ + "../../wrappers/ember/addon/*" + ] + } + }, + "include": [ + "app/**/*", + "config/**/*" + ] +} diff --git a/demo/inferno/.babelrc b/demo/inferno/.babelrc index df541f92a33..24e6f172d73 100644 --- a/demo/inferno/.babelrc +++ b/demo/inferno/.babelrc @@ -4,13 +4,18 @@ [ "@babel/preset-env", { - "loose": true, + // Target modern environments during local development so native + // classes are preserved. This prevents transpiling classes to + // ES5 which can cause "Cannot call a class constructor Component + // without |new|" when mixing transpiled subclasses with native + // runtime classes (Inferno). For CI or production builds you can + // revert to broader browser targets. "targets": { - "browsers": ["ie >= 11", "safari > 10"] + "esmodules": true } } ], ["@babel/typescript", {"isTSX": true, "allExtensions": true}] ], - "plugins": [["babel-plugin-inferno", { "imports": true }], ["@babel/plugin-proposal-class-properties", { "loose": true }]] + "plugins": [["babel-plugin-inferno", { "imports": true }], ["@babel/plugin-proposal-class-properties", { "loose": false }]] } diff --git a/demo/inferno/CHANGELOG.md b/demo/inferno/CHANGELOG.md index f865d3fc351..30bf50bda4e 100644 --- a/demo/inferno/CHANGELOG.md +++ b/demo/inferno/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/inferno-demo + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) ### Features diff --git a/demo/inferno/package.json b/demo/inferno/package.json index b239d73ebd0..7dbf8d45a12 100644 --- a/demo/inferno/package.json +++ b/demo/inferno/package.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/inferno-demo", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "private": true, "description": "> TODO: description", "main": "index.js", @@ -13,10 +13,9 @@ "author": "Matteo Bruni ", "license": "MIT", "dependencies": { - "@tsparticles/configs": "workspace:^", "@tsparticles/engine": "workspace:^", "@tsparticles/inferno": "workspace:^", - "inferno": "^8.0.5", + "inferno": "^9.1.0", "tsparticles": "workspace:^" }, "devDependencies": { @@ -30,7 +29,7 @@ "css-loader": "^6.7.3", "html-webpack-plugin": "^5.5.0", "sass": "^1.81.0", - "sass-loader": "^13.2.0", + "sass-loader": "^16.0.0", "source-map-loader": "^4.0.1", "style-loader": "^3.3.1", "typescript": "^4.9.4", diff --git a/demo/inferno/src/components/Incrementer.tsx b/demo/inferno/src/components/Incrementer.tsx index fffbec255a7..1ab54356aac 100644 --- a/demo/inferno/src/components/Incrementer.tsx +++ b/demo/inferno/src/components/Incrementer.tsx @@ -5,40 +5,38 @@ import { Visualizer } from './Visualizer'; import './Incrementer.scss'; interface Props { - name: string; + name: string; } -/* - * The first interface defines prop shape - * The second interface defines state shape - */ -export class Incrementer extends Component { - public state = { - value: 1 - }; - - constructor(props, context) { - super(props, context); - } - - public doMath = () => { - this.setState({ - value: addOne(this.state.value) - }); - } - - public render() { - // uncomment: example of type verification - // - // this.props.name = 1; - // this.props.bar = 1; - - return ( -
- {this.props.name} - - -
- ); - } +interface State { + value: number; +} + +export class Incrementer extends Component { + constructor(props: Props) { + super(props as any); + + this.state = { value: 1 }; + + this.doMath = this.doMath.bind(this); + } + + doMath() { + this.setState(({ value }) => ({ value: addOne(value) })); + } + + render() { + const { name } = this.props; + const { value } = this.state; + + return ( +
+ {name} + + +
+ ); + } } diff --git a/demo/inferno/src/components/Visualizer.tsx b/demo/inferno/src/components/Visualizer.tsx index 7e95e0462a9..5f29cac26cb 100644 --- a/demo/inferno/src/components/Visualizer.tsx +++ b/demo/inferno/src/components/Visualizer.tsx @@ -5,10 +5,14 @@ import './Visualizer.css'; * Functional components provide great performance but does not have state */ +import { Component } from 'inferno'; + interface VisualizerProps { - value: number; + value: number; } -export function Visualizer(props: VisualizerProps) { - return
{props.value}
; +export class Visualizer extends Component { + render() { + return
{this.props.value}
; + } } diff --git a/demo/inferno/src/index.tsx b/demo/inferno/src/index.tsx index 8a6e366d4da..e71cdce4447 100644 --- a/demo/inferno/src/index.tsx +++ b/demo/inferno/src/index.tsx @@ -1,30 +1,54 @@ -import { Component, render, version } from "inferno"; +import { render, version } from "inferno"; import { Incrementer } from "./components/Incrementer"; -import Particles, { initParticlesEngine } from "@tsparticles/inferno"; +import { Particles, ParticlesProvider } from "@tsparticles/inferno"; import "./main.css"; -import { loadFull } from "tsparticles"; -import { basic } from "@tsparticles/configs"; - -void initParticlesEngine(async engine => { - await loadFull(engine); -}); +// Render the app inside the ParticlesProvider from the wrapper. The +// provider initializes the engine and only renders children once ready. const container = document.getElementById("app"); -class MyComponent extends Component { - constructor(props, context) { - super(props, context); - } +function App() { + return ( + { + // register the full feature set on the engine then return + // (the provider will call initParticlesEngine internally) + const { loadFull } = await import("tsparticles"); - public render() { - return ( + await loadFull(engine); + }} + >
- +

{`Welcome to Inferno ${version} TSX`}

- ); - } +
+ ); } -render(, container); +render(, container); diff --git a/demo/inferno/webpack.config.js b/demo/inferno/webpack.config.js index dcce6df29e4..83ead292779 100644 --- a/demo/inferno/webpack.config.js +++ b/demo/inferno/webpack.config.js @@ -1,16 +1,37 @@ +const path = require('path'); const CleanWebpackPlugin = require('clean-webpack-plugin').CleanWebpackPlugin; const HtmlWebpackPlugin = require('html-webpack-plugin'); -module.exports = { - mode: "none", - entry: "./src/index.tsx", // Point to main file + module.exports = { + mode: "none", + entry: "./src/index.tsx", // Point to main file + resolve: { + extensions: ['.js', '.jsx', '.ts', '.tsx'], + // Prefer Inferno's dev entry point when resolving packages so hooks are + // exported from the main package (this helps avoid the need for + // inferno-hooks). The 'dev:module' field is used by Inferno to point + // to an entry that exposes hooks. Additionally add an explicit alias + // to the dev entry to ensure webpack resolves the correct build in + // development environments where mainFields might not be honored. + mainFields: ['dev:module', 'module', 'main'], + // Force-resolve Inferno to its development ESM entry so that hooks + // are available as named exports during development. This is an + // unconditional alias to avoid silent fallbacks that end up + // bundling a production-like entry and breaking hooks resolution. + alias: { + inferno: require.resolve('inferno/dist/index.dev.mjs'), + }, + }, output: { path: __dirname + "/dist", - filename: "bundle.js" - }, - resolve: { - extensions: ['.js', '.jsx', '.ts', '.tsx'] + filename: "bundle.js", + // Ensure chunks are requested from the same origin as the served app. + // This prevents webpack's automatic publicPath from picking up a + // different host/port (eg. localhost:8080) and avoids ChunkLoadError + // when the dev-server runs on a different port. + publicPath: "/", }, + // merged with alias above performance: { hints: false }, @@ -38,10 +59,12 @@ module.exports = { } ] }, - devServer: { - static: "src/", - historyApiFallback: true - }, + devServer: { + // Serve demo source and built output so dynamic chunks emitted + // by other packages (eg. wrappers) are reachable during dev. + static: [path.resolve(__dirname, 'src'), path.resolve(__dirname, 'dist')], + historyApiFallback: true, + }, plugins: [ new HtmlWebpackPlugin( { diff --git a/demo/ionic/CHANGELOG.md b/demo/ionic/CHANGELOG.md index b3b3dd1aac3..d39ffaa4574 100644 --- a/demo/ionic/CHANGELOG.md +++ b/demo/ionic/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/ionic-demo + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) ### Features diff --git a/demo/ionic/eslint.config.mjs b/demo/ionic/eslint.config.mjs new file mode 100644 index 00000000000..3c47ff5454c --- /dev/null +++ b/demo/ionic/eslint.config.mjs @@ -0,0 +1,52 @@ +import tsParser from "@typescript-eslint/parser"; +import angularPlugin from "@angular-eslint/eslint-plugin"; + +export default [ + { + ignores: ["projects/**", "node_modules/**", "www/**", "dist/**"], + }, + { + files: ["**/*.ts"], + languageOptions: { + parser: tsParser, + parserOptions: { + project: ["tsconfig.json", "e2e/tsconfig.json"], + createDefaultProgram: true, + }, + sourceType: "module", + ecmaVersion: "latest", + }, + plugins: { + "@angular-eslint": angularPlugin, + }, + rules: { + ...angularPlugin.configs.recommended.rules, + "@angular-eslint/no-empty-lifecycle-method": "off", + "@angular-eslint/use-lifecycle-interface": "off", + "@angular-eslint/prefer-inject": "off", + "@angular-eslint/prefer-standalone": "off", + "@angular-eslint/component-class-suffix": [ + "error", + { + suffixes: ["Page", "Component"], + }, + ], + "@angular-eslint/component-selector": [ + "error", + { + type: "element", + prefix: "app", + style: "kebab-case", + }, + ], + "@angular-eslint/directive-selector": [ + "error", + { + type: "attribute", + prefix: "app", + style: "camelCase", + }, + ], + }, + }, +]; diff --git a/demo/ionic/package.json b/demo/ionic/package.json index 3972b9ea10e..502ae0ac9f0 100644 --- a/demo/ionic/package.json +++ b/demo/ionic/package.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/ionic-demo", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "author": "Matteo Bruni ", "homepage": "https://particles.js.org", "scripts": { @@ -9,7 +9,7 @@ "build": "ng build", "build:ci": "ng build", "test": "ng test", - "lint": "ng lint", + "lint": "eslint \"src/**/*.ts\"", "e2e": "ng e2e" }, "private": true, @@ -110,7 +110,7 @@ "@types/node": "^25.6.0", "@typescript-eslint/eslint-plugin": "^8.58.1", "@typescript-eslint/parser": "^8.58.1", - "eslint": "^8.57.1", + "eslint": "^10.3.0", "eslint-plugin-import": "^2.32.0", "eslint-plugin-jsdoc": "^62.9.0", "eslint-plugin-prefer-arrow": "^1.2.3", diff --git a/demo/ionic/src/app/explore-container/explore-container.component.ts b/demo/ionic/src/app/explore-container/explore-container.component.ts index 60554cbd002..9b8a671ef31 100644 --- a/demo/ionic/src/app/explore-container/explore-container.component.ts +++ b/demo/ionic/src/app/explore-container/explore-container.component.ts @@ -2,6 +2,8 @@ import { Component, OnInit, Input } from '@angular/core'; @Component({ selector: 'app-explore-container', + // explicitly mark as non-standalone to avoid runtime mismatch when declared in NgModule + standalone: false, templateUrl: './explore-container.component.html', styleUrls: ['./explore-container.component.scss'], }) diff --git a/demo/ionic/src/app/tab1/tab1.page.ts b/demo/ionic/src/app/tab1/tab1.page.ts index 3d8b5255f85..a87e1b92dbe 100644 --- a/demo/ionic/src/app/tab1/tab1.page.ts +++ b/demo/ionic/src/app/tab1/tab1.page.ts @@ -4,6 +4,8 @@ import configs from "@tsparticles/configs"; @Component({ selector: "app-tab1", + // explicitly mark as non-standalone to avoid runtime mismatch when declared in NgModule + standalone: false, templateUrl: "tab1.page.html", styleUrls: ["tab1.page.scss"] }) diff --git a/demo/ionic/src/app/tab2/tab2.page.ts b/demo/ionic/src/app/tab2/tab2.page.ts index e14cad4091c..a2343b9624c 100644 --- a/demo/ionic/src/app/tab2/tab2.page.ts +++ b/demo/ionic/src/app/tab2/tab2.page.ts @@ -2,6 +2,8 @@ import { Component } from '@angular/core'; @Component({ selector: 'app-tab2', + // explicitly mark as non-standalone to avoid runtime mismatch when declared in NgModule + standalone: false, templateUrl: 'tab2.page.html', styleUrls: ['tab2.page.scss'] }) diff --git a/demo/ionic/src/app/tab3/tab3.page.ts b/demo/ionic/src/app/tab3/tab3.page.ts index 9ed0daed5c4..ac6703da3e2 100644 --- a/demo/ionic/src/app/tab3/tab3.page.ts +++ b/demo/ionic/src/app/tab3/tab3.page.ts @@ -2,6 +2,8 @@ import { Component } from '@angular/core'; @Component({ selector: 'app-tab3', + // explicitly mark as non-standalone to avoid runtime mismatch when declared in NgModule + standalone: false, templateUrl: 'tab3.page.html', styleUrls: ['tab3.page.scss'] }) diff --git a/demo/ionic/src/app/tabs/tabs.page.ts b/demo/ionic/src/app/tabs/tabs.page.ts index 7d64f975dac..534d2e97893 100644 --- a/demo/ionic/src/app/tabs/tabs.page.ts +++ b/demo/ionic/src/app/tabs/tabs.page.ts @@ -2,6 +2,8 @@ import { Component } from '@angular/core'; @Component({ selector: 'app-tabs', + // explicitly mark as non-standalone to avoid runtime metadata mismatches + standalone: false, templateUrl: 'tabs.page.html', styleUrls: ['tabs.page.scss'] }) diff --git a/demo/ionic/src/zone-flags.ts b/demo/ionic/src/zone-flags.ts index c84245fd390..e999ae9d110 100644 --- a/demo/ionic/src/zone-flags.ts +++ b/demo/ionic/src/zone-flags.ts @@ -2,5 +2,4 @@ * Prevents Angular change detection from * running with certain Web Component callbacks */ -// eslint-disable-next-line no-underscore-dangle (window as any).__Zone_disable_customElements = true; diff --git a/demo/jquery/CHANGELOG.md b/demo/jquery/CHANGELOG.md index 3223a9d1282..2d36211f919 100644 --- a/demo/jquery/CHANGELOG.md +++ b/demo/jquery/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/jquery-demo + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/jquery-demo diff --git a/demo/jquery/app.js b/demo/jquery/app.js index 2718a7fefca..4d4e32c2f79 100644 --- a/demo/jquery/app.js +++ b/demo/jquery/app.js @@ -3,6 +3,7 @@ const helmet = require('helmet'); const stylus = require('stylus'); const rateLimit = require("express-rate-limit"); +const path = require('path'); const app = express(); const limiter = rateLimit({ @@ -24,7 +25,14 @@ app.use("/fontawesome", express.static("./node_modules/@fortawesome/fontawesome- app.use("/jsoneditor", express.static("./node_modules/jsoneditor/dist")); app.use("/tsparticles", express.static("./node_modules/tsparticles")); app.use("/demo-configs", express.static("./node_modules/@tsparticles/configs")); -app.use("/jquery-particles", express.static("./node_modules/@tsparticles/jquery/dist")); +// Serve the local wrapper build so the demo uses the current jQuery wrapper +// implementation in this repo (wrappers/jquery/dist). Use an absolute +// resolved path so the mapping works regardless of the cwd used to start +// the demo server. +app.use( + "/jquery-particles", + express.static(path.resolve(__dirname, '..', '..', 'wrappers', 'jquery', 'dist')) +); app.use("/preset-links", express.static("./node_modules/@tsparticles/preset-links")); app.use("/stats.ts", express.static("./node_modules/stats.ts/")); app.use("/jquery", express.static("./node_modules/jquery/dist/")); diff --git a/demo/jquery/package.json b/demo/jquery/package.json index a8eaea81f04..aaadf029fe6 100644 --- a/demo/jquery/package.json +++ b/demo/jquery/package.json @@ -1,7 +1,7 @@ { "name": "@tsparticles/jquery-demo", "private": true, - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "> TODO: description", "author": "Matteo Bruni ", "homepage": "https://particles.js.org", @@ -30,11 +30,11 @@ }, "devDependencies": { "@fortawesome/fontawesome-free": "^6.5.1", - "@typescript-eslint/eslint-plugin": "^6.16.0", - "@typescript-eslint/parser": "^6.16.0", + "@typescript-eslint/eslint-plugin": "^8.59.1", + "@typescript-eslint/parser": "^8.59.1", "babel-preset-env": "^1.7.0", - "eslint": "^8.56.0", - "eslint-config-prettier": "^9.1.0", + "eslint": "^10.3.0", + "eslint-config-prettier": "^10.1.8", "express": "^4.18.2", "express-rate-limit": "^7.1.5", "helmet": "^7.1.0", diff --git a/demo/jquery/public/javascripts/demo.js b/demo/jquery/public/javascripts/demo.js index 72c0a8e9f87..73dc5f3ea89 100644 --- a/demo/jquery/public/javascripts/demo.js +++ b/demo/jquery/public/javascripts/demo.js @@ -1,7 +1,7 @@ const stats = new Stats(); stats.addPanel('count', '#ff8', 0, () => { - const container = tsParticles.domItem(0); + const container = tsParticles.item(0); if (container) { maxParticles = Math.max(container.particles.count, maxParticles); @@ -29,33 +29,42 @@ let updateStats = function () { requestAnimationFrame(update); }; +// Note: initialization is performed during document ready below. We avoid +// starting an early init here to prevent stale/rejected init promises from +// interfering with the demo flow. + let updateParticles = function (editor) { - let presetId = localStorage.presetId || 'basic'; + const presetId = localStorage.presetId || 'basic'; + + // Now safe to use the jQuery wrapper API (init is performed once at + // document ready to ensure the wrapper's initialization flags are set). + const options = tsParticles.pluginManager.configs[presetId]; + + if (!options) { + console.warn('no options found for preset', presetId); + return; + } - $('#tsparticles').particles().init(tsParticles.configs[presetId], (particles) => { + $('#tsparticles').particles().load(options).then((container) => { localStorage.presetId = presetId; - const omit = obj => { - return _.omitBy(obj, (value, key) => { - return _.startsWith(key, "_"); - }); - }; + const omit = obj => _.omitBy(obj, (value, key) => _.startsWith(key, "_")); - const transform = obj => { - return _.transform(omit(obj), function (result, value, key) { - result[key] = !_.isArray(value) && _.isObject(value) ? transform(omit(value)) : value; - }); - }; + const transform = obj => _.transform(omit(obj), function (result, value, key) { + result[key] = !_.isArray(value) && _.isObject(value) ? transform(omit(value)) : value; + }); - editor.update(transform(particles.options)); + editor.update(transform(container?.options)); editor.expandAll(); updateStats(); + }).catch((e) => { + console.error('failed to load particles with jQuery wrapper:', e); }); }; $(document).ready(function () { - for (const presetId in tsParticles.configs) { - const preset = tsParticles.configs[presetId]; + for (const presetId in tsParticles.pluginManager.configs) { + const preset = tsParticles.pluginManager.configs[presetId]; const option = document.createElement('option'); option.value = presetId; @@ -91,15 +100,67 @@ $(document).ready(function () { localStorage.presetId = 'basic'; } - cmbPresets.val(localStorage.presetId); - cmbPresets.change(); + // Simplified initialization: call the jQuery wrapper init and ensure + // the full plugin bundle is loaded via `loadFull`. We try a dynamic + // import first (works in module setups) and fall back to common global + // locations where loadFull may be exposed. + (async () => { + try { + if (typeof $ !== 'undefined' && $.particles && typeof $.particles.init === 'function') { + await $.particles.init(async (engine) => { + try { + // Try dynamic import (works in bundler environments) + const mod = await import('tsparticles').catch(() => null); + if (mod && typeof mod.loadFull === 'function') { + await mod.loadFull(engine); + return; + } + + // Fallbacks: global loadFull or tsParticles.loadFull + if (typeof loadFull === 'function') { + await loadFull(engine); + } else if (typeof window !== 'undefined' && window.loadFull) { + await window.loadFull(engine); + } else if (typeof tsParticles !== 'undefined' && typeof tsParticles.loadFull === 'function') { + await tsParticles.loadFull(engine); + } + } catch (err) { + console.warn('Failed to loadFull plugins:', err); + } + }); + } else if (typeof tsParticles !== 'undefined' && typeof tsParticles.init === 'function') { + // Last resort: try to load plugins then init the engine. + try { + const mod = await import('tsparticles').catch(() => null); + if (mod && typeof mod.loadFull === 'function') { + await mod.loadFull(tsParticles); + } else if (typeof loadFull === 'function') { + await loadFull(tsParticles); + } else if (typeof tsParticles.loadFull === 'function') { + await tsParticles.loadFull(tsParticles); + } + } catch (e) { + // ignore + } + + await tsParticles.init(); + } + } catch (e) { + console.error('initParticlesEngine failed:', e); + return; + } + + // Now trigger initial preset load + cmbPresets.val(localStorage.presetId); + cmbPresets.change(); + })(); const btnUpdate = $('#btnUpdate'); btnUpdate.click(function () { - const particles = tsParticles.domItem(0); + const particles = tsParticles.item(0); particles.reset().then(() => { - particles.options.load(editor.get()); + particles.options.c(editor.get()); particles.refresh().then(() => { // do nothing }); diff --git a/demo/lit/CHANGELOG.md b/demo/lit/CHANGELOG.md index f1f6a7d14a3..d8891d595a2 100644 --- a/demo/lit/CHANGELOG.md +++ b/demo/lit/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/lit-demo + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/lit-demo diff --git a/demo/lit/dev/index.html b/demo/lit/dev/index.html index b24055cbe28..cf6c8993afe 100644 --- a/demo/lit/dev/index.html +++ b/demo/lit/dev/index.html @@ -13,6 +13,6 @@ - + diff --git a/demo/lit/eslint.config.cjs b/demo/lit/eslint.config.cjs new file mode 100644 index 00000000000..f3a7b35ebe7 --- /dev/null +++ b/demo/lit/eslint.config.cjs @@ -0,0 +1,32 @@ +const tsParser = require("@typescript-eslint/parser"); +const tsPlugin = require("@typescript-eslint/eslint-plugin"); + +module.exports = [ + { + ignores: ["node_modules/**", "dist/**", "build/**"], + }, + { + files: ["src/**/*.ts"], + languageOptions: { + parser: tsParser, + ecmaVersion: "latest", + sourceType: "module", + }, + plugins: { + "@typescript-eslint": tsPlugin, + }, + rules: { + ...tsPlugin.configs.recommended.rules, + "no-unexpected-multiline": "off", + "@typescript-eslint/explicit-function-return-type": "off", + "@typescript-eslint/no-non-null-assertion": "off", + "@typescript-eslint/no-use-before-define": "off", + "@typescript-eslint/no-unused-vars": [ + "warn", + { + argsIgnorePattern: "^_", + }, + ], + }, + }, +]; diff --git a/demo/lit/package.json b/demo/lit/package.json index 71468627a8a..a450f992ac8 100644 --- a/demo/lit/package.json +++ b/demo/lit/package.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/lit-demo", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "private": true, "description": "A simple web component", "type": "module", @@ -36,12 +36,12 @@ "@rollup/plugin-replace": "^5.0.0", "@types/chai": "^4.2.7", "@types/mocha": "^10.0.0", - "@typescript-eslint/eslint-plugin": "^6.0.0", - "@typescript-eslint/parser": "^6.0.0", + "@typescript-eslint/eslint-plugin": "^8.59.1", + "@typescript-eslint/parser": "^8.59.1", "@web/dev-server": "^0.1.35", "chai": "^4.2.0", "deepmerge": "^4.2.2", - "eslint": "^8.0.0", + "eslint": "^10.3.0", "karma": "^6.0.0", "karma-chai": "^0.1.0", "karma-mocha": "^2.0.0", diff --git a/demo/lit/src/index.ts b/demo/lit/src/index.ts index 3a84695b8c5..db69c3bc5ff 100644 --- a/demo/lit/src/index.ts +++ b/demo/lit/src/index.ts @@ -1 +1,8 @@ -import '@tsparticles/lit'; +import { initParticlesEngine } from '@tsparticles/lit'; +import { loadFull } from 'tsparticles'; + +// Ensure the engine is initialized once before any elements render. +// Calling without a callback lets the wrapper complete any internal async setup. +void initParticlesEngine((e) => { + loadFull(e); +}); diff --git a/demo/nextjs-legacy/.gitignore b/demo/nextjs-legacy/.gitignore index 601f8c86ddb..c6eca053fca 100644 --- a/demo/nextjs-legacy/.gitignore +++ b/demo/nextjs-legacy/.gitignore @@ -1,19 +1,19 @@ # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. # dependencies -/node_modules -/.pnp +node_modules +.pnp .pnp.js # testing -/coverage +coverage # next.js -/.next/ -/out/ +.next/ +out/ # production -/build +build # misc .DS_Store diff --git a/demo/nextjs-legacy/CHANGELOG.md b/demo/nextjs-legacy/CHANGELOG.md index d2702b16d97..6aae3ee261e 100644 --- a/demo/nextjs-legacy/CHANGELOG.md +++ b/demo/nextjs-legacy/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/nextjs-legacy-demo + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) ### Features diff --git a/demo/nextjs-legacy/next.config.js b/demo/nextjs-legacy/next.config.js index a843cbee09a..85902f56b6f 100644 --- a/demo/nextjs-legacy/next.config.js +++ b/demo/nextjs-legacy/next.config.js @@ -1,6 +1,12 @@ -/** @type {import('next').NextConfig} */ -const nextConfig = { - reactStrictMode: true, -} +const path = require("path"); -module.exports = nextConfig +// Tell Turbopack to consider the workspace root when resolving modules. +// This lets Turbopack find packages that pnpm places in the virtual store +// at the repository root (common in pnpm workspaces) and avoids MODULE_UNPARSABLE +// errors like "Could not parse module '[project]/node_modules/.pnpm/.../next/app.js'". +module.exports = { + turbopack: { + // Adjust this if your monorepo root is at a different relative level. + root: path.resolve(__dirname, "..", ".."), + }, +}; diff --git a/demo/nextjs-legacy/package.json b/demo/nextjs-legacy/package.json index c54178795aa..df003bdfd86 100644 --- a/demo/nextjs-legacy/package.json +++ b/demo/nextjs-legacy/package.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/nextjs-legacy-demo", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "private": true, "scripts": { "dev": "next dev", diff --git a/demo/nextjs/.gitignore b/demo/nextjs/.gitignore index c87c9b392c0..6d5517c27b4 100644 --- a/demo/nextjs/.gitignore +++ b/demo/nextjs/.gitignore @@ -1,19 +1,19 @@ # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. # dependencies -/node_modules -/.pnp +node_modules +.pnp .pnp.js # testing -/coverage +coverage # next.js -/.next/ -/out/ +.next/ +out/ # production -/build +build # misc .DS_Store diff --git a/demo/nextjs/CHANGELOG.md b/demo/nextjs/CHANGELOG.md index 58289f62230..fc2ccc36ba0 100644 --- a/demo/nextjs/CHANGELOG.md +++ b/demo/nextjs/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/nextjs-demo + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) ### Features diff --git a/demo/nextjs/package.json b/demo/nextjs/package.json index 2e3d104bbeb..ec2959e1db7 100644 --- a/demo/nextjs/package.json +++ b/demo/nextjs/package.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/nextjs-demo", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "private": true, "scripts": { "dev": "next dev", diff --git a/demo/nuxt2/CHANGELOG.md b/demo/nuxt2/CHANGELOG.md index 67ae48f4b6c..f21b015edc6 100644 --- a/demo/nuxt2/CHANGELOG.md +++ b/demo/nuxt2/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/nuxt2-demo + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/nuxt2-demo diff --git a/demo/nuxt2/eslint.config.cjs b/demo/nuxt2/eslint.config.cjs new file mode 100644 index 00000000000..82bed8089d2 --- /dev/null +++ b/demo/nuxt2/eslint.config.cjs @@ -0,0 +1,33 @@ +const js = require("@eslint/js"); +const globals = require("globals"); +const tsParser = require("@typescript-eslint/parser"); +const vuePlugin = require("eslint-plugin-vue"); +const vueParser = require("vue-eslint-parser"); + +module.exports = [ + { + ignores: [".nuxt/**", ".output/**", "node_modules/**", "dist/**"], + }, + js.configs.recommended, + ...vuePlugin.configs["flat/recommended"], + { + files: ["**/*.{js,mjs,cjs,ts,tsx,vue}"], + languageOptions: { + parser: vueParser, + ecmaVersion: "latest", + sourceType: "module", + globals: { + ...globals.browser, + ...globals.node, + }, + parserOptions: { + parser: tsParser, + extraFileExtensions: [".vue"], + }, + }, + rules: { + "no-unused-vars": "off", + "no-console": "off", + }, + }, +]; diff --git a/demo/nuxt2/nuxt.config.js b/demo/nuxt2/nuxt.config.js index 3d5674beab5..0e79f48346d 100644 --- a/demo/nuxt2/nuxt.config.js +++ b/demo/nuxt2/nuxt.config.js @@ -23,8 +23,8 @@ export default { // Global CSS: https://go.nuxtjs.dev/config-css css: [], - // Auto import components: https://go.nuxtjs.dev/config-components - components: true, + // Keep components auto-import disabled in this monorepo to avoid vue2/vue3 loader mismatches. + components: false, // Modules for dev and build (recommended): https://go.nuxtjs.dev/config-modules buildModules: [ @@ -32,6 +32,12 @@ export default { '@nuxt/typescript-build', ], + // Nuxt 2 may resolve Vue 3 from the workspace root in monorepos. + // Disable fork-ts-checker type-check phase to avoid vue/vue-template-compiler mismatch at startup. + typescript: { + typeCheck: false, + }, + // Modules: https://go.nuxtjs.dev/config-modules modules: ['@tsparticles/nuxt2'], diff --git a/demo/nuxt2/package.json b/demo/nuxt2/package.json index b6194f95b60..21dea170718 100644 --- a/demo/nuxt2/package.json +++ b/demo/nuxt2/package.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/nuxt2-demo", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "private": true, "scripts": { "dev": "nuxt", @@ -8,7 +8,7 @@ "build:ci": "nuxt build", "start": "nuxt start", "generate": "nuxt generate", - "lint:js": "eslint --ext \".js,.ts,.vue\" --ignore-path .gitignore .", + "lint:js": "eslint --ext \".js,.ts,.vue\" .", "lint:prettier": "prettier --check .", "lint": "pnpm run lint:js && pnpm run lint:prettier", "lintfix": "prettier --write --list-different . && pnpm run lint:js --fix" @@ -18,12 +18,12 @@ "@tsparticles/nuxt2": "workspace:^", "@tsparticles/vue2": "workspace:^", "core-js": "^3.49.0", - "nuxt": "^2.18.1", + "nuxt": "2.18.1", "tsparticles": "workspace:^", - "vue": "^2.7.16", - "vue-router": "^3.6.5", - "vue-server-renderer": "^2.7.16", - "vue-template-compiler": "^2.7.16" + "vue": "2.7.16", + "vue-router": "3.6.5", + "vue-server-renderer": "2.7.16", + "vue-template-compiler": "2.7.16" }, "devDependencies": { "@babel/core": "^7.29.0", @@ -32,20 +32,24 @@ "@babel/plugin-transform-nullish-coalescing-operator": "^7.28.6", "@babel/plugin-transform-optional-chaining": "^7.28.6", "@babel/preset-env": "^7.29.2", - "@nuxt/types": "^2.18.1", + "@eslint/js": "^10.0.1", + "@nuxt/types": "2.18.1", "@nuxt/typescript-build": "^3.0.2", "@nuxtjs/eslint-config-typescript": "^12.1.0", "@nuxtjs/eslint-module": "^4.1.0", "@types/node": "^20.11.25", + "@typescript-eslint/parser": "^8.59.1", "babel-loader": "^8.4.1", "css-loader": "^5.2.7", - "eslint": "^8.49.0", - "eslint-config-prettier": "^9.1.2", + "eslint": "^10.3.0", + "eslint-config-prettier": "^10.1.8", "eslint-plugin-nuxt": "^4.0.0", - "eslint-plugin-vue": "^9.33.0", + "eslint-plugin-vue": "^10.8.0", + "globals": "^16.4.0", "postcss-loader": "^4.3.0", "prettier": "^3.8.2", "ts-loader": "^8.4.0", + "vue-eslint-parser": "^10.4.0", "vue-loader": "^15.11.1", "vue-template-babel-compiler": "^2.0.0", "webpack": "^4.47.0" diff --git a/demo/nuxt3/CHANGELOG.md b/demo/nuxt3/CHANGELOG.md index dbc82b95670..c61edcfbe3e 100644 --- a/demo/nuxt3/CHANGELOG.md +++ b/demo/nuxt3/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/nuxt3-particles-demo + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) ### Features diff --git a/demo/nuxt3/package.json b/demo/nuxt3/package.json index 96d964ddc47..4bd1036eb34 100644 --- a/demo/nuxt3/package.json +++ b/demo/nuxt3/package.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/nuxt3-particles-demo", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "private": true, "type": "module", "scripts": { diff --git a/demo/nuxt4/CHANGELOG.md b/demo/nuxt4/CHANGELOG.md index e09cc20d445..bb9bb9dd7c0 100644 --- a/demo/nuxt4/CHANGELOG.md +++ b/demo/nuxt4/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/nuxt4-particles-demo + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/nuxt4-particles-demo diff --git a/demo/nuxt4/package.json b/demo/nuxt4/package.json index 533457428d9..a94b5696145 100644 --- a/demo/nuxt4/package.json +++ b/demo/nuxt4/package.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/nuxt4-particles-demo", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "private": true, "type": "module", "scripts": { diff --git a/demo/preact/CHANGELOG.md b/demo/preact/CHANGELOG.md index 9a3e4ff0137..93bc8239d94 100644 --- a/demo/preact/CHANGELOG.md +++ b/demo/preact/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/preact-demo + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/preact-demo diff --git a/demo/preact/package.json b/demo/preact/package.json index 91af9e931f9..ab34f07a592 100644 --- a/demo/preact/package.json +++ b/demo/preact/package.json @@ -1,7 +1,7 @@ { "name": "@tsparticles/preact-demo", "private": true, - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "type": "module", "description": "> TODO: description", "author": "Matteo Bruni ", @@ -28,14 +28,14 @@ "url": "https://github.com/tsparticles/preact/issues" }, "devDependencies": { - "@typescript-eslint/eslint-plugin": "^6.16.0", - "@typescript-eslint/parser": "^6.16.0", + "@typescript-eslint/eslint-plugin": "^8.59.1", + "@typescript-eslint/parser": "^8.59.1", "copyfiles": "^2.4.1", "enzyme": "^3.11.0", "enzyme-adapter-preact-pure": "^4.1.0", - "eslint": "^8.56.0", + "eslint": "^10.3.0", "eslint-config-preact": "^1.3.0", - "eslint-config-prettier": "^9.1.0", + "eslint-config-prettier": "^10.1.8", "eslint-plugin-react-hooks": "^4.6.0", "identity-obj-proxy": "^3.0.0", "preact-cli": "^3.5.0", diff --git a/demo/preact/src/components/app.js b/demo/preact/src/components/app.js index 27d13b3f1c9..6c50e079ca1 100644 --- a/demo/preact/src/components/app.js +++ b/demo/preact/src/components/app.js @@ -35,14 +35,18 @@ export default class App extends Component { constructor() { super(); - void initParticlesEngine(async (engine) => { - await loadFull(engine); - }).then(() => { - this.setState({ - ...this.state, - particlesInitialized: true + // Initialize particles on client after mount to avoid running during + // SSR or module evaluation. + if (typeof window !== "undefined") { + void initParticlesEngine(async (engine) => { + await loadFull(engine); + }).then(() => { + this.setState({ + ...this.state, + particlesInitialized: true + }); }); - }); + } } render() { diff --git a/demo/qwik/.gitignore b/demo/qwik/.gitignore new file mode 100644 index 00000000000..1526847b632 --- /dev/null +++ b/demo/qwik/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +node_modules +server +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/demo/qwik/CHANGELOG.md b/demo/qwik/CHANGELOG.md new file mode 100644 index 00000000000..3e32f54a7dd --- /dev/null +++ b/demo/qwik/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/qwik-demo diff --git a/demo/qwik/README.md b/demo/qwik/README.md new file mode 100644 index 00000000000..3745057190b --- /dev/null +++ b/demo/qwik/README.md @@ -0,0 +1,23 @@ +# Qwik Demo + +Minimal Qwik demo for `@tsparticles/qwik`. + +## Usage + +From the repository root: + +```bash +pnpm i +pnpm run build +cd demo/qwik +pnpm dev +``` + +Open the local URL shown by Vite (usually `http://localhost:5173`). + +## Scripts + +- `pnpm dev` starts the SSR dev server +- `pnpm start` starts dev server and opens the browser +- `pnpm build` builds the demo +- `pnpm preview` previews the production build diff --git a/demo/qwik/index.html b/demo/qwik/index.html new file mode 100644 index 00000000000..1c74628ebbe --- /dev/null +++ b/demo/qwik/index.html @@ -0,0 +1,11 @@ + + + + + + Qwik Demo + + + + + diff --git a/demo/qwik/package.json b/demo/qwik/package.json new file mode 100644 index 00000000000..354acd46870 --- /dev/null +++ b/demo/qwik/package.json @@ -0,0 +1,23 @@ +{ + "name": "@tsparticles/qwik-demo", + "version": "4.0.0-beta.15", + "private": true, + "type": "module", + "scripts": { + "dev": "vite --mode ssr", + "start": "vite --open --mode ssr", + "build": "vite build --mode ssr", + "preview": "vite preview" + }, + "dependencies": { + "@builder.io/qwik": "1.19.2", + "@tsparticles/engine": "workspace:^", + "tsparticles": "workspace:^" + }, + "devDependencies": { + "@types/node": "^25.6.0", + "typescript": "^6.0.2", + "vite": "^8.0.8", + "vite-tsconfig-paths": "^6.1.1" + } +} diff --git a/demo/qwik/src/entry.dev.tsx b/demo/qwik/src/entry.dev.tsx new file mode 100644 index 00000000000..2ac5df86788 --- /dev/null +++ b/demo/qwik/src/entry.dev.tsx @@ -0,0 +1,6 @@ +import { render, type RenderOptions } from "@builder.io/qwik"; +import Root from "./root"; + +export default function (opts: RenderOptions) { + return render(document, , opts); +} diff --git a/demo/qwik/src/entry.ssr.tsx b/demo/qwik/src/entry.ssr.tsx new file mode 100644 index 00000000000..64b4319adc4 --- /dev/null +++ b/demo/qwik/src/entry.ssr.tsx @@ -0,0 +1,10 @@ +import { renderToStream, type RenderToStreamOptions } from "@builder.io/qwik/server"; +import { manifest } from "@qwik-client-manifest"; +import Root from "./root"; + +export default function (opts: RenderToStreamOptions) { + return renderToStream(, { + manifest, + ...opts, + }); +} diff --git a/demo/qwik/src/root.tsx b/demo/qwik/src/root.tsx new file mode 100644 index 00000000000..fbb9e6f8999 --- /dev/null +++ b/demo/qwik/src/root.tsx @@ -0,0 +1,64 @@ +import { Particles, initParticlesEngine } from "../../../wrappers/qwik/src/components/particles"; +import type { Engine } from "@tsparticles/engine"; +import { loadFull } from "tsparticles"; +import { component$, useSignal, useVisibleTask$ } from "@builder.io/qwik"; + +// Run initialization on the client only. useVisibleTask$ ensures the +// callback runs in the browser when the component becomes visible. +export default component$(() => { + const particlesReady = useSignal(false); + + useVisibleTask$(async () => { + await initParticlesEngine(async (engine: Engine) => { + await loadFull(engine); + }); + + particlesReady.value = true; + }); + + return ( + <> + + + + tsParticles Qwik Demo + + +
+

tsParticles Qwik Demo

+ {particlesReady.value && ( + + )} +
+ + + ); +}); diff --git a/demo/qwik/tsconfig.json b/demo/qwik/tsconfig.json new file mode 100644 index 00000000000..98010d81ec7 --- /dev/null +++ b/demo/qwik/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "allowJs": true, + "target": "ES2017", + "module": "ES2020", + "lib": ["es2020", "DOM"], + "jsx": "react-jsx", + "jsxImportSource": "@builder.io/qwik", + "strict": true, + "resolveJsonModule": true, + "moduleResolution": "node", + "esModuleInterop": true, + "skipLibCheck": true, + "incremental": true, + "isolatedModules": true, + "types": ["vite/client"] + }, + "include": ["src"] +} diff --git a/demo/qwik/vite.config.ts b/demo/qwik/vite.config.ts new file mode 100644 index 00000000000..9dcc6176224 --- /dev/null +++ b/demo/qwik/vite.config.ts @@ -0,0 +1,7 @@ +import { qwikVite } from "@builder.io/qwik/optimizer"; +import { defineConfig } from "vite"; +import tsconfigPaths from "vite-tsconfig-paths"; + +export default defineConfig(() => ({ + plugins: [qwikVite(), tsconfigPaths()], +})); diff --git a/demo/react/CHANGELOG.md b/demo/react/CHANGELOG.md index 0db8422d469..89e48d468ab 100644 --- a/demo/react/CHANGELOG.md +++ b/demo/react/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/react-demo + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/react-demo diff --git a/demo/react/package.json b/demo/react/package.json index a6ffe5371d2..9aaae205490 100644 --- a/demo/react/package.json +++ b/demo/react/package.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/react-demo", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "private": true, "type": "module", "dependencies": { diff --git a/demo/riot/CHANGELOG.md b/demo/riot/CHANGELOG.md index e19420b4ef8..09220c0cee1 100644 --- a/demo/riot/CHANGELOG.md +++ b/demo/riot/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/riot-demo + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/riot-demo diff --git a/demo/riot/package.json b/demo/riot/package.json index 9b1e074688e..5b04aa6a697 100644 --- a/demo/riot/package.json +++ b/demo/riot/package.json @@ -1,15 +1,15 @@ { "name": "@tsparticles/riot-demo", "private": true, - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "", "main": "index.js", "scripts": { "test": "nyc --require esm --require jsdom-global/register --require @riotjs/register mocha src/**/*.spec.js", "cov": "nyc report --reporter=text-lcov", "cov-html": "nyc report --reporter=html", - "build": "echo build", - "build:ci": "echo build", + "build": "webpack --mode production", + "build:ci": "webpack --mode production", "prepublishOnly": "npm test", "start": "webpack serve --mode development --hot --port 3003" }, diff --git a/demo/riot/src/components/global/my-component/my-component.riot b/demo/riot/src/components/global/my-component/my-component.riot index 743dc0f8d26..322bf034e0d 100644 --- a/demo/riot/src/components/global/my-component/my-component.riot +++ b/demo/riot/src/components/global/my-component/my-component.riot @@ -18,13 +18,16 @@ onBeforeMount() { this.state.particlesInitialized = false; - initParticlesEngine(async (engine) => { - await loadFull(engine); + // Riot can be used server-side; guard initialization to client only. + if (typeof window !== "undefined") { + initParticlesEngine(async (engine) => { + await loadFull(engine); - console.log("particles initialized"); - }).then(() => { - this.update({ particlesInitialized: true }); - }) + console.log("particles initialized"); + }).then(() => { + this.update({ particlesInitialized: true }); + }); + } }, } diff --git a/demo/riot/webpack.config.js b/demo/riot/webpack.config.js index 44a4887b90b..1156f156875 100644 --- a/demo/riot/webpack.config.js +++ b/demo/riot/webpack.config.js @@ -13,6 +13,18 @@ module.exports = { clean: true }, devtool: 'source-map', + resolve: { + alias: { + // Point the package alias to the Riot component file so imports like + // `import ... from "@tsparticles/riot"` resolve correctly to the .riot file. + '@tsparticles/riot': path.resolve(__dirname, '..', '..', 'wrappers', 'riot', 'src', 'riot-particles.riot'), + }, + // Ensure webpack looks up node_modules from the demo package first so + // dependencies declared in demo/riot/package.json (eg. @riotjs/hot-reload) + // are resolvable when modules are imported from the wrappers/ directory. + modules: [path.resolve(__dirname, 'node_modules'), 'node_modules'], + + }, optimization: { runtimeChunk: { name: 'runtime', diff --git a/demo/solid/CHANGELOG.md b/demo/solid/CHANGELOG.md index e743c419393..644c5dcc87c 100644 --- a/demo/solid/CHANGELOG.md +++ b/demo/solid/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/vite-template-solid + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/vite-template-solid diff --git a/demo/solid/package.json b/demo/solid/package.json index 8e5a7d7d179..5706c4b2e3d 100644 --- a/demo/solid/package.json +++ b/demo/solid/package.json @@ -1,6 +1,7 @@ { "name": "@tsparticles/vite-template-solid", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", + "private": true, "description": "", "scripts": { "start": "vite", diff --git a/demo/solid/src/App.tsx b/demo/solid/src/App.tsx index 01f16776753..f4711784ab5 100644 --- a/demo/solid/src/App.tsx +++ b/demo/solid/src/App.tsx @@ -1,18 +1,24 @@ import configs from "@tsparticles/configs"; -import type { Component } from 'solid-js'; -import { createSignal, Show } from "solid-js"; +import type { Component } from "solid-js"; +import { createSignal, Show, onMount } from "solid-js"; import { loadFull } from "tsparticles"; import Particles, { initParticlesEngine } from "@tsparticles/solid"; const App: Component = () => { - const init = initParticlesEngine(loadFull) - const [config, setConfig] = createSignal(configs.basic) + const [initialized, setInitialized] = createSignal(false); - setTimeout(() => setConfig(configs.absorbers), 1000) + onMount(() => { + // Initialize only on the client to avoid SSR/module-eval side-effects. + void initParticlesEngine(async engine => { + await loadFull(engine); + }) + .then(() => setInitialized(true)) + .catch(e => console.error("Failed to initialize particles engine:", e)); + }); return ( - - + + ); }; diff --git a/demo/svelte-kit/.eslintignore b/demo/svelte-kit/.eslintignore deleted file mode 100644 index 38972655faf..00000000000 --- a/demo/svelte-kit/.eslintignore +++ /dev/null @@ -1,13 +0,0 @@ -.DS_Store -node_modules -/build -/.svelte-kit -/package -.env -.env.* -!.env.example - -# Ignore files for PNPM, NPM and YARN -pnpm-lock.yaml -package-lock.json -yarn.lock diff --git a/demo/svelte-kit/CHANGELOG.md b/demo/svelte-kit/CHANGELOG.md index a0854653734..83aca830d69 100644 --- a/demo/svelte-kit/CHANGELOG.md +++ b/demo/svelte-kit/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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-kit-demo + + + + + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/svelte-kit-demo diff --git a/demo/svelte-kit/eslint.config.js b/demo/svelte-kit/eslint.config.js new file mode 100644 index 00000000000..756ddd2d4b2 --- /dev/null +++ b/demo/svelte-kit/eslint.config.js @@ -0,0 +1,51 @@ +import tsParser from "@typescript-eslint/parser"; +import tsPlugin from "@typescript-eslint/eslint-plugin"; +import svelteParser from "svelte-eslint-parser"; +import sveltePlugin from "eslint-plugin-svelte"; + +export default [ + { + ignores: [ + ".DS_Store", + "node_modules/**", + "build/**", + ".svelte-kit/**", + "package/**", + ".env", + ".env.*", + "pnpm-lock.yaml", + "package-lock.json", + "yarn.lock", + ], + }, + { + files: ["**/*.ts"], + languageOptions: { + parser: tsParser, + ecmaVersion: "latest", + sourceType: "module", + }, + plugins: { + "@typescript-eslint": tsPlugin, + }, + rules: { + ...tsPlugin.configs.recommended.rules, + }, + }, + { + files: ["**/*.svelte"], + languageOptions: { + parser: svelteParser, + parserOptions: { + parser: tsParser, + extraFileExtensions: [".svelte"], + }, + }, + plugins: { + svelte: sveltePlugin, + }, + rules: { + ...sveltePlugin.configs.recommended.rules, + }, + }, +]; diff --git a/demo/svelte-kit/package.json b/demo/svelte-kit/package.json index 646ba982e03..2f89992174c 100644 --- a/demo/svelte-kit/package.json +++ b/demo/svelte-kit/package.json @@ -1,10 +1,10 @@ { "name": "@tsparticles/svelte-kit-demo", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "private": true, "scripts": { "dev": "vite dev", - "build": "echo build", + "build": "vite build", "preview": "vite preview", "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", @@ -19,15 +19,16 @@ "@tsparticles/engine": "workspace:^", "@tsparticles/svelte": "workspace:^", "@types/cookie": "^0.6.0", - "@typescript-eslint/eslint-plugin": "^7.10.0", - "@typescript-eslint/parser": "^7.10.0", - "eslint": "^8.57.0", - "eslint-config-prettier": "^9.1.0", + "@typescript-eslint/eslint-plugin": "^8.59.1", + "@typescript-eslint/parser": "^8.59.1", + "eslint": "^10.3.0", + "eslint-config-prettier": "^10.1.8", "eslint-plugin-svelte": "^2.39.0", "prettier": "^3.2.5", "prettier-plugin-svelte": "^3.2.3", "svelte": "^4.2.17", "svelte-check": "^3.7.1", + "svelte-eslint-parser": "^1.0.0", "svelte-preprocess": "^5.1.4", "tslib": "^2.6.2", "tsparticles": "workspace:^", diff --git a/demo/svelte-kit/src/routes/+page.svelte b/demo/svelte-kit/src/routes/+page.svelte index baf3db52db6..3a74e91d160 100644 --- a/demo/svelte-kit/src/routes/+page.svelte +++ b/demo/svelte-kit/src/routes/+page.svelte @@ -1,47 +1,55 @@ - Home - + Home +
-

+

@@ -49,51 +57,51 @@ - to your new
SvelteKit app -

+ to your new
SvelteKit app + -

- try editing src/routes/+page.svelte -

+

+ try editing src/routes/+page.svelte +

- + - {#await ParticlesConstructor} -

Loading...

- {:then component} - - {:catch error} -

Something went wrong: {error.message}

- {/await} + {#await ParticlesConstructor} +

Loading...

+ {:then component} + + {:catch error} +

Something went wrong: {error.message}

+ {/await}
diff --git a/demo/svelte/CHANGELOG.md b/demo/svelte/CHANGELOG.md index f1a7f86ddf4..c66004224b9 100644 --- a/demo/svelte/CHANGELOG.md +++ b/demo/svelte/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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-demo + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/svelte-demo diff --git a/demo/svelte/package.json b/demo/svelte/package.json index ff223d72b29..515ce30cfd8 100644 --- a/demo/svelte/package.json +++ b/demo/svelte/package.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/svelte-demo", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "private": true, "scripts": { "build": "rollup -c", diff --git a/demo/svelte/rollup.config.mjs b/demo/svelte/rollup.config.mjs index 5934d0066ec..552ffb62996 100644 --- a/demo/svelte/rollup.config.mjs +++ b/demo/svelte/rollup.config.mjs @@ -10,7 +10,7 @@ import json from "@rollup/plugin-json"; const production = !process.env.ROLLUP_WATCH; -function serve() { + function serve() { let server; function toExit() { @@ -18,9 +18,13 @@ function serve() { } return { - writeBundle() { + async writeBundle() { if (server) return; - server = require("child_process").spawn("npm", ["run", "start", "--", "--dev"], { + + // rollup config is an ES module; use dynamic import for builtins + const child = await import("child_process"); + + server = child.spawn("npm", ["run", "start", "--", "--dev"], { stdio: ["ignore", "inherit", "inherit"], shell: true, }); diff --git a/demo/vanilla/CHANGELOG.md b/demo/vanilla/CHANGELOG.md index 0b753699ec3..4f74cd9a3fa 100644 --- a/demo/vanilla/CHANGELOG.md +++ b/demo/vanilla/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/demo + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) ### Features diff --git a/demo/vanilla/app.ts b/demo/vanilla/app.ts index 5ced29aef28..e529a217555 100644 --- a/demo/vanilla/app.ts +++ b/demo/vanilla/app.ts @@ -3,13 +3,12 @@ import cluster from "node:cluster"; import { existsSync, readdirSync, readFileSync } from "node:fs"; //import helmet from "helmet"; import connectLiveReload from "connect-livereload"; -import { dirname } from "path"; +import path, { dirname } from "node:path"; import dotenv from "dotenv"; import express from "express"; -import { fileURLToPath } from "url"; +import { fileURLToPath } from "node:url"; import livereload from "livereload"; -import path from "node:path"; -import os from "os"; +import os from "node:os"; //import rateLimit from "express-rate-limit"; import stylus from "stylus"; import winston from "winston"; @@ -51,13 +50,31 @@ const logger = winston.createLogger({ ], }); -const workspaceRootGuess = path.resolve(dirName, "..", "..", ".."), - workspaceRoot = existsSync(path.join(workspaceRootGuess, "package.json")) - ? workspaceRootGuess - : path.resolve(dirName, "..", ".."), +const workspaceRootCandidates = [ + path.resolve(dirName, "..", "..", ".."), + path.resolve(dirName, "..", "..", "..", ".."), + path.resolve(dirName, "..", ".."), + ], + workspaceRoot = + workspaceRootCandidates.find( + candidate => existsSync(path.join(candidate, "presets")) && existsSync(path.join(candidate, "palettes")), + ) ?? path.resolve(dirName, "..", ".."), presetsRoot = path.join(workspaceRoot, "presets"), palettesRoot = path.join(workspaceRoot, "palettes"); +// Read demo package.json to get declared dependencies (we will only discover palettes/presets +// that are declared as dependencies of this demo). This avoids scanning the whole repo. +let demoPackageDeps: string[] = []; +try { + const demoPkgPath = [path.join(dirName, "package.json"), path.join(dirName, "..", "package.json")].find(existsSync); + if (demoPkgPath) { + const demoPkg = JSON.parse(readFileSync(demoPkgPath, "utf8")) as { dependencies?: Record }; + demoPackageDeps = Object.keys(demoPkg.dependencies ?? {}); + } +} catch { + demoPackageDeps = []; +} + type CatalogMode = "preset" | "palette"; interface CatalogItem { @@ -74,6 +91,8 @@ interface CatalogItem { description: string; staticPath: string; category?: string; + showcaseRoute?: string; + showcaseLabel?: string; } interface PaletteGroup { @@ -91,6 +110,9 @@ const camelToKebab = (value: string): string => const toPascal = (value: string): string => `${value[0].toUpperCase()}${value.slice(1)}`; +const getPaletteId = (category: string, folder: string): string => + category === "other" ? folder : `${category}${toPascal(folder)}`; + const parsePaletteName = (fullPath: string, folder: string): string => { const optionsPath = path.join(fullPath, "src", "options.ts"); @@ -104,6 +126,134 @@ const parsePaletteName = (fullPath: string, folder: string): string => { return match?.[1] ?? toTitleCase(camelToKebab(folder).replace(/-/g, " ")); }; +interface PaletteSourceMetadata { + loader: string; + optionValue: string; +} + +interface PalettePackageMetadata { + packageName: string; + slug: string; +} + +interface PresetSourceMetadata { + loader: string; + optionValue: string; +} + +interface PresetPackageMetadata { + packageName: string; + slug: string; +} + +const readPresetPackageMetadata = (fullPath: string, folder: string): PresetPackageMetadata => { + const fallbackSlug = camelToKebab(folder), + packageJsonPath = path.join(fullPath, "package.json"); + + if (!existsSync(packageJsonPath)) { + return { + packageName: `@tsparticles/preset-${fallbackSlug}`, + slug: fallbackSlug, + }; + } + + try { + const parsed = JSON.parse(readFileSync(packageJsonPath, "utf8")) as { name?: string }, + packageName = parsed.name?.startsWith("@tsparticles/preset-") + ? parsed.name + : `@tsparticles/preset-${fallbackSlug}`, + slug = packageName.replace("@tsparticles/preset-", ""); + + return { + packageName, + slug, + }; + } catch { + return { + packageName: `@tsparticles/preset-${fallbackSlug}`, + slug: fallbackSlug, + }; + } +}; + +const readPresetSourceMetadata = (fullPath: string, folder: string, slug: string): PresetSourceMetadata => { + const indexPath = path.join(fullPath, "src", "index.ts"); + + if (!existsSync(indexPath)) { + return { + loader: `load${toPascal(folder)}Preset`, + optionValue: slug, + }; + } + + const indexContent = readFileSync(indexPath, "utf8"), + loaderMatch = indexContent.match(/export\s+async\s+function\s+(load\w+Preset)\s*\(/u), + presetNamesMatch = indexContent.match(/const\s+presetNames\s*=\s*\[([^\]]+)\]\s*;/u), + presetNameMatch = indexContent.match(/const\s+presetName\s*=\s*"([^"]+)"\s*;/u), + presetNames = [...(presetNamesMatch?.[1].matchAll(/"([^"]+)"/gu) ?? [])].map(match => match[1]), + optionValue = + presetNameMatch?.[1] ?? + presetNames.find(name => name === slug) ?? + presetNames.find(name => !name.includes("-")) ?? + presetNames[0] ?? + slug; + + return { + loader: loaderMatch?.[1] ?? `load${toPascal(folder)}Preset`, + optionValue, + }; +}; + +const readPalettePackageMetadata = (fullPath: string, folder: string): PalettePackageMetadata => { + const fallbackSlug = camelToKebab(folder), + packageJsonPath = path.join(fullPath, "package.json"); + + if (!existsSync(packageJsonPath)) { + return { + packageName: `@tsparticles/palette-${fallbackSlug}`, + slug: fallbackSlug, + }; + } + + try { + const parsed = JSON.parse(readFileSync(packageJsonPath, "utf8")) as { name?: string }, + packageName = parsed.name?.startsWith("@tsparticles/palette-") + ? parsed.name + : `@tsparticles/palette-${fallbackSlug}`, + slug = packageName.replace("@tsparticles/palette-", ""); + + return { + packageName, + slug, + }; + } catch { + return { + packageName: `@tsparticles/palette-${fallbackSlug}`, + slug: fallbackSlug, + }; + } +}; + +const readPaletteSourceMetadata = (fullPath: string, folder: string, slug: string): PaletteSourceMetadata => { + const indexPath = path.join(fullPath, "src", "index.ts"); + + if (!existsSync(indexPath)) { + return { + loader: `load${toPascal(folder)}Palette`, + optionValue: slug, + }; + } + + const indexContent = readFileSync(indexPath, "utf8"), + loaderMatch = indexContent.match(/export\s+async\s+function\s+(load\w+Palette)\s*\(/u), + paletteNameMatch = indexContent.match(/const\s+paletteName\s*=\s*"([^"]+)"\s*;/u); + + return { + loader: loaderMatch?.[1] ?? `load${toPascal(folder)}Palette`, + optionValue: paletteNameMatch?.[1] ?? slug, + }; +}; + const findGeneratedScript = (distPath: string, fallback: string, matcher: RegExp): string => { if (!existsSync(distPath)) { return fallback; @@ -114,23 +264,45 @@ const findGeneratedScript = (distPath: string, fallback: string, matcher: RegExp return generatedScript ?? fallback; }; -const loadPresetsCatalog = (): CatalogItem[] => { +const discoverPresetDirs = (): Array<{ folder: string; fullPath: string }> => { + const presetDeps = demoPackageDeps.filter(d => d.startsWith("@tsparticles/preset-")); + if (!existsSync(presetsRoot)) { return []; } - return readdirSync(presetsRoot, { withFileTypes: true }) - .filter(entry => entry.isDirectory()) - .map(entry => entry.name) - .sort((a, b) => a.localeCompare(b)) - .map(folder => { - const slug = camelToKebab(folder), - packageName = `@tsparticles/preset-${slug}`, + const presetFolders = readdirSync(presetsRoot, { withFileTypes: true }).filter(e => e.isDirectory()).map(e => e.name), + bySlug = new Map(); + + for (const folder of presetFolders) { + const fullPath = path.join(presetsRoot, folder), + packageMetadata = readPresetPackageMetadata(fullPath, folder); + + bySlug.set(packageMetadata.slug, folder); + } + + return presetDeps + .map(dep => dep.replace("@tsparticles/preset-", "")) + .map(slug => { + const folder = bySlug.get(slug) ?? slug; + + return { + folder, + fullPath: path.join(presetsRoot, folder), + }; + }) + .sort((a, b) => a.folder.localeCompare(b.folder)); +}; + +const loadPresetsCatalog = (): CatalogItem[] => { + return discoverPresetDirs() + .map(({ folder, fullPath }) => { + const packageMetadata = readPresetPackageMetadata(fullPath, folder), + sourceMetadata = readPresetSourceMetadata(fullPath, folder, packageMetadata.slug), + slug = packageMetadata.slug, title = toTitleCase(slug.replace(/-/g, " ")), - loader = `load${toPascal(folder)}Preset`, - packageRoot = path.join(presetsRoot, folder), scriptFile = findGeneratedScript( - path.join(packageRoot, "dist"), + path.join(fullPath, "dist"), `tsparticles.preset.${slug}.bundle.min.js`, /^tsparticles\.preset\..+\.bundle\.min\.js$/u, ); @@ -139,73 +311,101 @@ const loadPresetsCatalog = (): CatalogItem[] => { id: folder, slug, title, - packageName, + packageName: packageMetadata.packageName, mountPath: `/preset-${slug}`, route: `/presets/${folder}`, image: `/images/presets/${folder}.png`, scriptFile, - loader, - optionValue: slug, + loader: sourceMetadata.loader, + optionValue: sourceMetadata.optionValue, description: `${title} preset demo`, - staticPath: path.join(packageRoot, "dist"), + staticPath: path.join(fullPath, "dist"), }; - }); + }) + .filter(item => existsSync(item.staticPath)); }; const hasPaletteOptions = (palettePath: string): boolean => existsSync(path.join(palettePath, "src", "options.ts")); const discoverPaletteDirs = (): Array<{ category: string; folder: string; fullPath: string }> => { + const paletteDeps = demoPackageDeps.filter(d => d.startsWith("@tsparticles/palette-")), + allPaletteDirs: Array<{ category: string; folder: string; fullPath: string }> = []; + if (!existsSync(palettesRoot)) { return []; } - return readdirSync(palettesRoot, { withFileTypes: true }) - .filter(entry => entry.isDirectory()) - .flatMap(entry => { - const categoryPath = path.join(palettesRoot, entry.name); + const rootEntries = readdirSync(palettesRoot, { withFileTypes: true }).filter(e => e.isDirectory()); + + for (const entry of rootEntries) { + const category = entry.name, + categoryPath = path.join(palettesRoot, category); + + if (hasPaletteOptions(categoryPath)) { + allPaletteDirs.push({ category: "other", folder: category, fullPath: categoryPath }); + continue; + } + + const palettesInCategory = readdirSync(categoryPath, { withFileTypes: true }).filter(e => e.isDirectory()); - if (hasPaletteOptions(categoryPath)) { - return [{ category: "other", folder: entry.name, fullPath: categoryPath }]; + for (const paletteEntry of palettesInCategory) { + const fullPath = path.join(categoryPath, paletteEntry.name); + + if (!hasPaletteOptions(fullPath)) { + continue; } - return readdirSync(categoryPath, { withFileTypes: true }) - .filter(nested => nested.isDirectory()) - .map(nested => ({ - category: entry.name, - folder: nested.name, - fullPath: path.join(categoryPath, nested.name), - })) - .filter(item => hasPaletteOptions(item.fullPath)); - }) + allPaletteDirs.push({ category, folder: paletteEntry.name, fullPath }); + } + } + + const bySlug = new Map(); + + for (const item of allPaletteDirs) { + const { slug } = readPalettePackageMetadata(item.fullPath, item.folder); + + bySlug.set(slug, item); + } + + return paletteDeps + .map(dep => dep.replace("@tsparticles/palette-", "")) + .map(slug => bySlug.get(slug)) + .filter((item): item is { category: string; folder: string; fullPath: string } => Boolean(item)) .sort((a, b) => a.folder.localeCompare(b.folder)); }; const loadPalettesCatalog = (): CatalogItem[] => { return discoverPaletteDirs().map(({ category, folder, fullPath }) => { - const slug = camelToKebab(folder), - packageName = `@tsparticles/palette-${slug}`, + const paletteId = getPaletteId(category, folder), + packageMetadata = readPalettePackageMetadata(fullPath, folder), title = parsePaletteName(fullPath, folder), - loader = `load${toPascal(folder)}Palette`, + sourceMetadata = readPaletteSourceMetadata(fullPath, folder, packageMetadata.slug), + isFireworksStroke = category === "fireworks" && /stroke$/iu.test(folder), + showcaseRoute = category === "confetti" || isFireworksStroke ? `/palettes/${paletteId}/showcase` : undefined, + showcaseLabel = + category === "confetti" ? "Confetti Example" : isFireworksStroke ? "Fireworks Example" : undefined, scriptFile = findGeneratedScript( path.join(fullPath, "dist"), - `tsparticles.palette.${slug}.min.js`, + `tsparticles.palette.${packageMetadata.slug}.min.js`, /^tsparticles\.palette\..+\.min\.js$/u, ); return { - id: folder, - slug, + id: paletteId, + slug: packageMetadata.slug, title, - packageName, - mountPath: `/palette-${slug}`, - route: `/palettes/${folder}`, - image: `/images/palettes/${folder}.png`, + packageName: packageMetadata.packageName, + mountPath: `/palette-${packageMetadata.slug}`, + route: `/palettes/${paletteId}`, + image: `/images/palettes/${paletteId}.png`, scriptFile, - loader, - optionValue: slug, + loader: sourceMetadata.loader, + optionValue: sourceMetadata.optionValue, description: `${title} palette demo`, staticPath: path.join(fullPath, "dist"), category, + showcaseRoute, + showcaseLabel, }; }); }; @@ -258,6 +458,7 @@ app.use("/tsparticles-pjs", express.static("./node_modules/@tsparticles/pjs")); app.use("/tsparticles-slim", express.static("./node_modules/@tsparticles/slim")); app.use("/tsparticles-confetti", express.static("./node_modules/@tsparticles/confetti")); app.use("/tsparticles-fireworks", express.static("./node_modules/@tsparticles/fireworks")); +app.use("/tsparticles-particles", express.static("./node_modules/@tsparticles/particles")); app.use("/tsparticles", express.static("./node_modules/tsparticles")); app.use("/tsparticles-configs", express.static("./node_modules/@tsparticles/configs")); app.use("/canvas-utils", express.static("./node_modules/@tsparticles/canvas-utils")); @@ -414,18 +615,26 @@ app.get("/basic", function (req, res) { res.render("basic"); }); + app.get("/bundle", function (req, res) { logger.info("bundle requested"); res.render("bundle"); }); + app.get("/playground", function (req, res) { logger.info("playground requested"); res.render("playground"); }); +app.get("/canvas", function (req, res) { + logger.info("canvas requested"); + + res.render("canvas"); +}); + app.get("/confetti", function (req, res) { logger.info("confetti requested"); @@ -438,6 +647,12 @@ app.get("/fireworks", function (req, res) { res.render("fireworks"); }); +app.get("/particles", function (req, res) { + logger.info("particles requested"); + + res.render("particles"); +}); + app.get("/domEmitters", function (req, res) { logger.info("dom emitters requested"); @@ -524,13 +739,46 @@ app.get("/palettes/:id", function (req, res) { res.render("palette", { item }); }); +app.get("/palettes/:id/showcase", function (req, res) { + const item = palettesMap.get(req.params.id); + + if (!item) { + res.status(404).send("Palette not found"); + + return; + } + + if (!item.showcaseRoute) { + res.status(404).send("Showcase not available for this palette"); + + return; + } + + if (item.category === "confetti") { + logger.info(`palette confetti showcase ${req.params.id} requested`); + res.render("paletteShowcaseConfetti", { item }); + + return; + } + + if (item.category === "fireworks") { + logger.info(`palette fireworks showcase ${req.params.id} requested`); + res.render("paletteShowcaseFireworks", { item }); + + return; + } + + res.status(404).send("Showcase not available for this palette"); +}); + for (const item of palettesCatalog) { app.get(`/palette/${item.id}`, function (req, res) { res.redirect(item.route); }); } -const port = 3000; +const liveReloadPort = Number.parseInt(process.env.LIVE_RELOAD_PORT ?? "35731", 10), + port = Number.parseInt(process.env.PORT ?? "3000", 10); if (cluster.isMaster) { for (let i = 0; i < numCpus; i++) { @@ -553,7 +801,7 @@ if (cluster.isMaster) { } }); - const liveReloadServer = livereload.createServer(); + const liveReloadServer = livereload.createServer({ port: liveReloadPort }); liveReloadServer.server.once("connection", () => { setTimeout(() => { diff --git a/demo/vanilla/package.json b/demo/vanilla/package.json index fca6470b286..763fd392f32 100644 --- a/demo/vanilla/package.json +++ b/demo/vanilla/package.json @@ -1,7 +1,7 @@ { "name": "@tsparticles/demo", "private": true, - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "> TODO: description", "author": "Matteo Bruni ", "homepage": "https://particles.js.org", @@ -35,9 +35,9 @@ "bootstrap": "^5.3.8", "concurrently": "^9.2.1", "connect-livereload": "^0.6.1", - "dotenv": "^17.4.1", + "dotenv": "^17.4.2", "express": "^5.2.1", - "express-rate-limit": "^8.3.2", + "express-rate-limit": "^8.4.1", "helmet": "^8.1.0", "jquery": "^4.0.0", "jsoneditor": "^10.4.3", @@ -86,6 +86,196 @@ "@tsparticles/interaction-particles-links": "workspace:*", "@tsparticles/interaction-particles-repulse": "workspace:*", "@tsparticles/noise-field": "workspace:*", + "@tsparticles/palette-acid-pair": "workspace:*", + "@tsparticles/palette-apple": "workspace:*", + "@tsparticles/palette-apple-green": "workspace:*", + "@tsparticles/palette-apple-red": "workspace:*", + "@tsparticles/palette-aurora-borealis": "workspace:*", + "@tsparticles/palette-autumn-leaves": "workspace:*", + "@tsparticles/palette-avocado": "workspace:*", + "@tsparticles/palette-bell-peppers": "workspace:*", + "@tsparticles/palette-berries": "workspace:*", + "@tsparticles/palette-bioluminescence": "workspace:*", + "@tsparticles/palette-blood-and-gore": "workspace:*", + "@tsparticles/palette-bokeh-cold": "workspace:*", + "@tsparticles/palette-bokeh-gold": "workspace:*", + "@tsparticles/palette-bokeh-pastel": "workspace:*", + "@tsparticles/palette-bullet-hit": "workspace:*", + "@tsparticles/palette-candlelight": "workspace:*", + "@tsparticles/palette-caustics": "workspace:*", + "@tsparticles/palette-cherry": "workspace:*", + "@tsparticles/palette-cherry-blossom": "workspace:*", + "@tsparticles/palette-citrus-twist": "workspace:*", + "@tsparticles/palette-cmy-secondaries": "workspace:*", + "@tsparticles/palette-colored-smoke-amber": "workspace:*", + "@tsparticles/palette-colored-smoke-blue": "workspace:*", + "@tsparticles/palette-colored-smoke-green": "workspace:*", + "@tsparticles/palette-colored-smoke-magenta": "workspace:*", + "@tsparticles/palette-colored-smoke-orange": "workspace:*", + "@tsparticles/palette-colored-smoke-purple": "workspace:*", + "@tsparticles/palette-colored-smoke-rainbow": "workspace:*", + "@tsparticles/palette-colored-smoke-red": "workspace:*", + "@tsparticles/palette-colored-smoke-teal": "workspace:*", + "@tsparticles/palette-confetti": "workspace:*", + "@tsparticles/palette-confetti-gold": "workspace:*", + "@tsparticles/palette-confetti-monochrome-blue": "workspace:*", + "@tsparticles/palette-confetti-monochrome-green": "workspace:*", + "@tsparticles/palette-confetti-monochrome-pink": "workspace:*", + "@tsparticles/palette-confetti-monochrome-purple": "workspace:*", + "@tsparticles/palette-confetti-monochrome-red": "workspace:*", + "@tsparticles/palette-confetti-neon": "workspace:*", + "@tsparticles/palette-confetti-pastel": "workspace:*", + "@tsparticles/palette-confetti-patriotic": "workspace:*", + "@tsparticles/palette-confetti-rainbow": "workspace:*", + "@tsparticles/palette-confetti-winter": "workspace:*", + "@tsparticles/palette-cosmic-radiation": "workspace:*", + "@tsparticles/palette-crt-phosphor": "workspace:*", + "@tsparticles/palette-dandelion-seeds": "workspace:*", + "@tsparticles/palette-dark-matter": "workspace:*", + "@tsparticles/palette-deep-ocean": "workspace:*", + "@tsparticles/palette-desert-sand": "workspace:*", + "@tsparticles/palette-duality-blue-yellow": "workspace:*", + "@tsparticles/palette-duality-green-magenta": "workspace:*", + "@tsparticles/palette-duality-red-cyan": "workspace:*", + "@tsparticles/palette-dust-haze": "workspace:*", + "@tsparticles/palette-earthy-nature": "workspace:*", + "@tsparticles/palette-embers-and-ash": "workspace:*", + "@tsparticles/palette-explosion-debris": "workspace:*", + "@tsparticles/palette-fairy-dust": "workspace:*", + "@tsparticles/palette-fire": "workspace:*", + "@tsparticles/palette-fire-seed": "workspace:*", + "@tsparticles/palette-fireflies": "workspace:*", + "@tsparticles/palette-fireworks-blue": "workspace:*", + "@tsparticles/palette-fireworks-blue-stroke": "workspace:*", + "@tsparticles/palette-fireworks-copper": "workspace:*", + "@tsparticles/palette-fireworks-copper-stroke": "workspace:*", + "@tsparticles/palette-fireworks-gold": "workspace:*", + "@tsparticles/palette-fireworks-gold-stroke": "workspace:*", + "@tsparticles/palette-fireworks-green": "workspace:*", + "@tsparticles/palette-fireworks-green-stroke": "workspace:*", + "@tsparticles/palette-fireworks-ice": "workspace:*", + "@tsparticles/palette-fireworks-ice-stroke": "workspace:*", + "@tsparticles/palette-fireworks-multicolor": "workspace:*", + "@tsparticles/palette-fireworks-multicolor-stroke": "workspace:*", + "@tsparticles/palette-fireworks-neon": "workspace:*", + "@tsparticles/palette-fireworks-neon-stroke": "workspace:*", + "@tsparticles/palette-fireworks-pastel": "workspace:*", + "@tsparticles/palette-fireworks-pastel-stroke": "workspace:*", + "@tsparticles/palette-fireworks-purple": "workspace:*", + "@tsparticles/palette-fireworks-purple-stroke": "workspace:*", + "@tsparticles/palette-fireworks-rainbow": "workspace:*", + "@tsparticles/palette-fireworks-rainbow-stroke": "workspace:*", + "@tsparticles/palette-fireworks-red": "workspace:*", + "@tsparticles/palette-fireworks-red-stroke": "workspace:*", + "@tsparticles/palette-fireworks-silver": "workspace:*", + "@tsparticles/palette-fireworks-silver-stroke": "workspace:*", + "@tsparticles/palette-foam-and-bubbles": "workspace:*", + "@tsparticles/palette-fog-coastal": "workspace:*", + "@tsparticles/palette-fog-morning": "workspace:*", + "@tsparticles/palette-forest-canopy": "workspace:*", + "@tsparticles/palette-full-fire-gradient": "workspace:*", + "@tsparticles/palette-full-spectrum": "workspace:*", + "@tsparticles/palette-galaxy-dust": "workspace:*", + "@tsparticles/palette-gingerbread-house": "workspace:*", + "@tsparticles/palette-glass-burst": "workspace:*", + "@tsparticles/palette-glitch": "workspace:*", + "@tsparticles/palette-grapes": "workspace:*", + "@tsparticles/palette-heat-duality": "workspace:*", + "@tsparticles/palette-heat-haze": "workspace:*", + "@tsparticles/palette-hologram": "workspace:*", + "@tsparticles/palette-holographic-shimmer": "workspace:*", + "@tsparticles/palette-holy-light": "workspace:*", + "@tsparticles/palette-ice-magic": "workspace:*", + "@tsparticles/palette-ice-triad": "workspace:*", + "@tsparticles/palette-ink-in-water": "workspace:*", + "@tsparticles/palette-iris": "workspace:*", + "@tsparticles/palette-jellyfish-glow": "workspace:*", + "@tsparticles/palette-lagoon": "workspace:*", + "@tsparticles/palette-laser-scatter": "workspace:*", + "@tsparticles/palette-lava-lamp": "workspace:*", + "@tsparticles/palette-lens-flare-dust": "workspace:*", + "@tsparticles/palette-lightning": "workspace:*", + "@tsparticles/palette-lofi-warm": "workspace:*", + "@tsparticles/palette-macaron": "workspace:*", + "@tsparticles/palette-matrix-rain": "workspace:*", + "@tsparticles/palette-melon": "workspace:*", + "@tsparticles/palette-mermaid": "workspace:*", + "@tsparticles/palette-metal-sparks": "workspace:*", + "@tsparticles/palette-meteor-impact": "workspace:*", + "@tsparticles/palette-molten-metal": "workspace:*", + "@tsparticles/palette-monochrome-blues": "workspace:*", + "@tsparticles/palette-monochrome-brown": "workspace:*", + "@tsparticles/palette-monochrome-cyan": "workspace:*", + "@tsparticles/palette-monochrome-gold": "workspace:*", + "@tsparticles/palette-monochrome-greens": "workspace:*", + "@tsparticles/palette-monochrome-noir": "workspace:*", + "@tsparticles/palette-monochrome-oranges": "workspace:*", + "@tsparticles/palette-monochrome-pinks": "workspace:*", + "@tsparticles/palette-monochrome-purples": "workspace:*", + "@tsparticles/palette-monochrome-reds": "workspace:*", + "@tsparticles/palette-monochrome-silver": "workspace:*", + "@tsparticles/palette-monochrome-teal": "workspace:*", + "@tsparticles/palette-monochrome-white": "workspace:*", + "@tsparticles/palette-monochrome-yellows": "workspace:*", + "@tsparticles/palette-mud-and-dirt": "workspace:*", + "@tsparticles/palette-nebula": "workspace:*", + "@tsparticles/palette-neon-city": "workspace:*", + "@tsparticles/palette-network-nodes": "workspace:*", + "@tsparticles/palette-nuclear-glow": "workspace:*", + "@tsparticles/palette-oil-slick": "workspace:*", + "@tsparticles/palette-okabe-ito-accessible": "workspace:*", + "@tsparticles/palette-pastel-cool": "workspace:*", + "@tsparticles/palette-pastel-dream": "workspace:*", + "@tsparticles/palette-pastel-mint": "workspace:*", + "@tsparticles/palette-pastel-sunset": "workspace:*", + "@tsparticles/palette-pastel-warm": "workspace:*", + "@tsparticles/palette-pineapple": "workspace:*", + "@tsparticles/palette-pizza": "workspace:*", + "@tsparticles/palette-plasma-arc": "workspace:*", + "@tsparticles/palette-poison-and-venom": "workspace:*", + "@tsparticles/palette-pollen-and-spores": "workspace:*", + "@tsparticles/palette-portal": "workspace:*", + "@tsparticles/palette-prism-scatter": "workspace:*", + "@tsparticles/palette-prism-spectrum": "workspace:*", + "@tsparticles/palette-pulsar": "workspace:*", + "@tsparticles/palette-rain": "workspace:*", + "@tsparticles/palette-rainbow": "workspace:*", + "@tsparticles/palette-rgb-primaries": "workspace:*", + "@tsparticles/palette-rising-bubbles": "workspace:*", + "@tsparticles/palette-rock-and-gravel": "workspace:*", + "@tsparticles/palette-rust-and-corrosion": "workspace:*", + "@tsparticles/palette-sakura": "workspace:*", + "@tsparticles/palette-salad": "workspace:*", + "@tsparticles/palette-shockwave": "workspace:*", + "@tsparticles/palette-shockwave-blast": "workspace:*", + "@tsparticles/palette-skin-and-organic": "workspace:*", + "@tsparticles/palette-smoke-cold": "workspace:*", + "@tsparticles/palette-smoke-warm": "workspace:*", + "@tsparticles/palette-snowfall": "workspace:*", + "@tsparticles/palette-solar-wind": "workspace:*", + "@tsparticles/palette-spice-rack": "workspace:*", + "@tsparticles/palette-splatter-dark": "workspace:*", + "@tsparticles/palette-spring-bloom": "workspace:*", + "@tsparticles/palette-steak": "workspace:*", + "@tsparticles/palette-sunrise-gold": "workspace:*", + "@tsparticles/palette-sunset-binary": "workspace:*", + "@tsparticles/palette-supernova": "workspace:*", + "@tsparticles/palette-sushi": "workspace:*", + "@tsparticles/palette-thermal-map": "workspace:*", + "@tsparticles/palette-thunderstorm": "workspace:*", + "@tsparticles/palette-tropical-fruits": "workspace:*", + "@tsparticles/palette-unicorn": "workspace:*", + "@tsparticles/palette-vaporwave": "workspace:*", + "@tsparticles/palette-vibrant": "workspace:*", + "@tsparticles/palette-vibrant-electric": "workspace:*", + "@tsparticles/palette-vibrant-neon": "workspace:*", + "@tsparticles/palette-vibrant-retro": "workspace:*", + "@tsparticles/palette-vibrant-tropical": "workspace:*", + "@tsparticles/palette-volcanic-ash": "workspace:*", + "@tsparticles/palette-water": "workspace:*", + "@tsparticles/palette-water-splash": "workspace:*", + "@tsparticles/palette-watermelon": "workspace:*", + "@tsparticles/particles": "workspace:*", "@tsparticles/path-branches": "workspace:*", "@tsparticles/path-brownian": "workspace:*", "@tsparticles/path-curl-noise": "workspace:*", @@ -152,6 +342,26 @@ "@tsparticles/plugin-themes": "workspace:*", "@tsparticles/plugin-trail": "workspace:*", "@tsparticles/plugin-zoom": "workspace:*", + "@tsparticles/preset-ambient": "workspace:*", + "@tsparticles/preset-big-circles": "workspace:*", + "@tsparticles/preset-bubbles": "workspace:*", + "@tsparticles/preset-confetti": "workspace:*", + "@tsparticles/preset-confetti-cannon": "workspace:*", + "@tsparticles/preset-confetti-explosions": "workspace:*", + "@tsparticles/preset-confetti-falling": "workspace:*", + "@tsparticles/preset-confetti-parade": "workspace:*", + "@tsparticles/preset-fire": "workspace:*", + "@tsparticles/preset-firefly": "workspace:*", + "@tsparticles/preset-fireworks": "workspace:*", + "@tsparticles/preset-fountain": "workspace:*", + "@tsparticles/preset-hyperspace": "workspace:*", + "@tsparticles/preset-links": "workspace:*", + "@tsparticles/preset-matrix": "workspace:*", + "@tsparticles/preset-sea-anemone": "workspace:*", + "@tsparticles/preset-snow": "workspace:*", + "@tsparticles/preset-squares": "workspace:*", + "@tsparticles/preset-stars": "workspace:*", + "@tsparticles/preset-triangles": "workspace:*", "@tsparticles/shape-arrow": "workspace:*", "@tsparticles/shape-cards": "workspace:*", "@tsparticles/shape-circle": "workspace:*", diff --git a/demo/vanilla/public/images/palettes/atmosphereColoredSmokeAmber.png b/demo/vanilla/public/images/palettes/atmosphereColoredSmokeAmber.png new file mode 100644 index 00000000000..4ca275842a9 Binary files /dev/null and b/demo/vanilla/public/images/palettes/atmosphereColoredSmokeAmber.png differ diff --git a/demo/vanilla/public/images/palettes/atmosphereColoredSmokeBlue.png b/demo/vanilla/public/images/palettes/atmosphereColoredSmokeBlue.png new file mode 100644 index 00000000000..3057d8b19cd Binary files /dev/null and b/demo/vanilla/public/images/palettes/atmosphereColoredSmokeBlue.png differ diff --git a/demo/vanilla/public/images/palettes/atmosphereColoredSmokeGreen.png b/demo/vanilla/public/images/palettes/atmosphereColoredSmokeGreen.png new file mode 100644 index 00000000000..44cd1c078b8 Binary files /dev/null and b/demo/vanilla/public/images/palettes/atmosphereColoredSmokeGreen.png differ diff --git a/demo/vanilla/public/images/palettes/coloredSmokeMagenta.png b/demo/vanilla/public/images/palettes/atmosphereColoredSmokeMagenta.png similarity index 100% rename from demo/vanilla/public/images/palettes/coloredSmokeMagenta.png rename to demo/vanilla/public/images/palettes/atmosphereColoredSmokeMagenta.png diff --git a/demo/vanilla/public/images/palettes/atmosphereColoredSmokeOrange.png b/demo/vanilla/public/images/palettes/atmosphereColoredSmokeOrange.png new file mode 100644 index 00000000000..c8479c04599 Binary files /dev/null and b/demo/vanilla/public/images/palettes/atmosphereColoredSmokeOrange.png differ diff --git a/demo/vanilla/public/images/palettes/atmosphereColoredSmokePurple.png b/demo/vanilla/public/images/palettes/atmosphereColoredSmokePurple.png new file mode 100644 index 00000000000..cecb7920355 Binary files /dev/null and b/demo/vanilla/public/images/palettes/atmosphereColoredSmokePurple.png differ diff --git a/demo/vanilla/public/images/palettes/atmosphereColoredSmokeRainbow.png b/demo/vanilla/public/images/palettes/atmosphereColoredSmokeRainbow.png new file mode 100644 index 00000000000..6409ba2bffc Binary files /dev/null and b/demo/vanilla/public/images/palettes/atmosphereColoredSmokeRainbow.png differ diff --git a/demo/vanilla/public/images/palettes/atmosphereColoredSmokeRed.png b/demo/vanilla/public/images/palettes/atmosphereColoredSmokeRed.png new file mode 100644 index 00000000000..f905369a404 Binary files /dev/null and b/demo/vanilla/public/images/palettes/atmosphereColoredSmokeRed.png differ diff --git a/demo/vanilla/public/images/palettes/coloredSmokeTeal.png b/demo/vanilla/public/images/palettes/atmosphereColoredSmokeTeal.png similarity index 100% rename from demo/vanilla/public/images/palettes/coloredSmokeTeal.png rename to demo/vanilla/public/images/palettes/atmosphereColoredSmokeTeal.png diff --git a/demo/vanilla/public/images/palettes/atmosphereDustHaze.png b/demo/vanilla/public/images/palettes/atmosphereDustHaze.png new file mode 100644 index 00000000000..ea1c1abb2e9 Binary files /dev/null and b/demo/vanilla/public/images/palettes/atmosphereDustHaze.png differ diff --git a/demo/vanilla/public/images/palettes/atmosphereFogMorning.png b/demo/vanilla/public/images/palettes/atmosphereFogMorning.png new file mode 100644 index 00000000000..dc3bdae5c46 Binary files /dev/null and b/demo/vanilla/public/images/palettes/atmosphereFogMorning.png differ diff --git a/demo/vanilla/public/images/palettes/atmosphereVolcanicAsh.png b/demo/vanilla/public/images/palettes/atmosphereVolcanicAsh.png new file mode 100644 index 00000000000..056f3d3421a Binary files /dev/null and b/demo/vanilla/public/images/palettes/atmosphereVolcanicAsh.png differ diff --git a/demo/vanilla/public/images/palettes/heatDuality.png b/demo/vanilla/public/images/palettes/atmosphericHeatDuality.png similarity index 100% rename from demo/vanilla/public/images/palettes/heatDuality.png rename to demo/vanilla/public/images/palettes/atmosphericHeatDuality.png diff --git a/demo/vanilla/public/images/palettes/heatHaze.png b/demo/vanilla/public/images/palettes/atmosphericHeatHaze.png similarity index 100% rename from demo/vanilla/public/images/palettes/heatHaze.png rename to demo/vanilla/public/images/palettes/atmosphericHeatHaze.png diff --git a/demo/vanilla/public/images/palettes/lightning.png b/demo/vanilla/public/images/palettes/atmosphericLightning.png similarity index 100% rename from demo/vanilla/public/images/palettes/lightning.png rename to demo/vanilla/public/images/palettes/atmosphericLightning.png diff --git a/demo/vanilla/public/images/palettes/shockwave.png b/demo/vanilla/public/images/palettes/atmosphericShockwave.png similarity index 100% rename from demo/vanilla/public/images/palettes/shockwave.png rename to demo/vanilla/public/images/palettes/atmosphericShockwave.png diff --git a/demo/vanilla/public/images/palettes/smokeCold.png b/demo/vanilla/public/images/palettes/atmosphericSmokeCold.png similarity index 100% rename from demo/vanilla/public/images/palettes/smokeCold.png rename to demo/vanilla/public/images/palettes/atmosphericSmokeCold.png diff --git a/demo/vanilla/public/images/palettes/smokeWarm.png b/demo/vanilla/public/images/palettes/atmosphericSmokeWarm.png similarity index 100% rename from demo/vanilla/public/images/palettes/smokeWarm.png rename to demo/vanilla/public/images/palettes/atmosphericSmokeWarm.png diff --git a/demo/vanilla/public/images/palettes/sunriseGold.png b/demo/vanilla/public/images/palettes/atmosphericSunriseGold.png similarity index 100% rename from demo/vanilla/public/images/palettes/sunriseGold.png rename to demo/vanilla/public/images/palettes/atmosphericSunriseGold.png diff --git a/demo/vanilla/public/images/palettes/sunsetBinary.png b/demo/vanilla/public/images/palettes/atmosphericSunsetBinary.png similarity index 100% rename from demo/vanilla/public/images/palettes/sunsetBinary.png rename to demo/vanilla/public/images/palettes/atmosphericSunsetBinary.png diff --git a/demo/vanilla/public/images/palettes/thermalMap.png b/demo/vanilla/public/images/palettes/atmosphericThermalMap.png similarity index 100% rename from demo/vanilla/public/images/palettes/thermalMap.png rename to demo/vanilla/public/images/palettes/atmosphericThermalMap.png diff --git a/demo/vanilla/public/images/palettes/thunderstorm.png b/demo/vanilla/public/images/palettes/atmosphericThunderstorm.png similarity index 100% rename from demo/vanilla/public/images/palettes/thunderstorm.png rename to demo/vanilla/public/images/palettes/atmosphericThunderstorm.png diff --git a/demo/vanilla/public/images/palettes/bokehCold.png b/demo/vanilla/public/images/palettes/bokehCold.png deleted file mode 100644 index a7cee486fa9..00000000000 Binary files a/demo/vanilla/public/images/palettes/bokehCold.png and /dev/null differ diff --git a/demo/vanilla/public/images/palettes/bokehGold.png b/demo/vanilla/public/images/palettes/bokehGold.png deleted file mode 100644 index a6b493f99f1..00000000000 Binary files a/demo/vanilla/public/images/palettes/bokehGold.png and /dev/null differ diff --git a/demo/vanilla/public/images/palettes/bokehPastel.png b/demo/vanilla/public/images/palettes/bokehPastel.png deleted file mode 100644 index a8e0aaa6bdc..00000000000 Binary files a/demo/vanilla/public/images/palettes/bokehPastel.png and /dev/null differ diff --git a/demo/vanilla/public/images/palettes/bulletHit.png b/demo/vanilla/public/images/palettes/bulletHit.png deleted file mode 100644 index 2647fb41583..00000000000 Binary files a/demo/vanilla/public/images/palettes/bulletHit.png and /dev/null differ diff --git a/demo/vanilla/public/images/palettes/coloredSmokeBlue.png b/demo/vanilla/public/images/palettes/coloredSmokeBlue.png deleted file mode 100644 index 2ef636c1b65..00000000000 Binary files a/demo/vanilla/public/images/palettes/coloredSmokeBlue.png and /dev/null differ diff --git a/demo/vanilla/public/images/palettes/coloredSmokeGreen.png b/demo/vanilla/public/images/palettes/coloredSmokeGreen.png deleted file mode 100644 index 4fb756ebcd7..00000000000 Binary files a/demo/vanilla/public/images/palettes/coloredSmokeGreen.png and /dev/null differ diff --git a/demo/vanilla/public/images/palettes/coloredSmokeOrange.png b/demo/vanilla/public/images/palettes/coloredSmokeOrange.png deleted file mode 100644 index e62d3b5eab4..00000000000 Binary files a/demo/vanilla/public/images/palettes/coloredSmokeOrange.png and /dev/null differ diff --git a/demo/vanilla/public/images/palettes/coloredSmokePurple.png b/demo/vanilla/public/images/palettes/coloredSmokePurple.png deleted file mode 100644 index b60b4043776..00000000000 Binary files a/demo/vanilla/public/images/palettes/coloredSmokePurple.png and /dev/null differ diff --git a/demo/vanilla/public/images/palettes/coloredSmokeRainbow.png b/demo/vanilla/public/images/palettes/coloredSmokeRainbow.png deleted file mode 100644 index 9f7cdad1817..00000000000 Binary files a/demo/vanilla/public/images/palettes/coloredSmokeRainbow.png and /dev/null differ diff --git a/demo/vanilla/public/images/palettes/confetti.png b/demo/vanilla/public/images/palettes/confettiDefault.png similarity index 100% rename from demo/vanilla/public/images/palettes/confetti.png rename to demo/vanilla/public/images/palettes/confettiDefault.png diff --git a/demo/vanilla/public/images/palettes/confettiGold.png b/demo/vanilla/public/images/palettes/confettiGold.png index d4a3265a7fc..80db004b1a5 100644 Binary files a/demo/vanilla/public/images/palettes/confettiGold.png and b/demo/vanilla/public/images/palettes/confettiGold.png differ diff --git a/demo/vanilla/public/images/palettes/confettiMonochromeBlue.png b/demo/vanilla/public/images/palettes/confettiMonochromeBlue.png index 7d1a4951681..49e30a7667c 100644 Binary files a/demo/vanilla/public/images/palettes/confettiMonochromeBlue.png and b/demo/vanilla/public/images/palettes/confettiMonochromeBlue.png differ diff --git a/demo/vanilla/public/images/palettes/confettiMonochromeGreen.png b/demo/vanilla/public/images/palettes/confettiMonochromeGreen.png index da67849f53f..6f12962d3fb 100644 Binary files a/demo/vanilla/public/images/palettes/confettiMonochromeGreen.png and b/demo/vanilla/public/images/palettes/confettiMonochromeGreen.png differ diff --git a/demo/vanilla/public/images/palettes/confettiMonochromePink.png b/demo/vanilla/public/images/palettes/confettiMonochromePink.png index 15ffc85add5..f472fc73dd6 100644 Binary files a/demo/vanilla/public/images/palettes/confettiMonochromePink.png and b/demo/vanilla/public/images/palettes/confettiMonochromePink.png differ diff --git a/demo/vanilla/public/images/palettes/confettiMonochromePurple.png b/demo/vanilla/public/images/palettes/confettiMonochromePurple.png new file mode 100644 index 00000000000..c511e79320b Binary files /dev/null and b/demo/vanilla/public/images/palettes/confettiMonochromePurple.png differ diff --git a/demo/vanilla/public/images/palettes/confettiMonochromeRed.png b/demo/vanilla/public/images/palettes/confettiMonochromeRed.png new file mode 100644 index 00000000000..444c56b4ec9 Binary files /dev/null and b/demo/vanilla/public/images/palettes/confettiMonochromeRed.png differ diff --git a/demo/vanilla/public/images/palettes/confettiNeon.png b/demo/vanilla/public/images/palettes/confettiNeon.png index 466c891457f..4287c5eb125 100644 Binary files a/demo/vanilla/public/images/palettes/confettiNeon.png and b/demo/vanilla/public/images/palettes/confettiNeon.png differ diff --git a/demo/vanilla/public/images/palettes/confettiPastel.png b/demo/vanilla/public/images/palettes/confettiPastel.png index 3871c31f847..41a568d8f91 100644 Binary files a/demo/vanilla/public/images/palettes/confettiPastel.png and b/demo/vanilla/public/images/palettes/confettiPastel.png differ diff --git a/demo/vanilla/public/images/palettes/confettiPatriotic.png b/demo/vanilla/public/images/palettes/confettiPatriotic.png index 765ac1da7dd..66e498b97c0 100644 Binary files a/demo/vanilla/public/images/palettes/confettiPatriotic.png and b/demo/vanilla/public/images/palettes/confettiPatriotic.png differ diff --git a/demo/vanilla/public/images/palettes/confettiRainbow.png b/demo/vanilla/public/images/palettes/confettiRainbow.png index 2828f57fbb7..3d0d2f6658d 100644 Binary files a/demo/vanilla/public/images/palettes/confettiRainbow.png and b/demo/vanilla/public/images/palettes/confettiRainbow.png differ diff --git a/demo/vanilla/public/images/palettes/confettiWinter.png b/demo/vanilla/public/images/palettes/confettiWinter.png index a75d46cd637..90f3e30d32d 100644 Binary files a/demo/vanilla/public/images/palettes/confettiWinter.png and b/demo/vanilla/public/images/palettes/confettiWinter.png differ diff --git a/demo/vanilla/public/images/palettes/dustHaze.png b/demo/vanilla/public/images/palettes/dustHaze.png deleted file mode 100644 index fe0c7e366a0..00000000000 Binary files a/demo/vanilla/public/images/palettes/dustHaze.png and /dev/null differ diff --git a/demo/vanilla/public/images/palettes/caustics.png b/demo/vanilla/public/images/palettes/earthCaustics.png similarity index 100% rename from demo/vanilla/public/images/palettes/caustics.png rename to demo/vanilla/public/images/palettes/earthCaustics.png diff --git a/demo/vanilla/public/images/palettes/desertSand.png b/demo/vanilla/public/images/palettes/earthDesertSand.png similarity index 100% rename from demo/vanilla/public/images/palettes/desertSand.png rename to demo/vanilla/public/images/palettes/earthDesertSand.png diff --git a/demo/vanilla/public/images/palettes/mudAndDirt.png b/demo/vanilla/public/images/palettes/earthMudAndDirt.png similarity index 100% rename from demo/vanilla/public/images/palettes/mudAndDirt.png rename to demo/vanilla/public/images/palettes/earthMudAndDirt.png diff --git a/demo/vanilla/public/images/palettes/oilSlick.png b/demo/vanilla/public/images/palettes/earthOilSlick.png similarity index 100% rename from demo/vanilla/public/images/palettes/oilSlick.png rename to demo/vanilla/public/images/palettes/earthOilSlick.png diff --git a/demo/vanilla/public/images/palettes/rockAndGravel.png b/demo/vanilla/public/images/palettes/earthRockAndGravel.png similarity index 100% rename from demo/vanilla/public/images/palettes/rockAndGravel.png rename to demo/vanilla/public/images/palettes/earthRockAndGravel.png diff --git a/demo/vanilla/public/images/palettes/rustAndCorrosion.png b/demo/vanilla/public/images/palettes/earthRustAndCorrosion.png similarity index 100% rename from demo/vanilla/public/images/palettes/rustAndCorrosion.png rename to demo/vanilla/public/images/palettes/earthRustAndCorrosion.png diff --git a/demo/vanilla/public/images/palettes/skinAndOrganic.png b/demo/vanilla/public/images/palettes/earthSkinAndOrganic.png similarity index 100% rename from demo/vanilla/public/images/palettes/skinAndOrganic.png rename to demo/vanilla/public/images/palettes/earthSkinAndOrganic.png diff --git a/demo/vanilla/public/images/palettes/bioluminescence.png b/demo/vanilla/public/images/palettes/fantasyBioluminescence.png similarity index 100% rename from demo/vanilla/public/images/palettes/bioluminescence.png rename to demo/vanilla/public/images/palettes/fantasyBioluminescence.png diff --git a/demo/vanilla/public/images/palettes/bloodAndGore.png b/demo/vanilla/public/images/palettes/fantasyBloodAndGore.png similarity index 100% rename from demo/vanilla/public/images/palettes/bloodAndGore.png rename to demo/vanilla/public/images/palettes/fantasyBloodAndGore.png diff --git a/demo/vanilla/public/images/palettes/fairyDust.png b/demo/vanilla/public/images/palettes/fantasyFairyDust.png similarity index 100% rename from demo/vanilla/public/images/palettes/fairyDust.png rename to demo/vanilla/public/images/palettes/fantasyFairyDust.png diff --git a/demo/vanilla/public/images/palettes/holyLight.png b/demo/vanilla/public/images/palettes/fantasyHolyLight.png similarity index 100% rename from demo/vanilla/public/images/palettes/holyLight.png rename to demo/vanilla/public/images/palettes/fantasyHolyLight.png diff --git a/demo/vanilla/public/images/palettes/iceMagic.png b/demo/vanilla/public/images/palettes/fantasyIceMagic.png similarity index 100% rename from demo/vanilla/public/images/palettes/iceMagic.png rename to demo/vanilla/public/images/palettes/fantasyIceMagic.png diff --git a/demo/vanilla/public/images/palettes/iceTriad.png b/demo/vanilla/public/images/palettes/fantasyIceTriad.png similarity index 100% rename from demo/vanilla/public/images/palettes/iceTriad.png rename to demo/vanilla/public/images/palettes/fantasyIceTriad.png diff --git a/demo/vanilla/public/images/palettes/fantasyIris.png b/demo/vanilla/public/images/palettes/fantasyIris.png new file mode 100644 index 00000000000..d8fc5f5aec5 Binary files /dev/null and b/demo/vanilla/public/images/palettes/fantasyIris.png differ diff --git a/demo/vanilla/public/images/palettes/jellyfishGlow.png b/demo/vanilla/public/images/palettes/fantasyJellyfishGlow.png similarity index 100% rename from demo/vanilla/public/images/palettes/jellyfishGlow.png rename to demo/vanilla/public/images/palettes/fantasyJellyfishGlow.png diff --git a/demo/vanilla/public/images/palettes/fantasyMermaid.png b/demo/vanilla/public/images/palettes/fantasyMermaid.png new file mode 100644 index 00000000000..58558f32e39 Binary files /dev/null and b/demo/vanilla/public/images/palettes/fantasyMermaid.png differ diff --git a/demo/vanilla/public/images/palettes/poisonAndVenom.png b/demo/vanilla/public/images/palettes/fantasyPoisonAndVenom.png similarity index 100% rename from demo/vanilla/public/images/palettes/poisonAndVenom.png rename to demo/vanilla/public/images/palettes/fantasyPoisonAndVenom.png diff --git a/demo/vanilla/public/images/palettes/fantasyUnicorn.png b/demo/vanilla/public/images/palettes/fantasyUnicorn.png new file mode 100644 index 00000000000..4b179d5b412 Binary files /dev/null and b/demo/vanilla/public/images/palettes/fantasyUnicorn.png differ diff --git a/demo/vanilla/public/images/palettes/candlelight.png b/demo/vanilla/public/images/palettes/fireCandlelight.png similarity index 100% rename from demo/vanilla/public/images/palettes/candlelight.png rename to demo/vanilla/public/images/palettes/fireCandlelight.png diff --git a/demo/vanilla/public/images/palettes/fire.png b/demo/vanilla/public/images/palettes/fireDefault.png similarity index 100% rename from demo/vanilla/public/images/palettes/fire.png rename to demo/vanilla/public/images/palettes/fireDefault.png diff --git a/demo/vanilla/public/images/palettes/embersAndAsh.png b/demo/vanilla/public/images/palettes/fireEmbersAndAsh.png similarity index 100% rename from demo/vanilla/public/images/palettes/embersAndAsh.png rename to demo/vanilla/public/images/palettes/fireEmbersAndAsh.png diff --git a/demo/vanilla/public/images/palettes/fullFireGradient.png b/demo/vanilla/public/images/palettes/fireFullFireGradient.png similarity index 100% rename from demo/vanilla/public/images/palettes/fullFireGradient.png rename to demo/vanilla/public/images/palettes/fireFullFireGradient.png diff --git a/demo/vanilla/public/images/palettes/lavaLamp.png b/demo/vanilla/public/images/palettes/fireLavaLamp.png similarity index 100% rename from demo/vanilla/public/images/palettes/lavaLamp.png rename to demo/vanilla/public/images/palettes/fireLavaLamp.png diff --git a/demo/vanilla/public/images/palettes/metalSparks.png b/demo/vanilla/public/images/palettes/fireMetalSparks.png similarity index 100% rename from demo/vanilla/public/images/palettes/metalSparks.png rename to demo/vanilla/public/images/palettes/fireMetalSparks.png diff --git a/demo/vanilla/public/images/palettes/moltenMetal.png b/demo/vanilla/public/images/palettes/fireMoltenMetal.png similarity index 100% rename from demo/vanilla/public/images/palettes/moltenMetal.png rename to demo/vanilla/public/images/palettes/fireMoltenMetal.png diff --git a/demo/vanilla/public/images/palettes/fireworksBlue.png b/demo/vanilla/public/images/palettes/fireworksBlue.png index 5b9030f5e8f..81d06e653db 100644 Binary files a/demo/vanilla/public/images/palettes/fireworksBlue.png and b/demo/vanilla/public/images/palettes/fireworksBlue.png differ diff --git a/demo/vanilla/public/images/palettes/fireworksBlueStroke.png b/demo/vanilla/public/images/palettes/fireworksBlueStroke.png index 346ffe09dd7..140e09cfcf0 100644 Binary files a/demo/vanilla/public/images/palettes/fireworksBlueStroke.png and b/demo/vanilla/public/images/palettes/fireworksBlueStroke.png differ diff --git a/demo/vanilla/public/images/palettes/fireworksCopper.png b/demo/vanilla/public/images/palettes/fireworksCopper.png index d4eb3dc639e..b78cfb7b960 100644 Binary files a/demo/vanilla/public/images/palettes/fireworksCopper.png and b/demo/vanilla/public/images/palettes/fireworksCopper.png differ diff --git a/demo/vanilla/public/images/palettes/fireworksCopperStroke.png b/demo/vanilla/public/images/palettes/fireworksCopperStroke.png index b235b118244..8ff9b4b59a8 100644 Binary files a/demo/vanilla/public/images/palettes/fireworksCopperStroke.png and b/demo/vanilla/public/images/palettes/fireworksCopperStroke.png differ diff --git a/demo/vanilla/public/images/palettes/fireworksGreen.png b/demo/vanilla/public/images/palettes/fireworksGreen.png index b05a8dca2d0..84968df9bb0 100644 Binary files a/demo/vanilla/public/images/palettes/fireworksGreen.png and b/demo/vanilla/public/images/palettes/fireworksGreen.png differ diff --git a/demo/vanilla/public/images/palettes/fireworksGreenStroke.png b/demo/vanilla/public/images/palettes/fireworksGreenStroke.png index a55da8ceae4..21fd918b354 100644 Binary files a/demo/vanilla/public/images/palettes/fireworksGreenStroke.png and b/demo/vanilla/public/images/palettes/fireworksGreenStroke.png differ diff --git a/demo/vanilla/public/images/palettes/fireworksIce.png b/demo/vanilla/public/images/palettes/fireworksIce.png index 358b4140201..f577a1febac 100644 Binary files a/demo/vanilla/public/images/palettes/fireworksIce.png and b/demo/vanilla/public/images/palettes/fireworksIce.png differ diff --git a/demo/vanilla/public/images/palettes/fireworksIceStroke.png b/demo/vanilla/public/images/palettes/fireworksIceStroke.png index 33f10f74ccc..4fc79dc1737 100644 Binary files a/demo/vanilla/public/images/palettes/fireworksIceStroke.png and b/demo/vanilla/public/images/palettes/fireworksIceStroke.png differ diff --git a/demo/vanilla/public/images/palettes/fireworksNeon.png b/demo/vanilla/public/images/palettes/fireworksNeon.png index 662c53090cc..4f197deda05 100644 Binary files a/demo/vanilla/public/images/palettes/fireworksNeon.png and b/demo/vanilla/public/images/palettes/fireworksNeon.png differ diff --git a/demo/vanilla/public/images/palettes/fireworksNeonStroke.png b/demo/vanilla/public/images/palettes/fireworksNeonStroke.png index 3493a80c4df..feb97ccb268 100644 Binary files a/demo/vanilla/public/images/palettes/fireworksNeonStroke.png and b/demo/vanilla/public/images/palettes/fireworksNeonStroke.png differ diff --git a/demo/vanilla/public/images/palettes/fireworksPastel.png b/demo/vanilla/public/images/palettes/fireworksPastel.png index b010fd694b7..df98077c592 100644 Binary files a/demo/vanilla/public/images/palettes/fireworksPastel.png and b/demo/vanilla/public/images/palettes/fireworksPastel.png differ diff --git a/demo/vanilla/public/images/palettes/fireworksPastelStroke.png b/demo/vanilla/public/images/palettes/fireworksPastelStroke.png index 2dfded55e4f..f94ca74a49d 100644 Binary files a/demo/vanilla/public/images/palettes/fireworksPastelStroke.png and b/demo/vanilla/public/images/palettes/fireworksPastelStroke.png differ diff --git a/demo/vanilla/public/images/palettes/fireworksPurple.png b/demo/vanilla/public/images/palettes/fireworksPurple.png index 9ce991d2b4b..9c8f39bd221 100644 Binary files a/demo/vanilla/public/images/palettes/fireworksPurple.png and b/demo/vanilla/public/images/palettes/fireworksPurple.png differ diff --git a/demo/vanilla/public/images/palettes/fireworksPurpleStroke.png b/demo/vanilla/public/images/palettes/fireworksPurpleStroke.png index b342f524ed1..ea54dc55095 100644 Binary files a/demo/vanilla/public/images/palettes/fireworksPurpleStroke.png and b/demo/vanilla/public/images/palettes/fireworksPurpleStroke.png differ diff --git a/demo/vanilla/public/images/palettes/fireworksRainbow.png b/demo/vanilla/public/images/palettes/fireworksRainbow.png new file mode 100644 index 00000000000..0e78e759c2c Binary files /dev/null and b/demo/vanilla/public/images/palettes/fireworksRainbow.png differ diff --git a/demo/vanilla/public/images/palettes/fireworksRainbowStroke.png b/demo/vanilla/public/images/palettes/fireworksRainbowStroke.png index 8f2381d4ef6..9e628ec070f 100644 Binary files a/demo/vanilla/public/images/palettes/fireworksRainbowStroke.png and b/demo/vanilla/public/images/palettes/fireworksRainbowStroke.png differ diff --git a/demo/vanilla/public/images/palettes/fireworksRed.png b/demo/vanilla/public/images/palettes/fireworksRed.png index f3c53d2191b..2062aa8a6c5 100644 Binary files a/demo/vanilla/public/images/palettes/fireworksRed.png and b/demo/vanilla/public/images/palettes/fireworksRed.png differ diff --git a/demo/vanilla/public/images/palettes/fireworksRedStroke.png b/demo/vanilla/public/images/palettes/fireworksRedStroke.png index 0791d2bc726..b35680e13d3 100644 Binary files a/demo/vanilla/public/images/palettes/fireworksRedStroke.png and b/demo/vanilla/public/images/palettes/fireworksRedStroke.png differ diff --git a/demo/vanilla/public/images/palettes/fireworksSilver.png b/demo/vanilla/public/images/palettes/fireworksSilver.png index e4be624654f..54575c7d7aa 100644 Binary files a/demo/vanilla/public/images/palettes/fireworksSilver.png and b/demo/vanilla/public/images/palettes/fireworksSilver.png differ diff --git a/demo/vanilla/public/images/palettes/fireworksSilverStroke.png b/demo/vanilla/public/images/palettes/fireworksSilverStroke.png index 92e759c9972..fa945b2883e 100644 Binary files a/demo/vanilla/public/images/palettes/fireworksSilverStroke.png and b/demo/vanilla/public/images/palettes/fireworksSilverStroke.png differ diff --git a/demo/vanilla/public/images/palettes/fogMorning.png b/demo/vanilla/public/images/palettes/fogMorning.png deleted file mode 100644 index 84129319ae3..00000000000 Binary files a/demo/vanilla/public/images/palettes/fogMorning.png and /dev/null differ diff --git a/demo/vanilla/public/images/palettes/foodApple-green.png b/demo/vanilla/public/images/palettes/foodApple-green.png new file mode 100644 index 00000000000..7fcc9c9eeb1 Binary files /dev/null and b/demo/vanilla/public/images/palettes/foodApple-green.png differ diff --git a/demo/vanilla/public/images/palettes/foodApple-red.png b/demo/vanilla/public/images/palettes/foodApple-red.png new file mode 100644 index 00000000000..b1059e75bec Binary files /dev/null and b/demo/vanilla/public/images/palettes/foodApple-red.png differ diff --git a/demo/vanilla/public/images/palettes/foodApple.png b/demo/vanilla/public/images/palettes/foodApple.png new file mode 100644 index 00000000000..2d98863ee5c Binary files /dev/null and b/demo/vanilla/public/images/palettes/foodApple.png differ diff --git a/demo/vanilla/public/images/palettes/foodAvocado.png b/demo/vanilla/public/images/palettes/foodAvocado.png new file mode 100644 index 00000000000..de08955cfef Binary files /dev/null and b/demo/vanilla/public/images/palettes/foodAvocado.png differ diff --git a/demo/vanilla/public/images/palettes/foodBell-peppers.png b/demo/vanilla/public/images/palettes/foodBell-peppers.png new file mode 100644 index 00000000000..f2f06e6bced Binary files /dev/null and b/demo/vanilla/public/images/palettes/foodBell-peppers.png differ diff --git a/demo/vanilla/public/images/palettes/foodBerries.png b/demo/vanilla/public/images/palettes/foodBerries.png new file mode 100644 index 00000000000..28d514ecd3a Binary files /dev/null and b/demo/vanilla/public/images/palettes/foodBerries.png differ diff --git a/demo/vanilla/public/images/palettes/foodCherry.png b/demo/vanilla/public/images/palettes/foodCherry.png new file mode 100644 index 00000000000..d7474dbcb38 Binary files /dev/null and b/demo/vanilla/public/images/palettes/foodCherry.png differ diff --git a/demo/vanilla/public/images/palettes/foodCitrus-twist.png b/demo/vanilla/public/images/palettes/foodCitrus-twist.png new file mode 100644 index 00000000000..1e8053bd57e Binary files /dev/null and b/demo/vanilla/public/images/palettes/foodCitrus-twist.png differ diff --git a/demo/vanilla/public/images/palettes/foodGingerbread-house.png b/demo/vanilla/public/images/palettes/foodGingerbread-house.png new file mode 100644 index 00000000000..64181137a6c Binary files /dev/null and b/demo/vanilla/public/images/palettes/foodGingerbread-house.png differ diff --git a/demo/vanilla/public/images/palettes/foodGrapes.png b/demo/vanilla/public/images/palettes/foodGrapes.png new file mode 100644 index 00000000000..e41b9bc242e Binary files /dev/null and b/demo/vanilla/public/images/palettes/foodGrapes.png differ diff --git a/demo/vanilla/public/images/palettes/foodMacaron.png b/demo/vanilla/public/images/palettes/foodMacaron.png new file mode 100644 index 00000000000..423034c0d86 Binary files /dev/null and b/demo/vanilla/public/images/palettes/foodMacaron.png differ diff --git a/demo/vanilla/public/images/palettes/foodMelon.png b/demo/vanilla/public/images/palettes/foodMelon.png new file mode 100644 index 00000000000..a551a30e5cc Binary files /dev/null and b/demo/vanilla/public/images/palettes/foodMelon.png differ diff --git a/demo/vanilla/public/images/palettes/foodPineapple.png b/demo/vanilla/public/images/palettes/foodPineapple.png new file mode 100644 index 00000000000..3e0558de355 Binary files /dev/null and b/demo/vanilla/public/images/palettes/foodPineapple.png differ diff --git a/demo/vanilla/public/images/palettes/foodPizza.png b/demo/vanilla/public/images/palettes/foodPizza.png new file mode 100644 index 00000000000..4f28235964c Binary files /dev/null and b/demo/vanilla/public/images/palettes/foodPizza.png differ diff --git a/demo/vanilla/public/images/palettes/foodSakura.png b/demo/vanilla/public/images/palettes/foodSakura.png new file mode 100644 index 00000000000..7f188518dea Binary files /dev/null and b/demo/vanilla/public/images/palettes/foodSakura.png differ diff --git a/demo/vanilla/public/images/palettes/foodSalad.png b/demo/vanilla/public/images/palettes/foodSalad.png new file mode 100644 index 00000000000..aa7af9b66f6 Binary files /dev/null and b/demo/vanilla/public/images/palettes/foodSalad.png differ diff --git a/demo/vanilla/public/images/palettes/foodSpice-rack.png b/demo/vanilla/public/images/palettes/foodSpice-rack.png new file mode 100644 index 00000000000..4491a2493e4 Binary files /dev/null and b/demo/vanilla/public/images/palettes/foodSpice-rack.png differ diff --git a/demo/vanilla/public/images/palettes/foodSteak.png b/demo/vanilla/public/images/palettes/foodSteak.png new file mode 100644 index 00000000000..99a8aa91d2c Binary files /dev/null and b/demo/vanilla/public/images/palettes/foodSteak.png differ diff --git a/demo/vanilla/public/images/palettes/foodSushi.png b/demo/vanilla/public/images/palettes/foodSushi.png new file mode 100644 index 00000000000..6898899b135 Binary files /dev/null and b/demo/vanilla/public/images/palettes/foodSushi.png differ diff --git a/demo/vanilla/public/images/palettes/foodTropical-fruits.png b/demo/vanilla/public/images/palettes/foodTropical-fruits.png new file mode 100644 index 00000000000..d219b3a954a Binary files /dev/null and b/demo/vanilla/public/images/palettes/foodTropical-fruits.png differ diff --git a/demo/vanilla/public/images/palettes/foodWatermelon.png b/demo/vanilla/public/images/palettes/foodWatermelon.png new file mode 100644 index 00000000000..459870771b2 Binary files /dev/null and b/demo/vanilla/public/images/palettes/foodWatermelon.png differ diff --git a/demo/vanilla/public/images/palettes/glassBurst.png b/demo/vanilla/public/images/palettes/glassBurst.png deleted file mode 100644 index dd26978bd75..00000000000 Binary files a/demo/vanilla/public/images/palettes/glassBurst.png and /dev/null differ diff --git a/demo/vanilla/public/images/palettes/holographicShimmer.png b/demo/vanilla/public/images/palettes/holographicShimmer.png deleted file mode 100644 index 7c29d94f2c2..00000000000 Binary files a/demo/vanilla/public/images/palettes/holographicShimmer.png and /dev/null differ diff --git a/demo/vanilla/public/images/palettes/impactBulletHit.png b/demo/vanilla/public/images/palettes/impactBulletHit.png new file mode 100644 index 00000000000..8a5b43afc4f Binary files /dev/null and b/demo/vanilla/public/images/palettes/impactBulletHit.png differ diff --git a/demo/vanilla/public/images/palettes/explosionDebris.png b/demo/vanilla/public/images/palettes/impactExplosionDebris.png similarity index 100% rename from demo/vanilla/public/images/palettes/explosionDebris.png rename to demo/vanilla/public/images/palettes/impactExplosionDebris.png diff --git a/demo/vanilla/public/images/palettes/impactGlassBurst.png b/demo/vanilla/public/images/palettes/impactGlassBurst.png new file mode 100644 index 00000000000..045f2e1df53 Binary files /dev/null and b/demo/vanilla/public/images/palettes/impactGlassBurst.png differ diff --git a/demo/vanilla/public/images/palettes/impactMeteorImpact.png b/demo/vanilla/public/images/palettes/impactMeteorImpact.png new file mode 100644 index 00000000000..04d18e105ed Binary files /dev/null and b/demo/vanilla/public/images/palettes/impactMeteorImpact.png differ diff --git a/demo/vanilla/public/images/palettes/impactNuclearGlow.png b/demo/vanilla/public/images/palettes/impactNuclearGlow.png new file mode 100644 index 00000000000..eb2519c14a8 Binary files /dev/null and b/demo/vanilla/public/images/palettes/impactNuclearGlow.png differ diff --git a/demo/vanilla/public/images/palettes/impactShockwaveBlast.png b/demo/vanilla/public/images/palettes/impactShockwaveBlast.png new file mode 100644 index 00000000000..494338e754d Binary files /dev/null and b/demo/vanilla/public/images/palettes/impactShockwaveBlast.png differ diff --git a/demo/vanilla/public/images/palettes/impactSplatterDark.png b/demo/vanilla/public/images/palettes/impactSplatterDark.png new file mode 100644 index 00000000000..951cb624b21 Binary files /dev/null and b/demo/vanilla/public/images/palettes/impactSplatterDark.png differ diff --git a/demo/vanilla/public/images/palettes/laserScatter.png b/demo/vanilla/public/images/palettes/laserScatter.png deleted file mode 100644 index 7ba6f36b1ca..00000000000 Binary files a/demo/vanilla/public/images/palettes/laserScatter.png and /dev/null differ diff --git a/demo/vanilla/public/images/palettes/meteorImpact.png b/demo/vanilla/public/images/palettes/meteorImpact.png deleted file mode 100644 index 40ab1f2702b..00000000000 Binary files a/demo/vanilla/public/images/palettes/meteorImpact.png and /dev/null differ diff --git a/demo/vanilla/public/images/palettes/monochromeBlues.png b/demo/vanilla/public/images/palettes/monochromaticBlues.png similarity index 100% rename from demo/vanilla/public/images/palettes/monochromeBlues.png rename to demo/vanilla/public/images/palettes/monochromaticBlues.png diff --git a/demo/vanilla/public/images/palettes/monochromaticBrown.png b/demo/vanilla/public/images/palettes/monochromaticBrown.png new file mode 100644 index 00000000000..9d7b275dd8d Binary files /dev/null and b/demo/vanilla/public/images/palettes/monochromaticBrown.png differ diff --git a/demo/vanilla/public/images/palettes/monochromaticCyan.png b/demo/vanilla/public/images/palettes/monochromaticCyan.png new file mode 100644 index 00000000000..414165ade09 Binary files /dev/null and b/demo/vanilla/public/images/palettes/monochromaticCyan.png differ diff --git a/demo/vanilla/public/images/palettes/monochromaticGold.png b/demo/vanilla/public/images/palettes/monochromaticGold.png new file mode 100644 index 00000000000..886db81ec5c Binary files /dev/null and b/demo/vanilla/public/images/palettes/monochromaticGold.png differ diff --git a/demo/vanilla/public/images/palettes/monochromeGreens.png b/demo/vanilla/public/images/palettes/monochromaticGreens.png similarity index 100% rename from demo/vanilla/public/images/palettes/monochromeGreens.png rename to demo/vanilla/public/images/palettes/monochromaticGreens.png diff --git a/demo/vanilla/public/images/palettes/monochromeNoir.png b/demo/vanilla/public/images/palettes/monochromaticNoir.png similarity index 100% rename from demo/vanilla/public/images/palettes/monochromeNoir.png rename to demo/vanilla/public/images/palettes/monochromaticNoir.png diff --git a/demo/vanilla/public/images/palettes/monochromaticOranges.png b/demo/vanilla/public/images/palettes/monochromaticOranges.png new file mode 100644 index 00000000000..69df8dd2f0d Binary files /dev/null and b/demo/vanilla/public/images/palettes/monochromaticOranges.png differ diff --git a/demo/vanilla/public/images/palettes/monochromePinks.png b/demo/vanilla/public/images/palettes/monochromaticPinks.png similarity index 100% rename from demo/vanilla/public/images/palettes/monochromePinks.png rename to demo/vanilla/public/images/palettes/monochromaticPinks.png diff --git a/demo/vanilla/public/images/palettes/monochromePurples.png b/demo/vanilla/public/images/palettes/monochromaticPurples.png similarity index 100% rename from demo/vanilla/public/images/palettes/monochromePurples.png rename to demo/vanilla/public/images/palettes/monochromaticPurples.png diff --git a/demo/vanilla/public/images/palettes/monochromaticReds.png b/demo/vanilla/public/images/palettes/monochromaticReds.png new file mode 100644 index 00000000000..092b554b330 Binary files /dev/null and b/demo/vanilla/public/images/palettes/monochromaticReds.png differ diff --git a/demo/vanilla/public/images/palettes/monochromaticSilver.png b/demo/vanilla/public/images/palettes/monochromaticSilver.png new file mode 100644 index 00000000000..78ebc6f2c4a Binary files /dev/null and b/demo/vanilla/public/images/palettes/monochromaticSilver.png differ diff --git a/demo/vanilla/public/images/palettes/monochromaticTeal.png b/demo/vanilla/public/images/palettes/monochromaticTeal.png new file mode 100644 index 00000000000..7483867813a Binary files /dev/null and b/demo/vanilla/public/images/palettes/monochromaticTeal.png differ diff --git a/demo/vanilla/public/images/palettes/monochromaticWhite.png b/demo/vanilla/public/images/palettes/monochromaticWhite.png new file mode 100644 index 00000000000..94fa323d7da Binary files /dev/null and b/demo/vanilla/public/images/palettes/monochromaticWhite.png differ diff --git a/demo/vanilla/public/images/palettes/monochromaticYellows.png b/demo/vanilla/public/images/palettes/monochromaticYellows.png new file mode 100644 index 00000000000..0a76926bad7 Binary files /dev/null and b/demo/vanilla/public/images/palettes/monochromaticYellows.png differ diff --git a/demo/vanilla/public/images/palettes/monochromeBrown.png b/demo/vanilla/public/images/palettes/monochromeBrown.png deleted file mode 100644 index e61fc717fde..00000000000 Binary files a/demo/vanilla/public/images/palettes/monochromeBrown.png and /dev/null differ diff --git a/demo/vanilla/public/images/palettes/monochromeCyan.png b/demo/vanilla/public/images/palettes/monochromeCyan.png deleted file mode 100644 index 8491bfe01f0..00000000000 Binary files a/demo/vanilla/public/images/palettes/monochromeCyan.png and /dev/null differ diff --git a/demo/vanilla/public/images/palettes/monochromeGold.png b/demo/vanilla/public/images/palettes/monochromeGold.png deleted file mode 100644 index d8c109cd361..00000000000 Binary files a/demo/vanilla/public/images/palettes/monochromeGold.png and /dev/null differ diff --git a/demo/vanilla/public/images/palettes/monochromeOranges.png b/demo/vanilla/public/images/palettes/monochromeOranges.png deleted file mode 100644 index a5fbdf9fc55..00000000000 Binary files a/demo/vanilla/public/images/palettes/monochromeOranges.png and /dev/null differ diff --git a/demo/vanilla/public/images/palettes/monochromeReds.png b/demo/vanilla/public/images/palettes/monochromeReds.png deleted file mode 100644 index 37048e20807..00000000000 Binary files a/demo/vanilla/public/images/palettes/monochromeReds.png and /dev/null differ diff --git a/demo/vanilla/public/images/palettes/monochromeTeal.png b/demo/vanilla/public/images/palettes/monochromeTeal.png deleted file mode 100644 index 82a3d13479a..00000000000 Binary files a/demo/vanilla/public/images/palettes/monochromeTeal.png and /dev/null differ diff --git a/demo/vanilla/public/images/palettes/monochromeWhite.png b/demo/vanilla/public/images/palettes/monochromeWhite.png deleted file mode 100644 index 8e7c3ab8c98..00000000000 Binary files a/demo/vanilla/public/images/palettes/monochromeWhite.png and /dev/null differ diff --git a/demo/vanilla/public/images/palettes/monochromeYellows.png b/demo/vanilla/public/images/palettes/monochromeYellows.png deleted file mode 100644 index 65b268a7cf3..00000000000 Binary files a/demo/vanilla/public/images/palettes/monochromeYellows.png and /dev/null differ diff --git a/demo/vanilla/public/images/palettes/autumnLeaves.png b/demo/vanilla/public/images/palettes/natureAutumnLeaves.png similarity index 100% rename from demo/vanilla/public/images/palettes/autumnLeaves.png rename to demo/vanilla/public/images/palettes/natureAutumnLeaves.png diff --git a/demo/vanilla/public/images/palettes/cherryBlossom.png b/demo/vanilla/public/images/palettes/natureCherryBlossom.png similarity index 100% rename from demo/vanilla/public/images/palettes/cherryBlossom.png rename to demo/vanilla/public/images/palettes/natureCherryBlossom.png diff --git a/demo/vanilla/public/images/palettes/dandelionSeeds.png b/demo/vanilla/public/images/palettes/natureDandelionSeeds.png similarity index 100% rename from demo/vanilla/public/images/palettes/dandelionSeeds.png rename to demo/vanilla/public/images/palettes/natureDandelionSeeds.png diff --git a/demo/vanilla/public/images/palettes/earthyNature.png b/demo/vanilla/public/images/palettes/natureEarthyNature.png similarity index 100% rename from demo/vanilla/public/images/palettes/earthyNature.png rename to demo/vanilla/public/images/palettes/natureEarthyNature.png diff --git a/demo/vanilla/public/images/palettes/fireflies.png b/demo/vanilla/public/images/palettes/natureFireflies.png similarity index 100% rename from demo/vanilla/public/images/palettes/fireflies.png rename to demo/vanilla/public/images/palettes/natureFireflies.png diff --git a/demo/vanilla/public/images/palettes/forestCanopy.png b/demo/vanilla/public/images/palettes/natureForestCanopy.png similarity index 100% rename from demo/vanilla/public/images/palettes/forestCanopy.png rename to demo/vanilla/public/images/palettes/natureForestCanopy.png diff --git a/demo/vanilla/public/images/palettes/pollenAndSpores.png b/demo/vanilla/public/images/palettes/naturePollenAndSpores.png similarity index 100% rename from demo/vanilla/public/images/palettes/pollenAndSpores.png rename to demo/vanilla/public/images/palettes/naturePollenAndSpores.png diff --git a/demo/vanilla/public/images/palettes/snowfall.png b/demo/vanilla/public/images/palettes/natureSnowfall.png similarity index 100% rename from demo/vanilla/public/images/palettes/snowfall.png rename to demo/vanilla/public/images/palettes/natureSnowfall.png diff --git a/demo/vanilla/public/images/palettes/springBloom.png b/demo/vanilla/public/images/palettes/natureSpringBloom.png similarity index 100% rename from demo/vanilla/public/images/palettes/springBloom.png rename to demo/vanilla/public/images/palettes/natureSpringBloom.png diff --git a/demo/vanilla/public/images/palettes/nuclearGlow.png b/demo/vanilla/public/images/palettes/nuclearGlow.png deleted file mode 100644 index 96f3dc841d5..00000000000 Binary files a/demo/vanilla/public/images/palettes/nuclearGlow.png and /dev/null differ diff --git a/demo/vanilla/public/images/palettes/opticsBokehCold.png b/demo/vanilla/public/images/palettes/opticsBokehCold.png new file mode 100644 index 00000000000..67b3b2fc1e9 Binary files /dev/null and b/demo/vanilla/public/images/palettes/opticsBokehCold.png differ diff --git a/demo/vanilla/public/images/palettes/opticsBokehGold.png b/demo/vanilla/public/images/palettes/opticsBokehGold.png new file mode 100644 index 00000000000..024a75f1c53 Binary files /dev/null and b/demo/vanilla/public/images/palettes/opticsBokehGold.png differ diff --git a/demo/vanilla/public/images/palettes/opticsBokehPastel.png b/demo/vanilla/public/images/palettes/opticsBokehPastel.png new file mode 100644 index 00000000000..51908c803f8 Binary files /dev/null and b/demo/vanilla/public/images/palettes/opticsBokehPastel.png differ diff --git a/demo/vanilla/public/images/palettes/opticsHolographicShimmer.png b/demo/vanilla/public/images/palettes/opticsHolographicShimmer.png new file mode 100644 index 00000000000..75721e72f39 Binary files /dev/null and b/demo/vanilla/public/images/palettes/opticsHolographicShimmer.png differ diff --git a/demo/vanilla/public/images/palettes/opticsLaserScatter.png b/demo/vanilla/public/images/palettes/opticsLaserScatter.png new file mode 100644 index 00000000000..0bc9e57b59e Binary files /dev/null and b/demo/vanilla/public/images/palettes/opticsLaserScatter.png differ diff --git a/demo/vanilla/public/images/palettes/lensFlareDust.png b/demo/vanilla/public/images/palettes/opticsLensFlareDust.png similarity index 100% rename from demo/vanilla/public/images/palettes/lensFlareDust.png rename to demo/vanilla/public/images/palettes/opticsLensFlareDust.png diff --git a/demo/vanilla/public/images/palettes/opticsPrismSpectrum.png b/demo/vanilla/public/images/palettes/opticsPrismSpectrum.png new file mode 100644 index 00000000000..9c6a3c54b63 Binary files /dev/null and b/demo/vanilla/public/images/palettes/opticsPrismSpectrum.png differ diff --git a/demo/vanilla/public/images/palettes/prismSpectrum.png b/demo/vanilla/public/images/palettes/prismSpectrum.png deleted file mode 100644 index 19c2f4c8448..00000000000 Binary files a/demo/vanilla/public/images/palettes/prismSpectrum.png and /dev/null differ diff --git a/demo/vanilla/public/images/palettes/shockwaveBlast.png b/demo/vanilla/public/images/palettes/shockwaveBlast.png deleted file mode 100644 index 240fe245072..00000000000 Binary files a/demo/vanilla/public/images/palettes/shockwaveBlast.png and /dev/null differ diff --git a/demo/vanilla/public/images/palettes/auroraBorealis.png b/demo/vanilla/public/images/palettes/spaceAuroraBorealis.png similarity index 100% rename from demo/vanilla/public/images/palettes/auroraBorealis.png rename to demo/vanilla/public/images/palettes/spaceAuroraBorealis.png diff --git a/demo/vanilla/public/images/palettes/cosmicRadiation.png b/demo/vanilla/public/images/palettes/spaceCosmicRadiation.png similarity index 100% rename from demo/vanilla/public/images/palettes/cosmicRadiation.png rename to demo/vanilla/public/images/palettes/spaceCosmicRadiation.png diff --git a/demo/vanilla/public/images/palettes/darkMatter.png b/demo/vanilla/public/images/palettes/spaceDarkMatter.png similarity index 100% rename from demo/vanilla/public/images/palettes/darkMatter.png rename to demo/vanilla/public/images/palettes/spaceDarkMatter.png diff --git a/demo/vanilla/public/images/palettes/galaxyDust.png b/demo/vanilla/public/images/palettes/spaceGalaxyDust.png similarity index 100% rename from demo/vanilla/public/images/palettes/galaxyDust.png rename to demo/vanilla/public/images/palettes/spaceGalaxyDust.png diff --git a/demo/vanilla/public/images/palettes/spaceNebula.png b/demo/vanilla/public/images/palettes/spaceNebula.png new file mode 100644 index 00000000000..a2ac1433f5b Binary files /dev/null and b/demo/vanilla/public/images/palettes/spaceNebula.png differ diff --git a/demo/vanilla/public/images/palettes/portal.png b/demo/vanilla/public/images/palettes/spacePortal.png similarity index 100% rename from demo/vanilla/public/images/palettes/portal.png rename to demo/vanilla/public/images/palettes/spacePortal.png diff --git a/demo/vanilla/public/images/palettes/pulsar.png b/demo/vanilla/public/images/palettes/spacePulsar.png similarity index 100% rename from demo/vanilla/public/images/palettes/pulsar.png rename to demo/vanilla/public/images/palettes/spacePulsar.png diff --git a/demo/vanilla/public/images/palettes/solarWind.png b/demo/vanilla/public/images/palettes/spaceSolarWind.png similarity index 100% rename from demo/vanilla/public/images/palettes/solarWind.png rename to demo/vanilla/public/images/palettes/spaceSolarWind.png diff --git a/demo/vanilla/public/images/palettes/supernova.png b/demo/vanilla/public/images/palettes/spaceSupernova.png similarity index 100% rename from demo/vanilla/public/images/palettes/supernova.png rename to demo/vanilla/public/images/palettes/spaceSupernova.png diff --git a/demo/vanilla/public/images/palettes/acidPair.png b/demo/vanilla/public/images/palettes/spectrumAcidPair.png similarity index 100% rename from demo/vanilla/public/images/palettes/acidPair.png rename to demo/vanilla/public/images/palettes/spectrumAcidPair.png diff --git a/demo/vanilla/public/images/palettes/cmySecondaries.png b/demo/vanilla/public/images/palettes/spectrumCmySecondaries.png similarity index 100% rename from demo/vanilla/public/images/palettes/cmySecondaries.png rename to demo/vanilla/public/images/palettes/spectrumCmySecondaries.png diff --git a/demo/vanilla/public/images/palettes/dualityBlueYellow.png b/demo/vanilla/public/images/palettes/spectrumDualityBlueYellow.png similarity index 100% rename from demo/vanilla/public/images/palettes/dualityBlueYellow.png rename to demo/vanilla/public/images/palettes/spectrumDualityBlueYellow.png diff --git a/demo/vanilla/public/images/palettes/dualityGreenMagenta.png b/demo/vanilla/public/images/palettes/spectrumDualityGreenMagenta.png similarity index 100% rename from demo/vanilla/public/images/palettes/dualityGreenMagenta.png rename to demo/vanilla/public/images/palettes/spectrumDualityGreenMagenta.png diff --git a/demo/vanilla/public/images/palettes/dualityRedCyan.png b/demo/vanilla/public/images/palettes/spectrumDualityRedCyan.png similarity index 100% rename from demo/vanilla/public/images/palettes/dualityRedCyan.png rename to demo/vanilla/public/images/palettes/spectrumDualityRedCyan.png diff --git a/demo/vanilla/public/images/palettes/fullSpectrum.png b/demo/vanilla/public/images/palettes/spectrumFullSpectrum.png similarity index 100% rename from demo/vanilla/public/images/palettes/fullSpectrum.png rename to demo/vanilla/public/images/palettes/spectrumFullSpectrum.png diff --git a/demo/vanilla/public/images/palettes/okabeItoAccessible.png b/demo/vanilla/public/images/palettes/spectrumOkabeItoAccessible.png similarity index 100% rename from demo/vanilla/public/images/palettes/okabeItoAccessible.png rename to demo/vanilla/public/images/palettes/spectrumOkabeItoAccessible.png diff --git a/demo/vanilla/public/images/palettes/prismScatter.png b/demo/vanilla/public/images/palettes/spectrumPrismScatter.png similarity index 100% rename from demo/vanilla/public/images/palettes/prismScatter.png rename to demo/vanilla/public/images/palettes/spectrumPrismScatter.png diff --git a/demo/vanilla/public/images/palettes/rainbow.png b/demo/vanilla/public/images/palettes/spectrumRainbow.png similarity index 100% rename from demo/vanilla/public/images/palettes/rainbow.png rename to demo/vanilla/public/images/palettes/spectrumRainbow.png diff --git a/demo/vanilla/public/images/palettes/rgbPrimaries.png b/demo/vanilla/public/images/palettes/spectrumRgbPrimaries.png similarity index 100% rename from demo/vanilla/public/images/palettes/rgbPrimaries.png rename to demo/vanilla/public/images/palettes/spectrumRgbPrimaries.png diff --git a/demo/vanilla/public/images/palettes/splatterDark.png b/demo/vanilla/public/images/palettes/splatterDark.png deleted file mode 100644 index aa0151309ee..00000000000 Binary files a/demo/vanilla/public/images/palettes/splatterDark.png and /dev/null differ diff --git a/demo/vanilla/public/images/palettes/crtPhosphor.png b/demo/vanilla/public/images/palettes/techCrtPhosphor.png similarity index 100% rename from demo/vanilla/public/images/palettes/crtPhosphor.png rename to demo/vanilla/public/images/palettes/techCrtPhosphor.png diff --git a/demo/vanilla/public/images/palettes/glitch.png b/demo/vanilla/public/images/palettes/techGlitch.png similarity index 100% rename from demo/vanilla/public/images/palettes/glitch.png rename to demo/vanilla/public/images/palettes/techGlitch.png diff --git a/demo/vanilla/public/images/palettes/hologram.png b/demo/vanilla/public/images/palettes/techHologram.png similarity index 100% rename from demo/vanilla/public/images/palettes/hologram.png rename to demo/vanilla/public/images/palettes/techHologram.png diff --git a/demo/vanilla/public/images/palettes/lofiWarm.png b/demo/vanilla/public/images/palettes/techLofiWarm.png similarity index 100% rename from demo/vanilla/public/images/palettes/lofiWarm.png rename to demo/vanilla/public/images/palettes/techLofiWarm.png diff --git a/demo/vanilla/public/images/palettes/matrixRain.png b/demo/vanilla/public/images/palettes/techMatrixRain.png similarity index 100% rename from demo/vanilla/public/images/palettes/matrixRain.png rename to demo/vanilla/public/images/palettes/techMatrixRain.png diff --git a/demo/vanilla/public/images/palettes/neonCity.png b/demo/vanilla/public/images/palettes/techNeonCity.png similarity index 100% rename from demo/vanilla/public/images/palettes/neonCity.png rename to demo/vanilla/public/images/palettes/techNeonCity.png diff --git a/demo/vanilla/public/images/palettes/networkNodes.png b/demo/vanilla/public/images/palettes/techNetworkNodes.png similarity index 100% rename from demo/vanilla/public/images/palettes/networkNodes.png rename to demo/vanilla/public/images/palettes/techNetworkNodes.png diff --git a/demo/vanilla/public/images/palettes/plasmaArc.png b/demo/vanilla/public/images/palettes/techPlasmaArc.png similarity index 100% rename from demo/vanilla/public/images/palettes/plasmaArc.png rename to demo/vanilla/public/images/palettes/techPlasmaArc.png diff --git a/demo/vanilla/public/images/palettes/vaporwave.png b/demo/vanilla/public/images/palettes/techVaporwave.png similarity index 100% rename from demo/vanilla/public/images/palettes/vaporwave.png rename to demo/vanilla/public/images/palettes/techVaporwave.png diff --git a/demo/vanilla/public/images/palettes/vibrant.png b/demo/vanilla/public/images/palettes/vibrantDefault.png similarity index 100% rename from demo/vanilla/public/images/palettes/vibrant.png rename to demo/vanilla/public/images/palettes/vibrantDefault.png diff --git a/demo/vanilla/public/images/palettes/volcanicAsh.png b/demo/vanilla/public/images/palettes/volcanicAsh.png deleted file mode 100644 index a4473fa7c56..00000000000 Binary files a/demo/vanilla/public/images/palettes/volcanicAsh.png and /dev/null differ diff --git a/demo/vanilla/public/images/palettes/deepOcean.png b/demo/vanilla/public/images/palettes/waterDeepOcean.png similarity index 100% rename from demo/vanilla/public/images/palettes/deepOcean.png rename to demo/vanilla/public/images/palettes/waterDeepOcean.png diff --git a/demo/vanilla/public/images/palettes/water.png b/demo/vanilla/public/images/palettes/waterDefault.png similarity index 100% rename from demo/vanilla/public/images/palettes/water.png rename to demo/vanilla/public/images/palettes/waterDefault.png diff --git a/demo/vanilla/public/images/palettes/foamAndBubbles.png b/demo/vanilla/public/images/palettes/waterFoamAndBubbles.png similarity index 100% rename from demo/vanilla/public/images/palettes/foamAndBubbles.png rename to demo/vanilla/public/images/palettes/waterFoamAndBubbles.png diff --git a/demo/vanilla/public/images/palettes/fogCoastal.png b/demo/vanilla/public/images/palettes/waterFogCoastal.png similarity index 100% rename from demo/vanilla/public/images/palettes/fogCoastal.png rename to demo/vanilla/public/images/palettes/waterFogCoastal.png diff --git a/demo/vanilla/public/images/palettes/inkInWater.png b/demo/vanilla/public/images/palettes/waterInkInWater.png similarity index 100% rename from demo/vanilla/public/images/palettes/inkInWater.png rename to demo/vanilla/public/images/palettes/waterInkInWater.png diff --git a/demo/vanilla/public/images/palettes/waterLagoon.png b/demo/vanilla/public/images/palettes/waterLagoon.png new file mode 100644 index 00000000000..4070920f794 Binary files /dev/null and b/demo/vanilla/public/images/palettes/waterLagoon.png differ diff --git a/demo/vanilla/public/images/palettes/rain.png b/demo/vanilla/public/images/palettes/waterRain.png similarity index 100% rename from demo/vanilla/public/images/palettes/rain.png rename to demo/vanilla/public/images/palettes/waterRain.png diff --git a/demo/vanilla/public/images/palettes/risingBubbles.png b/demo/vanilla/public/images/palettes/waterRisingBubbles.png similarity index 100% rename from demo/vanilla/public/images/palettes/risingBubbles.png rename to demo/vanilla/public/images/palettes/waterRisingBubbles.png diff --git a/demo/vanilla/public/javascripts/canvas.js b/demo/vanilla/public/javascripts/canvas.js new file mode 100644 index 00000000000..3e57008a80f --- /dev/null +++ b/demo/vanilla/public/javascripts/canvas.js @@ -0,0 +1,81 @@ +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), + fworks = async options => await fireworks.create(canvas, options), + prtcls = async options => await particles.create(canvas, options), + standard = async options => + await tsParticles.load({ + element: canvas, + options, + }); + + await Promise.all([ + confetti.init(), + fireworks.init(), + particles.init(), + loadAll(tsParticles), + ]); + + console.log(canvas); + + function confettiFrame() { + fetti({ + particleCount: 2, + angle: 60, + spread: 55, + origin: { x: 0, y: 0.5 }, + colors: colors, + }); + fetti({ + particleCount: 2, + angle: 120, + spread: 55, + origin: { x: 1, y: 0.5 }, + colors: colors, + }); + + if (performance.now() < end) { + setTimeout(() => { + confettiFrame(); + }, 15); + } + } + + function fireworksFrame() { + fworks(); + } + + function particlesFrame() { + prtcls({ + links: true + }); + } + + function standardFrame() { + standard({ + fullScreen: { + enable: false, + }, + particles: { + number: { + value: 50, + }, + move: { + enable: true, + }, + links: { + enable: true + }, + } + }); + } + + //confettiFrame(); + //fireworksFrame(); + //particlesFrame(); + standardFrame(); + + console.log("started"); +}); diff --git a/demo/vanilla/public/javascripts/confetti.js b/demo/vanilla/public/javascripts/confetti.js index ab535f5de93..9345d9204e4 100644 --- a/demo/vanilla/public/javascripts/confetti.js +++ b/demo/vanilla/public/javascripts/confetti.js @@ -1,37 +1,27 @@ const end = Date.now() + 15 * 1000, colors = ["#bb0000", "#ffffff"]; -async function frame() { - await Promise.all([ - confetti({ - particleCount: 2, - angle: 60, - spread: 55, - origin: { x: 0 }, - colors: colors, - }), - confetti({ - particleCount: 2, - angle: 120, - spread: 55, - origin: { x: 1 }, - colors: colors, - }), - ]); +function frame() { + confetti({ + particleCount: 2, + angle: 60, + spread: 55, + origin: { x: 0 }, + colors: colors, + }); + confetti({ + particleCount: 2, + angle: 120, + spread: 55, + origin: { x: 1 }, + colors: colors, + }); if (Date.now() < end) { setTimeout(() => { - frame().catch(error => { - console.error("Confetti frame error:", error); - }); + frame(); }, 15); } } -(async () => { - await confetti.init(); - - await frame(); -})().catch(error => { - console.error("Confetti initialization error:", error); -}); +frame(); diff --git a/demo/vanilla/public/javascripts/demo-basic.js b/demo/vanilla/public/javascripts/demo-basic.js index d1523bb2b21..2620087861e 100644 --- a/demo/vanilla/public/javascripts/demo-basic.js +++ b/demo/vanilla/public/javascripts/demo-basic.js @@ -1,45 +1,47 @@ (async () => { - await loadBasic(tsParticles); + await loadBasic(tsParticles); - await tsParticles.load({ - options: { - name: "Big Particles", - particles: { - number: { - value: 30, - }, - color: { - value: ["#5bc0eb", "#fde74c", "#9bc53d", "#e55934", "#fa7921"], - }, - shape: { - type: "circle", - }, - opacity: { - value: { - min: 0.4, - max: 0.8, - }, - }, - size: { - value: { - min: 300, - max: 400, - }, - animation: { - enable: true, - speed: 100, - sync: false, - }, - }, - move: { - enable: true, - speed: 10, - direction: "top", - }, - }, - background: { - color: "#ffffff", - }, - } - }) + await tsParticles.load({ + options: { + name: "Big Particles", + particles: { + number: { + value: 30, + }, + paint: { + color: { + value: ["#5bc0eb", "#fde74c", "#9bc53d", "#e55934", "#fa7921"], + }, + }, + shape: { + type: "circle", + }, + opacity: { + value: { + min: 0.4, + max: 0.8, + }, + }, + size: { + value: { + min: 300, + max: 400, + }, + animation: { + enable: true, + speed: 100, + sync: false, + }, + }, + move: { + enable: true, + speed: 10, + direction: "top", + }, + }, + background: { + color: "#ffffff", + }, + }, + }); })(); diff --git a/demo/vanilla/public/javascripts/demo.js b/demo/vanilla/public/javascripts/demo.js index 8b8ae250c79..77b34a6103f 100644 --- a/demo/vanilla/public/javascripts/demo.js +++ b/demo/vanilla/public/javascripts/demo.js @@ -53,7 +53,11 @@ poolCount = document.getElementById("pool-count"); setInterval(() => { - const container = tsParticles.item(0); + if (!window.tsParticles) { + return; + } + + const container = window.tsParticles.item(0); if (container) { particlesCount.innerText = `${container.particles.count}`; diff --git a/demo/vanilla/public/javascripts/fireworks.js b/demo/vanilla/public/javascripts/fireworks.js index 8c2044dd52f..4a94258e022 100644 --- a/demo/vanilla/public/javascripts/fireworks.js +++ b/demo/vanilla/public/javascripts/fireworks.js @@ -1,7 +1 @@ -(async () => { - /*const f =*/ await fireworks(); - - /*setTimeout(() => { - f.stop(); - }, 5000);*/ -})(); +fireworks(); diff --git a/demo/vanilla/public/javascripts/particles.js b/demo/vanilla/public/javascripts/particles.js new file mode 100644 index 00000000000..09c11d21b65 --- /dev/null +++ b/demo/vanilla/public/javascripts/particles.js @@ -0,0 +1,9 @@ +particles({ + radius: 3, + speed: 2, + opacity: 0.8, + links: true, + linksWidth: 140, + color: "#ffffff", + linksColor: "#00d8ff", +}); diff --git a/demo/vanilla/public/stylesheets/canvas.styl b/demo/vanilla/public/stylesheets/canvas.styl new file mode 100644 index 00000000000..35e5704fec5 --- /dev/null +++ b/demo/vanilla/public/stylesheets/canvas.styl @@ -0,0 +1,8 @@ +body + overflow auto !important + +#canvas + width 800px + height 800px + border 1px solid #fff + margin 20px 0 0 20px diff --git a/demo/vanilla/views/basic.pug b/demo/vanilla/views/basic.pug index 888f50869b0..1d112d79d5a 100644 --- a/demo/vanilla/views/basic.pug +++ b/demo/vanilla/views/basic.pug @@ -22,12 +22,15 @@ html(lang="en") body #tsparticles - script(src="/@tsparticles/engine/tsparticles.engine.js") - script(src="/tsparticles-basic/tsparticles.basic.js") - script(src="/plugin-move/tsparticles.plugin.move.js") - script(src="/shape-circle/tsparticles.shape.circle.js") - script(src="/updater-paint/tsparticles.updater.paint.js") - script(src="/updater-opacity/tsparticles.updater.opacity.js") - script(src="/updater-out-modes/tsparticles.updater.out-modes.js") - script(src="/updater-size/tsparticles.updater.size.js") + script(src="/@tsparticles/engine/tsparticles.engine.min.js") + script(src="/plugin-hex-color/tsparticles.plugin.hexColor.min.js") + script(src="/plugin-hsl-color/tsparticles.plugin.hslColor.min.js") + script(src="/plugin-rgb-color/tsparticles.plugin.rgbColor.min.js") + script(src="/plugin-move/tsparticles.plugin.move.min.js") + script(src="/shape-circle/tsparticles.shape.circle.min.js") + script(src="/updater-paint/tsparticles.updater.paint.min.js") + script(src="/updater-opacity/tsparticles.updater.opacity.min.js") + script(src="/updater-out-modes/tsparticles.updater.out-modes.min.js") + script(src="/updater-size/tsparticles.updater.size.min.js") + script(src="/tsparticles-basic/tsparticles.basic.min.js") script(src="/javascripts/demo-basic.js") diff --git a/demo/vanilla/views/bundle.pug b/demo/vanilla/views/bundle.pug index ed0904a6282..0afd79b7e1f 100644 --- a/demo/vanilla/views/bundle.pug +++ b/demo/vanilla/views/bundle.pug @@ -21,6 +21,11 @@ html(lang="en") link(href="/fontawesome/css/all.css" rel="stylesheet" type="text/css") link(href="/jsoneditor/jsoneditor.css" rel="stylesheet" type="text/css") link(href="/stylesheets/main.css" rel="stylesheet" type="text/css") + style. + #tsparticles { + width: 500px; + height: 500px; + } body .container-fluid.m-0.vh-100 @@ -28,6 +33,9 @@ html(lang="en") #sidebar.col-3.p-0.h-100(style="overflow: auto; z-index: 10000;") .row.p-1 .col + .d-flex.gap-2.mb-2 + a.btn.btn-outline-info.btn-sm(href="/presets" target="_blank") Presets Catalog + a.btn.btn-outline-warning.btn-sm(href="/palettes" target="_blank") Palettes Catalog .input-group select.custom-select#presets diff --git a/demo/vanilla/views/canvas.pug b/demo/vanilla/views/canvas.pug new file mode 100644 index 00000000000..430ebd25eae --- /dev/null +++ b/demo/vanilla/views/canvas.pug @@ -0,0 +1,29 @@ +doctype html +html(lang="en") + head + meta(charset="utf-8") + meta(name="description", content= "tsParticles") + meta(name="author", content= "Matteo Bruni") + meta(name="apple-mobile-web-app-capable" content="yes") + meta(name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no") + + meta(name="twitter:card" content="summary_large_image") + meta(name="twitter:creator" content="@HollowMatt_ITA") + meta(name="twitter:image:src" content="https://particles.js.org/images/demo2.png") + meta(property="og:title" content="tsParticles - A lightweight TypeScript library for creating particles") + meta(property="og:site_name" content="tsParticles") + meta(property="og:url" content="https://particles.js.org/") + meta(property="og:description" content="A lightweight TypeScript library for creating particles.") + meta(property="og:image" content="https://particles.js.org/images/demo2.png") + + title tsParticles + link(href="/stylesheets/main.css" rel="stylesheet" type="text/css") + link(href="/stylesheets/canvas.css" rel="stylesheet" type="text/css") + + body(style="background-color: #000;") + div#canvas + script(src="/tsparticles-confetti/tsparticles.confetti.bundle.min.js") + script(src="/tsparticles-fireworks/tsparticles.fireworks.bundle.min.js") + script(src="/tsparticles-particles/tsparticles.particles.bundle.min.js") + script(src="/tsparticles-all/tsparticles.all.bundle.min.js") + script(src="/javascripts/canvas.js") diff --git a/demo/vanilla/views/paletteShowcaseConfetti.pug b/demo/vanilla/views/paletteShowcaseConfetti.pug new file mode 100644 index 00000000000..3fa3fdf9348 --- /dev/null +++ b/demo/vanilla/views/paletteShowcaseConfetti.pug @@ -0,0 +1,199 @@ +doctype html +html(lang="en") + head + meta(charset="utf-8") + meta(name="description", content="tsParticles") + meta(name="author", content="Matteo Bruni") + meta(name="apple-mobile-web-app-capable" content="yes") + meta(name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no") + + meta(name="twitter:card" content="summary_large_image") + meta(name="twitter:creator" content="@HollowMatt_ITA") + meta(name="twitter:image:src" content="https://particles.js.org/images/demo2.png") + meta(property="og:title" content="tsParticles - A lightweight TypeScript library for creating particles") + meta(property="og:site_name" content="tsParticles") + meta(property="og:url" content="https://particles.js.org/") + meta(property="og:description" content="A lightweight TypeScript library for creating particles.") + meta(property="og:image" content="https://particles.js.org/images/demo2.png") + + title= `tsParticles ${item.title} Confetti Showcase` + + link(href="/bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css") + style. + body { + margin: 0; + min-height: 100vh; + background: radial-gradient(circle at top, #2d1b69 0%, #1f0f42 45%, #0a0618 100%); + color: #f8f9fa; + overflow: hidden; + } + + .overlay { + position: fixed; + top: 0.75rem; + left: 0.75rem; + z-index: 20; + display: flex; + gap: 0.5rem; + padding: 0.5rem; + border-radius: 999px; + background: rgba(0, 0, 0, 0.45); + backdrop-filter: blur(4px); + } + + .overlay .btn { + --bs-btn-padding-y: 0.2rem; + --bs-btn-padding-x: 0.55rem; + --bs-btn-font-size: 0.75rem; + } + + #tsparticles { + position: fixed; + inset: 0; + z-index: 1; + } + + body + #tsparticles + .overlay + a.btn.btn-light(href=item.route target="_blank") Open palette demo + a.btn.btn-outline-light(href="/palettes" target="_blank") Back to palettes + + script(src="/bootstrap/js/bootstrap.bundle.min.js") + script(src="/tsparticles-all/tsparticles.all.bundle.min.js") + script(src=`${item.mountPath}/${item.scriptFile}`) + script. + (async (engine) => { + await loadAll(engine); + await #{item.loader}(engine); + + const options = { + palette: "#{item.optionValue}", + fullScreen: { + enable: true, + zIndex: 100, + }, + particles: { + number: { + value: 0, + density: { + enable: true, + }, + }, + shape: { + type: ["square", "circle"], + }, + size: { + value: { + min: 3, + max: 5, + }, + }, + opacity: { + value: { min: 0, max: 1 }, + animation: { + enable: true, + startValue: "max", + destroy: "min", + speed: 3, + }, + }, + move: { + angle: { + value: 45, + offset: 0, + }, + drift: 0, + enable: true, + gravity: { + enable: true, + acceleration: 9.81, + }, + speed: { + min: 15, + max: 25, + }, + decay: 0.1, + random: true, + straight: false, + outModes: { + default: "destroy", + top: "none", + }, + }, + rotate: { + value: { + min: 0, + max: 360, + }, + direction: "random", + move: true, + animation: { + enable: true, + speed: 60, + }, + }, + tilt: { + direction: "random", + enable: true, + value: { + min: 0, + max: 360, + }, + animation: { + enable: true, + speed: 60, + }, + }, + roll: { + darken: { + enable: true, + value: 30, + }, + enlighten: { + enable: true, + value: 30, + }, + enable: true, + mode: "both", + speed: { + min: 15, + max: 25, + }, + }, + wobble: { + distance: 30, + enable: true, + move: true, + speed: { + min: -15, + max: 15, + }, + }, + }, + emitters: { + name: "confetti", + size: { + width: 0, + height: 0, + }, + rate: { + delay: 0, + quantity: 50, + }, + life: { + count: 0, + duration: 0.1, + delay: 0.4, + }, + }, + motion: { + disable: true, + }, + }; + + await engine.load({ + id: "tsparticles", + options, + }); + })(tsParticles); diff --git a/demo/vanilla/views/paletteShowcaseFireworks.pug b/demo/vanilla/views/paletteShowcaseFireworks.pug new file mode 100644 index 00000000000..d752803e824 --- /dev/null +++ b/demo/vanilla/views/paletteShowcaseFireworks.pug @@ -0,0 +1,217 @@ +doctype html +html(lang="en") + head + meta(charset="utf-8") + meta(name="description", content="tsParticles") + meta(name="author", content="Matteo Bruni") + meta(name="apple-mobile-web-app-capable" content="yes") + meta(name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no") + + meta(name="twitter:card" content="summary_large_image") + meta(name="twitter:creator" content="@HollowMatt_ITA") + meta(name="twitter:image:src" content="https://particles.js.org/images/demo2.png") + meta(property="og:title" content="tsParticles - A lightweight TypeScript library for creating particles") + meta(property="og:site_name" content="tsParticles") + meta(property="og:url" content="https://particles.js.org/") + meta(property="og:description" content="A lightweight TypeScript library for creating particles.") + meta(property="og:image" content="https://particles.js.org/images/demo2.png") + + title= `tsParticles ${item.title} Fireworks Showcase` + + link(href="/bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css") + style. + body { + margin: 0; + min-height: 100vh; + background: linear-gradient(180deg, #02030d 0%, #040b24 40%, #000000 100%); + color: #f8f9fa; + overflow: hidden; + } + + .overlay { + position: fixed; + top: 0.75rem; + left: 0.75rem; + z-index: 20; + display: flex; + gap: 0.5rem; + padding: 0.5rem; + border-radius: 999px; + background: rgba(0, 0, 0, 0.45); + backdrop-filter: blur(4px); + } + + .overlay .btn { + --bs-btn-padding-y: 0.2rem; + --bs-btn-padding-x: 0.55rem; + --bs-btn-font-size: 0.75rem; + } + + #tsparticles { + position: fixed; + inset: 0; + z-index: 1; + } + + body + #tsparticles + .overlay + a.btn.btn-light(href=item.route target="_blank") Open palette demo + a.btn.btn-outline-light(href="/palettes" target="_blank") Back to palettes + + script(src="/bootstrap/js/bootstrap.bundle.min.js") + script(src="/tsparticles-all/tsparticles.all.bundle.min.js") + script(src=`${item.mountPath}/${item.scriptFile}`) + script. + (async (engine) => { + await loadAll(engine); + await #{item.loader}(engine); + + const options = { + palette: "#{item.optionValue}", + fullScreen: { + enable: true, + }, + background: { + color: "#000", + }, + blend: { + enable: true, + mode: "lighter", + }, + emitters: { + direction: "top", + life: { + count: 0, + duration: 0.1, + delay: 0.1, + }, + rate: { + delay: 0.1, + quantity: 1, + }, + size: { + width: 100, + height: 0, + }, + position: { + y: 100, + x: 50, + }, + }, + particles: { + number: { + value: 0, + }, + destroy: { + bounds: { + top: { min: 10, max: 30 }, + }, + mode: "split", + split: { + count: 1, + factor: { + value: 1/3, + }, + rate: { + value: 100, + }, + strokeColorOffset: { + l: { + min: -30, + max: 30, + }, + }, + particles: { + destroy: { + bounds: { + top: 0, + }, + }, + opacity: { + value: { + min: 0.1, + max: 1, + }, + animation: { + enable: true, + speed: { min: 2, max: 4 }, + sync: true, + startValue: "max", + destroy: "min", + count: 1, + }, + }, + size: { + value: { min: 5, max: 10 }, + animation: { + enable: false, + }, + }, + life: { + count: 1, + duration: { + value: { + min: 0.5, + max: 1, + }, + }, + }, + move: { + gravity: { + enable: false, + }, + enable: true, + decay: 0.05, + speed: { + min: 10, + max: 25, + }, + direction: "outside", + outModes: "destroy", + }, + }, + }, + }, + life: { + count: 1, + }, + shape: { + type: "line", + options: { + line: { + cap: "round", + }, + }, + }, + size: { + value: { min: 10, max: 20 }, + }, + move: { + enable: true, + gravity: { + acceleration: 30, + enable: true, + inverse: true, + maxSpeed: 150, + }, + speed: { + min: 20, + max: 40, + }, + outModes: { + default: "destroy", + top: "none", + }, + }, + rotate: { + path: true, + }, + }, + }; + + await engine.load({ + id: "tsparticles", + options, + }); + })(tsParticles); diff --git a/demo/vanilla/views/palettes.pug b/demo/vanilla/views/palettes.pug index 65a9bcdabdb..462159e3c50 100644 --- a/demo/vanilla/views/palettes.pug +++ b/demo/vanilla/views/palettes.pug @@ -57,6 +57,9 @@ html(lang="en") .card-body h5.card-title= item.title p.card-text= item.description - a.btn.btn-primary(href=item.route target="_blank") See demo + .d-flex.gap-2.flex-wrap + a.btn.btn-primary(href=item.route target="_blank") See demo + if item.showcaseRoute + a.btn.btn-outline-dark(href=item.showcaseRoute target="_blank")= item.showcaseLabel script(src="/bootstrap/js/bootstrap.bundle.min.js") diff --git a/demo/vanilla/views/particles.pug b/demo/vanilla/views/particles.pug new file mode 100644 index 00000000000..92b5e63887e --- /dev/null +++ b/demo/vanilla/views/particles.pug @@ -0,0 +1,25 @@ +doctype html +html(lang="en") + head + meta(charset="utf-8") + meta(name="description", content= "tsParticles") + meta(name="author", content= "Matteo Bruni") + meta(name="apple-mobile-web-app-capable" content="yes") + meta(name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no") + + meta(name="twitter:card" content="summary_large_image") + meta(name="twitter:creator" content="@HollowMatt_ITA") + meta(name="twitter:image:src" content="https://particles.js.org/images/demo2.png") + meta(property="og:title" content="tsParticles - A lightweight TypeScript library for creating particles") + meta(property="og:site_name" content="tsParticles") + meta(property="og:url" content="https://particles.js.org/") + meta(property="og:description" content="A lightweight TypeScript library for creating particles.") + meta(property="og:image" content="https://particles.js.org/images/demo2.png") + + title tsParticles + link(href="/stylesheets/main.css" rel="stylesheet" type="text/css") + + body(style="background-color: #000;") + canvas#particles + script(src="/tsparticles-particles/tsparticles.particles.bundle.min.js") + script(src="/javascripts/particles.js") diff --git a/demo/vanilla_new/CHANGELOG.md b/demo/vanilla_new/CHANGELOG.md index 3f74bd8e008..b62f0aab6d1 100644 --- a/demo/vanilla_new/CHANGELOG.md +++ b/demo/vanilla_new/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/demo-new + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/demo-new diff --git a/demo/vanilla_new/package.json b/demo/vanilla_new/package.json index 79afe334eb2..d919809559f 100644 --- a/demo/vanilla_new/package.json +++ b/demo/vanilla_new/package.json @@ -1,7 +1,7 @@ { "name": "@tsparticles/demo-new", "private": true, - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles Demo Website", "main": "index.html", "scripts": { diff --git a/demo/vite/.gitignore b/demo/vite/.gitignore index a547bf36d8d..58f115c8dcd 100644 --- a/demo/vite/.gitignore +++ b/demo/vite/.gitignore @@ -5,7 +5,6 @@ npm-debug.log* yarn-debug.log* yarn-error.log* pnpm-debug.log* -lerna-debug.log* node_modules dist diff --git a/demo/vite/CHANGELOG.md b/demo/vite/CHANGELOG.md index 946a24ff72a..68cbd925893 100644 --- a/demo/vite/CHANGELOG.md +++ b/demo/vite/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/vite-demo + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/vite-demo diff --git a/demo/vite/package.json b/demo/vite/package.json index 24c586d0752..a683a267b1a 100644 --- a/demo/vite/package.json +++ b/demo/vite/package.json @@ -1,7 +1,7 @@ { "name": "@tsparticles/vite-demo", "private": true, - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "type": "module", "scripts": { "dev": "vite", diff --git a/demo/vue2/CHANGELOG.md b/demo/vue2/CHANGELOG.md index da7abe3a924..da2074ad2e3 100644 --- a/demo/vue2/CHANGELOG.md +++ b/demo/vue2/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/vue2-demo + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/vue2-demo diff --git a/demo/vue2/eslint.config.cjs b/demo/vue2/eslint.config.cjs new file mode 100644 index 00000000000..4eeffa25656 --- /dev/null +++ b/demo/vue2/eslint.config.cjs @@ -0,0 +1,33 @@ +const js = require("@eslint/js"); +const globals = require("globals"); +const tsParser = require("@typescript-eslint/parser"); +const vuePlugin = require("eslint-plugin-vue"); +const vueParser = require("vue-eslint-parser"); + +module.exports = [ + { + ignores: ["node_modules/**", "dist/**"], + }, + js.configs.recommended, + ...vuePlugin.configs["flat/recommended"], + { + files: ["**/*.{js,mjs,cjs,ts,tsx,vue}"], + languageOptions: { + parser: vueParser, + ecmaVersion: "latest", + sourceType: "module", + globals: { + ...globals.browser, + ...globals.node, + }, + parserOptions: { + parser: tsParser, + extraFileExtensions: [".vue"], + }, + }, + rules: { + "no-unused-vars": "off", + "no-console": "off", + }, + }, +]; diff --git a/demo/vue2/package.json b/demo/vue2/package.json index bfcf8e6ff5d..1bb0950ec9e 100644 --- a/demo/vue2/package.json +++ b/demo/vue2/package.json @@ -1,7 +1,7 @@ { "name": "@tsparticles/vue2-demo", "private": true, - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "VueJS Demo", "author": "Matteo Bruni ", "homepage": "https://particles.js.org", @@ -37,19 +37,21 @@ "@babel/plugin-proposal-decorators": "^7.22.15", "@babel/plugin-transform-private-methods": "^7.27.1", "@babel/plugin-transform-private-property-in-object": "^7.27.1", + "@eslint/js": "^10.0.1", "@rollup/plugin-json": "^6.0.0", "@rollup/plugin-node-resolve": "^15.2.1", "@rollup/plugin-replace": "^5.0.2", - "@typescript-eslint/eslint-plugin": "^6.7.0", - "@typescript-eslint/parser": "^6.7.0", + "@typescript-eslint/eslint-plugin": "^8.59.1", + "@typescript-eslint/parser": "^8.59.1", "@vue/cli-plugin-babel": "^5.0.8", "@vue/cli-plugin-typescript": "^5.0.8", "@vue/cli-service": "^5.0.8", "babel-loader": "^8.3.0", - "eslint": "^8.49.0", - "eslint-config-prettier": "^9.1.2", - "eslint-plugin-vue": "^9.33.0", + "eslint": "^10.3.0", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-vue": "^10.8.0", "fork-ts-checker-webpack-plugin": "^8.0.0", + "globals": "^16.4.0", "postcss": "^8.4.29", "prettier": "^3.0.3", "rollup": "^2.79.1", @@ -59,6 +61,7 @@ "rollup-plugin-vue": "^5.1.9", "tslib": "^2.6.2", "typescript": "^5.2.2", + "vue-eslint-parser": "^10.4.0", "vue-loader": "^15.10.2", "vue-template-compiler": "^2.7.14", "webpack": "^4.46.0" diff --git a/demo/vue2/src/App.vue b/demo/vue2/src/App.vue index 2410c72765c..16d51e32547 100644 --- a/demo/vue2/src/App.vue +++ b/demo/vue2/src/App.vue @@ -1,6 +1,10 @@ diff --git a/demo/vue3/.gitignore b/demo/vue3/.gitignore index 38adffa64e8..2b7e7000dfe 100644 --- a/demo/vue3/.gitignore +++ b/demo/vue3/.gitignore @@ -5,7 +5,6 @@ npm-debug.log* yarn-debug.log* yarn-error.log* pnpm-debug.log* -lerna-debug.log* node_modules .DS_Store diff --git a/demo/vue3/CHANGELOG.md b/demo/vue3/CHANGELOG.md index 55a21642255..11b50b7132e 100644 --- a/demo/vue3/CHANGELOG.md +++ b/demo/vue3/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/vue3-demo + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) ### Features diff --git a/demo/vue3/package.json b/demo/vue3/package.json index 06fc169c2d5..9a770fcff98 100644 --- a/demo/vue3/package.json +++ b/demo/vue3/package.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/vue3-demo", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "private": true, "type": "module", "scripts": { diff --git a/demo/webcomponents/CHANGELOG.md b/demo/webcomponents/CHANGELOG.md index 7939081bb9a..57d174217dd 100644 --- a/demo/webcomponents/CHANGELOG.md +++ b/demo/webcomponents/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/webcomponents-demo + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/webcomponents-demo diff --git a/demo/webcomponents/app.js b/demo/webcomponents/app.js index 8dffd2dedce..eb8501129ec 100644 --- a/demo/webcomponents/app.js +++ b/demo/webcomponents/app.js @@ -3,19 +3,38 @@ const helmet = require("helmet"); const stylus = require("stylus"); const app = express(); +const path = require("path"); // app.use(helmet()); // Safari requires https, probably a bug -const port = 3005; +// Allow overriding the demo port via environment variable when the default +// port is already in use on the developer machine. +const port = process.env.PORT || 3005; -app.set("views", "./views"); + app.set("views", path.join(__dirname, "views")); app.set("view engine", "pug"); -app.use(stylus.middleware("./public")); -app.use(express.static("./public")); -app.use("/tsparticles", express.static("./node_modules/tsparticles")); -app.use("/@tsparticles/configs", express.static("./node_modules/@tsparticles/configs")); -app.use("/@tsparticles/webcomponents", express.static("./node_modules/@tsparticles/webcomponents/dist")); -app.use("/webcomponentsjs", express.static("./node_modules/@webcomponents/webcomponentsjs/")); + app.use(stylus.middleware(path.join(__dirname, "public"))); + app.use(express.static(path.join(__dirname, "public"))); +// Serve the engine bundle from the repo's bundles output so the demo works +// without installing tsparticles into node_modules. The workspace contains +// bundles/full/dist/tsparticles.bundle.min.js which exposes the global +// tsParticles object the webcomponents wrapper reads at runtime. +app.use("/tsparticles", express.static(path.join(__dirname, "./node_modules/tsparticles"))); + +// Serve demo-local presets so the demo can reference /@tsparticles/configs/* +// without requiring the @tsparticles/configs package to be installed. +app.use("/@tsparticles/configs", express.static(path.join(__dirname, "./public/presets"))); +// Serve the local build of the webcomponents wrapper so the demo picks up +// local changes during development instead of a package installed in +// node_modules. This points to the workspace package build output. +app.use( + "/@tsparticles/webcomponents", + express.static(path.join(__dirname, "./node_modules/@tsparticles/webcomponents/dist")), +); + app.use( + "/webcomponentsjs", + express.static(path.join(__dirname, "../../node_modules/@webcomponents/webcomponentsjs/")), + ); app.get("/", function (req, res) { res.render("index"); diff --git a/demo/webcomponents/package.json b/demo/webcomponents/package.json index 09a2caa5431..5712b870568 100644 --- a/demo/webcomponents/package.json +++ b/demo/webcomponents/package.json @@ -1,7 +1,7 @@ { "name": "@tsparticles/webcomponents-demo", "private": true, - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "> TODO: description", "author": "Matteo Bruni ", "homepage": "https://particles.js.org", @@ -29,11 +29,11 @@ "@tsparticles/configs": "workspace:^", "@tsparticles/engine": "workspace:^", "@tsparticles/webcomponents": "workspace:^", - "@typescript-eslint/eslint-plugin": "^6.0.0", - "@typescript-eslint/parser": "^6.0.0", + "@typescript-eslint/eslint-plugin": "^8.59.1", + "@typescript-eslint/parser": "^8.59.1", "@webcomponents/webcomponentsjs": "^2.8.0", - "eslint": "^8.40.0", - "eslint-config-prettier": "^9.0.0", + "eslint": "^10.3.0", + "eslint-config-prettier": "^10.1.8", "express": "^4.18.2", "helmet": "^7.0.0", "prettier": "^3.0.0", diff --git a/demo/webcomponents/public/javascripts/webcomponents-demo.js b/demo/webcomponents/public/javascripts/webcomponents-demo.js new file mode 100644 index 00000000000..2879cd1bd95 --- /dev/null +++ b/demo/webcomponents/public/javascripts/webcomponents-demo.js @@ -0,0 +1,93 @@ +// Bootloader for the webcomponents demo. This mirrors the inline script +// previously embedded in the demo view but lives in a static file so it's +// easier to develop and avoids large inline templates. + +import('/@tsparticles/webcomponents/web-particles.js') + .then(async (mod) => { + try { + // Wait for the engine global to be present. The demo includes the full + // UMD bundle at /tsparticles/tsparticles.bundle.min.js which sets + // globalThis.tsParticles. + const waitForEngine = (timeout = 5000) => + new Promise((resolve) => { + if (globalThis.tsParticles) { + resolve(true); + return; + } + + const start = Date.now(); + const poll = setInterval(() => { + if (globalThis.tsParticles) { + clearInterval(poll); + resolve(true); + } else if (Date.now() - start > timeout) { + clearInterval(poll); + resolve(false); + } + }, 100); + }); + + await waitForEngine(5000); + + if (mod?.initParticlesEngine) { + await mod.initParticlesEngine(async (engine) => { + // If a loadFull helper exists on the page or engine, call it to + // register default plugins. This matches the demo's consumer + // usage when the full bundle is loaded via + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadColoredSmokeAmberPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "coloredSmokeAmber", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadColoredSmokeAmberPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/atmosphere/coloredSmokeAmber/eslint.config.js b/palettes/atmosphere/coloredSmokeAmber/eslint.config.js new file mode 100644 index 00000000000..248b4d3dd36 --- /dev/null +++ b/palettes/atmosphere/coloredSmokeAmber/eslint.config.js @@ -0,0 +1,6 @@ +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; +import { defineConfig } from "eslint/config"; + +export default defineConfig([ + tsParticlesESLintConfig, +]); diff --git a/palettes/atmosphere/coloredSmokeAmber/images/sample.png b/palettes/atmosphere/coloredSmokeAmber/images/sample.png new file mode 100644 index 00000000000..4ca275842a9 Binary files /dev/null and b/palettes/atmosphere/coloredSmokeAmber/images/sample.png differ diff --git a/palettes/atmosphere/coloredSmokeAmber/package.dist.json b/palettes/atmosphere/coloredSmokeAmber/package.dist.json new file mode 100644 index 00000000000..90bfd0f4b98 --- /dev/null +++ b/palettes/atmosphere/coloredSmokeAmber/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-colored-smoke-amber", + "version": "4.0.0-beta.15", + "description": "tsParticles colored smoke amber palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/atmosphere/coloredSmokeAmber" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/atmosphere/coloredSmokeAmber/package.json b/palettes/atmosphere/coloredSmokeAmber/package.json new file mode 100644 index 00000000000..b41ab452d45 --- /dev/null +++ b/palettes/atmosphere/coloredSmokeAmber/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-colored-smoke-amber", + "version": "4.0.0-beta.15", + "description": "tsParticles colored smoke amber palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/atmosphere/coloredSmokeAmber" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/atmosphere/coloredSmokeAmber/rollup.config.js b/palettes/atmosphere/coloredSmokeAmber/rollup.config.js new file mode 100644 index 00000000000..cada8435b34 --- /dev/null +++ b/palettes/atmosphere/coloredSmokeAmber/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-coloredSmokeAmber", + paletteName: "ColoredSmokeAmber Palette", + version, +}); diff --git a/palettes/atmosphere/coloredSmokeAmber/src/browser.ts b/palettes/atmosphere/coloredSmokeAmber/src/browser.ts new file mode 100644 index 00000000000..2e6bd995f2a --- /dev/null +++ b/palettes/atmosphere/coloredSmokeAmber/src/browser.ts @@ -0,0 +1,10 @@ +import { loadColoredSmokeAmberPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadColoredSmokeAmberPalette?: typeof loadColoredSmokeAmberPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadColoredSmokeAmberPalette = loadColoredSmokeAmberPalette; + +export * from "./index.js"; diff --git a/palettes/atmosphere/coloredSmokeAmber/src/index.lazy.ts b/palettes/atmosphere/coloredSmokeAmber/src/index.lazy.ts new file mode 100644 index 00000000000..dfd9dea4708 --- /dev/null +++ b/palettes/atmosphere/coloredSmokeAmber/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "colored-smoke-amber"; + +/** + * @param engine - + */ +export async function loadColoredSmokeAmberPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/atmosphere/coloredSmokeAmber/src/index.ts b/palettes/atmosphere/coloredSmokeAmber/src/index.ts new file mode 100644 index 00000000000..04ca26a12f5 --- /dev/null +++ b/palettes/atmosphere/coloredSmokeAmber/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "colored-smoke-amber"; + +/** + * @param engine - + */ +export async function loadColoredSmokeAmberPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/atmosphere/coloredSmokeAmber/src/options.ts b/palettes/atmosphere/coloredSmokeAmber/src/options.ts new file mode 100644 index 00000000000..81e4feacd46 --- /dev/null +++ b/palettes/atmosphere/coloredSmokeAmber/src/options.ts @@ -0,0 +1,20 @@ +import { type IPalette } from "@tsparticles/engine"; + +export const options: IPalette = { + name: "Colored Smoke - Amber", + background: "#090500", + blendMode: "source-over", + colors: { + fill: { + enable: true, + value: [ + "#1A1000", + "#3A2200", + "#6B3D00", + "#A65A00", + "#D98A1A", + "#FFC266", + ], + }, + }, +}; diff --git a/palettes/confetti/confetti/tsconfig.base.json b/palettes/atmosphere/coloredSmokeAmber/tsconfig.base.json similarity index 100% rename from palettes/confetti/confetti/tsconfig.base.json rename to palettes/atmosphere/coloredSmokeAmber/tsconfig.base.json diff --git a/palettes/atmosphere/coloredSmokeAmber/tsconfig.browser.json b/palettes/atmosphere/coloredSmokeAmber/tsconfig.browser.json new file mode 100644 index 00000000000..80d78351a7d --- /dev/null +++ b/palettes/atmosphere/coloredSmokeAmber/tsconfig.browser.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.browser.json"], + "compilerOptions": { + "outDir": "./dist/browser" + } +} diff --git a/palettes/atmosphere/coloredSmokeAmber/tsconfig.json b/palettes/atmosphere/coloredSmokeAmber/tsconfig.json new file mode 100644 index 00000000000..630bf828704 --- /dev/null +++ b/palettes/atmosphere/coloredSmokeAmber/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.json"], + "compilerOptions": { + "outDir": "./dist/cjs" + } +} diff --git a/palettes/atmosphere/coloredSmokeAmber/tsconfig.module.json b/palettes/atmosphere/coloredSmokeAmber/tsconfig.module.json new file mode 100644 index 00000000000..bb5035a8403 --- /dev/null +++ b/palettes/atmosphere/coloredSmokeAmber/tsconfig.module.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.module.json"], + "compilerOptions": { + "outDir": "./dist/esm" + } +} diff --git a/palettes/atmosphere/coloredSmokeAmber/tsconfig.types.json b/palettes/atmosphere/coloredSmokeAmber/tsconfig.types.json new file mode 100644 index 00000000000..570e9e9d8c6 --- /dev/null +++ b/palettes/atmosphere/coloredSmokeAmber/tsconfig.types.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.types.json"], + "compilerOptions": { + "outDir": "./dist/types" + } +} diff --git a/palettes/atmosphere/coloredSmokeAmber/typedoc.json b/palettes/atmosphere/coloredSmokeAmber/typedoc.json new file mode 100644 index 00000000000..9412e8f7fb2 --- /dev/null +++ b/palettes/atmosphere/coloredSmokeAmber/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles ColoredSmokeAmber Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/atmosphere/coloredSmokeBlue/CHANGELOG.md b/palettes/atmosphere/coloredSmokeBlue/CHANGELOG.md index 43516c584ac..6f92c48dfc5 100644 --- a/palettes/atmosphere/coloredSmokeBlue/CHANGELOG.md +++ b/palettes/atmosphere/coloredSmokeBlue/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-colored-smoke-blue + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-colored-smoke-blue diff --git a/palettes/atmosphere/coloredSmokeBlue/README.md b/palettes/atmosphere/coloredSmokeBlue/README.md index 50d8cbac692..9aa33349255 100644 --- a/palettes/atmosphere/coloredSmokeBlue/README.md +++ b/palettes/atmosphere/coloredSmokeBlue/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Colored Smoke Blue Palette +# tsParticles ColoredSmokeBlue Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-colored-smoke-blue/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-colored-smoke-blue) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-colored-smoke-blue.svg)](https://www.npmjs.com/package/@tsparticles/palette-colored-smoke-blue) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-colored-smoke-blue)](https://www.npmjs.com/package/@tsparticles/palette-colored-smoke-blue) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-coloredSmokeBlue/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-coloredSmokeBlue) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-coloredSmokeBlue.svg)](https://www.npmjs.com/package/@tsparticles/palette-coloredSmokeBlue) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-coloredSmokeBlue) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke blue. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/atmosphere/coloredSmokeBlue/images/sample.png)](https://particles.js.org/samples/palettes/colored-smoke-blue) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/atmosphere/coloredSmokeBlue/images/sample.png)](https://particles.js.org/samples/palettes/coloredSmokeBlue) ## Colors @@ -75,7 +75,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -97,7 +97,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "colored-smoke-blue", + palette: "coloredSmokeBlue", }; await engine.load({ diff --git a/palettes/atmosphere/coloredSmokeBlue/images/sample.png b/palettes/atmosphere/coloredSmokeBlue/images/sample.png index 2ef636c1b65..3057d8b19cd 100644 Binary files a/palettes/atmosphere/coloredSmokeBlue/images/sample.png and b/palettes/atmosphere/coloredSmokeBlue/images/sample.png differ diff --git a/palettes/atmosphere/coloredSmokeBlue/package.dist.json b/palettes/atmosphere/coloredSmokeBlue/package.dist.json index 26d7c6efa3c..9a4aff994a9 100644 --- a/palettes/atmosphere/coloredSmokeBlue/package.dist.json +++ b/palettes/atmosphere/coloredSmokeBlue/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-colored-smoke-blue", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles colored smoke blue palette", "homepage": "https://particles.js.org", "repository": { @@ -95,14 +95,22 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "type": "module", - "jsdelivr": "tsparticles.palette-colored-smoke-blue.min.js", - "unpkg": "tsparticles.palette-colored-smoke-blue.min.js", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" } diff --git a/palettes/atmosphere/coloredSmokeBlue/package.json b/palettes/atmosphere/coloredSmokeBlue/package.json index d4d83665563..bcf04edaace 100644 --- a/palettes/atmosphere/coloredSmokeBlue/package.json +++ b/palettes/atmosphere/coloredSmokeBlue/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-colored-smoke-blue", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles colored smoke blue palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/atmosphere/coloredSmokeBlue/rollup.config.js b/palettes/atmosphere/coloredSmokeBlue/rollup.config.js new file mode 100644 index 00000000000..a9608fc35b6 --- /dev/null +++ b/palettes/atmosphere/coloredSmokeBlue/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-coloredSmokeBlue", + paletteName: "ColoredSmokeBlue Palette", + version, +}); diff --git a/palettes/atmosphere/coloredSmokeBlue/src/browser.ts b/palettes/atmosphere/coloredSmokeBlue/src/browser.ts new file mode 100644 index 00000000000..0eb58034a47 --- /dev/null +++ b/palettes/atmosphere/coloredSmokeBlue/src/browser.ts @@ -0,0 +1,10 @@ +import { loadColoredSmokeBluePalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadColoredSmokeBluePalette?: typeof loadColoredSmokeBluePalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadColoredSmokeBluePalette = loadColoredSmokeBluePalette; + +export * from "./index.js"; diff --git a/palettes/atmosphere/coloredSmokeBlue/src/index.lazy.ts b/palettes/atmosphere/coloredSmokeBlue/src/index.lazy.ts new file mode 100644 index 00000000000..90462da2fa9 --- /dev/null +++ b/palettes/atmosphere/coloredSmokeBlue/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "colored-smoke-blue"; + +/** + * @param engine - + */ +export async function loadColoredSmokeBluePalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/atmosphere/coloredSmokeBlue/src/index.ts b/palettes/atmosphere/coloredSmokeBlue/src/index.ts index 0c1050b45ed..fb367793deb 100644 --- a/palettes/atmosphere/coloredSmokeBlue/src/index.ts +++ b/palettes/atmosphere/coloredSmokeBlue/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "colored-smoke-blue"; @@ -6,9 +7,7 @@ const paletteName = "colored-smoke-blue"; * @param engine - */ export async function loadColoredSmokeBluePalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/atmosphere/coloredSmokeBlue/typedoc.json b/palettes/atmosphere/coloredSmokeBlue/typedoc.json index a92eda1c791..065102a59a1 100644 --- a/palettes/atmosphere/coloredSmokeBlue/typedoc.json +++ b/palettes/atmosphere/coloredSmokeBlue/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Colored Smoke Blue Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles ColoredSmokeBlue Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/atmosphere/coloredSmokeBlue/webpack.config.js b/palettes/atmosphere/coloredSmokeBlue/webpack.config.js deleted file mode 100644 index 783b0a99bad..00000000000 --- a/palettes/atmosphere/coloredSmokeBlue/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-colored-smoke-blue", - paletteName: "Colored Smoke Blue Palette", - version, -}); diff --git a/palettes/atmosphere/coloredSmokeGreen/CHANGELOG.md b/palettes/atmosphere/coloredSmokeGreen/CHANGELOG.md index c4fe0f58609..dc8b29f5544 100644 --- a/palettes/atmosphere/coloredSmokeGreen/CHANGELOG.md +++ b/palettes/atmosphere/coloredSmokeGreen/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-colored-smoke-green + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-colored-smoke-green diff --git a/palettes/atmosphere/coloredSmokeGreen/README.md b/palettes/atmosphere/coloredSmokeGreen/README.md index 7b6d252df42..e488c65d86a 100644 --- a/palettes/atmosphere/coloredSmokeGreen/README.md +++ b/palettes/atmosphere/coloredSmokeGreen/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Colored Smoke Green Palette +# tsParticles ColoredSmokeGreen Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-colored-smoke-green/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-colored-smoke-green) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-colored-smoke-green.svg)](https://www.npmjs.com/package/@tsparticles/palette-colored-smoke-green) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-colored-smoke-green)](https://www.npmjs.com/package/@tsparticles/palette-colored-smoke-green) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-coloredSmokeGreen/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-coloredSmokeGreen) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-coloredSmokeGreen.svg)](https://www.npmjs.com/package/@tsparticles/palette-coloredSmokeGreen) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-coloredSmokeGreen) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke green. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/atmosphere/coloredSmokeGreen/images/sample.png)](https://particles.js.org/samples/palettes/colored-smoke-green) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/atmosphere/coloredSmokeGreen/images/sample.png)](https://particles.js.org/samples/palettes/coloredSmokeGreen) ## Colors @@ -75,7 +75,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -97,7 +97,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "colored-smoke-green", + palette: "coloredSmokeGreen", }; await engine.load({ diff --git a/palettes/atmosphere/coloredSmokeGreen/images/sample.png b/palettes/atmosphere/coloredSmokeGreen/images/sample.png index 4fb756ebcd7..44cd1c078b8 100644 Binary files a/palettes/atmosphere/coloredSmokeGreen/images/sample.png and b/palettes/atmosphere/coloredSmokeGreen/images/sample.png differ diff --git a/palettes/atmosphere/coloredSmokeGreen/package.dist.json b/palettes/atmosphere/coloredSmokeGreen/package.dist.json index 211790ac5a6..8f344912703 100644 --- a/palettes/atmosphere/coloredSmokeGreen/package.dist.json +++ b/palettes/atmosphere/coloredSmokeGreen/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-colored-smoke-green", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles colored smoke green palette", "homepage": "https://particles.js.org", "repository": { @@ -95,14 +95,22 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "type": "module", - "jsdelivr": "tsparticles.palette-colored-smoke-green.min.js", - "unpkg": "tsparticles.palette-colored-smoke-green.min.js", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" } diff --git a/palettes/atmosphere/coloredSmokeGreen/package.json b/palettes/atmosphere/coloredSmokeGreen/package.json index 0c59b61d153..90d9e38ac89 100644 --- a/palettes/atmosphere/coloredSmokeGreen/package.json +++ b/palettes/atmosphere/coloredSmokeGreen/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-colored-smoke-green", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles colored smoke green palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/atmosphere/coloredSmokeGreen/rollup.config.js b/palettes/atmosphere/coloredSmokeGreen/rollup.config.js new file mode 100644 index 00000000000..a8a3c65b095 --- /dev/null +++ b/palettes/atmosphere/coloredSmokeGreen/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-coloredSmokeGreen", + paletteName: "ColoredSmokeGreen Palette", + version, +}); diff --git a/palettes/atmosphere/coloredSmokeGreen/src/browser.ts b/palettes/atmosphere/coloredSmokeGreen/src/browser.ts new file mode 100644 index 00000000000..a5d775c3a4f --- /dev/null +++ b/palettes/atmosphere/coloredSmokeGreen/src/browser.ts @@ -0,0 +1,10 @@ +import { loadColoredSmokeGreenPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadColoredSmokeGreenPalette?: typeof loadColoredSmokeGreenPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadColoredSmokeGreenPalette = loadColoredSmokeGreenPalette; + +export * from "./index.js"; diff --git a/palettes/atmosphere/coloredSmokeGreen/src/index.lazy.ts b/palettes/atmosphere/coloredSmokeGreen/src/index.lazy.ts new file mode 100644 index 00000000000..318f90ecd6e --- /dev/null +++ b/palettes/atmosphere/coloredSmokeGreen/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "colored-smoke-green"; + +/** + * @param engine - + */ +export async function loadColoredSmokeGreenPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/atmosphere/coloredSmokeGreen/src/index.ts b/palettes/atmosphere/coloredSmokeGreen/src/index.ts index b4e6875a026..66bfb1c89c0 100644 --- a/palettes/atmosphere/coloredSmokeGreen/src/index.ts +++ b/palettes/atmosphere/coloredSmokeGreen/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "colored-smoke-green"; @@ -6,9 +7,7 @@ const paletteName = "colored-smoke-green"; * @param engine - */ export async function loadColoredSmokeGreenPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/atmosphere/coloredSmokeGreen/typedoc.json b/palettes/atmosphere/coloredSmokeGreen/typedoc.json index b031b795420..8096cb8d3a3 100644 --- a/palettes/atmosphere/coloredSmokeGreen/typedoc.json +++ b/palettes/atmosphere/coloredSmokeGreen/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Colored Smoke Green Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles ColoredSmokeGreen Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/atmosphere/coloredSmokeGreen/webpack.config.js b/palettes/atmosphere/coloredSmokeGreen/webpack.config.js deleted file mode 100644 index 3dbeafb0726..00000000000 --- a/palettes/atmosphere/coloredSmokeGreen/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-colored-smoke-green", - paletteName: "Colored Smoke Green Palette", - version, -}); diff --git a/palettes/atmosphere/coloredSmokeMagenta/CHANGELOG.md b/palettes/atmosphere/coloredSmokeMagenta/CHANGELOG.md index 0063ac34067..d36ca14661e 100644 --- a/palettes/atmosphere/coloredSmokeMagenta/CHANGELOG.md +++ b/palettes/atmosphere/coloredSmokeMagenta/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-colored-smoke-magenta + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-colored-smoke-magenta diff --git a/palettes/atmosphere/coloredSmokeMagenta/README.md b/palettes/atmosphere/coloredSmokeMagenta/README.md index 6e368c83234..c8938d4a92c 100644 --- a/palettes/atmosphere/coloredSmokeMagenta/README.md +++ b/palettes/atmosphere/coloredSmokeMagenta/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Colored Smoke Magenta Palette +# tsParticles ColoredSmokeMagenta Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-colored-smoke-magenta/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-colored-smoke-magenta) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-colored-smoke-magenta.svg)](https://www.npmjs.com/package/@tsparticles/palette-colored-smoke-magenta) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-colored-smoke-magenta)](https://www.npmjs.com/package/@tsparticles/palette-colored-smoke-magenta) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-coloredSmokeMagenta/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-coloredSmokeMagenta) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-coloredSmokeMagenta.svg)](https://www.npmjs.com/package/@tsparticles/palette-coloredSmokeMagenta) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-coloredSmokeMagenta) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke - magenta. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/coloredSmokeMagenta/images/sample.png)](https://particles.js.org/samples/palettes/colored-smoke-magenta) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/atmosphere/coloredSmokeMagenta/images/sample.png)](https://particles.js.org/samples/palettes/coloredSmokeMagenta) ## Colors @@ -69,7 +69,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -91,7 +91,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "colored-smoke-magenta", + palette: "coloredSmokeMagenta", }; await engine.load({ @@ -106,47 +106,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "colored-smoke-magenta", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadColoredSmokeMagentaPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadColoredSmokeMagentaPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadColoredSmokeMagentaPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -pacoloredSmokeMagenta[Colored Smoke Magenta] -end - -e[tsParticles Engine] --> pacoloredSmokeMagenta -``` diff --git a/palettes/atmosphere/coloredSmokeMagenta/package.dist.json b/palettes/atmosphere/coloredSmokeMagenta/package.dist.json index 0d298255ecf..28c15b8523c 100644 --- a/palettes/atmosphere/coloredSmokeMagenta/package.dist.json +++ b/palettes/atmosphere/coloredSmokeMagenta/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-colored-smoke-magenta", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles colored smoke - magenta palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.colored-smoke-magenta.min.js", - "unpkg": "tsparticles.palette.colored-smoke-magenta.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/atmosphere/coloredSmokeMagenta/package.json b/palettes/atmosphere/coloredSmokeMagenta/package.json index d947eeb9aae..de85e3711dc 100644 --- a/palettes/atmosphere/coloredSmokeMagenta/package.json +++ b/palettes/atmosphere/coloredSmokeMagenta/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-colored-smoke-magenta", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles colored smoke - magenta palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/atmosphere/coloredSmokeMagenta/rollup.config.js b/palettes/atmosphere/coloredSmokeMagenta/rollup.config.js new file mode 100644 index 00000000000..50f97ec83a1 --- /dev/null +++ b/palettes/atmosphere/coloredSmokeMagenta/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-coloredSmokeMagenta", + paletteName: "ColoredSmokeMagenta Palette", + version, +}); diff --git a/palettes/atmosphere/coloredSmokeMagenta/src/browser.ts b/palettes/atmosphere/coloredSmokeMagenta/src/browser.ts new file mode 100644 index 00000000000..b7cd37cd68b --- /dev/null +++ b/palettes/atmosphere/coloredSmokeMagenta/src/browser.ts @@ -0,0 +1,10 @@ +import { loadColoredSmokeMagentaPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadColoredSmokeMagentaPalette?: typeof loadColoredSmokeMagentaPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadColoredSmokeMagentaPalette = loadColoredSmokeMagentaPalette; + +export * from "./index.js"; diff --git a/palettes/atmosphere/coloredSmokeMagenta/src/index.lazy.ts b/palettes/atmosphere/coloredSmokeMagenta/src/index.lazy.ts new file mode 100644 index 00000000000..9c0807d633e --- /dev/null +++ b/palettes/atmosphere/coloredSmokeMagenta/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "colored-smoke-magenta"; + +/** + * @param engine - + */ +export async function loadColoredSmokeMagentaPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/atmosphere/coloredSmokeMagenta/src/index.ts b/palettes/atmosphere/coloredSmokeMagenta/src/index.ts index ae1c0b8cd50..7a222023508 100644 --- a/palettes/atmosphere/coloredSmokeMagenta/src/index.ts +++ b/palettes/atmosphere/coloredSmokeMagenta/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "colored-smoke-magenta"; @@ -6,9 +7,7 @@ const paletteName = "colored-smoke-magenta"; * @param engine - */ export async function loadColoredSmokeMagentaPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/atmosphere/coloredSmokeMagenta/typedoc.json b/palettes/atmosphere/coloredSmokeMagenta/typedoc.json index 758d903045f..69b10a416d8 100644 --- a/palettes/atmosphere/coloredSmokeMagenta/typedoc.json +++ b/palettes/atmosphere/coloredSmokeMagenta/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Colored Smoke Magenta Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles ColoredSmokeMagenta Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/atmosphere/coloredSmokeMagenta/webpack.config.js b/palettes/atmosphere/coloredSmokeMagenta/webpack.config.js deleted file mode 100644 index effc40df0b5..00000000000 --- a/palettes/atmosphere/coloredSmokeMagenta/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-colored-smoke-magenta", - paletteName: "Colored Smoke Magenta Palette", - version, -}); diff --git a/palettes/atmosphere/coloredSmokeOrange/CHANGELOG.md b/palettes/atmosphere/coloredSmokeOrange/CHANGELOG.md index 6c503cb717e..219c948ae86 100644 --- a/palettes/atmosphere/coloredSmokeOrange/CHANGELOG.md +++ b/palettes/atmosphere/coloredSmokeOrange/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-colored-smoke-orange + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-colored-smoke-orange diff --git a/palettes/atmosphere/coloredSmokeOrange/README.md b/palettes/atmosphere/coloredSmokeOrange/README.md index bba7c3051af..15cb5dffa8a 100644 --- a/palettes/atmosphere/coloredSmokeOrange/README.md +++ b/palettes/atmosphere/coloredSmokeOrange/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Colored Smoke Orange Palette +# tsParticles ColoredSmokeOrange Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-colored-smoke-orange/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-colored-smoke-orange) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-colored-smoke-orange.svg)](https://www.npmjs.com/package/@tsparticles/palette-colored-smoke-orange) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-colored-smoke-orange)](https://www.npmjs.com/package/@tsparticles/palette-colored-smoke-orange) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-coloredSmokeOrange/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-coloredSmokeOrange) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-coloredSmokeOrange.svg)](https://www.npmjs.com/package/@tsparticles/palette-coloredSmokeOrange) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-coloredSmokeOrange) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke orange. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/atmosphere/coloredSmokeOrange/images/sample.png)](https://particles.js.org/samples/palettes/colored-smoke-orange) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/atmosphere/coloredSmokeOrange/images/sample.png)](https://particles.js.org/samples/palettes/coloredSmokeOrange) ## Colors @@ -75,7 +75,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -97,7 +97,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "colored-smoke-orange", + palette: "coloredSmokeOrange", }; await engine.load({ diff --git a/palettes/atmosphere/coloredSmokeOrange/images/sample.png b/palettes/atmosphere/coloredSmokeOrange/images/sample.png index e62d3b5eab4..c8479c04599 100644 Binary files a/palettes/atmosphere/coloredSmokeOrange/images/sample.png and b/palettes/atmosphere/coloredSmokeOrange/images/sample.png differ diff --git a/palettes/atmosphere/coloredSmokeOrange/package.dist.json b/palettes/atmosphere/coloredSmokeOrange/package.dist.json index 120fd97264c..efb6ea98908 100644 --- a/palettes/atmosphere/coloredSmokeOrange/package.dist.json +++ b/palettes/atmosphere/coloredSmokeOrange/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-colored-smoke-orange", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles colored smoke orange palette", "homepage": "https://particles.js.org", "repository": { @@ -95,14 +95,22 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "type": "module", - "jsdelivr": "tsparticles.palette-colored-smoke-orange.min.js", - "unpkg": "tsparticles.palette-colored-smoke-orange.min.js", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" } diff --git a/palettes/atmosphere/coloredSmokeOrange/package.json b/palettes/atmosphere/coloredSmokeOrange/package.json index 4166a1e7537..bc314865622 100644 --- a/palettes/atmosphere/coloredSmokeOrange/package.json +++ b/palettes/atmosphere/coloredSmokeOrange/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-colored-smoke-orange", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles colored smoke orange palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/atmosphere/coloredSmokeOrange/rollup.config.js b/palettes/atmosphere/coloredSmokeOrange/rollup.config.js new file mode 100644 index 00000000000..15ffd98b60a --- /dev/null +++ b/palettes/atmosphere/coloredSmokeOrange/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-coloredSmokeOrange", + paletteName: "ColoredSmokeOrange Palette", + version, +}); diff --git a/palettes/atmosphere/coloredSmokeOrange/src/browser.ts b/palettes/atmosphere/coloredSmokeOrange/src/browser.ts new file mode 100644 index 00000000000..6b3465b1988 --- /dev/null +++ b/palettes/atmosphere/coloredSmokeOrange/src/browser.ts @@ -0,0 +1,10 @@ +import { loadColoredSmokeOrangePalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadColoredSmokeOrangePalette?: typeof loadColoredSmokeOrangePalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadColoredSmokeOrangePalette = loadColoredSmokeOrangePalette; + +export * from "./index.js"; diff --git a/palettes/atmosphere/coloredSmokeOrange/src/index.lazy.ts b/palettes/atmosphere/coloredSmokeOrange/src/index.lazy.ts new file mode 100644 index 00000000000..79ee73b0368 --- /dev/null +++ b/palettes/atmosphere/coloredSmokeOrange/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "colored-smoke-orange"; + +/** + * @param engine - + */ +export async function loadColoredSmokeOrangePalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/atmosphere/coloredSmokeOrange/src/index.ts b/palettes/atmosphere/coloredSmokeOrange/src/index.ts index 6a712b9310a..9cda5314684 100644 --- a/palettes/atmosphere/coloredSmokeOrange/src/index.ts +++ b/palettes/atmosphere/coloredSmokeOrange/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "colored-smoke-orange"; @@ -6,9 +7,7 @@ const paletteName = "colored-smoke-orange"; * @param engine - */ export async function loadColoredSmokeOrangePalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/atmosphere/coloredSmokeOrange/typedoc.json b/palettes/atmosphere/coloredSmokeOrange/typedoc.json index 5afab47f263..adfe36c031a 100644 --- a/palettes/atmosphere/coloredSmokeOrange/typedoc.json +++ b/palettes/atmosphere/coloredSmokeOrange/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Colored Smoke Orange Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles ColoredSmokeOrange Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/atmosphere/coloredSmokeOrange/webpack.config.js b/palettes/atmosphere/coloredSmokeOrange/webpack.config.js deleted file mode 100644 index aa902893054..00000000000 --- a/palettes/atmosphere/coloredSmokeOrange/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-colored-smoke-orange", - paletteName: "Colored Smoke Orange Palette", - version, -}); diff --git a/palettes/atmosphere/coloredSmokePurple/CHANGELOG.md b/palettes/atmosphere/coloredSmokePurple/CHANGELOG.md index 4ecf625026c..2e82f6a6f34 100644 --- a/palettes/atmosphere/coloredSmokePurple/CHANGELOG.md +++ b/palettes/atmosphere/coloredSmokePurple/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-colored-smoke-purple + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-colored-smoke-purple diff --git a/palettes/atmosphere/coloredSmokePurple/README.md b/palettes/atmosphere/coloredSmokePurple/README.md index d71c65d7a9e..58aff3df7fc 100644 --- a/palettes/atmosphere/coloredSmokePurple/README.md +++ b/palettes/atmosphere/coloredSmokePurple/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Colored Smoke Purple Palette +# tsParticles ColoredSmokePurple Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-colored-smoke-purple/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-colored-smoke-purple) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-colored-smoke-purple.svg)](https://www.npmjs.com/package/@tsparticles/palette-colored-smoke-purple) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-colored-smoke-purple)](https://www.npmjs.com/package/@tsparticles/palette-colored-smoke-purple) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-coloredSmokePurple/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-coloredSmokePurple) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-coloredSmokePurple.svg)](https://www.npmjs.com/package/@tsparticles/palette-coloredSmokePurple) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-coloredSmokePurple) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke purple. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/atmosphere/coloredSmokePurple/images/sample.png)](https://particles.js.org/samples/palettes/colored-smoke-purple) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/atmosphere/coloredSmokePurple/images/sample.png)](https://particles.js.org/samples/palettes/coloredSmokePurple) ## Colors @@ -75,7 +75,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -97,7 +97,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "colored-smoke-purple", + palette: "coloredSmokePurple", }; await engine.load({ diff --git a/palettes/atmosphere/coloredSmokePurple/images/sample.png b/palettes/atmosphere/coloredSmokePurple/images/sample.png index b60b4043776..cecb7920355 100644 Binary files a/palettes/atmosphere/coloredSmokePurple/images/sample.png and b/palettes/atmosphere/coloredSmokePurple/images/sample.png differ diff --git a/palettes/atmosphere/coloredSmokePurple/package.dist.json b/palettes/atmosphere/coloredSmokePurple/package.dist.json index 220401ef56e..0034c9fd2fd 100644 --- a/palettes/atmosphere/coloredSmokePurple/package.dist.json +++ b/palettes/atmosphere/coloredSmokePurple/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-colored-smoke-purple", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles colored smoke purple palette", "homepage": "https://particles.js.org", "repository": { @@ -95,14 +95,22 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "type": "module", - "jsdelivr": "tsparticles.palette-colored-smoke-purple.min.js", - "unpkg": "tsparticles.palette-colored-smoke-purple.min.js", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" } diff --git a/palettes/atmosphere/coloredSmokePurple/package.json b/palettes/atmosphere/coloredSmokePurple/package.json index bc9ef737aa6..109ba09adcf 100644 --- a/palettes/atmosphere/coloredSmokePurple/package.json +++ b/palettes/atmosphere/coloredSmokePurple/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-colored-smoke-purple", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles colored smoke purple palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/atmosphere/coloredSmokePurple/rollup.config.js b/palettes/atmosphere/coloredSmokePurple/rollup.config.js new file mode 100644 index 00000000000..575bac6b74b --- /dev/null +++ b/palettes/atmosphere/coloredSmokePurple/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-coloredSmokePurple", + paletteName: "ColoredSmokePurple Palette", + version, +}); diff --git a/palettes/atmosphere/coloredSmokePurple/src/browser.ts b/palettes/atmosphere/coloredSmokePurple/src/browser.ts new file mode 100644 index 00000000000..ef1d17ac5a8 --- /dev/null +++ b/palettes/atmosphere/coloredSmokePurple/src/browser.ts @@ -0,0 +1,10 @@ +import { loadColoredSmokePurplePalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadColoredSmokePurplePalette?: typeof loadColoredSmokePurplePalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadColoredSmokePurplePalette = loadColoredSmokePurplePalette; + +export * from "./index.js"; diff --git a/palettes/atmosphere/coloredSmokePurple/src/index.lazy.ts b/palettes/atmosphere/coloredSmokePurple/src/index.lazy.ts new file mode 100644 index 00000000000..37dfbd1067f --- /dev/null +++ b/palettes/atmosphere/coloredSmokePurple/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "colored-smoke-purple"; + +/** + * @param engine - + */ +export async function loadColoredSmokePurplePalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/atmosphere/coloredSmokePurple/src/index.ts b/palettes/atmosphere/coloredSmokePurple/src/index.ts index 69604129e59..ef326e5af53 100644 --- a/palettes/atmosphere/coloredSmokePurple/src/index.ts +++ b/palettes/atmosphere/coloredSmokePurple/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "colored-smoke-purple"; @@ -6,9 +7,7 @@ const paletteName = "colored-smoke-purple"; * @param engine - */ export async function loadColoredSmokePurplePalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/atmosphere/coloredSmokePurple/typedoc.json b/palettes/atmosphere/coloredSmokePurple/typedoc.json index cae944b2616..f145ea733ef 100644 --- a/palettes/atmosphere/coloredSmokePurple/typedoc.json +++ b/palettes/atmosphere/coloredSmokePurple/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Colored Smoke Purple Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles ColoredSmokePurple Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/atmosphere/coloredSmokePurple/webpack.config.js b/palettes/atmosphere/coloredSmokePurple/webpack.config.js deleted file mode 100644 index e9282e751ce..00000000000 --- a/palettes/atmosphere/coloredSmokePurple/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-colored-smoke-purple", - paletteName: "Colored Smoke Purple Palette", - version, -}); diff --git a/palettes/atmosphere/coloredSmokeRainbow/CHANGELOG.md b/palettes/atmosphere/coloredSmokeRainbow/CHANGELOG.md index ef9e02787c5..82165547c11 100644 --- a/palettes/atmosphere/coloredSmokeRainbow/CHANGELOG.md +++ b/palettes/atmosphere/coloredSmokeRainbow/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-colored-smoke-rainbow + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-colored-smoke-rainbow diff --git a/palettes/atmosphere/coloredSmokeRainbow/README.md b/palettes/atmosphere/coloredSmokeRainbow/README.md index 09c874bd8a6..e1006b04e0a 100644 --- a/palettes/atmosphere/coloredSmokeRainbow/README.md +++ b/palettes/atmosphere/coloredSmokeRainbow/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Colored Smoke Rainbow Palette +# tsParticles ColoredSmokeRainbow Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-colored-smoke-rainbow/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-colored-smoke-rainbow) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-colored-smoke-rainbow.svg)](https://www.npmjs.com/package/@tsparticles/palette-colored-smoke-rainbow) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-colored-smoke-rainbow)](https://www.npmjs.com/package/@tsparticles/palette-colored-smoke-rainbow) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-coloredSmokeRainbow/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-coloredSmokeRainbow) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-coloredSmokeRainbow.svg)](https://www.npmjs.com/package/@tsparticles/palette-coloredSmokeRainbow) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-coloredSmokeRainbow) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke rainbow. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/atmosphere/coloredSmokeRainbow/images/sample.png)](https://particles.js.org/samples/palettes/colored-smoke-rainbow) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/atmosphere/coloredSmokeRainbow/images/sample.png)](https://particles.js.org/samples/palettes/coloredSmokeRainbow) ## Colors @@ -79,7 +79,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -101,7 +101,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "colored-smoke-rainbow", + palette: "coloredSmokeRainbow", }; await engine.load({ diff --git a/palettes/atmosphere/coloredSmokeRainbow/images/sample.png b/palettes/atmosphere/coloredSmokeRainbow/images/sample.png index 9f7cdad1817..6409ba2bffc 100644 Binary files a/palettes/atmosphere/coloredSmokeRainbow/images/sample.png and b/palettes/atmosphere/coloredSmokeRainbow/images/sample.png differ diff --git a/palettes/atmosphere/coloredSmokeRainbow/package.dist.json b/palettes/atmosphere/coloredSmokeRainbow/package.dist.json index 7917977738d..d4ce8eac7e4 100644 --- a/palettes/atmosphere/coloredSmokeRainbow/package.dist.json +++ b/palettes/atmosphere/coloredSmokeRainbow/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-colored-smoke-rainbow", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles colored smoke rainbow palette", "homepage": "https://particles.js.org", "repository": { @@ -95,14 +95,22 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "type": "module", - "jsdelivr": "tsparticles.palette-colored-smoke-rainbow.min.js", - "unpkg": "tsparticles.palette-colored-smoke-rainbow.min.js", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" } diff --git a/palettes/atmosphere/coloredSmokeRainbow/package.json b/palettes/atmosphere/coloredSmokeRainbow/package.json index 08d4a8100a4..4a543af4043 100644 --- a/palettes/atmosphere/coloredSmokeRainbow/package.json +++ b/palettes/atmosphere/coloredSmokeRainbow/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-colored-smoke-rainbow", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles colored smoke rainbow palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/atmosphere/coloredSmokeRainbow/rollup.config.js b/palettes/atmosphere/coloredSmokeRainbow/rollup.config.js new file mode 100644 index 00000000000..7433d2d7122 --- /dev/null +++ b/palettes/atmosphere/coloredSmokeRainbow/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-coloredSmokeRainbow", + paletteName: "ColoredSmokeRainbow Palette", + version, +}); diff --git a/palettes/atmosphere/coloredSmokeRainbow/src/browser.ts b/palettes/atmosphere/coloredSmokeRainbow/src/browser.ts new file mode 100644 index 00000000000..c7663e022c7 --- /dev/null +++ b/palettes/atmosphere/coloredSmokeRainbow/src/browser.ts @@ -0,0 +1,10 @@ +import { loadColoredSmokeRainbowPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadColoredSmokeRainbowPalette?: typeof loadColoredSmokeRainbowPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadColoredSmokeRainbowPalette = loadColoredSmokeRainbowPalette; + +export * from "./index.js"; diff --git a/palettes/atmosphere/coloredSmokeRainbow/src/index.lazy.ts b/palettes/atmosphere/coloredSmokeRainbow/src/index.lazy.ts new file mode 100644 index 00000000000..b62c35b27ec --- /dev/null +++ b/palettes/atmosphere/coloredSmokeRainbow/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "colored-smoke-rainbow"; + +/** + * @param engine - + */ +export async function loadColoredSmokeRainbowPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/atmosphere/coloredSmokeRainbow/src/index.ts b/palettes/atmosphere/coloredSmokeRainbow/src/index.ts index 5b73f645abb..305372f8085 100644 --- a/palettes/atmosphere/coloredSmokeRainbow/src/index.ts +++ b/palettes/atmosphere/coloredSmokeRainbow/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "colored-smoke-rainbow"; @@ -6,9 +7,7 @@ const paletteName = "colored-smoke-rainbow"; * @param engine - */ export async function loadColoredSmokeRainbowPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/atmosphere/coloredSmokeRainbow/typedoc.json b/palettes/atmosphere/coloredSmokeRainbow/typedoc.json index 26fad6800d4..33c2844c07f 100644 --- a/palettes/atmosphere/coloredSmokeRainbow/typedoc.json +++ b/palettes/atmosphere/coloredSmokeRainbow/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Colored Smoke Rainbow Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles ColoredSmokeRainbow Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/atmosphere/coloredSmokeRainbow/webpack.config.js b/palettes/atmosphere/coloredSmokeRainbow/webpack.config.js deleted file mode 100644 index 584587d9593..00000000000 --- a/palettes/atmosphere/coloredSmokeRainbow/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-colored-smoke-rainbow", - paletteName: "Colored Smoke Rainbow Palette", - version, -}); diff --git a/palettes/confetti/confettiMonochromeBlue/.browserslistrc b/palettes/atmosphere/coloredSmokeRed/.browserslistrc similarity index 100% rename from palettes/confetti/confettiMonochromeBlue/.browserslistrc rename to palettes/atmosphere/coloredSmokeRed/.browserslistrc diff --git a/palettes/atmosphere/coloredSmokeRed/CHANGELOG.md b/palettes/atmosphere/coloredSmokeRed/CHANGELOG.md new file mode 100644 index 00000000000..ec29ed7a2c7 --- /dev/null +++ b/palettes/atmosphere/coloredSmokeRed/CHANGELOG.md @@ -0,0 +1,12 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-colored-smoke-red + +# [4.0.0-beta.12] + +**Note:** Initial version of package @tsparticles/palette-colored-smoke-red diff --git a/palettes/confetti/confettiWinter/LICENSE b/palettes/atmosphere/coloredSmokeRed/LICENSE similarity index 100% rename from palettes/confetti/confettiWinter/LICENSE rename to palettes/atmosphere/coloredSmokeRed/LICENSE diff --git a/palettes/atmosphere/coloredSmokeRed/README.md b/palettes/atmosphere/coloredSmokeRed/README.md new file mode 100644 index 00000000000..eb918ad8e61 --- /dev/null +++ b/palettes/atmosphere/coloredSmokeRed/README.md @@ -0,0 +1,122 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles ColoredSmokeRed Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-coloredSmokeRed/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-coloredSmokeRed) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-coloredSmokeRed.svg)](https://www.npmjs.com/package/@tsparticles/palette-coloredSmokeRed) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-coloredSmokeRed) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/atmosphere/coloredSmokeRed/images/sample.png)](https://particles.js.org/samples/palettes/coloredSmokeRed) + +## Colors + + + + + + + + + + + + + + + + + + + + +
+
+ #110000 +
+
+ #330000 +
+
+ #661111 +
+
+ #992222 +
+
+ #CC4444 +
+
+ #FF8888 +
+
+ Background
+ #090000 +
+ Blend mode: source-over | Fill: true +
+ +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadColoredSmokeRedPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadColoredSmokeRedPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "coloredSmokeRed", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadColoredSmokeRedPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/atmosphere/coloredSmokeRed/eslint.config.js b/palettes/atmosphere/coloredSmokeRed/eslint.config.js new file mode 100644 index 00000000000..248b4d3dd36 --- /dev/null +++ b/palettes/atmosphere/coloredSmokeRed/eslint.config.js @@ -0,0 +1,6 @@ +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; +import { defineConfig } from "eslint/config"; + +export default defineConfig([ + tsParticlesESLintConfig, +]); diff --git a/palettes/atmosphere/coloredSmokeRed/images/sample.png b/palettes/atmosphere/coloredSmokeRed/images/sample.png new file mode 100644 index 00000000000..f905369a404 Binary files /dev/null and b/palettes/atmosphere/coloredSmokeRed/images/sample.png differ diff --git a/palettes/atmosphere/coloredSmokeRed/package.dist.json b/palettes/atmosphere/coloredSmokeRed/package.dist.json new file mode 100644 index 00000000000..076e91933b5 --- /dev/null +++ b/palettes/atmosphere/coloredSmokeRed/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-colored-smoke-red", + "version": "4.0.0-beta.15", + "description": "tsParticles colored smoke red palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/atmosphere/coloredSmokeRed" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/atmosphere/coloredSmokeRed/package.json b/palettes/atmosphere/coloredSmokeRed/package.json new file mode 100644 index 00000000000..e0f826c7c5b --- /dev/null +++ b/palettes/atmosphere/coloredSmokeRed/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-colored-smoke-red", + "version": "4.0.0-beta.15", + "description": "tsParticles colored smoke red palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/atmosphere/coloredSmokeRed" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/atmosphere/coloredSmokeRed/rollup.config.js b/palettes/atmosphere/coloredSmokeRed/rollup.config.js new file mode 100644 index 00000000000..c772d5c8c61 --- /dev/null +++ b/palettes/atmosphere/coloredSmokeRed/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-coloredSmokeRed", + paletteName: "ColoredSmokeRed Palette", + version, +}); diff --git a/palettes/atmosphere/coloredSmokeRed/src/browser.ts b/palettes/atmosphere/coloredSmokeRed/src/browser.ts new file mode 100644 index 00000000000..fb74e64fadd --- /dev/null +++ b/palettes/atmosphere/coloredSmokeRed/src/browser.ts @@ -0,0 +1,10 @@ +import { loadColoredSmokeRedPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadColoredSmokeRedPalette?: typeof loadColoredSmokeRedPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadColoredSmokeRedPalette = loadColoredSmokeRedPalette; + +export * from "./index.js"; diff --git a/palettes/atmosphere/coloredSmokeRed/src/index.lazy.ts b/palettes/atmosphere/coloredSmokeRed/src/index.lazy.ts new file mode 100644 index 00000000000..12aded83153 --- /dev/null +++ b/palettes/atmosphere/coloredSmokeRed/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "colored-smoke-red"; + +/** + * @param engine - + */ +export async function loadColoredSmokeRedPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/atmosphere/coloredSmokeRed/src/index.ts b/palettes/atmosphere/coloredSmokeRed/src/index.ts new file mode 100644 index 00000000000..4f7f3b2657f --- /dev/null +++ b/palettes/atmosphere/coloredSmokeRed/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "colored-smoke-red"; + +/** + * @param engine - + */ +export async function loadColoredSmokeRedPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/atmosphere/coloredSmokeRed/src/options.ts b/palettes/atmosphere/coloredSmokeRed/src/options.ts new file mode 100644 index 00000000000..4bf5f16142d --- /dev/null +++ b/palettes/atmosphere/coloredSmokeRed/src/options.ts @@ -0,0 +1,20 @@ +import { type IPalette } from "@tsparticles/engine"; + +export const options: IPalette = { + name: "Colored Smoke - Red", + background: "#090000", + blendMode: "source-over", + colors: { + fill: { + enable: true, + value: [ + "#110000", + "#330000", + "#661111", + "#992222", + "#CC4444", + "#FF8888", + ], + }, + }, +}; diff --git a/palettes/confetti/confettiGold/tsconfig.base.json b/palettes/atmosphere/coloredSmokeRed/tsconfig.base.json similarity index 100% rename from palettes/confetti/confettiGold/tsconfig.base.json rename to palettes/atmosphere/coloredSmokeRed/tsconfig.base.json diff --git a/palettes/atmosphere/coloredSmokeRed/tsconfig.browser.json b/palettes/atmosphere/coloredSmokeRed/tsconfig.browser.json new file mode 100644 index 00000000000..80d78351a7d --- /dev/null +++ b/palettes/atmosphere/coloredSmokeRed/tsconfig.browser.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.browser.json"], + "compilerOptions": { + "outDir": "./dist/browser" + } +} diff --git a/palettes/atmosphere/coloredSmokeRed/tsconfig.json b/palettes/atmosphere/coloredSmokeRed/tsconfig.json new file mode 100644 index 00000000000..630bf828704 --- /dev/null +++ b/palettes/atmosphere/coloredSmokeRed/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.json"], + "compilerOptions": { + "outDir": "./dist/cjs" + } +} diff --git a/palettes/atmosphere/coloredSmokeRed/tsconfig.module.json b/palettes/atmosphere/coloredSmokeRed/tsconfig.module.json new file mode 100644 index 00000000000..bb5035a8403 --- /dev/null +++ b/palettes/atmosphere/coloredSmokeRed/tsconfig.module.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.module.json"], + "compilerOptions": { + "outDir": "./dist/esm" + } +} diff --git a/palettes/atmosphere/coloredSmokeRed/tsconfig.types.json b/palettes/atmosphere/coloredSmokeRed/tsconfig.types.json new file mode 100644 index 00000000000..570e9e9d8c6 --- /dev/null +++ b/palettes/atmosphere/coloredSmokeRed/tsconfig.types.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.types.json"], + "compilerOptions": { + "outDir": "./dist/types" + } +} diff --git a/palettes/atmosphere/coloredSmokeRed/typedoc.json b/palettes/atmosphere/coloredSmokeRed/typedoc.json new file mode 100644 index 00000000000..bb7813b0850 --- /dev/null +++ b/palettes/atmosphere/coloredSmokeRed/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles ColoredSmokeRed Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/atmosphere/coloredSmokeTeal/CHANGELOG.md b/palettes/atmosphere/coloredSmokeTeal/CHANGELOG.md index 2b0afdcd668..e66e57d4713 100644 --- a/palettes/atmosphere/coloredSmokeTeal/CHANGELOG.md +++ b/palettes/atmosphere/coloredSmokeTeal/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-colored-smoke-teal + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-colored-smoke-teal diff --git a/palettes/atmosphere/coloredSmokeTeal/README.md b/palettes/atmosphere/coloredSmokeTeal/README.md index c64ff39c279..ab1bfd25dfa 100644 --- a/palettes/atmosphere/coloredSmokeTeal/README.md +++ b/palettes/atmosphere/coloredSmokeTeal/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Colored Smoke Teal Palette +# tsParticles ColoredSmokeTeal Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-colored-smoke-teal/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-colored-smoke-teal) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-colored-smoke-teal.svg)](https://www.npmjs.com/package/@tsparticles/palette-colored-smoke-teal) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-colored-smoke-teal)](https://www.npmjs.com/package/@tsparticles/palette-colored-smoke-teal) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-coloredSmokeTeal/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-coloredSmokeTeal) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-coloredSmokeTeal.svg)](https://www.npmjs.com/package/@tsparticles/palette-coloredSmokeTeal) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-coloredSmokeTeal) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke - teal. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/coloredSmokeTeal/images/sample.png)](https://particles.js.org/samples/palettes/colored-smoke-teal) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/atmosphere/coloredSmokeTeal/images/sample.png)](https://particles.js.org/samples/palettes/coloredSmokeTeal) ## Colors @@ -69,7 +69,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -91,7 +91,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "colored-smoke-teal", + palette: "coloredSmokeTeal", }; await engine.load({ @@ -106,47 +106,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "colored-smoke-teal", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadColoredSmokeTealPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadColoredSmokeTealPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadColoredSmokeTealPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -pacoloredSmokeTeal[Colored Smoke Teal] -end - -e[tsParticles Engine] --> pacoloredSmokeTeal -``` diff --git a/palettes/atmosphere/coloredSmokeTeal/package.dist.json b/palettes/atmosphere/coloredSmokeTeal/package.dist.json index 3fe4bf00328..5c46d3c3540 100644 --- a/palettes/atmosphere/coloredSmokeTeal/package.dist.json +++ b/palettes/atmosphere/coloredSmokeTeal/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-colored-smoke-teal", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles colored smoke - teal palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.colored-smoke-teal.min.js", - "unpkg": "tsparticles.palette.colored-smoke-teal.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/atmosphere/coloredSmokeTeal/package.json b/palettes/atmosphere/coloredSmokeTeal/package.json index f530c85efd0..3991b5ba31b 100644 --- a/palettes/atmosphere/coloredSmokeTeal/package.json +++ b/palettes/atmosphere/coloredSmokeTeal/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-colored-smoke-teal", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles colored smoke - teal palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/atmosphere/coloredSmokeTeal/rollup.config.js b/palettes/atmosphere/coloredSmokeTeal/rollup.config.js new file mode 100644 index 00000000000..1752b06719c --- /dev/null +++ b/palettes/atmosphere/coloredSmokeTeal/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-coloredSmokeTeal", + paletteName: "ColoredSmokeTeal Palette", + version, +}); diff --git a/palettes/atmosphere/coloredSmokeTeal/src/browser.ts b/palettes/atmosphere/coloredSmokeTeal/src/browser.ts new file mode 100644 index 00000000000..214916402fc --- /dev/null +++ b/palettes/atmosphere/coloredSmokeTeal/src/browser.ts @@ -0,0 +1,10 @@ +import { loadColoredSmokeTealPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadColoredSmokeTealPalette?: typeof loadColoredSmokeTealPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadColoredSmokeTealPalette = loadColoredSmokeTealPalette; + +export * from "./index.js"; diff --git a/palettes/atmosphere/coloredSmokeTeal/src/index.lazy.ts b/palettes/atmosphere/coloredSmokeTeal/src/index.lazy.ts new file mode 100644 index 00000000000..f9785b1448f --- /dev/null +++ b/palettes/atmosphere/coloredSmokeTeal/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "colored-smoke-teal"; + +/** + * @param engine - + */ +export async function loadColoredSmokeTealPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/atmosphere/coloredSmokeTeal/src/index.ts b/palettes/atmosphere/coloredSmokeTeal/src/index.ts index 553e2d75591..dbfd993d9f4 100644 --- a/palettes/atmosphere/coloredSmokeTeal/src/index.ts +++ b/palettes/atmosphere/coloredSmokeTeal/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "colored-smoke-teal"; @@ -6,9 +7,7 @@ const paletteName = "colored-smoke-teal"; * @param engine - */ export async function loadColoredSmokeTealPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/atmosphere/coloredSmokeTeal/typedoc.json b/palettes/atmosphere/coloredSmokeTeal/typedoc.json index 49c3960ce32..1f254c2328a 100644 --- a/palettes/atmosphere/coloredSmokeTeal/typedoc.json +++ b/palettes/atmosphere/coloredSmokeTeal/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Colored Smoke Teal Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles ColoredSmokeTeal Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/atmosphere/coloredSmokeTeal/webpack.config.js b/palettes/atmosphere/coloredSmokeTeal/webpack.config.js deleted file mode 100644 index d73d953a706..00000000000 --- a/palettes/atmosphere/coloredSmokeTeal/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-colored-smoke-teal", - paletteName: "Colored Smoke Teal Palette", - version, -}); diff --git a/palettes/atmosphere/dustHaze/CHANGELOG.md b/palettes/atmosphere/dustHaze/CHANGELOG.md index a114e83d896..0bea1767cad 100644 --- a/palettes/atmosphere/dustHaze/CHANGELOG.md +++ b/palettes/atmosphere/dustHaze/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-dust-haze + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-dust-haze diff --git a/palettes/atmosphere/dustHaze/README.md b/palettes/atmosphere/dustHaze/README.md index 7c0937c51e4..767f970bca2 100644 --- a/palettes/atmosphere/dustHaze/README.md +++ b/palettes/atmosphere/dustHaze/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Dust Haze Palette +# tsParticles DustHaze Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-dust-haze/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-dust-haze) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-dust-haze.svg)](https://www.npmjs.com/package/@tsparticles/palette-dust-haze) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-dust-haze)](https://www.npmjs.com/package/@tsparticles/palette-dust-haze) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-dustHaze/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-dustHaze) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-dustHaze.svg)](https://www.npmjs.com/package/@tsparticles/palette-dustHaze) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-dustHaze) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for dust haze atmosphere. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/atmosphere/dustHaze/images/sample.png)](https://particles.js.org/samples/palettes/dust-haze) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/atmosphere/dustHaze/images/sample.png)](https://particles.js.org/samples/palettes/dustHaze) ## Colors @@ -75,7 +75,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -97,7 +97,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "dust-haze", + palette: "dustHaze", }; await engine.load({ diff --git a/palettes/atmosphere/dustHaze/images/sample.png b/palettes/atmosphere/dustHaze/images/sample.png index fe0c7e366a0..ea1c1abb2e9 100644 Binary files a/palettes/atmosphere/dustHaze/images/sample.png and b/palettes/atmosphere/dustHaze/images/sample.png differ diff --git a/palettes/atmosphere/dustHaze/package.dist.json b/palettes/atmosphere/dustHaze/package.dist.json index 3ea77ceb8bc..ad02435d497 100644 --- a/palettes/atmosphere/dustHaze/package.dist.json +++ b/palettes/atmosphere/dustHaze/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-dust-haze", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles dust haze atmosphere palette", "homepage": "https://particles.js.org", "repository": { @@ -95,14 +95,22 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "type": "module", - "jsdelivr": "tsparticles.palette-dust-haze.min.js", - "unpkg": "tsparticles.palette-dust-haze.min.js", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" } diff --git a/palettes/atmosphere/dustHaze/package.json b/palettes/atmosphere/dustHaze/package.json index 30ad775204b..faa105aa560 100644 --- a/palettes/atmosphere/dustHaze/package.json +++ b/palettes/atmosphere/dustHaze/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-dust-haze", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles dust haze atmosphere palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/atmosphere/dustHaze/rollup.config.js b/palettes/atmosphere/dustHaze/rollup.config.js new file mode 100644 index 00000000000..564330e36b2 --- /dev/null +++ b/palettes/atmosphere/dustHaze/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-dustHaze", + paletteName: "DustHaze Palette", + version, +}); diff --git a/palettes/atmosphere/dustHaze/src/browser.ts b/palettes/atmosphere/dustHaze/src/browser.ts new file mode 100644 index 00000000000..aac38a8aa35 --- /dev/null +++ b/palettes/atmosphere/dustHaze/src/browser.ts @@ -0,0 +1,10 @@ +import { loadDustHazePalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadDustHazePalette?: typeof loadDustHazePalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadDustHazePalette = loadDustHazePalette; + +export * from "./index.js"; diff --git a/palettes/atmosphere/dustHaze/src/index.lazy.ts b/palettes/atmosphere/dustHaze/src/index.lazy.ts new file mode 100644 index 00000000000..32845384f40 --- /dev/null +++ b/palettes/atmosphere/dustHaze/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "dust-haze"; + +/** + * @param engine - + */ +export async function loadDustHazePalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/atmosphere/dustHaze/src/index.ts b/palettes/atmosphere/dustHaze/src/index.ts index 63d47a029fb..7e7ea16b778 100644 --- a/palettes/atmosphere/dustHaze/src/index.ts +++ b/palettes/atmosphere/dustHaze/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "dust-haze"; @@ -6,9 +7,7 @@ const paletteName = "dust-haze"; * @param engine - */ export async function loadDustHazePalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/atmosphere/dustHaze/typedoc.json b/palettes/atmosphere/dustHaze/typedoc.json index 47cd38c9a03..9dcf30a6dd3 100644 --- a/palettes/atmosphere/dustHaze/typedoc.json +++ b/palettes/atmosphere/dustHaze/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Dust Haze Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles DustHaze Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/atmosphere/dustHaze/webpack.config.js b/palettes/atmosphere/dustHaze/webpack.config.js deleted file mode 100644 index 52c351a1493..00000000000 --- a/palettes/atmosphere/dustHaze/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-dust-haze", - paletteName: "Dust Haze Palette", - version, -}); diff --git a/palettes/atmosphere/fogMorning/CHANGELOG.md b/palettes/atmosphere/fogMorning/CHANGELOG.md index fc6bf468ecb..7c65b7ad2d6 100644 --- a/palettes/atmosphere/fogMorning/CHANGELOG.md +++ b/palettes/atmosphere/fogMorning/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-fog-morning + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-fog-morning diff --git a/palettes/atmosphere/fogMorning/README.md b/palettes/atmosphere/fogMorning/README.md index 858fdf564e6..5e86f000a0b 100644 --- a/palettes/atmosphere/fogMorning/README.md +++ b/palettes/atmosphere/fogMorning/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Fog Morning Palette +# tsParticles FogMorning Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-fog-morning/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-fog-morning) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-fog-morning.svg)](https://www.npmjs.com/package/@tsparticles/palette-fog-morning) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-fog-morning)](https://www.npmjs.com/package/@tsparticles/palette-fog-morning) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-fogMorning/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-fogMorning) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-fogMorning.svg)](https://www.npmjs.com/package/@tsparticles/palette-fogMorning) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-fogMorning) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for morning fog atmosphere. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/atmosphere/fogMorning/images/sample.png)](https://particles.js.org/samples/palettes/fog-morning) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/atmosphere/fogMorning/images/sample.png)](https://particles.js.org/samples/palettes/fogMorning) ## Colors @@ -75,7 +75,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -97,7 +97,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "fog-morning", + palette: "fogMorning", }; await engine.load({ diff --git a/palettes/atmosphere/fogMorning/images/sample.png b/palettes/atmosphere/fogMorning/images/sample.png index 84129319ae3..dc3bdae5c46 100644 Binary files a/palettes/atmosphere/fogMorning/images/sample.png and b/palettes/atmosphere/fogMorning/images/sample.png differ diff --git a/palettes/atmosphere/fogMorning/package.dist.json b/palettes/atmosphere/fogMorning/package.dist.json index b9301f958fb..c9a797a60da 100644 --- a/palettes/atmosphere/fogMorning/package.dist.json +++ b/palettes/atmosphere/fogMorning/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-fog-morning", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles morning fog atmosphere palette", "homepage": "https://particles.js.org", "repository": { @@ -95,14 +95,22 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "type": "module", - "jsdelivr": "tsparticles.palette-fog-morning.min.js", - "unpkg": "tsparticles.palette-fog-morning.min.js", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" } diff --git a/palettes/atmosphere/fogMorning/package.json b/palettes/atmosphere/fogMorning/package.json index a7646def7bf..84857fdd995 100644 --- a/palettes/atmosphere/fogMorning/package.json +++ b/palettes/atmosphere/fogMorning/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-fog-morning", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles morning fog atmosphere palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/atmosphere/fogMorning/rollup.config.js b/palettes/atmosphere/fogMorning/rollup.config.js new file mode 100644 index 00000000000..3ac30948a8d --- /dev/null +++ b/palettes/atmosphere/fogMorning/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-fogMorning", + paletteName: "FogMorning Palette", + version, +}); diff --git a/palettes/atmosphere/fogMorning/src/browser.ts b/palettes/atmosphere/fogMorning/src/browser.ts new file mode 100644 index 00000000000..aa473b2c14a --- /dev/null +++ b/palettes/atmosphere/fogMorning/src/browser.ts @@ -0,0 +1,10 @@ +import { loadFogMorningPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadFogMorningPalette?: typeof loadFogMorningPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadFogMorningPalette = loadFogMorningPalette; + +export * from "./index.js"; diff --git a/palettes/atmosphere/fogMorning/src/index.lazy.ts b/palettes/atmosphere/fogMorning/src/index.lazy.ts new file mode 100644 index 00000000000..35e1b131a72 --- /dev/null +++ b/palettes/atmosphere/fogMorning/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "fog-morning"; + +/** + * @param engine - + */ +export async function loadFogMorningPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/atmosphere/fogMorning/src/index.ts b/palettes/atmosphere/fogMorning/src/index.ts index a54946fbe3d..64447a55904 100644 --- a/palettes/atmosphere/fogMorning/src/index.ts +++ b/palettes/atmosphere/fogMorning/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "fog-morning"; @@ -6,9 +7,7 @@ const paletteName = "fog-morning"; * @param engine - */ export async function loadFogMorningPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/atmosphere/fogMorning/typedoc.json b/palettes/atmosphere/fogMorning/typedoc.json index 468192c4dc9..3c66bc8f54e 100644 --- a/palettes/atmosphere/fogMorning/typedoc.json +++ b/palettes/atmosphere/fogMorning/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Fog Morning Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles FogMorning Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/atmosphere/fogMorning/webpack.config.js b/palettes/atmosphere/fogMorning/webpack.config.js deleted file mode 100644 index f4557cd2aad..00000000000 --- a/palettes/atmosphere/fogMorning/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-fog-morning", - paletteName: "Fog Morning Palette", - version, -}); diff --git a/palettes/atmosphere/volcanicAsh/CHANGELOG.md b/palettes/atmosphere/volcanicAsh/CHANGELOG.md index ca6143c303e..4b794ea08f5 100644 --- a/palettes/atmosphere/volcanicAsh/CHANGELOG.md +++ b/palettes/atmosphere/volcanicAsh/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-volcanic-ash + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-volcanic-ash diff --git a/palettes/atmosphere/volcanicAsh/README.md b/palettes/atmosphere/volcanicAsh/README.md index 1fd45221d0c..69c5663291e 100644 --- a/palettes/atmosphere/volcanicAsh/README.md +++ b/palettes/atmosphere/volcanicAsh/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Volcanic Ash Palette +# tsParticles VolcanicAsh Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-volcanic-ash/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-volcanic-ash) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-volcanic-ash.svg)](https://www.npmjs.com/package/@tsparticles/palette-volcanic-ash) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-volcanic-ash)](https://www.npmjs.com/package/@tsparticles/palette-volcanic-ash) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-volcanicAsh/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-volcanicAsh) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-volcanicAsh.svg)](https://www.npmjs.com/package/@tsparticles/palette-volcanicAsh) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-volcanicAsh) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for volcanic ash atmosphere. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/atmosphere/volcanicAsh/images/sample.png)](https://particles.js.org/samples/palettes/volcanic-ash) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/atmosphere/volcanicAsh/images/sample.png)](https://particles.js.org/samples/palettes/volcanicAsh) ## Colors @@ -83,7 +83,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -105,7 +105,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "volcanic-ash", + palette: "volcanicAsh", }; await engine.load({ diff --git a/palettes/atmosphere/volcanicAsh/images/sample.png b/palettes/atmosphere/volcanicAsh/images/sample.png index a4473fa7c56..056f3d3421a 100644 Binary files a/palettes/atmosphere/volcanicAsh/images/sample.png and b/palettes/atmosphere/volcanicAsh/images/sample.png differ diff --git a/palettes/atmosphere/volcanicAsh/package.dist.json b/palettes/atmosphere/volcanicAsh/package.dist.json index d73a7fbd1e8..024fd125540 100644 --- a/palettes/atmosphere/volcanicAsh/package.dist.json +++ b/palettes/atmosphere/volcanicAsh/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-volcanic-ash", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles volcanic ash atmosphere palette", "homepage": "https://particles.js.org", "repository": { @@ -95,14 +95,22 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "type": "module", - "jsdelivr": "tsparticles.palette-volcanic-ash.min.js", - "unpkg": "tsparticles.palette-volcanic-ash.min.js", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" } diff --git a/palettes/atmosphere/volcanicAsh/package.json b/palettes/atmosphere/volcanicAsh/package.json index a0ebb63d170..8b2a721dfa5 100644 --- a/palettes/atmosphere/volcanicAsh/package.json +++ b/palettes/atmosphere/volcanicAsh/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-volcanic-ash", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles volcanic ash atmosphere palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/atmosphere/volcanicAsh/rollup.config.js b/palettes/atmosphere/volcanicAsh/rollup.config.js new file mode 100644 index 00000000000..e88d93269e7 --- /dev/null +++ b/palettes/atmosphere/volcanicAsh/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-volcanicAsh", + paletteName: "VolcanicAsh Palette", + version, +}); diff --git a/palettes/atmosphere/volcanicAsh/src/browser.ts b/palettes/atmosphere/volcanicAsh/src/browser.ts new file mode 100644 index 00000000000..67b8f9ccf19 --- /dev/null +++ b/palettes/atmosphere/volcanicAsh/src/browser.ts @@ -0,0 +1,10 @@ +import { loadVolcanicAshPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadVolcanicAshPalette?: typeof loadVolcanicAshPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadVolcanicAshPalette = loadVolcanicAshPalette; + +export * from "./index.js"; diff --git a/palettes/atmosphere/volcanicAsh/src/index.lazy.ts b/palettes/atmosphere/volcanicAsh/src/index.lazy.ts new file mode 100644 index 00000000000..c046df42d5b --- /dev/null +++ b/palettes/atmosphere/volcanicAsh/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "volcanic-ash"; + +/** + * @param engine - + */ +export async function loadVolcanicAshPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/atmosphere/volcanicAsh/src/index.ts b/palettes/atmosphere/volcanicAsh/src/index.ts index c9423cba234..2719425bb62 100644 --- a/palettes/atmosphere/volcanicAsh/src/index.ts +++ b/palettes/atmosphere/volcanicAsh/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "volcanic-ash"; @@ -6,9 +7,7 @@ const paletteName = "volcanic-ash"; * @param engine - */ export async function loadVolcanicAshPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/atmosphere/volcanicAsh/typedoc.json b/palettes/atmosphere/volcanicAsh/typedoc.json index 6b480615435..ea05870d4b4 100644 --- a/palettes/atmosphere/volcanicAsh/typedoc.json +++ b/palettes/atmosphere/volcanicAsh/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Volcanic Ash Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles VolcanicAsh Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/atmosphere/volcanicAsh/webpack.config.js b/palettes/atmosphere/volcanicAsh/webpack.config.js deleted file mode 100644 index 893167c532d..00000000000 --- a/palettes/atmosphere/volcanicAsh/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-volcanic-ash", - paletteName: "Volcanic Ash Palette", - version, -}); diff --git a/palettes/atmospheric/heatDuality/CHANGELOG.md b/palettes/atmospheric/heatDuality/CHANGELOG.md index 1c7a075cdf1..b61423ea9be 100644 --- a/palettes/atmospheric/heatDuality/CHANGELOG.md +++ b/palettes/atmospheric/heatDuality/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-heat-duality + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-heat-duality diff --git a/palettes/atmospheric/heatDuality/README.md b/palettes/atmospheric/heatDuality/README.md index 8f01878482b..d394c1d1662 100644 --- a/palettes/atmospheric/heatDuality/README.md +++ b/palettes/atmospheric/heatDuality/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Heat Duality Palette +# tsParticles HeatDuality Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-heat-duality/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-heat-duality) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-heat-duality.svg)](https://www.npmjs.com/package/@tsparticles/palette-heat-duality) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-heat-duality)](https://www.npmjs.com/package/@tsparticles/palette-heat-duality) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-heatDuality/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-heatDuality) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-heatDuality.svg)](https://www.npmjs.com/package/@tsparticles/palette-heatDuality) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-heatDuality) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for heat duality. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/heatDuality/images/sample.png)](https://particles.js.org/samples/palettes/heat-duality) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/atmospheric/heatDuality/images/sample.png)](https://particles.js.org/samples/palettes/heatDuality) ## Colors @@ -57,7 +57,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -79,7 +79,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "heat-duality", + palette: "heatDuality", }; await engine.load({ @@ -94,47 +94,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "heat-duality", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadHeatDualityPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadHeatDualityPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadHeatDualityPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -paheatDuality[Heat Duality] -end - -e[tsParticles Engine] --> paheatDuality -``` diff --git a/palettes/atmospheric/heatDuality/package.dist.json b/palettes/atmospheric/heatDuality/package.dist.json index 4017491be65..af1e2898189 100644 --- a/palettes/atmospheric/heatDuality/package.dist.json +++ b/palettes/atmospheric/heatDuality/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-heat-duality", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles heat duality palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.heat-duality.min.js", - "unpkg": "tsparticles.palette.heat-duality.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/atmospheric/heatDuality/package.json b/palettes/atmospheric/heatDuality/package.json index dc19298d000..c0819b316e9 100644 --- a/palettes/atmospheric/heatDuality/package.json +++ b/palettes/atmospheric/heatDuality/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-heat-duality", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles heat duality palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/atmospheric/heatDuality/rollup.config.js b/palettes/atmospheric/heatDuality/rollup.config.js new file mode 100644 index 00000000000..ed70f0aea6b --- /dev/null +++ b/palettes/atmospheric/heatDuality/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-heatDuality", + paletteName: "HeatDuality Palette", + version, +}); diff --git a/palettes/atmospheric/heatDuality/src/browser.ts b/palettes/atmospheric/heatDuality/src/browser.ts new file mode 100644 index 00000000000..1e0cbc2ae20 --- /dev/null +++ b/palettes/atmospheric/heatDuality/src/browser.ts @@ -0,0 +1,10 @@ +import { loadHeatDualityPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadHeatDualityPalette?: typeof loadHeatDualityPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadHeatDualityPalette = loadHeatDualityPalette; + +export * from "./index.js"; diff --git a/palettes/atmospheric/heatDuality/src/index.lazy.ts b/palettes/atmospheric/heatDuality/src/index.lazy.ts new file mode 100644 index 00000000000..be376c1980f --- /dev/null +++ b/palettes/atmospheric/heatDuality/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "heat-duality"; + +/** + * @param engine - + */ +export async function loadHeatDualityPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/atmospheric/heatDuality/src/index.ts b/palettes/atmospheric/heatDuality/src/index.ts index 598f8da8353..2aa8be34bf4 100644 --- a/palettes/atmospheric/heatDuality/src/index.ts +++ b/palettes/atmospheric/heatDuality/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "heat-duality"; @@ -6,9 +7,7 @@ const paletteName = "heat-duality"; * @param engine - */ export async function loadHeatDualityPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/atmospheric/heatDuality/typedoc.json b/palettes/atmospheric/heatDuality/typedoc.json index ef116b15a30..68ef27e3c33 100644 --- a/palettes/atmospheric/heatDuality/typedoc.json +++ b/palettes/atmospheric/heatDuality/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Heat Duality Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles HeatDuality Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/atmospheric/heatDuality/webpack.config.js b/palettes/atmospheric/heatDuality/webpack.config.js deleted file mode 100644 index 54de2fada51..00000000000 --- a/palettes/atmospheric/heatDuality/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-heat-duality", - paletteName: "Heat Duality Palette", - version, -}); diff --git a/palettes/atmospheric/heatHaze/CHANGELOG.md b/palettes/atmospheric/heatHaze/CHANGELOG.md index 7ae99363b6d..28cb569dfdd 100644 --- a/palettes/atmospheric/heatHaze/CHANGELOG.md +++ b/palettes/atmospheric/heatHaze/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-heat-haze + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-heat-haze diff --git a/palettes/atmospheric/heatHaze/README.md b/palettes/atmospheric/heatHaze/README.md index cab20eeafd9..6567c8a082b 100644 --- a/palettes/atmospheric/heatHaze/README.md +++ b/palettes/atmospheric/heatHaze/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Heat Haze Palette +# tsParticles HeatHaze Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-heat-haze/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-heat-haze) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-heat-haze.svg)](https://www.npmjs.com/package/@tsparticles/palette-heat-haze) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-heat-haze)](https://www.npmjs.com/package/@tsparticles/palette-heat-haze) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-heatHaze/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-heatHaze) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-heatHaze.svg)](https://www.npmjs.com/package/@tsparticles/palette-heatHaze) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-heatHaze) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for heat haze. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/heatHaze/images/sample.png)](https://particles.js.org/samples/palettes/heat-haze) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/atmospheric/heatHaze/images/sample.png)](https://particles.js.org/samples/palettes/heatHaze) ## Colors @@ -69,7 +69,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -91,7 +91,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "heat-haze", + palette: "heatHaze", }; await engine.load({ @@ -106,47 +106,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "heat-haze", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadHeatHazePalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadHeatHazePalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadHeatHazePalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -paheatHaze[Heat Haze] -end - -e[tsParticles Engine] --> paheatHaze -``` diff --git a/palettes/atmospheric/heatHaze/package.dist.json b/palettes/atmospheric/heatHaze/package.dist.json index a53a2ff5e64..7110092e176 100644 --- a/palettes/atmospheric/heatHaze/package.dist.json +++ b/palettes/atmospheric/heatHaze/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-heat-haze", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles heat haze palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.heat-haze.min.js", - "unpkg": "tsparticles.palette.heat-haze.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/atmospheric/heatHaze/package.json b/palettes/atmospheric/heatHaze/package.json index 81058b92749..1e04014a13d 100644 --- a/palettes/atmospheric/heatHaze/package.json +++ b/palettes/atmospheric/heatHaze/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-heat-haze", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles heat haze palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/atmospheric/heatHaze/rollup.config.js b/palettes/atmospheric/heatHaze/rollup.config.js new file mode 100644 index 00000000000..58f603e419b --- /dev/null +++ b/palettes/atmospheric/heatHaze/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-heatHaze", + paletteName: "HeatHaze Palette", + version, +}); diff --git a/palettes/atmospheric/heatHaze/src/browser.ts b/palettes/atmospheric/heatHaze/src/browser.ts new file mode 100644 index 00000000000..214b6a9774c --- /dev/null +++ b/palettes/atmospheric/heatHaze/src/browser.ts @@ -0,0 +1,10 @@ +import { loadHeatHazePalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadHeatHazePalette?: typeof loadHeatHazePalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadHeatHazePalette = loadHeatHazePalette; + +export * from "./index.js"; diff --git a/palettes/atmospheric/heatHaze/src/index.lazy.ts b/palettes/atmospheric/heatHaze/src/index.lazy.ts new file mode 100644 index 00000000000..e76c9d27d1e --- /dev/null +++ b/palettes/atmospheric/heatHaze/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "heat-haze"; + +/** + * @param engine - + */ +export async function loadHeatHazePalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/atmospheric/heatHaze/src/index.ts b/palettes/atmospheric/heatHaze/src/index.ts index e01124a8392..124e818f840 100644 --- a/palettes/atmospheric/heatHaze/src/index.ts +++ b/palettes/atmospheric/heatHaze/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "heat-haze"; @@ -6,9 +7,7 @@ const paletteName = "heat-haze"; * @param engine - */ export async function loadHeatHazePalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/atmospheric/heatHaze/typedoc.json b/palettes/atmospheric/heatHaze/typedoc.json index 6e9b5dd1af8..586366c7ac4 100644 --- a/palettes/atmospheric/heatHaze/typedoc.json +++ b/palettes/atmospheric/heatHaze/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Heat Haze Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles HeatHaze Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/atmospheric/heatHaze/webpack.config.js b/palettes/atmospheric/heatHaze/webpack.config.js deleted file mode 100644 index 70ba64f4167..00000000000 --- a/palettes/atmospheric/heatHaze/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-heat-haze", - paletteName: "Heat Haze Palette", - version, -}); diff --git a/palettes/atmospheric/lightning/CHANGELOG.md b/palettes/atmospheric/lightning/CHANGELOG.md index dd8a9ebf4ae..d002b903903 100644 --- a/palettes/atmospheric/lightning/CHANGELOG.md +++ b/palettes/atmospheric/lightning/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-lightning + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-lightning diff --git a/palettes/atmospheric/lightning/README.md b/palettes/atmospheric/lightning/README.md index 19093255d4b..d9b2206b5a2 100644 --- a/palettes/atmospheric/lightning/README.md +++ b/palettes/atmospheric/lightning/README.md @@ -2,9 +2,9 @@ # tsParticles Lightning Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-lightning/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-lightning) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-lightning.svg)](https://www.npmjs.com/package/@tsparticles/palette-lightning) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-lightning)](https://www.npmjs.com/package/@tsparticles/palette-lightning) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-lightning/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-lightning) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-lightning.svg)](https://www.npmjs.com/package/@tsparticles/palette-lightning) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-lightning) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for lightning. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/lightning/images/sample.png)](https://particles.js.org/samples/palettes/lightning) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/atmospheric/lightning/images/sample.png)](https://particles.js.org/samples/palettes/lightning) ## Colors @@ -79,7 +79,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -116,47 +116,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "lightning", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadLightningPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadLightningPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadLightningPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -palightning[Lightning] -end - -e[tsParticles Engine] --> palightning -``` diff --git a/palettes/atmospheric/lightning/package.dist.json b/palettes/atmospheric/lightning/package.dist.json index b6c2ed46476..c5023b6524e 100644 --- a/palettes/atmospheric/lightning/package.dist.json +++ b/palettes/atmospheric/lightning/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-lightning", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles lightning palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.lightning.min.js", - "unpkg": "tsparticles.palette.lightning.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/atmospheric/lightning/package.json b/palettes/atmospheric/lightning/package.json index aadc4d38d49..c4b7d691f52 100644 --- a/palettes/atmospheric/lightning/package.json +++ b/palettes/atmospheric/lightning/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-lightning", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles lightning palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/atmospheric/lightning/rollup.config.js b/palettes/atmospheric/lightning/rollup.config.js new file mode 100644 index 00000000000..08ef803fdc6 --- /dev/null +++ b/palettes/atmospheric/lightning/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-lightning", + paletteName: "Lightning Palette", + version, +}); diff --git a/palettes/atmospheric/lightning/src/browser.ts b/palettes/atmospheric/lightning/src/browser.ts new file mode 100644 index 00000000000..aca69544c4d --- /dev/null +++ b/palettes/atmospheric/lightning/src/browser.ts @@ -0,0 +1,10 @@ +import { loadLightningPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadLightningPalette?: typeof loadLightningPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadLightningPalette = loadLightningPalette; + +export * from "./index.js"; diff --git a/palettes/atmospheric/lightning/src/index.lazy.ts b/palettes/atmospheric/lightning/src/index.lazy.ts new file mode 100644 index 00000000000..80925b5e389 --- /dev/null +++ b/palettes/atmospheric/lightning/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "lightning"; + +/** + * @param engine - + */ +export async function loadLightningPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/atmospheric/lightning/src/index.ts b/palettes/atmospheric/lightning/src/index.ts index 78b20f8930a..f15b4a2a85f 100644 --- a/palettes/atmospheric/lightning/src/index.ts +++ b/palettes/atmospheric/lightning/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "lightning"; @@ -6,9 +7,7 @@ const paletteName = "lightning"; * @param engine - */ export async function loadLightningPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/atmospheric/lightning/typedoc.json b/palettes/atmospheric/lightning/typedoc.json index f1b57600513..de34dac94de 100644 --- a/palettes/atmospheric/lightning/typedoc.json +++ b/palettes/atmospheric/lightning/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Lightning Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Lightning Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/atmospheric/lightning/webpack.config.js b/palettes/atmospheric/lightning/webpack.config.js deleted file mode 100644 index 5e4d7b9e03d..00000000000 --- a/palettes/atmospheric/lightning/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-lightning", - paletteName: "Lightning Palette", - version, -}); diff --git a/palettes/atmospheric/shockwave/CHANGELOG.md b/palettes/atmospheric/shockwave/CHANGELOG.md index 291bb4a2268..7fc0d6b82de 100644 --- a/palettes/atmospheric/shockwave/CHANGELOG.md +++ b/palettes/atmospheric/shockwave/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-shockwave + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-shockwave diff --git a/palettes/atmospheric/shockwave/README.md b/palettes/atmospheric/shockwave/README.md index 81e52387e10..6c2f8f9a1bd 100644 --- a/palettes/atmospheric/shockwave/README.md +++ b/palettes/atmospheric/shockwave/README.md @@ -2,9 +2,9 @@ # tsParticles Shockwave Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-shockwave/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-shockwave) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-shockwave.svg)](https://www.npmjs.com/package/@tsparticles/palette-shockwave) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-shockwave)](https://www.npmjs.com/package/@tsparticles/palette-shockwave) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-shockwave/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-shockwave) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-shockwave.svg)](https://www.npmjs.com/package/@tsparticles/palette-shockwave) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-shockwave) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for shockwave. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/shockwave/images/sample.png)](https://particles.js.org/samples/palettes/shockwave) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/atmospheric/shockwave/images/sample.png)](https://particles.js.org/samples/palettes/shockwave) ## Colors @@ -69,7 +69,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -106,47 +106,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "shockwave", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadShockwavePalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadShockwavePalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadShockwavePalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -pashockwave[Shockwave] -end - -e[tsParticles Engine] --> pashockwave -``` diff --git a/palettes/atmospheric/shockwave/package.dist.json b/palettes/atmospheric/shockwave/package.dist.json index 530fe0aec07..b168c93beea 100644 --- a/palettes/atmospheric/shockwave/package.dist.json +++ b/palettes/atmospheric/shockwave/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-shockwave", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles shockwave palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.shockwave.min.js", - "unpkg": "tsparticles.palette.shockwave.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/atmospheric/shockwave/package.json b/palettes/atmospheric/shockwave/package.json index 6e3e4e08947..3c42c49dad7 100644 --- a/palettes/atmospheric/shockwave/package.json +++ b/palettes/atmospheric/shockwave/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-shockwave", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles shockwave palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/atmospheric/shockwave/rollup.config.js b/palettes/atmospheric/shockwave/rollup.config.js new file mode 100644 index 00000000000..3288b139168 --- /dev/null +++ b/palettes/atmospheric/shockwave/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-shockwave", + paletteName: "Shockwave Palette", + version, +}); diff --git a/palettes/atmospheric/shockwave/src/browser.ts b/palettes/atmospheric/shockwave/src/browser.ts new file mode 100644 index 00000000000..1ce49617ed8 --- /dev/null +++ b/palettes/atmospheric/shockwave/src/browser.ts @@ -0,0 +1,10 @@ +import { loadShockwavePalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadShockwavePalette?: typeof loadShockwavePalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadShockwavePalette = loadShockwavePalette; + +export * from "./index.js"; diff --git a/palettes/atmospheric/shockwave/src/index.lazy.ts b/palettes/atmospheric/shockwave/src/index.lazy.ts new file mode 100644 index 00000000000..d6e32f26949 --- /dev/null +++ b/palettes/atmospheric/shockwave/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "shockwave"; + +/** + * @param engine - + */ +export async function loadShockwavePalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/atmospheric/shockwave/src/index.ts b/palettes/atmospheric/shockwave/src/index.ts index 0afa040c893..ea8d3449484 100644 --- a/palettes/atmospheric/shockwave/src/index.ts +++ b/palettes/atmospheric/shockwave/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "shockwave"; @@ -6,9 +7,7 @@ const paletteName = "shockwave"; * @param engine - */ export async function loadShockwavePalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/atmospheric/shockwave/typedoc.json b/palettes/atmospheric/shockwave/typedoc.json index 6a53ee28b81..a938df835c0 100644 --- a/palettes/atmospheric/shockwave/typedoc.json +++ b/palettes/atmospheric/shockwave/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Shockwave Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Shockwave Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/atmospheric/shockwave/webpack.config.js b/palettes/atmospheric/shockwave/webpack.config.js deleted file mode 100644 index 1ed1744142f..00000000000 --- a/palettes/atmospheric/shockwave/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-shockwave", - paletteName: "Shockwave Palette", - version, -}); diff --git a/palettes/atmospheric/smokeCold/CHANGELOG.md b/palettes/atmospheric/smokeCold/CHANGELOG.md index cc57e1c1af9..31ea4505114 100644 --- a/palettes/atmospheric/smokeCold/CHANGELOG.md +++ b/palettes/atmospheric/smokeCold/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-smoke-cold + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-smoke-cold diff --git a/palettes/atmospheric/smokeCold/README.md b/palettes/atmospheric/smokeCold/README.md index 380258842e2..97147451f2d 100644 --- a/palettes/atmospheric/smokeCold/README.md +++ b/palettes/atmospheric/smokeCold/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Smoke Cold Palette +# tsParticles SmokeCold Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-smoke-cold/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-smoke-cold) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-smoke-cold.svg)](https://www.npmjs.com/package/@tsparticles/palette-smoke-cold) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-smoke-cold)](https://www.npmjs.com/package/@tsparticles/palette-smoke-cold) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-smokeCold/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-smokeCold) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-smokeCold.svg)](https://www.npmjs.com/package/@tsparticles/palette-smokeCold) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-smokeCold) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for smoke - cold. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/smokeCold/images/sample.png)](https://particles.js.org/samples/palettes/smoke-cold) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/atmospheric/smokeCold/images/sample.png)](https://particles.js.org/samples/palettes/smokeCold) ## Colors @@ -69,7 +69,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -91,7 +91,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "smoke-cold", + palette: "smokeCold", }; await engine.load({ @@ -106,47 +106,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "smoke-cold", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadSmokeColdPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadSmokeColdPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadSmokeColdPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -pasmokeCold[Smoke Cold] -end - -e[tsParticles Engine] --> pasmokeCold -``` diff --git a/palettes/atmospheric/smokeCold/package.dist.json b/palettes/atmospheric/smokeCold/package.dist.json index 3d461f1652b..d74a89e2bb4 100644 --- a/palettes/atmospheric/smokeCold/package.dist.json +++ b/palettes/atmospheric/smokeCold/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-smoke-cold", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles smoke - cold palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.smoke-cold.min.js", - "unpkg": "tsparticles.palette.smoke-cold.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/atmospheric/smokeCold/package.json b/palettes/atmospheric/smokeCold/package.json index f15630d547d..e3a7a66a477 100644 --- a/palettes/atmospheric/smokeCold/package.json +++ b/palettes/atmospheric/smokeCold/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-smoke-cold", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles smoke - cold palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/atmospheric/smokeCold/rollup.config.js b/palettes/atmospheric/smokeCold/rollup.config.js new file mode 100644 index 00000000000..7f3ef132795 --- /dev/null +++ b/palettes/atmospheric/smokeCold/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-smokeCold", + paletteName: "SmokeCold Palette", + version, +}); diff --git a/palettes/atmospheric/smokeCold/src/browser.ts b/palettes/atmospheric/smokeCold/src/browser.ts new file mode 100644 index 00000000000..fce4cda416b --- /dev/null +++ b/palettes/atmospheric/smokeCold/src/browser.ts @@ -0,0 +1,10 @@ +import { loadSmokeColdPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadSmokeColdPalette?: typeof loadSmokeColdPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadSmokeColdPalette = loadSmokeColdPalette; + +export * from "./index.js"; diff --git a/palettes/atmospheric/smokeCold/src/index.lazy.ts b/palettes/atmospheric/smokeCold/src/index.lazy.ts new file mode 100644 index 00000000000..2125ed90138 --- /dev/null +++ b/palettes/atmospheric/smokeCold/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "smoke-cold"; + +/** + * @param engine - + */ +export async function loadSmokeColdPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/atmospheric/smokeCold/src/index.ts b/palettes/atmospheric/smokeCold/src/index.ts index b995f2776ee..7055c70ac40 100644 --- a/palettes/atmospheric/smokeCold/src/index.ts +++ b/palettes/atmospheric/smokeCold/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "smoke-cold"; @@ -6,9 +7,7 @@ const paletteName = "smoke-cold"; * @param engine - */ export async function loadSmokeColdPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/atmospheric/smokeCold/typedoc.json b/palettes/atmospheric/smokeCold/typedoc.json index 5fead81c857..3e542a3dd16 100644 --- a/palettes/atmospheric/smokeCold/typedoc.json +++ b/palettes/atmospheric/smokeCold/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Smoke Cold Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles SmokeCold Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/atmospheric/smokeCold/webpack.config.js b/palettes/atmospheric/smokeCold/webpack.config.js deleted file mode 100644 index e94643cc900..00000000000 --- a/palettes/atmospheric/smokeCold/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-smoke-cold", - paletteName: "Smoke Cold Palette", - version, -}); diff --git a/palettes/atmospheric/smokeWarm/CHANGELOG.md b/palettes/atmospheric/smokeWarm/CHANGELOG.md index 3ecfb03823d..b7cfbdc4efd 100644 --- a/palettes/atmospheric/smokeWarm/CHANGELOG.md +++ b/palettes/atmospheric/smokeWarm/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-smoke-warm + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-smoke-warm diff --git a/palettes/atmospheric/smokeWarm/README.md b/palettes/atmospheric/smokeWarm/README.md index d7d6c7ac4dc..6ed647623b3 100644 --- a/palettes/atmospheric/smokeWarm/README.md +++ b/palettes/atmospheric/smokeWarm/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Smoke Warm Palette +# tsParticles SmokeWarm Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-smoke-warm/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-smoke-warm) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-smoke-warm.svg)](https://www.npmjs.com/package/@tsparticles/palette-smoke-warm) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-smoke-warm)](https://www.npmjs.com/package/@tsparticles/palette-smoke-warm) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-smokeWarm/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-smokeWarm) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-smokeWarm.svg)](https://www.npmjs.com/package/@tsparticles/palette-smokeWarm) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-smokeWarm) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for smoke - warm. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/smokeWarm/images/sample.png)](https://particles.js.org/samples/palettes/smoke-warm) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/atmospheric/smokeWarm/images/sample.png)](https://particles.js.org/samples/palettes/smokeWarm) ## Colors @@ -69,7 +69,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -91,7 +91,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "smoke-warm", + palette: "smokeWarm", }; await engine.load({ @@ -106,47 +106,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "smoke-warm", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadSmokeWarmPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadSmokeWarmPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadSmokeWarmPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -pasmokeWarm[Smoke Warm] -end - -e[tsParticles Engine] --> pasmokeWarm -``` diff --git a/palettes/atmospheric/smokeWarm/package.dist.json b/palettes/atmospheric/smokeWarm/package.dist.json index a8ab34d5bbe..eac8dc210b8 100644 --- a/palettes/atmospheric/smokeWarm/package.dist.json +++ b/palettes/atmospheric/smokeWarm/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-smoke-warm", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles smoke - warm palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.smoke-warm.min.js", - "unpkg": "tsparticles.palette.smoke-warm.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/atmospheric/smokeWarm/package.json b/palettes/atmospheric/smokeWarm/package.json index 71ac7ee5ce6..f7cfd366d1b 100644 --- a/palettes/atmospheric/smokeWarm/package.json +++ b/palettes/atmospheric/smokeWarm/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-smoke-warm", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles smoke - warm palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/atmospheric/smokeWarm/rollup.config.js b/palettes/atmospheric/smokeWarm/rollup.config.js new file mode 100644 index 00000000000..93e848d0d42 --- /dev/null +++ b/palettes/atmospheric/smokeWarm/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-smokeWarm", + paletteName: "SmokeWarm Palette", + version, +}); diff --git a/palettes/atmospheric/smokeWarm/src/browser.ts b/palettes/atmospheric/smokeWarm/src/browser.ts new file mode 100644 index 00000000000..acb76828938 --- /dev/null +++ b/palettes/atmospheric/smokeWarm/src/browser.ts @@ -0,0 +1,10 @@ +import { loadSmokeWarmPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadSmokeWarmPalette?: typeof loadSmokeWarmPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadSmokeWarmPalette = loadSmokeWarmPalette; + +export * from "./index.js"; diff --git a/palettes/atmospheric/smokeWarm/src/index.lazy.ts b/palettes/atmospheric/smokeWarm/src/index.lazy.ts new file mode 100644 index 00000000000..4b02ad7ac21 --- /dev/null +++ b/palettes/atmospheric/smokeWarm/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "smoke-warm"; + +/** + * @param engine - + */ +export async function loadSmokeWarmPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/atmospheric/smokeWarm/src/index.ts b/palettes/atmospheric/smokeWarm/src/index.ts index 2af022adc03..326f974d1fa 100644 --- a/palettes/atmospheric/smokeWarm/src/index.ts +++ b/palettes/atmospheric/smokeWarm/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "smoke-warm"; @@ -6,9 +7,7 @@ const paletteName = "smoke-warm"; * @param engine - */ export async function loadSmokeWarmPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/atmospheric/smokeWarm/typedoc.json b/palettes/atmospheric/smokeWarm/typedoc.json index 429d79b151a..dd300e912ba 100644 --- a/palettes/atmospheric/smokeWarm/typedoc.json +++ b/palettes/atmospheric/smokeWarm/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Smoke Warm Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles SmokeWarm Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/atmospheric/smokeWarm/webpack.config.js b/palettes/atmospheric/smokeWarm/webpack.config.js deleted file mode 100644 index 681723614ea..00000000000 --- a/palettes/atmospheric/smokeWarm/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-smoke-warm", - paletteName: "Smoke Warm Palette", - version, -}); diff --git a/palettes/atmospheric/sunriseGold/CHANGELOG.md b/palettes/atmospheric/sunriseGold/CHANGELOG.md index 8f663263d97..5e9028baa78 100644 --- a/palettes/atmospheric/sunriseGold/CHANGELOG.md +++ b/palettes/atmospheric/sunriseGold/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-sunrise-gold + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-sunrise-gold diff --git a/palettes/atmospheric/sunriseGold/README.md b/palettes/atmospheric/sunriseGold/README.md index a68570bea88..25026d10fea 100644 --- a/palettes/atmospheric/sunriseGold/README.md +++ b/palettes/atmospheric/sunriseGold/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Sunrise Gold Palette +# tsParticles SunriseGold Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-sunrise-gold/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-sunrise-gold) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-sunrise-gold.svg)](https://www.npmjs.com/package/@tsparticles/palette-sunrise-gold) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-sunrise-gold)](https://www.npmjs.com/package/@tsparticles/palette-sunrise-gold) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-sunriseGold/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-sunriseGold) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-sunriseGold.svg)](https://www.npmjs.com/package/@tsparticles/palette-sunriseGold) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-sunriseGold) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for sunrise gold. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/sunriseGold/images/sample.png)](https://particles.js.org/samples/palettes/sunrise-gold) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/atmospheric/sunriseGold/images/sample.png)](https://particles.js.org/samples/palettes/sunriseGold) ## Colors @@ -75,7 +75,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -97,7 +97,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "sunrise-gold", + palette: "sunriseGold", }; await engine.load({ @@ -112,47 +112,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "sunrise-gold", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadSunriseGoldPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadSunriseGoldPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadSunriseGoldPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -pasunriseGold[Sunrise Gold] -end - -e[tsParticles Engine] --> pasunriseGold -``` diff --git a/palettes/atmospheric/sunriseGold/package.dist.json b/palettes/atmospheric/sunriseGold/package.dist.json index d859e7aa009..49ae26f4d24 100644 --- a/palettes/atmospheric/sunriseGold/package.dist.json +++ b/palettes/atmospheric/sunriseGold/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-sunrise-gold", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles sunrise gold palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.sunrise-gold.min.js", - "unpkg": "tsparticles.palette.sunrise-gold.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/atmospheric/sunriseGold/package.json b/palettes/atmospheric/sunriseGold/package.json index 85672f1811d..76c9f3e6c97 100644 --- a/palettes/atmospheric/sunriseGold/package.json +++ b/palettes/atmospheric/sunriseGold/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-sunrise-gold", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles sunrise gold palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/atmospheric/sunriseGold/rollup.config.js b/palettes/atmospheric/sunriseGold/rollup.config.js new file mode 100644 index 00000000000..842bfc3d7e6 --- /dev/null +++ b/palettes/atmospheric/sunriseGold/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-sunriseGold", + paletteName: "SunriseGold Palette", + version, +}); diff --git a/palettes/atmospheric/sunriseGold/src/browser.ts b/palettes/atmospheric/sunriseGold/src/browser.ts new file mode 100644 index 00000000000..268d0b98b9a --- /dev/null +++ b/palettes/atmospheric/sunriseGold/src/browser.ts @@ -0,0 +1,10 @@ +import { loadSunriseGoldPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadSunriseGoldPalette?: typeof loadSunriseGoldPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadSunriseGoldPalette = loadSunriseGoldPalette; + +export * from "./index.js"; diff --git a/palettes/atmospheric/sunriseGold/src/index.lazy.ts b/palettes/atmospheric/sunriseGold/src/index.lazy.ts new file mode 100644 index 00000000000..aba68683998 --- /dev/null +++ b/palettes/atmospheric/sunriseGold/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "sunrise-gold"; + +/** + * @param engine - + */ +export async function loadSunriseGoldPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/atmospheric/sunriseGold/src/index.ts b/palettes/atmospheric/sunriseGold/src/index.ts index 92a78069797..09443369268 100644 --- a/palettes/atmospheric/sunriseGold/src/index.ts +++ b/palettes/atmospheric/sunriseGold/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "sunrise-gold"; @@ -6,9 +7,7 @@ const paletteName = "sunrise-gold"; * @param engine - */ export async function loadSunriseGoldPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/atmospheric/sunriseGold/typedoc.json b/palettes/atmospheric/sunriseGold/typedoc.json index 0f31ff54ebb..426a71deb0e 100644 --- a/palettes/atmospheric/sunriseGold/typedoc.json +++ b/palettes/atmospheric/sunriseGold/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Autumn Leaves Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles SunriseGold Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/atmospheric/sunriseGold/webpack.config.js b/palettes/atmospheric/sunriseGold/webpack.config.js deleted file mode 100644 index c6307ce8908..00000000000 --- a/palettes/atmospheric/sunriseGold/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-sunrise-gold", - paletteName: "Sunrise Gold Palette", - version, -}); diff --git a/palettes/atmospheric/sunsetBinary/CHANGELOG.md b/palettes/atmospheric/sunsetBinary/CHANGELOG.md index 4e44aebd406..7afa940c453 100644 --- a/palettes/atmospheric/sunsetBinary/CHANGELOG.md +++ b/palettes/atmospheric/sunsetBinary/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-sunset-binary + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-sunset-binary diff --git a/palettes/atmospheric/sunsetBinary/README.md b/palettes/atmospheric/sunsetBinary/README.md index 2351058552b..24c584c53a8 100644 --- a/palettes/atmospheric/sunsetBinary/README.md +++ b/palettes/atmospheric/sunsetBinary/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Sunset Binary Palette +# tsParticles SunsetBinary Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-sunset-binary/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-sunset-binary) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-sunset-binary.svg)](https://www.npmjs.com/package/@tsparticles/palette-sunset-binary) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-sunset-binary)](https://www.npmjs.com/package/@tsparticles/palette-sunset-binary) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-sunsetBinary/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-sunsetBinary) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-sunsetBinary.svg)](https://www.npmjs.com/package/@tsparticles/palette-sunsetBinary) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-sunsetBinary) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for sunset binary. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/sunsetBinary/images/sample.png)](https://particles.js.org/samples/palettes/sunset-binary) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/atmospheric/sunsetBinary/images/sample.png)](https://particles.js.org/samples/palettes/sunsetBinary) ## Colors @@ -57,7 +57,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -79,7 +79,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "sunset-binary", + palette: "sunsetBinary", }; await engine.load({ @@ -94,47 +94,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "sunset-binary", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadSunsetBinaryPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadSunsetBinaryPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadSunsetBinaryPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -pasunsetBinary[Sunset Binary] -end - -e[tsParticles Engine] --> pasunsetBinary -``` diff --git a/palettes/atmospheric/sunsetBinary/package.dist.json b/palettes/atmospheric/sunsetBinary/package.dist.json index 41e06be44f1..d09fb44fe41 100644 --- a/palettes/atmospheric/sunsetBinary/package.dist.json +++ b/palettes/atmospheric/sunsetBinary/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-sunset-binary", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles sunset binary palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.sunset-binary.min.js", - "unpkg": "tsparticles.palette.sunset-binary.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/atmospheric/sunsetBinary/package.json b/palettes/atmospheric/sunsetBinary/package.json index cf2eb91473c..d7183a2bce3 100644 --- a/palettes/atmospheric/sunsetBinary/package.json +++ b/palettes/atmospheric/sunsetBinary/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-sunset-binary", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles sunset binary palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/atmospheric/sunsetBinary/rollup.config.js b/palettes/atmospheric/sunsetBinary/rollup.config.js new file mode 100644 index 00000000000..4068200fe4f --- /dev/null +++ b/palettes/atmospheric/sunsetBinary/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-sunsetBinary", + paletteName: "SunsetBinary Palette", + version, +}); diff --git a/palettes/atmospheric/sunsetBinary/src/browser.ts b/palettes/atmospheric/sunsetBinary/src/browser.ts new file mode 100644 index 00000000000..dac6b80901a --- /dev/null +++ b/palettes/atmospheric/sunsetBinary/src/browser.ts @@ -0,0 +1,10 @@ +import { loadSunsetBinaryPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadSunsetBinaryPalette?: typeof loadSunsetBinaryPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadSunsetBinaryPalette = loadSunsetBinaryPalette; + +export * from "./index.js"; diff --git a/palettes/atmospheric/sunsetBinary/src/index.lazy.ts b/palettes/atmospheric/sunsetBinary/src/index.lazy.ts new file mode 100644 index 00000000000..0a251ca8d4f --- /dev/null +++ b/palettes/atmospheric/sunsetBinary/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "sunset-binary"; + +/** + * @param engine - + */ +export async function loadSunsetBinaryPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/atmospheric/sunsetBinary/src/index.ts b/palettes/atmospheric/sunsetBinary/src/index.ts index e9606b0a581..a432835a449 100644 --- a/palettes/atmospheric/sunsetBinary/src/index.ts +++ b/palettes/atmospheric/sunsetBinary/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "sunset-binary"; @@ -6,9 +7,7 @@ const paletteName = "sunset-binary"; * @param engine - */ export async function loadSunsetBinaryPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/atmospheric/sunsetBinary/typedoc.json b/palettes/atmospheric/sunsetBinary/typedoc.json index dfd55950bc8..6f0fb081808 100644 --- a/palettes/atmospheric/sunsetBinary/typedoc.json +++ b/palettes/atmospheric/sunsetBinary/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Sunset Binary Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles SunsetBinary Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/atmospheric/sunsetBinary/webpack.config.js b/palettes/atmospheric/sunsetBinary/webpack.config.js deleted file mode 100644 index 043e771e7e7..00000000000 --- a/palettes/atmospheric/sunsetBinary/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-sunset-binary", - paletteName: "Sunset Binary Palette", - version, -}); diff --git a/palettes/atmospheric/thermalMap/CHANGELOG.md b/palettes/atmospheric/thermalMap/CHANGELOG.md index c97e8bc3eb3..49c23808dba 100644 --- a/palettes/atmospheric/thermalMap/CHANGELOG.md +++ b/palettes/atmospheric/thermalMap/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-thermal-map + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-thermal-map diff --git a/palettes/atmospheric/thermalMap/README.md b/palettes/atmospheric/thermalMap/README.md index 3807708eb8b..eefd5a4639f 100644 --- a/palettes/atmospheric/thermalMap/README.md +++ b/palettes/atmospheric/thermalMap/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Thermal Map Cold to Hot Palette +# tsParticles ThermalMap Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-thermal-map/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-thermal-map) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-thermal-map.svg)](https://www.npmjs.com/package/@tsparticles/palette-thermal-map) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-thermal-map)](https://www.npmjs.com/package/@tsparticles/palette-thermal-map) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-thermalMap/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-thermalMap) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-thermalMap.svg)](https://www.npmjs.com/package/@tsparticles/palette-thermalMap) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-thermalMap) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for thermal map - cold to hot. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/thermalMap/images/sample.png)](https://particles.js.org/samples/palettes/thermal-map) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/atmospheric/thermalMap/images/sample.png)](https://particles.js.org/samples/palettes/thermalMap) ## Colors @@ -241,7 +241,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -263,7 +263,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "thermal-map", + palette: "thermalMap", }; await engine.load({ @@ -278,47 +278,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "thermal-map", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadThermalMapPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadThermalMapPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadThermalMapPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -pathermalMap[Thermal Map Cold to Hot] -end - -e[tsParticles Engine] --> pathermalMap -``` diff --git a/palettes/atmospheric/thermalMap/package.dist.json b/palettes/atmospheric/thermalMap/package.dist.json index cbc99aa2888..fb52a1fc59a 100644 --- a/palettes/atmospheric/thermalMap/package.dist.json +++ b/palettes/atmospheric/thermalMap/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-thermal-map", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles thermal map - cold to hot palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.thermal-map.min.js", - "unpkg": "tsparticles.palette.thermal-map.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/atmospheric/thermalMap/package.json b/palettes/atmospheric/thermalMap/package.json index ce583dd9fbd..9dcd30980ed 100644 --- a/palettes/atmospheric/thermalMap/package.json +++ b/palettes/atmospheric/thermalMap/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-thermal-map", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles thermal map - cold to hot palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/atmospheric/thermalMap/rollup.config.js b/palettes/atmospheric/thermalMap/rollup.config.js new file mode 100644 index 00000000000..d3d8eca580d --- /dev/null +++ b/palettes/atmospheric/thermalMap/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-thermalMap", + paletteName: "ThermalMap Palette", + version, +}); diff --git a/palettes/atmospheric/thermalMap/src/browser.ts b/palettes/atmospheric/thermalMap/src/browser.ts new file mode 100644 index 00000000000..3658c2f3cfc --- /dev/null +++ b/palettes/atmospheric/thermalMap/src/browser.ts @@ -0,0 +1,10 @@ +import { loadThermalMapPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadThermalMapPalette?: typeof loadThermalMapPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadThermalMapPalette = loadThermalMapPalette; + +export * from "./index.js"; diff --git a/palettes/atmospheric/thermalMap/src/index.lazy.ts b/palettes/atmospheric/thermalMap/src/index.lazy.ts new file mode 100644 index 00000000000..55108c63136 --- /dev/null +++ b/palettes/atmospheric/thermalMap/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "thermal-map"; + +/** + * @param engine - + */ +export async function loadThermalMapPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/atmospheric/thermalMap/src/index.ts b/palettes/atmospheric/thermalMap/src/index.ts index 4d56f50ed25..5a3acf82ff4 100644 --- a/palettes/atmospheric/thermalMap/src/index.ts +++ b/palettes/atmospheric/thermalMap/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "thermal-map"; @@ -6,9 +7,7 @@ const paletteName = "thermal-map"; * @param engine - */ export async function loadThermalMapPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/atmospheric/thermalMap/typedoc.json b/palettes/atmospheric/thermalMap/typedoc.json index e76af6fb73d..d4b66c5295b 100644 --- a/palettes/atmospheric/thermalMap/typedoc.json +++ b/palettes/atmospheric/thermalMap/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Thermal Map Cold to Hot Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles ThermalMap Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/atmospheric/thermalMap/webpack.config.js b/palettes/atmospheric/thermalMap/webpack.config.js deleted file mode 100644 index 01f4232b2ba..00000000000 --- a/palettes/atmospheric/thermalMap/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-thermal-map", - paletteName: "Thermal Map Cold to Hot Palette", - version, -}); diff --git a/palettes/atmospheric/thunderstorm/CHANGELOG.md b/palettes/atmospheric/thunderstorm/CHANGELOG.md index 2d34c48976b..386e87ee313 100644 --- a/palettes/atmospheric/thunderstorm/CHANGELOG.md +++ b/palettes/atmospheric/thunderstorm/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-thunderstorm + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-thunderstorm diff --git a/palettes/atmospheric/thunderstorm/README.md b/palettes/atmospheric/thunderstorm/README.md index a79ec27634c..1445aec0ecb 100644 --- a/palettes/atmospheric/thunderstorm/README.md +++ b/palettes/atmospheric/thunderstorm/README.md @@ -2,9 +2,9 @@ # tsParticles Thunderstorm Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-thunderstorm/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-thunderstorm) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-thunderstorm.svg)](https://www.npmjs.com/package/@tsparticles/palette-thunderstorm) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-thunderstorm)](https://www.npmjs.com/package/@tsparticles/palette-thunderstorm) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-thunderstorm/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-thunderstorm) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-thunderstorm.svg)](https://www.npmjs.com/package/@tsparticles/palette-thunderstorm) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-thunderstorm) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for thunderstorm. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/thunderstorm/images/sample.png)](https://particles.js.org/samples/palettes/thunderstorm) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/atmospheric/thunderstorm/images/sample.png)](https://particles.js.org/samples/palettes/thunderstorm) ## Colors @@ -79,7 +79,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -116,47 +116,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "thunderstorm", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadThunderstormPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadThunderstormPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadThunderstormPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -pathunderstorm[Thunderstorm] -end - -e[tsParticles Engine] --> pathunderstorm -``` diff --git a/palettes/atmospheric/thunderstorm/package.dist.json b/palettes/atmospheric/thunderstorm/package.dist.json index 89fb9d36dbf..88f9be04b15 100644 --- a/palettes/atmospheric/thunderstorm/package.dist.json +++ b/palettes/atmospheric/thunderstorm/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-thunderstorm", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles thunderstorm palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.thunderstorm.min.js", - "unpkg": "tsparticles.palette.thunderstorm.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/atmospheric/thunderstorm/package.json b/palettes/atmospheric/thunderstorm/package.json index b4046a12985..6824d377007 100644 --- a/palettes/atmospheric/thunderstorm/package.json +++ b/palettes/atmospheric/thunderstorm/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-thunderstorm", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles thunderstorm palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/atmospheric/thunderstorm/rollup.config.js b/palettes/atmospheric/thunderstorm/rollup.config.js new file mode 100644 index 00000000000..e691ca6b015 --- /dev/null +++ b/palettes/atmospheric/thunderstorm/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-thunderstorm", + paletteName: "Thunderstorm Palette", + version, +}); diff --git a/palettes/atmospheric/thunderstorm/src/browser.ts b/palettes/atmospheric/thunderstorm/src/browser.ts new file mode 100644 index 00000000000..673bf955436 --- /dev/null +++ b/palettes/atmospheric/thunderstorm/src/browser.ts @@ -0,0 +1,10 @@ +import { loadThunderstormPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadThunderstormPalette?: typeof loadThunderstormPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadThunderstormPalette = loadThunderstormPalette; + +export * from "./index.js"; diff --git a/palettes/atmospheric/thunderstorm/src/index.lazy.ts b/palettes/atmospheric/thunderstorm/src/index.lazy.ts new file mode 100644 index 00000000000..bb3dee835df --- /dev/null +++ b/palettes/atmospheric/thunderstorm/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "thunderstorm"; + +/** + * @param engine - + */ +export async function loadThunderstormPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/atmospheric/thunderstorm/src/index.ts b/palettes/atmospheric/thunderstorm/src/index.ts index c7eec97d919..920a14540ca 100644 --- a/palettes/atmospheric/thunderstorm/src/index.ts +++ b/palettes/atmospheric/thunderstorm/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "thunderstorm"; @@ -6,9 +7,7 @@ const paletteName = "thunderstorm"; * @param engine - */ export async function loadThunderstormPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/atmospheric/thunderstorm/typedoc.json b/palettes/atmospheric/thunderstorm/typedoc.json index 7b4140123b0..191973360b6 100644 --- a/palettes/atmospheric/thunderstorm/typedoc.json +++ b/palettes/atmospheric/thunderstorm/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Thunderstorm Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Thunderstorm Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/atmospheric/thunderstorm/webpack.config.js b/palettes/atmospheric/thunderstorm/webpack.config.js deleted file mode 100644 index dccffe7804a..00000000000 --- a/palettes/atmospheric/thunderstorm/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-thunderstorm", - paletteName: "Thunderstorm Palette", - version, -}); diff --git a/palettes/confetti/confetti/CHANGELOG.md b/palettes/confetti/confetti/CHANGELOG.md deleted file mode 100644 index fb9709eeb26..00000000000 --- a/palettes/confetti/confetti/CHANGELOG.md +++ /dev/null @@ -1,18 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-confetti - -# 4.0.0-beta.0 (2026-04-08) - -### Features - -- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) - -# [4.0.0-alpha.5](https://github.com/tsparticles/palettes/compare/v4.0.0-alpha.4...v4.0.0-alpha.5) (2026-03-31) - -**Note:** Version bump only for package @tsparticles/palette-confetti diff --git a/palettes/confetti/confetti/README.md b/palettes/confetti/confetti/README.md deleted file mode 100644 index aaa7a93481c..00000000000 --- a/palettes/confetti/confetti/README.md +++ /dev/null @@ -1,174 +0,0 @@ -[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) - -# tsParticles Confetti Palette - -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-confetti/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-confetti) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-confetti.svg)](https://www.npmjs.com/package/@tsparticles/palette-confetti) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-confetti)](https://www.npmjs.com/package/@tsparticles/palette-confetti) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for confetti. - -[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) - -[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") - -## Sample - -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/confetti/images/sample.png)](https://particles.js.org/samples/palettes/confetti) - -## Colors - - - - - - - - - - - - - - - - - - - - - - - - -
-
- #FF0044 -
-
- #FF4400 -
-
- #FFCC00 -
-
- #00CC44 -
-
- #00AAFF -
-
- #AA00FF -
-
- #FF00AA -
-
- #00FFCC -
-
- #FF6600 -
-
- #FFFFFF -
-
- Background
- #1a1a2e -
- Blend mode: source-over | Fill: true -
- -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadConfettiPalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## How to use it - -### CDN / Vanilla JS / jQuery - -```html - - -``` - -### Usage - -Once the scripts are loaded you can set up `tsParticles` like this: - -```javascript -(async engine => { - await loadBasic(engine); - await loadConfettiPalette(engine); - - const options = { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "confetti", - }; - - await engine.load({ - id: "tsparticles", - options, - }); -})(tsParticles); -``` - -#### Customization - -**Important ⚠️** -You can override all the options defining the properties like in any standard `tsParticles` installation. - -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "confetti", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - -### Frameworks with a tsParticles component library - -Checkout the documentation in the component library repository and call the `loadConfettiPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadConfettiPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly - -## Related docs - -- Presets and palettes catalog: -- Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -paconfetti[Confetti] -end - -e[tsParticles Engine] --> paconfetti -``` diff --git a/palettes/confetti/confetti/package.dist.json b/palettes/confetti/confetti/package.dist.json deleted file mode 100644 index a62e1278ec9..00000000000 --- a/palettes/confetti/confetti/package.dist.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "name": "@tsparticles/palette-confetti", - "version": "4.0.0-beta.12", - "description": "tsParticles confetti palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/confetti/confetti" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "jsdelivr": "tsparticles.palette.confetti.min.js", - "unpkg": "tsparticles.palette.confetti.min.js", - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "publishConfig": { - "access": "public" - }, - "type": "module" -} diff --git a/palettes/confetti/confetti/package.json b/palettes/confetti/confetti/package.json deleted file mode 100644 index 96a51b9bb7a..00000000000 --- a/palettes/confetti/confetti/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-confetti", - "version": "4.0.0-beta.12", - "description": "tsParticles confetti palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/confetti/confetti" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/confetti/confetti/src/index.ts b/palettes/confetti/confetti/src/index.ts deleted file mode 100644 index a7a5c5146ad..00000000000 --- a/palettes/confetti/confetti/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; - -const paletteName = "confetti"; - -/** - * @param engine - - */ -export async function loadConfettiPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/confetti/confetti/typedoc.json b/palettes/confetti/confetti/typedoc.json deleted file mode 100644 index 7d933b55c69..00000000000 --- a/palettes/confetti/confetti/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Confetti Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/confetti/confetti/webpack.config.js b/palettes/confetti/confetti/webpack.config.js deleted file mode 100644 index 44064c0665d..00000000000 --- a/palettes/confetti/confetti/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-confetti", - paletteName: "Confetti Palette", - version, -}); diff --git a/palettes/confetti/confettiGold/CHANGELOG.md b/palettes/confetti/confettiGold/CHANGELOG.md deleted file mode 100644 index fb082c51873..00000000000 --- a/palettes/confetti/confettiGold/CHANGELOG.md +++ /dev/null @@ -1,18 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-confetti-gold - -# 4.0.0-beta.0 (2026-04-08) - -### Features - -- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) - -# [4.0.0-alpha.5] - -**Note:** Initial version of package @tsparticles/palette-confetti-gold diff --git a/palettes/confetti/confettiGold/README.md b/palettes/confetti/confettiGold/README.md deleted file mode 100644 index d45f165ad0f..00000000000 --- a/palettes/confetti/confettiGold/README.md +++ /dev/null @@ -1,130 +0,0 @@ -[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) - -# tsParticles Confetti Gold Palette - -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-confetti-gold/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-confetti-gold) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-confetti-gold.svg)](https://www.npmjs.com/package/@tsparticles/palette-confetti-gold) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-confetti-gold)](https://www.npmjs.com/package/@tsparticles/palette-confetti-gold) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for confetti gold. - -[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) - -[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") - -## Sample - -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/confetti/confettiGold/images/sample.png)](https://particles.js.org/samples/palettes/confetti-gold) - -## Colors - - - - - - - - - - - - - - - - - - - - - - -
-
- #FFDD00 -
-
- #FFAA00 -
-
- #FF8800 -
-
- #FF5500 -
-
- #FFEEAA -
-
- #FFD700 -
-
- #FFC200 -
-
- #CC8800 -
-
- Background
- #0d0a00 -
- Blend mode: source-over | Fill: true -
- -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadConfettiGoldPalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## How to use it - -### CDN / Vanilla JS / jQuery - -```html - - -``` - -### Usage - -Once the scripts are loaded you can set up `tsParticles` like this: - -```javascript -(async engine => { - await loadBasic(engine); - await loadConfettiGoldPalette(engine); - - const options = { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "confetti-gold", - }; - - await engine.load({ - id: "tsparticles", - options, - }); -})(tsParticles); -``` - -#### Customization - -**Important ⚠️** -You can override all the options defining the properties like in any standard `tsParticles` installation. - -### Frameworks with a tsParticles component library - -Checkout the documentation in the component library repository and call the `loadConfettiGoldPalette` function. - -## Related docs - -- Presets and palettes catalog: -- Main docs: diff --git a/palettes/confetti/confettiGold/images/sample.png b/palettes/confetti/confettiGold/images/sample.png deleted file mode 100644 index d4a3265a7fc..00000000000 Binary files a/palettes/confetti/confettiGold/images/sample.png and /dev/null differ diff --git a/palettes/confetti/confettiGold/package.dist.json b/palettes/confetti/confettiGold/package.dist.json deleted file mode 100644 index edc6ee3dbd5..00000000000 --- a/palettes/confetti/confettiGold/package.dist.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "name": "@tsparticles/palette-confetti-gold", - "version": "4.0.0-beta.12", - "description": "tsParticles confetti gold palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/confetti/confettiGold" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "type": "module", - "jsdelivr": "tsparticles.palette-confetti-gold.min.js", - "unpkg": "tsparticles.palette-confetti-gold.min.js", - "publishConfig": { - "access": "public" - } -} diff --git a/palettes/confetti/confettiGold/package.json b/palettes/confetti/confettiGold/package.json deleted file mode 100644 index b9dfd2dc0c0..00000000000 --- a/palettes/confetti/confettiGold/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-confetti-gold", - "version": "4.0.0-beta.12", - "description": "tsParticles confetti gold palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/confetti/confettiGold" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/confetti/confettiGold/src/index.ts b/palettes/confetti/confettiGold/src/index.ts deleted file mode 100644 index 7b2e27f66d7..00000000000 --- a/palettes/confetti/confettiGold/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; - -const paletteName = "confetti-gold"; - -/** - * @param engine - - */ -export async function loadConfettiGoldPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/confetti/confettiGold/typedoc.json b/palettes/confetti/confettiGold/typedoc.json deleted file mode 100644 index 30b3e840b43..00000000000 --- a/palettes/confetti/confettiGold/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Confetti Gold Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/confetti/confettiGold/webpack.config.js b/palettes/confetti/confettiGold/webpack.config.js deleted file mode 100644 index 341f97f0065..00000000000 --- a/palettes/confetti/confettiGold/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-confetti-gold", - paletteName: "Confetti Gold Palette", - version, -}); diff --git a/palettes/confetti/confettiMonochromeBlue/CHANGELOG.md b/palettes/confetti/confettiMonochromeBlue/CHANGELOG.md deleted file mode 100644 index 8371999f298..00000000000 --- a/palettes/confetti/confettiMonochromeBlue/CHANGELOG.md +++ /dev/null @@ -1,18 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-confetti-monochrome-blue - -# 4.0.0-beta.0 (2026-04-08) - -### Features - -- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) - -# [4.0.0-alpha.5] - -**Note:** Initial version of package @tsparticles/palette-confetti-monochrome-blue diff --git a/palettes/confetti/confettiMonochromeBlue/README.md b/palettes/confetti/confettiMonochromeBlue/README.md deleted file mode 100644 index 44db17ef79c..00000000000 --- a/palettes/confetti/confettiMonochromeBlue/README.md +++ /dev/null @@ -1,126 +0,0 @@ -[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) - -# tsParticles Confetti Monochrome Blue Palette - -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-confetti-monochrome-blue/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-confetti-monochrome-blue) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-confetti-monochrome-blue.svg)](https://www.npmjs.com/package/@tsparticles/palette-confetti-monochrome-blue) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-confetti-monochrome-blue)](https://www.npmjs.com/package/@tsparticles/palette-confetti-monochrome-blue) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for confetti monochrome blue. - -[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) - -[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") - -## Sample - -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/confetti/confettiMonochromeBlue/images/sample.png)](https://particles.js.org/samples/palettes/confetti-monochrome-blue) - -## Colors - - - - - - - - - - - - - - - - - - - - - -
-
- #99BBFF -
-
- #6699FF -
-
- #3366FF -
-
- #1133CC -
-
- #002299 -
-
- #0044FF -
-
- #CCDDFF -
-
- Background
- #f0f4ff -
- Blend mode: source-over | Fill: true -
- -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadConfettiMonochromeBluePalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## How to use it - -### CDN / Vanilla JS / jQuery - -```html - - -``` - -### Usage - -Once the scripts are loaded you can set up `tsParticles` like this: - -```javascript -(async engine => { - await loadBasic(engine); - await loadConfettiMonochromeBluePalette(engine); - - const options = { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "confetti-monochrome-blue", - }; - - await engine.load({ - id: "tsparticles", - options, - }); -})(tsParticles); -``` - -#### Customization - -**Important ⚠️** -You can override all the options defining the properties like in any standard `tsParticles` installation. - -### Frameworks with a tsParticles component library - -Checkout the documentation in the component library repository and call the `loadConfettiMonochromeBluePalette` function. - -## Related docs - -- Presets and palettes catalog: -- Main docs: diff --git a/palettes/confetti/confettiMonochromeBlue/images/sample.png b/palettes/confetti/confettiMonochromeBlue/images/sample.png deleted file mode 100644 index 7d1a4951681..00000000000 Binary files a/palettes/confetti/confettiMonochromeBlue/images/sample.png and /dev/null differ diff --git a/palettes/confetti/confettiMonochromeBlue/package.dist.json b/palettes/confetti/confettiMonochromeBlue/package.dist.json deleted file mode 100644 index d5d1fddfc49..00000000000 --- a/palettes/confetti/confettiMonochromeBlue/package.dist.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "name": "@tsparticles/palette-confetti-monochrome-blue", - "version": "4.0.0-beta.12", - "description": "tsParticles confetti monochrome blue palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/confetti/confettiMonochromeBlue" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "type": "module", - "jsdelivr": "tsparticles.palette-confetti-monochrome-blue.min.js", - "unpkg": "tsparticles.palette-confetti-monochrome-blue.min.js", - "publishConfig": { - "access": "public" - } -} diff --git a/palettes/confetti/confettiMonochromeBlue/package.json b/palettes/confetti/confettiMonochromeBlue/package.json deleted file mode 100644 index 33862db4412..00000000000 --- a/palettes/confetti/confettiMonochromeBlue/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-confetti-monochrome-blue", - "version": "4.0.0-beta.12", - "description": "tsParticles confetti monochrome blue palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/confetti/confettiMonochromeBlue" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/confetti/confettiMonochromeBlue/src/index.ts b/palettes/confetti/confettiMonochromeBlue/src/index.ts deleted file mode 100644 index a3445089350..00000000000 --- a/palettes/confetti/confettiMonochromeBlue/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; - -const paletteName = "confetti-monochrome-blue"; - -/** - * @param engine - - */ -export async function loadConfettiMonochromeBluePalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/confetti/confettiMonochromeBlue/typedoc.json b/palettes/confetti/confettiMonochromeBlue/typedoc.json deleted file mode 100644 index 77314961a17..00000000000 --- a/palettes/confetti/confettiMonochromeBlue/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Confetti Monochrome Blue Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/confetti/confettiMonochromeBlue/webpack.config.js b/palettes/confetti/confettiMonochromeBlue/webpack.config.js deleted file mode 100644 index e6f11ec0f5f..00000000000 --- a/palettes/confetti/confettiMonochromeBlue/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-confetti-monochrome-blue", - paletteName: "Confetti Monochrome Blue Palette", - version, -}); diff --git a/palettes/confetti/confettiMonochromeGreen/CHANGELOG.md b/palettes/confetti/confettiMonochromeGreen/CHANGELOG.md deleted file mode 100644 index f4bbd9beaf1..00000000000 --- a/palettes/confetti/confettiMonochromeGreen/CHANGELOG.md +++ /dev/null @@ -1,18 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-confetti-monochrome-green - -# 4.0.0-beta.0 (2026-04-08) - -### Features - -- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) - -# [4.0.0-alpha.5] - -**Note:** Initial version of package @tsparticles/palette-confetti-monochrome-green diff --git a/palettes/confetti/confettiMonochromeGreen/README.md b/palettes/confetti/confettiMonochromeGreen/README.md deleted file mode 100644 index 58c8d9c169e..00000000000 --- a/palettes/confetti/confettiMonochromeGreen/README.md +++ /dev/null @@ -1,126 +0,0 @@ -[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) - -# tsParticles Confetti Monochrome Green Palette - -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-confetti-monochrome-green/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-confetti-monochrome-green) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-confetti-monochrome-green.svg)](https://www.npmjs.com/package/@tsparticles/palette-confetti-monochrome-green) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-confetti-monochrome-green)](https://www.npmjs.com/package/@tsparticles/palette-confetti-monochrome-green) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for confetti monochrome green. - -[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) - -[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") - -## Sample - -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/confetti/confettiMonochromeGreen/images/sample.png)](https://particles.js.org/samples/palettes/confetti-monochrome-green) - -## Colors - - - - - - - - - - - - - - - - - - - - - -
-
- #99FFB8 -
-
- #55EE88 -
-
- #22CC55 -
-
- #009933 -
-
- #006622 -
-
- #00FF44 -
-
- #CCFFDD -
-
- Background
- #f0fff4 -
- Blend mode: source-over | Fill: true -
- -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadConfettiMonochromeGreenPalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## How to use it - -### CDN / Vanilla JS / jQuery - -```html - - -``` - -### Usage - -Once the scripts are loaded you can set up `tsParticles` like this: - -```javascript -(async engine => { - await loadBasic(engine); - await loadConfettiMonochromeGreenPalette(engine); - - const options = { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "confetti-monochrome-green", - }; - - await engine.load({ - id: "tsparticles", - options, - }); -})(tsParticles); -``` - -#### Customization - -**Important ⚠️** -You can override all the options defining the properties like in any standard `tsParticles` installation. - -### Frameworks with a tsParticles component library - -Checkout the documentation in the component library repository and call the `loadConfettiMonochromeGreenPalette` function. - -## Related docs - -- Presets and palettes catalog: -- Main docs: diff --git a/palettes/confetti/confettiMonochromeGreen/images/sample.png b/palettes/confetti/confettiMonochromeGreen/images/sample.png deleted file mode 100644 index da67849f53f..00000000000 Binary files a/palettes/confetti/confettiMonochromeGreen/images/sample.png and /dev/null differ diff --git a/palettes/confetti/confettiMonochromeGreen/package.dist.json b/palettes/confetti/confettiMonochromeGreen/package.dist.json deleted file mode 100644 index 5227aa33a08..00000000000 --- a/palettes/confetti/confettiMonochromeGreen/package.dist.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "name": "@tsparticles/palette-confetti-monochrome-green", - "version": "4.0.0-beta.12", - "description": "tsParticles confetti monochrome green palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/confetti/confettiMonochromeGreen" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "type": "module", - "jsdelivr": "tsparticles.palette-confetti-monochrome-green.min.js", - "unpkg": "tsparticles.palette-confetti-monochrome-green.min.js", - "publishConfig": { - "access": "public" - } -} diff --git a/palettes/confetti/confettiMonochromeGreen/package.json b/palettes/confetti/confettiMonochromeGreen/package.json deleted file mode 100644 index 73026214dfe..00000000000 --- a/palettes/confetti/confettiMonochromeGreen/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-confetti-monochrome-green", - "version": "4.0.0-beta.12", - "description": "tsParticles confetti monochrome green palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/confetti/confettiMonochromeGreen" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/confetti/confettiMonochromeGreen/src/index.ts b/palettes/confetti/confettiMonochromeGreen/src/index.ts deleted file mode 100644 index 904f5d88e85..00000000000 --- a/palettes/confetti/confettiMonochromeGreen/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; - -const paletteName = "confetti-monochrome-green"; - -/** - * @param engine - - */ -export async function loadConfettiMonochromeGreenPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/confetti/confettiMonochromeGreen/typedoc.json b/palettes/confetti/confettiMonochromeGreen/typedoc.json deleted file mode 100644 index d11f54687ac..00000000000 --- a/palettes/confetti/confettiMonochromeGreen/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Confetti Monochrome Green Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/confetti/confettiMonochromeGreen/webpack.config.js b/palettes/confetti/confettiMonochromeGreen/webpack.config.js deleted file mode 100644 index e8852bd81a8..00000000000 --- a/palettes/confetti/confettiMonochromeGreen/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-confetti-monochrome-green", - paletteName: "Confetti Monochrome Green Palette", - version, -}); diff --git a/palettes/confetti/confettiMonochromePink/CHANGELOG.md b/palettes/confetti/confettiMonochromePink/CHANGELOG.md deleted file mode 100644 index 109831fa9a2..00000000000 --- a/palettes/confetti/confettiMonochromePink/CHANGELOG.md +++ /dev/null @@ -1,18 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-confetti-monochrome-pink - -# 4.0.0-beta.0 (2026-04-08) - -### Features - -- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) - -# [4.0.0-alpha.5] - -**Note:** Initial version of package @tsparticles/palette-confetti-monochrome-pink diff --git a/palettes/confetti/confettiMonochromePink/README.md b/palettes/confetti/confettiMonochromePink/README.md deleted file mode 100644 index 11d3c73305f..00000000000 --- a/palettes/confetti/confettiMonochromePink/README.md +++ /dev/null @@ -1,126 +0,0 @@ -[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) - -# tsParticles Confetti Monochrome Pink Palette - -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-confetti-monochrome-pink/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-confetti-monochrome-pink) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-confetti-monochrome-pink.svg)](https://www.npmjs.com/package/@tsparticles/palette-confetti-monochrome-pink) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-confetti-monochrome-pink)](https://www.npmjs.com/package/@tsparticles/palette-confetti-monochrome-pink) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for confetti monochrome pink. - -[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) - -[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") - -## Sample - -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/confetti/confettiMonochromePink/images/sample.png)](https://particles.js.org/samples/palettes/confetti-monochrome-pink) - -## Colors - - - - - - - - - - - - - - - - - - - - - -
-
- #FF99BB -
-
- #FF66AA -
-
- #FF3388 -
-
- #CC1166 -
-
- #990044 -
-
- #FF0055 -
-
- #FFCCDD -
-
- Background
- #fff0f5 -
- Blend mode: source-over | Fill: true -
- -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadConfettiMonochromePinkPalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## How to use it - -### CDN / Vanilla JS / jQuery - -```html - - -``` - -### Usage - -Once the scripts are loaded you can set up `tsParticles` like this: - -```javascript -(async engine => { - await loadBasic(engine); - await loadConfettiMonochromePinkPalette(engine); - - const options = { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "confetti-monochrome-pink", - }; - - await engine.load({ - id: "tsparticles", - options, - }); -})(tsParticles); -``` - -#### Customization - -**Important ⚠️** -You can override all the options defining the properties like in any standard `tsParticles` installation. - -### Frameworks with a tsParticles component library - -Checkout the documentation in the component library repository and call the `loadConfettiMonochromePinkPalette` function. - -## Related docs - -- Presets and palettes catalog: -- Main docs: diff --git a/palettes/confetti/confettiMonochromePink/images/sample.png b/palettes/confetti/confettiMonochromePink/images/sample.png deleted file mode 100644 index 15ffc85add5..00000000000 Binary files a/palettes/confetti/confettiMonochromePink/images/sample.png and /dev/null differ diff --git a/palettes/confetti/confettiMonochromePink/package.dist.json b/palettes/confetti/confettiMonochromePink/package.dist.json deleted file mode 100644 index b50264f5ba4..00000000000 --- a/palettes/confetti/confettiMonochromePink/package.dist.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "name": "@tsparticles/palette-confetti-monochrome-pink", - "version": "4.0.0-beta.12", - "description": "tsParticles confetti monochrome pink palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/confetti/confettiMonochromePink" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "type": "module", - "jsdelivr": "tsparticles.palette-confetti-monochrome-pink.min.js", - "unpkg": "tsparticles.palette-confetti-monochrome-pink.min.js", - "publishConfig": { - "access": "public" - } -} diff --git a/palettes/confetti/confettiMonochromePink/package.json b/palettes/confetti/confettiMonochromePink/package.json deleted file mode 100644 index b8053a7b16b..00000000000 --- a/palettes/confetti/confettiMonochromePink/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-confetti-monochrome-pink", - "version": "4.0.0-beta.12", - "description": "tsParticles confetti monochrome pink palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/confetti/confettiMonochromePink" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/confetti/confettiMonochromePink/src/index.ts b/palettes/confetti/confettiMonochromePink/src/index.ts deleted file mode 100644 index 07a4ade7051..00000000000 --- a/palettes/confetti/confettiMonochromePink/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; - -const paletteName = "confetti-monochrome-pink"; - -/** - * @param engine - - */ -export async function loadConfettiMonochromePinkPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/confetti/confettiMonochromePink/typedoc.json b/palettes/confetti/confettiMonochromePink/typedoc.json deleted file mode 100644 index 466fecbc299..00000000000 --- a/palettes/confetti/confettiMonochromePink/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Confetti Monochrome Pink Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/confetti/confettiMonochromePink/webpack.config.js b/palettes/confetti/confettiMonochromePink/webpack.config.js deleted file mode 100644 index 1a7d8b96461..00000000000 --- a/palettes/confetti/confettiMonochromePink/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-confetti-monochrome-pink", - paletteName: "Confetti Monochrome Pink Palette", - version, -}); diff --git a/palettes/confetti/confettiNeon/CHANGELOG.md b/palettes/confetti/confettiNeon/CHANGELOG.md deleted file mode 100644 index 33a037da47c..00000000000 --- a/palettes/confetti/confettiNeon/CHANGELOG.md +++ /dev/null @@ -1,18 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-confetti-neon - -# 4.0.0-beta.0 (2026-04-08) - -### Features - -- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) - -# [4.0.0-alpha.5] - -**Note:** Initial version of package @tsparticles/palette-confetti-neon diff --git a/palettes/confetti/confettiNeon/README.md b/palettes/confetti/confettiNeon/README.md deleted file mode 100644 index c0c55c9f4e0..00000000000 --- a/palettes/confetti/confettiNeon/README.md +++ /dev/null @@ -1,130 +0,0 @@ -[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) - -# tsParticles Confetti Neon Palette - -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-confetti-neon/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-confetti-neon) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-confetti-neon.svg)](https://www.npmjs.com/package/@tsparticles/palette-confetti-neon) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-confetti-neon)](https://www.npmjs.com/package/@tsparticles/palette-confetti-neon) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for confetti neon. - -[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) - -[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") - -## Sample - -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/confetti/confettiNeon/images/sample.png)](https://particles.js.org/samples/palettes/confetti-neon) - -## Colors - - - - - - - - - - - - - - - - - - - - - - -
-
- #FF0088 -
-
- #FF4400 -
-
- #FFFF00 -
-
- #00FF44 -
-
- #00FFFF -
-
- #0088FF -
-
- #FF00FF -
-
- #AAFF00 -
-
- Background
- #050505 -
- Blend mode: screen | Fill: true -
- -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadConfettiNeonPalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## How to use it - -### CDN / Vanilla JS / jQuery - -```html - - -``` - -### Usage - -Once the scripts are loaded you can set up `tsParticles` like this: - -```javascript -(async engine => { - await loadBasic(engine); - await loadConfettiNeonPalette(engine); - - const options = { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "confetti-neon", - }; - - await engine.load({ - id: "tsparticles", - options, - }); -})(tsParticles); -``` - -#### Customization - -**Important ⚠️** -You can override all the options defining the properties like in any standard `tsParticles` installation. - -### Frameworks with a tsParticles component library - -Checkout the documentation in the component library repository and call the `loadConfettiNeonPalette` function. - -## Related docs - -- Presets and palettes catalog: -- Main docs: diff --git a/palettes/confetti/confettiNeon/images/sample.png b/palettes/confetti/confettiNeon/images/sample.png deleted file mode 100644 index 466c891457f..00000000000 Binary files a/palettes/confetti/confettiNeon/images/sample.png and /dev/null differ diff --git a/palettes/confetti/confettiNeon/package.dist.json b/palettes/confetti/confettiNeon/package.dist.json deleted file mode 100644 index 709f06ab8ef..00000000000 --- a/palettes/confetti/confettiNeon/package.dist.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "name": "@tsparticles/palette-confetti-neon", - "version": "4.0.0-beta.12", - "description": "tsParticles confetti neon palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/confetti/confettiNeon" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "type": "module", - "jsdelivr": "tsparticles.palette-confetti-neon.min.js", - "unpkg": "tsparticles.palette-confetti-neon.min.js", - "publishConfig": { - "access": "public" - } -} diff --git a/palettes/confetti/confettiNeon/package.json b/palettes/confetti/confettiNeon/package.json deleted file mode 100644 index 2155edcc695..00000000000 --- a/palettes/confetti/confettiNeon/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-confetti-neon", - "version": "4.0.0-beta.12", - "description": "tsParticles confetti neon palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/confetti/confettiNeon" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/confetti/confettiNeon/src/index.ts b/palettes/confetti/confettiNeon/src/index.ts deleted file mode 100644 index 3785f4f028c..00000000000 --- a/palettes/confetti/confettiNeon/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; - -const paletteName = "confetti-neon"; - -/** - * @param engine - - */ -export async function loadConfettiNeonPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/confetti/confettiNeon/typedoc.json b/palettes/confetti/confettiNeon/typedoc.json deleted file mode 100644 index 57fae4eb6c2..00000000000 --- a/palettes/confetti/confettiNeon/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Confetti Neon Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/confetti/confettiNeon/webpack.config.js b/palettes/confetti/confettiNeon/webpack.config.js deleted file mode 100644 index fb54b6ec17f..00000000000 --- a/palettes/confetti/confettiNeon/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-confetti-neon", - paletteName: "Confetti Neon Palette", - version, -}); diff --git a/palettes/confetti/confettiPastel/CHANGELOG.md b/palettes/confetti/confettiPastel/CHANGELOG.md deleted file mode 100644 index 50da0d1fbcc..00000000000 --- a/palettes/confetti/confettiPastel/CHANGELOG.md +++ /dev/null @@ -1,18 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-confetti-pastel - -# 4.0.0-beta.0 (2026-04-08) - -### Features - -- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) - -# [4.0.0-alpha.5] - -**Note:** Initial version of package @tsparticles/palette-confetti-pastel diff --git a/palettes/confetti/confettiPastel/README.md b/palettes/confetti/confettiPastel/README.md deleted file mode 100644 index f1d7cc97b89..00000000000 --- a/palettes/confetti/confettiPastel/README.md +++ /dev/null @@ -1,130 +0,0 @@ -[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) - -# tsParticles Confetti Pastel Palette - -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-confetti-pastel/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-confetti-pastel) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-confetti-pastel.svg)](https://www.npmjs.com/package/@tsparticles/palette-confetti-pastel) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-confetti-pastel)](https://www.npmjs.com/package/@tsparticles/palette-confetti-pastel) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for confetti pastel. - -[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) - -[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") - -## Sample - -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/confetti/confettiPastel/images/sample.png)](https://particles.js.org/samples/palettes/confetti-pastel) - -## Colors - - - - - - - - - - - - - - - - - - - - - - -
-
- #FFB3C1 -
-
- #FFD59E -
-
- #FFF4A0 -
-
- #B8F0B8 -
-
- #ADD8FF -
-
- #D8B8FF -
-
- #FFB3E6 -
-
- #B8FFF5 -
-
- Background
- #FFFFFF -
- Blend mode: source-over | Fill: true -
- -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadConfettiPastelPalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## How to use it - -### CDN / Vanilla JS / jQuery - -```html - - -``` - -### Usage - -Once the scripts are loaded you can set up `tsParticles` like this: - -```javascript -(async engine => { - await loadBasic(engine); - await loadConfettiPastelPalette(engine); - - const options = { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "confetti-pastel", - }; - - await engine.load({ - id: "tsparticles", - options, - }); -})(tsParticles); -``` - -#### Customization - -**Important ⚠️** -You can override all the options defining the properties like in any standard `tsParticles` installation. - -### Frameworks with a tsParticles component library - -Checkout the documentation in the component library repository and call the `loadConfettiPastelPalette` function. - -## Related docs - -- Presets and palettes catalog: -- Main docs: diff --git a/palettes/confetti/confettiPastel/images/sample.png b/palettes/confetti/confettiPastel/images/sample.png deleted file mode 100644 index 3871c31f847..00000000000 Binary files a/palettes/confetti/confettiPastel/images/sample.png and /dev/null differ diff --git a/palettes/confetti/confettiPastel/package.dist.json b/palettes/confetti/confettiPastel/package.dist.json deleted file mode 100644 index 75b764918fb..00000000000 --- a/palettes/confetti/confettiPastel/package.dist.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "name": "@tsparticles/palette-confetti-pastel", - "version": "4.0.0-beta.12", - "description": "tsParticles confetti pastel palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/confetti/confettiPastel" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "type": "module", - "jsdelivr": "tsparticles.palette-confetti-pastel.min.js", - "unpkg": "tsparticles.palette-confetti-pastel.min.js", - "publishConfig": { - "access": "public" - } -} diff --git a/palettes/confetti/confettiPastel/package.json b/palettes/confetti/confettiPastel/package.json deleted file mode 100644 index 75a7175c3a9..00000000000 --- a/palettes/confetti/confettiPastel/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-confetti-pastel", - "version": "4.0.0-beta.12", - "description": "tsParticles confetti pastel palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/confetti/confettiPastel" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/confetti/confettiPastel/src/index.ts b/palettes/confetti/confettiPastel/src/index.ts deleted file mode 100644 index aceb30928fe..00000000000 --- a/palettes/confetti/confettiPastel/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; - -const paletteName = "confetti-pastel"; - -/** - * @param engine - - */ -export async function loadConfettiPastelPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/confetti/confettiPastel/typedoc.json b/palettes/confetti/confettiPastel/typedoc.json deleted file mode 100644 index 843fa85f65e..00000000000 --- a/palettes/confetti/confettiPastel/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Confetti Pastel Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/confetti/confettiPastel/webpack.config.js b/palettes/confetti/confettiPastel/webpack.config.js deleted file mode 100644 index e1dc45a741c..00000000000 --- a/palettes/confetti/confettiPastel/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-confetti-pastel", - paletteName: "Confetti Pastel Palette", - version, -}); diff --git a/palettes/confetti/confettiPatriotic/CHANGELOG.md b/palettes/confetti/confettiPatriotic/CHANGELOG.md deleted file mode 100644 index ac91df7e84f..00000000000 --- a/palettes/confetti/confettiPatriotic/CHANGELOG.md +++ /dev/null @@ -1,18 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-confetti-patriotic - -# 4.0.0-beta.0 (2026-04-08) - -### Features - -- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) - -# [4.0.0-alpha.5] - -**Note:** Initial version of package @tsparticles/palette-confetti-patriotic diff --git a/palettes/confetti/confettiPatriotic/README.md b/palettes/confetti/confettiPatriotic/README.md deleted file mode 100644 index 8cec943998b..00000000000 --- a/palettes/confetti/confettiPatriotic/README.md +++ /dev/null @@ -1,130 +0,0 @@ -[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) - -# tsParticles Confetti Patriotic Palette - -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-confetti-patriotic/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-confetti-patriotic) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-confetti-patriotic.svg)](https://www.npmjs.com/package/@tsparticles/palette-confetti-patriotic) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-confetti-patriotic)](https://www.npmjs.com/package/@tsparticles/palette-confetti-patriotic) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for confetti patriotic. - -[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) - -[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") - -## Sample - -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/confetti/confettiPatriotic/images/sample.png)](https://particles.js.org/samples/palettes/confetti-patriotic) - -## Colors - - - - - - - - - - - - - - - - - - - - - - -
-
- #FF0000 -
-
- #EE1111 -
-
- #CC0000 -
-
- #0033BB -
-
- #0055CC -
-
- #0077EE -
-
- #FFFFFF -
-
- #EEEEEE -
-
- Background
- #FFFFFF -
- Blend mode: source-over | Fill: true -
- -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadConfettiPatrioticPalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## How to use it - -### CDN / Vanilla JS / jQuery - -```html - - -``` - -### Usage - -Once the scripts are loaded you can set up `tsParticles` like this: - -```javascript -(async engine => { - await loadBasic(engine); - await loadConfettiPatrioticPalette(engine); - - const options = { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "confetti-patriotic", - }; - - await engine.load({ - id: "tsparticles", - options, - }); -})(tsParticles); -``` - -#### Customization - -**Important ⚠️** -You can override all the options defining the properties like in any standard `tsParticles` installation. - -### Frameworks with a tsParticles component library - -Checkout the documentation in the component library repository and call the `loadConfettiPatrioticPalette` function. - -## Related docs - -- Presets and palettes catalog: -- Main docs: diff --git a/palettes/confetti/confettiPatriotic/images/sample.png b/palettes/confetti/confettiPatriotic/images/sample.png deleted file mode 100644 index 765ac1da7dd..00000000000 Binary files a/palettes/confetti/confettiPatriotic/images/sample.png and /dev/null differ diff --git a/palettes/confetti/confettiPatriotic/package.dist.json b/palettes/confetti/confettiPatriotic/package.dist.json deleted file mode 100644 index 1f5179931c5..00000000000 --- a/palettes/confetti/confettiPatriotic/package.dist.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "name": "@tsparticles/palette-confetti-patriotic", - "version": "4.0.0-beta.12", - "description": "tsParticles confetti patriotic palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/confetti/confettiPatriotic" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "type": "module", - "jsdelivr": "tsparticles.palette-confetti-patriotic.min.js", - "unpkg": "tsparticles.palette-confetti-patriotic.min.js", - "publishConfig": { - "access": "public" - } -} diff --git a/palettes/confetti/confettiPatriotic/package.json b/palettes/confetti/confettiPatriotic/package.json deleted file mode 100644 index b98a9df69da..00000000000 --- a/palettes/confetti/confettiPatriotic/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-confetti-patriotic", - "version": "4.0.0-beta.12", - "description": "tsParticles confetti patriotic palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/confetti/confettiPatriotic" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/confetti/confettiPatriotic/src/index.ts b/palettes/confetti/confettiPatriotic/src/index.ts deleted file mode 100644 index b6963586741..00000000000 --- a/palettes/confetti/confettiPatriotic/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; - -const paletteName = "confetti-patriotic"; - -/** - * @param engine - - */ -export async function loadConfettiPatrioticPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/confetti/confettiPatriotic/typedoc.json b/palettes/confetti/confettiPatriotic/typedoc.json deleted file mode 100644 index d90e75fae91..00000000000 --- a/palettes/confetti/confettiPatriotic/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Confetti Patriotic Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/confetti/confettiPatriotic/webpack.config.js b/palettes/confetti/confettiPatriotic/webpack.config.js deleted file mode 100644 index be37bf3cd4e..00000000000 --- a/palettes/confetti/confettiPatriotic/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-confetti-patriotic", - paletteName: "Confetti Patriotic Palette", - version, -}); diff --git a/palettes/confetti/confettiRainbow/CHANGELOG.md b/palettes/confetti/confettiRainbow/CHANGELOG.md deleted file mode 100644 index 932e27fa492..00000000000 --- a/palettes/confetti/confettiRainbow/CHANGELOG.md +++ /dev/null @@ -1,18 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-confetti-rainbow - -# 4.0.0-beta.0 (2026-04-08) - -### Features - -- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) - -# [4.0.0-alpha.5] - -**Note:** Initial version of package @tsparticles/palette-confetti-rainbow diff --git a/palettes/confetti/confettiRainbow/README.md b/palettes/confetti/confettiRainbow/README.md deleted file mode 100644 index 76b82db7284..00000000000 --- a/palettes/confetti/confettiRainbow/README.md +++ /dev/null @@ -1,126 +0,0 @@ -[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) - -# tsParticles Confetti Rainbow Palette - -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-confetti-rainbow/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-confetti-rainbow) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-confetti-rainbow.svg)](https://www.npmjs.com/package/@tsparticles/palette-confetti-rainbow) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-confetti-rainbow)](https://www.npmjs.com/package/@tsparticles/palette-confetti-rainbow) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for confetti rainbow. - -[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) - -[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") - -## Sample - -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/confetti/confettiRainbow/images/sample.png)](https://particles.js.org/samples/palettes/confetti-rainbow) - -## Colors - - - - - - - - - - - - - - - - - - - - - -
-
- #FF0000 -
-
- #FF7700 -
-
- #FFFF00 -
-
- #00CC00 -
-
- #0000FF -
-
- #8800FF -
-
- #FF0099 -
-
- Background
- #1a1a2e -
- Blend mode: source-over | Fill: true -
- -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadConfettiRainbowPalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## How to use it - -### CDN / Vanilla JS / jQuery - -```html - - -``` - -### Usage - -Once the scripts are loaded you can set up `tsParticles` like this: - -```javascript -(async engine => { - await loadBasic(engine); - await loadConfettiRainbowPalette(engine); - - const options = { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "confetti-rainbow", - }; - - await engine.load({ - id: "tsparticles", - options, - }); -})(tsParticles); -``` - -#### Customization - -**Important ⚠️** -You can override all the options defining the properties like in any standard `tsParticles` installation. - -### Frameworks with a tsParticles component library - -Checkout the documentation in the component library repository and call the `loadConfettiRainbowPalette` function. - -## Related docs - -- Presets and palettes catalog: -- Main docs: diff --git a/palettes/confetti/confettiRainbow/images/sample.png b/palettes/confetti/confettiRainbow/images/sample.png deleted file mode 100644 index 2828f57fbb7..00000000000 Binary files a/palettes/confetti/confettiRainbow/images/sample.png and /dev/null differ diff --git a/palettes/confetti/confettiRainbow/package.dist.json b/palettes/confetti/confettiRainbow/package.dist.json deleted file mode 100644 index 6cbc5749f8e..00000000000 --- a/palettes/confetti/confettiRainbow/package.dist.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "name": "@tsparticles/palette-confetti-rainbow", - "version": "4.0.0-beta.12", - "description": "tsParticles confetti rainbow palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/confetti/confettiRainbow" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "type": "module", - "jsdelivr": "tsparticles.palette-confetti-rainbow.min.js", - "unpkg": "tsparticles.palette-confetti-rainbow.min.js", - "publishConfig": { - "access": "public" - } -} diff --git a/palettes/confetti/confettiRainbow/package.json b/palettes/confetti/confettiRainbow/package.json deleted file mode 100644 index 1a9c656c09d..00000000000 --- a/palettes/confetti/confettiRainbow/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-confetti-rainbow", - "version": "4.0.0-beta.12", - "description": "tsParticles confetti rainbow palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/confetti/confettiRainbow" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/confetti/confettiRainbow/src/index.ts b/palettes/confetti/confettiRainbow/src/index.ts deleted file mode 100644 index bbc4f8d5d71..00000000000 --- a/palettes/confetti/confettiRainbow/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; - -const paletteName = "confetti-rainbow"; - -/** - * @param engine - - */ -export async function loadConfettiRainbowPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/confetti/confettiRainbow/typedoc.json b/palettes/confetti/confettiRainbow/typedoc.json deleted file mode 100644 index 8eb15833cb3..00000000000 --- a/palettes/confetti/confettiRainbow/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Confetti Rainbow Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/confetti/confettiRainbow/webpack.config.js b/palettes/confetti/confettiRainbow/webpack.config.js deleted file mode 100644 index 644a96a8601..00000000000 --- a/palettes/confetti/confettiRainbow/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-confetti-rainbow", - paletteName: "Confetti Rainbow Palette", - version, -}); diff --git a/palettes/confetti/confettiWinter/CHANGELOG.md b/palettes/confetti/confettiWinter/CHANGELOG.md deleted file mode 100644 index 04d5ac72561..00000000000 --- a/palettes/confetti/confettiWinter/CHANGELOG.md +++ /dev/null @@ -1,18 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-confetti-winter - -# 4.0.0-beta.0 (2026-04-08) - -### Features - -- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) - -# [4.0.0-alpha.5] - -**Note:** Initial version of package @tsparticles/palette-confetti-winter diff --git a/palettes/confetti/confettiWinter/README.md b/palettes/confetti/confettiWinter/README.md deleted file mode 100644 index 30d5beb8b5b..00000000000 --- a/palettes/confetti/confettiWinter/README.md +++ /dev/null @@ -1,130 +0,0 @@ -[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) - -# tsParticles Confetti Winter Palette - -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-confetti-winter/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-confetti-winter) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-confetti-winter.svg)](https://www.npmjs.com/package/@tsparticles/palette-confetti-winter) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-confetti-winter)](https://www.npmjs.com/package/@tsparticles/palette-confetti-winter) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for confetti winter. - -[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) - -[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") - -## Sample - -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/confetti/confettiWinter/images/sample.png)](https://particles.js.org/samples/palettes/confetti-winter) - -## Colors - - - - - - - - - - - - - - - - - - - - - - -
-
- #FFFFFF -
-
- #DDEEFF -
-
- #AACCFF -
-
- #88BBFF -
-
- #FF9999 -
-
- #FFBBBB -
-
- #99CCFF -
-
- #CCEEFF -
-
- Background
- #eaf4ff -
- Blend mode: source-over | Fill: true -
- -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadConfettiWinterPalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## How to use it - -### CDN / Vanilla JS / jQuery - -```html - - -``` - -### Usage - -Once the scripts are loaded you can set up `tsParticles` like this: - -```javascript -(async engine => { - await loadBasic(engine); - await loadConfettiWinterPalette(engine); - - const options = { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "confetti-winter", - }; - - await engine.load({ - id: "tsparticles", - options, - }); -})(tsParticles); -``` - -#### Customization - -**Important ⚠️** -You can override all the options defining the properties like in any standard `tsParticles` installation. - -### Frameworks with a tsParticles component library - -Checkout the documentation in the component library repository and call the `loadConfettiWinterPalette` function. - -## Related docs - -- Presets and palettes catalog: -- Main docs: diff --git a/palettes/confetti/confettiWinter/images/sample.png b/palettes/confetti/confettiWinter/images/sample.png deleted file mode 100644 index a75d46cd637..00000000000 Binary files a/palettes/confetti/confettiWinter/images/sample.png and /dev/null differ diff --git a/palettes/confetti/confettiWinter/package.dist.json b/palettes/confetti/confettiWinter/package.dist.json deleted file mode 100644 index caa94d0cc3e..00000000000 --- a/palettes/confetti/confettiWinter/package.dist.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "name": "@tsparticles/palette-confetti-winter", - "version": "4.0.0-beta.12", - "description": "tsParticles confetti winter palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/confetti/confettiWinter" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "type": "module", - "jsdelivr": "tsparticles.palette-confetti-winter.min.js", - "unpkg": "tsparticles.palette-confetti-winter.min.js", - "publishConfig": { - "access": "public" - } -} diff --git a/palettes/confetti/confettiWinter/package.json b/palettes/confetti/confettiWinter/package.json deleted file mode 100644 index 05958d46ea5..00000000000 --- a/palettes/confetti/confettiWinter/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-confetti-winter", - "version": "4.0.0-beta.12", - "description": "tsParticles confetti winter palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/confetti/confettiWinter" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/confetti/confettiWinter/src/index.ts b/palettes/confetti/confettiWinter/src/index.ts deleted file mode 100644 index 94b7533fe44..00000000000 --- a/palettes/confetti/confettiWinter/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; - -const paletteName = "confetti-winter"; - -/** - * @param engine - - */ -export async function loadConfettiWinterPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/confetti/confettiWinter/typedoc.json b/palettes/confetti/confettiWinter/typedoc.json deleted file mode 100644 index c8439877d41..00000000000 --- a/palettes/confetti/confettiWinter/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Confetti Winter Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/confetti/confettiWinter/webpack.config.js b/palettes/confetti/confettiWinter/webpack.config.js deleted file mode 100644 index 10686c2e1db..00000000000 --- a/palettes/confetti/confettiWinter/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-confetti-winter", - paletteName: "Confetti Winter Palette", - version, -}); diff --git a/palettes/confetti/confettiMonochromeGreen/.browserslistrc b/palettes/confetti/default/.browserslistrc similarity index 100% rename from palettes/confetti/confettiMonochromeGreen/.browserslistrc rename to palettes/confetti/default/.browserslistrc diff --git a/palettes/confetti/default/CHANGELOG.md b/palettes/confetti/default/CHANGELOG.md new file mode 100644 index 00000000000..4814783261d --- /dev/null +++ b/palettes/confetti/default/CHANGELOG.md @@ -0,0 +1,22 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-confetti + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-confetti + +# 4.0.0-beta.0 (2026-04-08) + +### Features + +- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) + +# [4.0.0-alpha.5](https://github.com/tsparticles/palettes/compare/v4.0.0-alpha.4...v4.0.0-alpha.5) (2026-03-31) + +**Note:** Version bump only for package @tsparticles/palette-confetti diff --git a/palettes/fire/fire/LICENSE b/palettes/confetti/default/LICENSE similarity index 100% rename from palettes/fire/fire/LICENSE rename to palettes/confetti/default/LICENSE diff --git a/palettes/confetti/default/README.md b/palettes/confetti/default/README.md new file mode 100644 index 00000000000..718f89858db --- /dev/null +++ b/palettes/confetti/default/README.md @@ -0,0 +1,138 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Default Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-default/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-default) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-default.svg)](https://www.npmjs.com/package/@tsparticles/palette-default) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-default) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/confetti/default/images/sample.png)](https://particles.js.org/samples/palettes/default) + +## Colors + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ #FF0044 +
+
+ #FF4400 +
+
+ #FFCC00 +
+
+ #00CC44 +
+
+ #00AAFF +
+
+ #AA00FF +
+
+ #FF00AA +
+
+ #00FFCC +
+
+ #FF6600 +
+
+ #FFFFFF +
+
+ Background
+ #1a1a2e +
+ Blend mode: source-over | Fill: true +
+ +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadDefaultPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadDefaultPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "default", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadDefaultPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/confetti/confetti/eslint.config.js b/palettes/confetti/default/eslint.config.js similarity index 100% rename from palettes/confetti/confetti/eslint.config.js rename to palettes/confetti/default/eslint.config.js diff --git a/palettes/confetti/confetti/images/sample.png b/palettes/confetti/default/images/sample.png similarity index 100% rename from palettes/confetti/confetti/images/sample.png rename to palettes/confetti/default/images/sample.png diff --git a/palettes/confetti/default/package.dist.json b/palettes/confetti/default/package.dist.json new file mode 100644 index 00000000000..f5aa3487f8d --- /dev/null +++ b/palettes/confetti/default/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-confetti", + "version": "4.0.0-beta.15", + "description": "tsParticles confetti palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/confetti/default" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/confetti/default/package.json b/palettes/confetti/default/package.json new file mode 100644 index 00000000000..0bae8a70ec6 --- /dev/null +++ b/palettes/confetti/default/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-confetti", + "version": "4.0.0-beta.15", + "description": "tsParticles confetti palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/confetti/default" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/confetti/default/rollup.config.js b/palettes/confetti/default/rollup.config.js new file mode 100644 index 00000000000..378de5b5479 --- /dev/null +++ b/palettes/confetti/default/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-default", + paletteName: "Default Palette", + version, +}); diff --git a/palettes/confetti/default/src/browser.ts b/palettes/confetti/default/src/browser.ts new file mode 100644 index 00000000000..3d1a81dac88 --- /dev/null +++ b/palettes/confetti/default/src/browser.ts @@ -0,0 +1,10 @@ +import { loadConfettiPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadConfettiPalette?: typeof loadConfettiPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadConfettiPalette = loadConfettiPalette; + +export * from "./index.js"; diff --git a/palettes/confetti/default/src/index.lazy.ts b/palettes/confetti/default/src/index.lazy.ts new file mode 100644 index 00000000000..f4af8124654 --- /dev/null +++ b/palettes/confetti/default/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "confetti"; + +/** + * @param engine - + */ +export async function loadConfettiPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/confetti/default/src/index.ts b/palettes/confetti/default/src/index.ts new file mode 100644 index 00000000000..095ca7f43aa --- /dev/null +++ b/palettes/confetti/default/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "confetti"; + +/** + * @param engine - + */ +export async function loadConfettiPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/confetti/confetti/src/options.ts b/palettes/confetti/default/src/options.ts similarity index 100% rename from palettes/confetti/confetti/src/options.ts rename to palettes/confetti/default/src/options.ts diff --git a/palettes/confetti/confettiMonochromeBlue/tsconfig.base.json b/palettes/confetti/default/tsconfig.base.json similarity index 100% rename from palettes/confetti/confettiMonochromeBlue/tsconfig.base.json rename to palettes/confetti/default/tsconfig.base.json diff --git a/palettes/confetti/confettiGold/tsconfig.browser.json b/palettes/confetti/default/tsconfig.browser.json similarity index 100% rename from palettes/confetti/confettiGold/tsconfig.browser.json rename to palettes/confetti/default/tsconfig.browser.json diff --git a/palettes/confetti/confettiGold/tsconfig.json b/palettes/confetti/default/tsconfig.json similarity index 100% rename from palettes/confetti/confettiGold/tsconfig.json rename to palettes/confetti/default/tsconfig.json diff --git a/palettes/confetti/confettiGold/tsconfig.module.json b/palettes/confetti/default/tsconfig.module.json similarity index 100% rename from palettes/confetti/confettiGold/tsconfig.module.json rename to palettes/confetti/default/tsconfig.module.json diff --git a/palettes/confetti/confettiGold/tsconfig.types.json b/palettes/confetti/default/tsconfig.types.json similarity index 100% rename from palettes/confetti/confettiGold/tsconfig.types.json rename to palettes/confetti/default/tsconfig.types.json diff --git a/palettes/confetti/default/typedoc.json b/palettes/confetti/default/typedoc.json new file mode 100644 index 00000000000..64d1b3874a9 --- /dev/null +++ b/palettes/confetti/default/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Default Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/confetti/confettiMonochromePink/.browserslistrc b/palettes/confetti/gold/.browserslistrc similarity index 100% rename from palettes/confetti/confettiMonochromePink/.browserslistrc rename to palettes/confetti/gold/.browserslistrc diff --git a/palettes/confetti/gold/CHANGELOG.md b/palettes/confetti/gold/CHANGELOG.md new file mode 100644 index 00000000000..954742fc90c --- /dev/null +++ b/palettes/confetti/gold/CHANGELOG.md @@ -0,0 +1,22 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-confetti-gold + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-confetti-gold + +# 4.0.0-beta.0 (2026-04-08) + +### Features + +- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) + +# [4.0.0-alpha.5] + +**Note:** Initial version of package @tsparticles/palette-confetti-gold diff --git a/palettes/fire/fireSeed/LICENSE b/palettes/confetti/gold/LICENSE similarity index 100% rename from palettes/fire/fireSeed/LICENSE rename to palettes/confetti/gold/LICENSE diff --git a/palettes/confetti/gold/README.md b/palettes/confetti/gold/README.md new file mode 100644 index 00000000000..391c82f876e --- /dev/null +++ b/palettes/confetti/gold/README.md @@ -0,0 +1,130 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Gold Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-gold/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-gold) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-gold.svg)](https://www.npmjs.com/package/@tsparticles/palette-gold) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-gold) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/confetti/gold/images/sample.png)](https://particles.js.org/samples/palettes/gold) + +## Colors + + + + + + + + + + + + + + + + + + + + + + +
+
+ #FFDD00 +
+
+ #FFAA00 +
+
+ #FF8800 +
+
+ #FF5500 +
+
+ #FFEEAA +
+
+ #FFD700 +
+
+ #FFC200 +
+
+ #CC8800 +
+
+ Background
+ #0d0a00 +
+ Blend mode: source-over | Fill: true +
+ +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadGoldPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadGoldPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "gold", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadGoldPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/confetti/confettiGold/eslint.config.js b/palettes/confetti/gold/eslint.config.js similarity index 100% rename from palettes/confetti/confettiGold/eslint.config.js rename to palettes/confetti/gold/eslint.config.js diff --git a/palettes/confetti/gold/images/sample.png b/palettes/confetti/gold/images/sample.png new file mode 100644 index 00000000000..80db004b1a5 Binary files /dev/null and b/palettes/confetti/gold/images/sample.png differ diff --git a/palettes/confetti/gold/package.dist.json b/palettes/confetti/gold/package.dist.json new file mode 100644 index 00000000000..f13b63a5444 --- /dev/null +++ b/palettes/confetti/gold/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-confetti-gold", + "version": "4.0.0-beta.15", + "description": "tsParticles confetti gold palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/confetti/gold" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/confetti/gold/package.json b/palettes/confetti/gold/package.json new file mode 100644 index 00000000000..fd99714e752 --- /dev/null +++ b/palettes/confetti/gold/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-confetti-gold", + "version": "4.0.0-beta.15", + "description": "tsParticles confetti gold palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/confetti/gold" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/confetti/gold/rollup.config.js b/palettes/confetti/gold/rollup.config.js new file mode 100644 index 00000000000..b9badc6be85 --- /dev/null +++ b/palettes/confetti/gold/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-gold", + paletteName: "Gold Palette", + version, +}); diff --git a/palettes/confetti/gold/src/browser.ts b/palettes/confetti/gold/src/browser.ts new file mode 100644 index 00000000000..a9a8ef84b74 --- /dev/null +++ b/palettes/confetti/gold/src/browser.ts @@ -0,0 +1,10 @@ +import { loadConfettiGoldPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadConfettiGoldPalette?: typeof loadConfettiGoldPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadConfettiGoldPalette = loadConfettiGoldPalette; + +export * from "./index.js"; diff --git a/palettes/confetti/gold/src/index.lazy.ts b/palettes/confetti/gold/src/index.lazy.ts new file mode 100644 index 00000000000..58545e741de --- /dev/null +++ b/palettes/confetti/gold/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "confetti-gold"; + +/** + * @param engine - + */ +export async function loadConfettiGoldPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/confetti/gold/src/index.ts b/palettes/confetti/gold/src/index.ts new file mode 100644 index 00000000000..ed600c179f3 --- /dev/null +++ b/palettes/confetti/gold/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "confetti-gold"; + +/** + * @param engine - + */ +export async function loadConfettiGoldPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/confetti/confettiGold/src/options.ts b/palettes/confetti/gold/src/options.ts similarity index 100% rename from palettes/confetti/confettiGold/src/options.ts rename to palettes/confetti/gold/src/options.ts diff --git a/palettes/confetti/confettiMonochromeGreen/tsconfig.base.json b/palettes/confetti/gold/tsconfig.base.json similarity index 100% rename from palettes/confetti/confettiMonochromeGreen/tsconfig.base.json rename to palettes/confetti/gold/tsconfig.base.json diff --git a/palettes/confetti/confettiMonochromeBlue/tsconfig.browser.json b/palettes/confetti/gold/tsconfig.browser.json similarity index 100% rename from palettes/confetti/confettiMonochromeBlue/tsconfig.browser.json rename to palettes/confetti/gold/tsconfig.browser.json diff --git a/palettes/confetti/confettiMonochromeBlue/tsconfig.json b/palettes/confetti/gold/tsconfig.json similarity index 100% rename from palettes/confetti/confettiMonochromeBlue/tsconfig.json rename to palettes/confetti/gold/tsconfig.json diff --git a/palettes/confetti/confettiMonochromeBlue/tsconfig.module.json b/palettes/confetti/gold/tsconfig.module.json similarity index 100% rename from palettes/confetti/confettiMonochromeBlue/tsconfig.module.json rename to palettes/confetti/gold/tsconfig.module.json diff --git a/palettes/confetti/confettiMonochromeBlue/tsconfig.types.json b/palettes/confetti/gold/tsconfig.types.json similarity index 100% rename from palettes/confetti/confettiMonochromeBlue/tsconfig.types.json rename to palettes/confetti/gold/tsconfig.types.json diff --git a/palettes/confetti/gold/typedoc.json b/palettes/confetti/gold/typedoc.json new file mode 100644 index 00000000000..9e95e43dd88 --- /dev/null +++ b/palettes/confetti/gold/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Gold Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/confetti/confettiNeon/.browserslistrc b/palettes/confetti/monochromeBlue/.browserslistrc similarity index 100% rename from palettes/confetti/confettiNeon/.browserslistrc rename to palettes/confetti/monochromeBlue/.browserslistrc diff --git a/palettes/confetti/monochromeBlue/CHANGELOG.md b/palettes/confetti/monochromeBlue/CHANGELOG.md new file mode 100644 index 00000000000..f0eecf3eeb2 --- /dev/null +++ b/palettes/confetti/monochromeBlue/CHANGELOG.md @@ -0,0 +1,22 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-confetti-monochrome-blue + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-confetti-monochrome-blue + +# 4.0.0-beta.0 (2026-04-08) + +### Features + +- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) + +# [4.0.0-alpha.5] + +**Note:** Initial version of package @tsparticles/palette-confetti-monochrome-blue diff --git a/palettes/fireworks/fireworksBlue/LICENSE b/palettes/confetti/monochromeBlue/LICENSE similarity index 100% rename from palettes/fireworks/fireworksBlue/LICENSE rename to palettes/confetti/monochromeBlue/LICENSE diff --git a/palettes/confetti/monochromeBlue/README.md b/palettes/confetti/monochromeBlue/README.md new file mode 100644 index 00000000000..397b2785758 --- /dev/null +++ b/palettes/confetti/monochromeBlue/README.md @@ -0,0 +1,126 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles MonochromeBlue Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-monochromeBlue/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-monochromeBlue) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-monochromeBlue.svg)](https://www.npmjs.com/package/@tsparticles/palette-monochromeBlue) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-monochromeBlue) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/confetti/monochromeBlue/images/sample.png)](https://particles.js.org/samples/palettes/monochromeBlue) + +## Colors + + + + + + + + + + + + + + + + + + + + + +
+
+ #99BBFF +
+
+ #6699FF +
+
+ #3366FF +
+
+ #1133CC +
+
+ #002299 +
+
+ #0044FF +
+
+ #CCDDFF +
+
+ Background
+ #f0f4ff +
+ Blend mode: source-over | Fill: true +
+ +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadMonochromeBluePalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadMonochromeBluePalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "monochromeBlue", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadMonochromeBluePalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/confetti/confettiMonochromeBlue/eslint.config.js b/palettes/confetti/monochromeBlue/eslint.config.js similarity index 100% rename from palettes/confetti/confettiMonochromeBlue/eslint.config.js rename to palettes/confetti/monochromeBlue/eslint.config.js diff --git a/palettes/confetti/monochromeBlue/images/sample.png b/palettes/confetti/monochromeBlue/images/sample.png new file mode 100644 index 00000000000..49e30a7667c Binary files /dev/null and b/palettes/confetti/monochromeBlue/images/sample.png differ diff --git a/palettes/confetti/monochromeBlue/package.dist.json b/palettes/confetti/monochromeBlue/package.dist.json new file mode 100644 index 00000000000..e0f72e86f6c --- /dev/null +++ b/palettes/confetti/monochromeBlue/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-confetti-monochrome-blue", + "version": "4.0.0-beta.15", + "description": "tsParticles confetti monochrome blue palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/confetti/monochromeBlue" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/confetti/monochromeBlue/package.json b/palettes/confetti/monochromeBlue/package.json new file mode 100644 index 00000000000..003c4d74e89 --- /dev/null +++ b/palettes/confetti/monochromeBlue/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-confetti-monochrome-blue", + "version": "4.0.0-beta.15", + "description": "tsParticles confetti monochrome blue palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/confetti/monochromeBlue" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/confetti/monochromeBlue/rollup.config.js b/palettes/confetti/monochromeBlue/rollup.config.js new file mode 100644 index 00000000000..4ecc6ea303c --- /dev/null +++ b/palettes/confetti/monochromeBlue/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-monochromeBlue", + paletteName: "MonochromeBlue Palette", + version, +}); diff --git a/palettes/confetti/monochromeBlue/src/browser.ts b/palettes/confetti/monochromeBlue/src/browser.ts new file mode 100644 index 00000000000..d872f4d895d --- /dev/null +++ b/palettes/confetti/monochromeBlue/src/browser.ts @@ -0,0 +1,10 @@ +import { loadConfettiMonochromeBluePalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadConfettiMonochromeBluePalette?: typeof loadConfettiMonochromeBluePalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadConfettiMonochromeBluePalette = loadConfettiMonochromeBluePalette; + +export * from "./index.js"; diff --git a/palettes/confetti/monochromeBlue/src/index.lazy.ts b/palettes/confetti/monochromeBlue/src/index.lazy.ts new file mode 100644 index 00000000000..3c3d701218e --- /dev/null +++ b/palettes/confetti/monochromeBlue/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "monochrome-blue"; + +/** + * @param engine - + */ +export async function loadMonochromeBluePalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/confetti/monochromeBlue/src/index.ts b/palettes/confetti/monochromeBlue/src/index.ts new file mode 100644 index 00000000000..716b60cdde4 --- /dev/null +++ b/palettes/confetti/monochromeBlue/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "confetti-monochrome-blue"; + +/** + * @param engine - + */ +export async function loadConfettiMonochromeBluePalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/confetti/confettiMonochromeBlue/src/options.ts b/palettes/confetti/monochromeBlue/src/options.ts similarity index 100% rename from palettes/confetti/confettiMonochromeBlue/src/options.ts rename to palettes/confetti/monochromeBlue/src/options.ts diff --git a/palettes/confetti/confettiMonochromePink/tsconfig.base.json b/palettes/confetti/monochromeBlue/tsconfig.base.json similarity index 100% rename from palettes/confetti/confettiMonochromePink/tsconfig.base.json rename to palettes/confetti/monochromeBlue/tsconfig.base.json diff --git a/palettes/confetti/confettiMonochromeGreen/tsconfig.browser.json b/palettes/confetti/monochromeBlue/tsconfig.browser.json similarity index 100% rename from palettes/confetti/confettiMonochromeGreen/tsconfig.browser.json rename to palettes/confetti/monochromeBlue/tsconfig.browser.json diff --git a/palettes/confetti/confettiMonochromeGreen/tsconfig.json b/palettes/confetti/monochromeBlue/tsconfig.json similarity index 100% rename from palettes/confetti/confettiMonochromeGreen/tsconfig.json rename to palettes/confetti/monochromeBlue/tsconfig.json diff --git a/palettes/confetti/confettiMonochromeGreen/tsconfig.module.json b/palettes/confetti/monochromeBlue/tsconfig.module.json similarity index 100% rename from palettes/confetti/confettiMonochromeGreen/tsconfig.module.json rename to palettes/confetti/monochromeBlue/tsconfig.module.json diff --git a/palettes/confetti/confettiMonochromeGreen/tsconfig.types.json b/palettes/confetti/monochromeBlue/tsconfig.types.json similarity index 100% rename from palettes/confetti/confettiMonochromeGreen/tsconfig.types.json rename to palettes/confetti/monochromeBlue/tsconfig.types.json diff --git a/palettes/confetti/monochromeBlue/typedoc.json b/palettes/confetti/monochromeBlue/typedoc.json new file mode 100644 index 00000000000..a2b35c026de --- /dev/null +++ b/palettes/confetti/monochromeBlue/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles MonochromeBlue Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/confetti/confettiPastel/.browserslistrc b/palettes/confetti/monochromeGreen/.browserslistrc similarity index 100% rename from palettes/confetti/confettiPastel/.browserslistrc rename to palettes/confetti/monochromeGreen/.browserslistrc diff --git a/palettes/confetti/monochromeGreen/CHANGELOG.md b/palettes/confetti/monochromeGreen/CHANGELOG.md new file mode 100644 index 00000000000..0ccaaa87a8e --- /dev/null +++ b/palettes/confetti/monochromeGreen/CHANGELOG.md @@ -0,0 +1,22 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-confetti-monochrome-green + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-confetti-monochrome-green + +# 4.0.0-beta.0 (2026-04-08) + +### Features + +- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) + +# [4.0.0-alpha.5] + +**Note:** Initial version of package @tsparticles/palette-confetti-monochrome-green diff --git a/palettes/fireworks/fireworksBlueStroke/LICENSE b/palettes/confetti/monochromeGreen/LICENSE similarity index 100% rename from palettes/fireworks/fireworksBlueStroke/LICENSE rename to palettes/confetti/monochromeGreen/LICENSE diff --git a/palettes/confetti/monochromeGreen/README.md b/palettes/confetti/monochromeGreen/README.md new file mode 100644 index 00000000000..6fd5bee41be --- /dev/null +++ b/palettes/confetti/monochromeGreen/README.md @@ -0,0 +1,126 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles MonochromeGreen Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-monochromeGreen/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-monochromeGreen) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-monochromeGreen.svg)](https://www.npmjs.com/package/@tsparticles/palette-monochromeGreen) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-monochromeGreen) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/confetti/monochromeGreen/images/sample.png)](https://particles.js.org/samples/palettes/monochromeGreen) + +## Colors + + + + + + + + + + + + + + + + + + + + + +
+
+ #99FFB8 +
+
+ #55EE88 +
+
+ #22CC55 +
+
+ #009933 +
+
+ #006622 +
+
+ #00FF44 +
+
+ #CCFFDD +
+
+ Background
+ #f0fff4 +
+ Blend mode: source-over | Fill: true +
+ +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadMonochromeGreenPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadMonochromeGreenPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "monochromeGreen", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadMonochromeGreenPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/confetti/confettiMonochromeGreen/eslint.config.js b/palettes/confetti/monochromeGreen/eslint.config.js similarity index 100% rename from palettes/confetti/confettiMonochromeGreen/eslint.config.js rename to palettes/confetti/monochromeGreen/eslint.config.js diff --git a/palettes/confetti/monochromeGreen/images/sample.png b/palettes/confetti/monochromeGreen/images/sample.png new file mode 100644 index 00000000000..6f12962d3fb Binary files /dev/null and b/palettes/confetti/monochromeGreen/images/sample.png differ diff --git a/palettes/confetti/monochromeGreen/package.dist.json b/palettes/confetti/monochromeGreen/package.dist.json new file mode 100644 index 00000000000..80ca1917d6b --- /dev/null +++ b/palettes/confetti/monochromeGreen/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-confetti-monochrome-green", + "version": "4.0.0-beta.15", + "description": "tsParticles confetti monochrome green palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/confetti/monochromeGreen" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/confetti/monochromeGreen/package.json b/palettes/confetti/monochromeGreen/package.json new file mode 100644 index 00000000000..c2e2b5d2886 --- /dev/null +++ b/palettes/confetti/monochromeGreen/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-confetti-monochrome-green", + "version": "4.0.0-beta.15", + "description": "tsParticles confetti monochrome green palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/confetti/monochromeGreen" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/confetti/monochromeGreen/rollup.config.js b/palettes/confetti/monochromeGreen/rollup.config.js new file mode 100644 index 00000000000..9ccfc3b1786 --- /dev/null +++ b/palettes/confetti/monochromeGreen/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-monochromeGreen", + paletteName: "MonochromeGreen Palette", + version, +}); diff --git a/palettes/confetti/monochromeGreen/src/browser.ts b/palettes/confetti/monochromeGreen/src/browser.ts new file mode 100644 index 00000000000..87041aa2eb6 --- /dev/null +++ b/palettes/confetti/monochromeGreen/src/browser.ts @@ -0,0 +1,10 @@ +import { loadConfettiMonochromeGreenPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadConfettiMonochromeGreenPalette?: typeof loadConfettiMonochromeGreenPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadConfettiMonochromeGreenPalette = loadConfettiMonochromeGreenPalette; + +export * from "./index.js"; diff --git a/palettes/confetti/monochromeGreen/src/index.lazy.ts b/palettes/confetti/monochromeGreen/src/index.lazy.ts new file mode 100644 index 00000000000..a4068179c04 --- /dev/null +++ b/palettes/confetti/monochromeGreen/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "monochrome-green"; + +/** + * @param engine - + */ +export async function loadMonochromeGreenPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/confetti/monochromeGreen/src/index.ts b/palettes/confetti/monochromeGreen/src/index.ts new file mode 100644 index 00000000000..5e13c45f074 --- /dev/null +++ b/palettes/confetti/monochromeGreen/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "confetti-monochrome-green"; + +/** + * @param engine - + */ +export async function loadConfettiMonochromeGreenPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/confetti/confettiMonochromeGreen/src/options.ts b/palettes/confetti/monochromeGreen/src/options.ts similarity index 100% rename from palettes/confetti/confettiMonochromeGreen/src/options.ts rename to palettes/confetti/monochromeGreen/src/options.ts diff --git a/palettes/confetti/confettiNeon/tsconfig.base.json b/palettes/confetti/monochromeGreen/tsconfig.base.json similarity index 100% rename from palettes/confetti/confettiNeon/tsconfig.base.json rename to palettes/confetti/monochromeGreen/tsconfig.base.json diff --git a/palettes/confetti/confettiMonochromePink/tsconfig.browser.json b/palettes/confetti/monochromeGreen/tsconfig.browser.json similarity index 100% rename from palettes/confetti/confettiMonochromePink/tsconfig.browser.json rename to palettes/confetti/monochromeGreen/tsconfig.browser.json diff --git a/palettes/confetti/confettiMonochromePink/tsconfig.json b/palettes/confetti/monochromeGreen/tsconfig.json similarity index 100% rename from palettes/confetti/confettiMonochromePink/tsconfig.json rename to palettes/confetti/monochromeGreen/tsconfig.json diff --git a/palettes/confetti/confettiMonochromePink/tsconfig.module.json b/palettes/confetti/monochromeGreen/tsconfig.module.json similarity index 100% rename from palettes/confetti/confettiMonochromePink/tsconfig.module.json rename to palettes/confetti/monochromeGreen/tsconfig.module.json diff --git a/palettes/confetti/confettiMonochromePink/tsconfig.types.json b/palettes/confetti/monochromeGreen/tsconfig.types.json similarity index 100% rename from palettes/confetti/confettiMonochromePink/tsconfig.types.json rename to palettes/confetti/monochromeGreen/tsconfig.types.json diff --git a/palettes/confetti/monochromeGreen/typedoc.json b/palettes/confetti/monochromeGreen/typedoc.json new file mode 100644 index 00000000000..f5efeafd34c --- /dev/null +++ b/palettes/confetti/monochromeGreen/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles MonochromeGreen Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/confetti/confettiPatriotic/.browserslistrc b/palettes/confetti/monochromePink/.browserslistrc similarity index 100% rename from palettes/confetti/confettiPatriotic/.browserslistrc rename to palettes/confetti/monochromePink/.browserslistrc diff --git a/palettes/confetti/monochromePink/CHANGELOG.md b/palettes/confetti/monochromePink/CHANGELOG.md new file mode 100644 index 00000000000..56eec5a96df --- /dev/null +++ b/palettes/confetti/monochromePink/CHANGELOG.md @@ -0,0 +1,22 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-confetti-monochrome-pink + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-confetti-monochrome-pink + +# 4.0.0-beta.0 (2026-04-08) + +### Features + +- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) + +# [4.0.0-alpha.5] + +**Note:** Initial version of package @tsparticles/palette-confetti-monochrome-pink diff --git a/palettes/fireworks/fireworksCopper/LICENSE b/palettes/confetti/monochromePink/LICENSE similarity index 100% rename from palettes/fireworks/fireworksCopper/LICENSE rename to palettes/confetti/monochromePink/LICENSE diff --git a/palettes/confetti/monochromePink/README.md b/palettes/confetti/monochromePink/README.md new file mode 100644 index 00000000000..720f0a25ea5 --- /dev/null +++ b/palettes/confetti/monochromePink/README.md @@ -0,0 +1,126 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles MonochromePink Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-monochromePink/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-monochromePink) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-monochromePink.svg)](https://www.npmjs.com/package/@tsparticles/palette-monochromePink) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-monochromePink) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/confetti/monochromePink/images/sample.png)](https://particles.js.org/samples/palettes/monochromePink) + +## Colors + + + + + + + + + + + + + + + + + + + + + +
+
+ #FF99BB +
+
+ #FF66AA +
+
+ #FF3388 +
+
+ #CC1166 +
+
+ #990044 +
+
+ #FF0055 +
+
+ #FFCCDD +
+
+ Background
+ #fff0f5 +
+ Blend mode: source-over | Fill: true +
+ +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadMonochromePinkPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadMonochromePinkPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "monochromePink", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadMonochromePinkPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/confetti/confettiMonochromePink/eslint.config.js b/palettes/confetti/monochromePink/eslint.config.js similarity index 100% rename from palettes/confetti/confettiMonochromePink/eslint.config.js rename to palettes/confetti/monochromePink/eslint.config.js diff --git a/palettes/confetti/monochromePink/images/sample.png b/palettes/confetti/monochromePink/images/sample.png new file mode 100644 index 00000000000..f472fc73dd6 Binary files /dev/null and b/palettes/confetti/monochromePink/images/sample.png differ diff --git a/palettes/confetti/monochromePink/package.dist.json b/palettes/confetti/monochromePink/package.dist.json new file mode 100644 index 00000000000..ccf30a03647 --- /dev/null +++ b/palettes/confetti/monochromePink/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-confetti-monochrome-pink", + "version": "4.0.0-beta.15", + "description": "tsParticles confetti monochrome pink palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/confetti/monochromePink" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/confetti/monochromePink/package.json b/palettes/confetti/monochromePink/package.json new file mode 100644 index 00000000000..a1f6c217195 --- /dev/null +++ b/palettes/confetti/monochromePink/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-confetti-monochrome-pink", + "version": "4.0.0-beta.15", + "description": "tsParticles confetti monochrome pink palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/confetti/monochromePink" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/confetti/monochromePink/rollup.config.js b/palettes/confetti/monochromePink/rollup.config.js new file mode 100644 index 00000000000..e5446b26024 --- /dev/null +++ b/palettes/confetti/monochromePink/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-monochromePink", + paletteName: "MonochromePink Palette", + version, +}); diff --git a/palettes/confetti/monochromePink/src/browser.ts b/palettes/confetti/monochromePink/src/browser.ts new file mode 100644 index 00000000000..2eefd9a9131 --- /dev/null +++ b/palettes/confetti/monochromePink/src/browser.ts @@ -0,0 +1,10 @@ +import { loadConfettiMonochromePinkPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadConfettiMonochromePinkPalette?: typeof loadConfettiMonochromePinkPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadConfettiMonochromePinkPalette = loadConfettiMonochromePinkPalette; + +export * from "./index.js"; diff --git a/palettes/confetti/monochromePink/src/index.lazy.ts b/palettes/confetti/monochromePink/src/index.lazy.ts new file mode 100644 index 00000000000..67238cb259c --- /dev/null +++ b/palettes/confetti/monochromePink/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "monochrome-pink"; + +/** + * @param engine - + */ +export async function loadMonochromePinkPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/confetti/monochromePink/src/index.ts b/palettes/confetti/monochromePink/src/index.ts new file mode 100644 index 00000000000..8a6650abcb8 --- /dev/null +++ b/palettes/confetti/monochromePink/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "confetti-monochrome-pink"; + +/** + * @param engine - + */ +export async function loadConfettiMonochromePinkPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/confetti/confettiMonochromePink/src/options.ts b/palettes/confetti/monochromePink/src/options.ts similarity index 100% rename from palettes/confetti/confettiMonochromePink/src/options.ts rename to palettes/confetti/monochromePink/src/options.ts diff --git a/palettes/confetti/confettiPastel/tsconfig.base.json b/palettes/confetti/monochromePink/tsconfig.base.json similarity index 100% rename from palettes/confetti/confettiPastel/tsconfig.base.json rename to palettes/confetti/monochromePink/tsconfig.base.json diff --git a/palettes/confetti/confettiNeon/tsconfig.browser.json b/palettes/confetti/monochromePink/tsconfig.browser.json similarity index 100% rename from palettes/confetti/confettiNeon/tsconfig.browser.json rename to palettes/confetti/monochromePink/tsconfig.browser.json diff --git a/palettes/confetti/confettiNeon/tsconfig.json b/palettes/confetti/monochromePink/tsconfig.json similarity index 100% rename from palettes/confetti/confettiNeon/tsconfig.json rename to palettes/confetti/monochromePink/tsconfig.json diff --git a/palettes/confetti/confettiNeon/tsconfig.module.json b/palettes/confetti/monochromePink/tsconfig.module.json similarity index 100% rename from palettes/confetti/confettiNeon/tsconfig.module.json rename to palettes/confetti/monochromePink/tsconfig.module.json diff --git a/palettes/confetti/confettiNeon/tsconfig.types.json b/palettes/confetti/monochromePink/tsconfig.types.json similarity index 100% rename from palettes/confetti/confettiNeon/tsconfig.types.json rename to palettes/confetti/monochromePink/tsconfig.types.json diff --git a/palettes/confetti/monochromePink/typedoc.json b/palettes/confetti/monochromePink/typedoc.json new file mode 100644 index 00000000000..878fcee1c3f --- /dev/null +++ b/palettes/confetti/monochromePink/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles MonochromePink Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/confetti/confettiRainbow/.browserslistrc b/palettes/confetti/monochromePurple/.browserslistrc similarity index 100% rename from palettes/confetti/confettiRainbow/.browserslistrc rename to palettes/confetti/monochromePurple/.browserslistrc diff --git a/palettes/confetti/monochromePurple/CHANGELOG.md b/palettes/confetti/monochromePurple/CHANGELOG.md new file mode 100644 index 00000000000..e729bfc4ac0 --- /dev/null +++ b/palettes/confetti/monochromePurple/CHANGELOG.md @@ -0,0 +1,12 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-confetti-monochrome-purple + +# [4.0.0-beta.12] + +**Note:** Initial version of package @tsparticles/palette-confetti-monochrome-purple diff --git a/palettes/fireworks/fireworksCopperStroke/LICENSE b/palettes/confetti/monochromePurple/LICENSE similarity index 100% rename from palettes/fireworks/fireworksCopperStroke/LICENSE rename to palettes/confetti/monochromePurple/LICENSE diff --git a/palettes/confetti/monochromePurple/README.md b/palettes/confetti/monochromePurple/README.md new file mode 100644 index 00000000000..075a5cbd10d --- /dev/null +++ b/palettes/confetti/monochromePurple/README.md @@ -0,0 +1,126 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles MonochromePurple Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-monochromePurple/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-monochromePurple) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-monochromePurple.svg)](https://www.npmjs.com/package/@tsparticles/palette-monochromePurple) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-monochromePurple) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/confetti/monochromePurple/images/sample.png)](https://particles.js.org/samples/palettes/monochromePurple) + +## Colors + + + + + + + + + + + + + + + + + + + + + +
+
+ #D0A6FF +
+
+ #B57CFF +
+
+ #9A52FF +
+
+ #7A2BE2 +
+
+ #5A189A +
+
+ #3C096C +
+
+ #E9D5FF +
+
+ Background
+ #f7f0ff +
+ Blend mode: source-over | Fill: true +
+ +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadMonochromePurplePalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadMonochromePurplePalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "monochromePurple", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadMonochromePurplePalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/confetti/monochromePurple/eslint.config.js b/palettes/confetti/monochromePurple/eslint.config.js new file mode 100644 index 00000000000..248b4d3dd36 --- /dev/null +++ b/palettes/confetti/monochromePurple/eslint.config.js @@ -0,0 +1,6 @@ +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; +import { defineConfig } from "eslint/config"; + +export default defineConfig([ + tsParticlesESLintConfig, +]); diff --git a/palettes/confetti/monochromePurple/images/sample.png b/palettes/confetti/monochromePurple/images/sample.png new file mode 100644 index 00000000000..c511e79320b Binary files /dev/null and b/palettes/confetti/monochromePurple/images/sample.png differ diff --git a/palettes/confetti/monochromePurple/package.dist.json b/palettes/confetti/monochromePurple/package.dist.json new file mode 100644 index 00000000000..2a0b3765dd6 --- /dev/null +++ b/palettes/confetti/monochromePurple/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-confetti-monochrome-purple", + "version": "4.0.0-beta.15", + "description": "tsParticles confetti monochrome purple palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/confetti/monochromePurple" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/confetti/monochromePurple/package.json b/palettes/confetti/monochromePurple/package.json new file mode 100644 index 00000000000..4a483ddf5a9 --- /dev/null +++ b/palettes/confetti/monochromePurple/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-confetti-monochrome-purple", + "version": "4.0.0-beta.15", + "description": "tsParticles confetti monochrome purple palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/confetti/monochromePurple" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/confetti/monochromePurple/rollup.config.js b/palettes/confetti/monochromePurple/rollup.config.js new file mode 100644 index 00000000000..1d6cc56bf3e --- /dev/null +++ b/palettes/confetti/monochromePurple/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-monochromePurple", + paletteName: "MonochromePurple Palette", + version, +}); diff --git a/palettes/confetti/monochromePurple/src/browser.ts b/palettes/confetti/monochromePurple/src/browser.ts new file mode 100644 index 00000000000..46d331346a6 --- /dev/null +++ b/palettes/confetti/monochromePurple/src/browser.ts @@ -0,0 +1,10 @@ +import { loadConfettiMonochromePurplePalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadConfettiMonochromePurplePalette?: typeof loadConfettiMonochromePurplePalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadConfettiMonochromePurplePalette = loadConfettiMonochromePurplePalette; + +export * from "./index.js"; diff --git a/palettes/confetti/monochromePurple/src/index.lazy.ts b/palettes/confetti/monochromePurple/src/index.lazy.ts new file mode 100644 index 00000000000..c9e364b74e2 --- /dev/null +++ b/palettes/confetti/monochromePurple/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "confetti-monochrome-purple"; + +/** + * @param engine - + */ +export async function loadConfettiMonochromePurplePalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/confetti/monochromePurple/src/index.ts b/palettes/confetti/monochromePurple/src/index.ts new file mode 100644 index 00000000000..7ff0072d420 --- /dev/null +++ b/palettes/confetti/monochromePurple/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "confetti-monochrome-purple"; + +/** + * @param engine - + */ +export async function loadConfettiMonochromePurplePalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/confetti/monochromePurple/src/options.ts b/palettes/confetti/monochromePurple/src/options.ts new file mode 100644 index 00000000000..99ba6e60c21 --- /dev/null +++ b/palettes/confetti/monochromePurple/src/options.ts @@ -0,0 +1,21 @@ +import { type IPalette } from "@tsparticles/engine"; + +export const options: IPalette = { + name: "Confetti - Monochrome Purple", + background: "#f7f0ff", + blendMode: "source-over", + colors: { + fill: { + enable: true, + value: [ + "#D0A6FF", + "#B57CFF", + "#9A52FF", + "#7A2BE2", + "#5A189A", + "#3C096C", + "#E9D5FF", + ], + }, + }, +}; diff --git a/palettes/confetti/confettiPatriotic/tsconfig.base.json b/palettes/confetti/monochromePurple/tsconfig.base.json similarity index 100% rename from palettes/confetti/confettiPatriotic/tsconfig.base.json rename to palettes/confetti/monochromePurple/tsconfig.base.json diff --git a/palettes/confetti/monochromePurple/tsconfig.browser.json b/palettes/confetti/monochromePurple/tsconfig.browser.json new file mode 100644 index 00000000000..80d78351a7d --- /dev/null +++ b/palettes/confetti/monochromePurple/tsconfig.browser.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.browser.json"], + "compilerOptions": { + "outDir": "./dist/browser" + } +} diff --git a/palettes/confetti/monochromePurple/tsconfig.json b/palettes/confetti/monochromePurple/tsconfig.json new file mode 100644 index 00000000000..630bf828704 --- /dev/null +++ b/palettes/confetti/monochromePurple/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.json"], + "compilerOptions": { + "outDir": "./dist/cjs" + } +} diff --git a/palettes/confetti/monochromePurple/tsconfig.module.json b/palettes/confetti/monochromePurple/tsconfig.module.json new file mode 100644 index 00000000000..bb5035a8403 --- /dev/null +++ b/palettes/confetti/monochromePurple/tsconfig.module.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.module.json"], + "compilerOptions": { + "outDir": "./dist/esm" + } +} diff --git a/palettes/confetti/monochromePurple/tsconfig.types.json b/palettes/confetti/monochromePurple/tsconfig.types.json new file mode 100644 index 00000000000..570e9e9d8c6 --- /dev/null +++ b/palettes/confetti/monochromePurple/tsconfig.types.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.types.json"], + "compilerOptions": { + "outDir": "./dist/types" + } +} diff --git a/palettes/confetti/monochromePurple/typedoc.json b/palettes/confetti/monochromePurple/typedoc.json new file mode 100644 index 00000000000..5417be5f632 --- /dev/null +++ b/palettes/confetti/monochromePurple/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles MonochromePurple Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/confetti/confettiWinter/.browserslistrc b/palettes/confetti/monochromeRed/.browserslistrc similarity index 100% rename from palettes/confetti/confettiWinter/.browserslistrc rename to palettes/confetti/monochromeRed/.browserslistrc diff --git a/palettes/confetti/monochromeRed/CHANGELOG.md b/palettes/confetti/monochromeRed/CHANGELOG.md new file mode 100644 index 00000000000..f69e6693883 --- /dev/null +++ b/palettes/confetti/monochromeRed/CHANGELOG.md @@ -0,0 +1,12 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-confetti-monochrome-red + +# [4.0.0-beta.12] + +**Note:** Initial version of package @tsparticles/palette-confetti-monochrome-red diff --git a/palettes/fireworks/fireworksGold/LICENSE b/palettes/confetti/monochromeRed/LICENSE similarity index 100% rename from palettes/fireworks/fireworksGold/LICENSE rename to palettes/confetti/monochromeRed/LICENSE diff --git a/palettes/confetti/monochromeRed/README.md b/palettes/confetti/monochromeRed/README.md new file mode 100644 index 00000000000..239d4753bcd --- /dev/null +++ b/palettes/confetti/monochromeRed/README.md @@ -0,0 +1,126 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles MonochromeRed Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-monochromeRed/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-monochromeRed) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-monochromeRed.svg)](https://www.npmjs.com/package/@tsparticles/palette-monochromeRed) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-monochromeRed) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/confetti/monochromeRed/images/sample.png)](https://particles.js.org/samples/palettes/monochromeRed) + +## Colors + + + + + + + + + + + + + + + + + + + + + +
+
+ #FFB3B3 +
+
+ #FF8080 +
+
+ #FF4D4D +
+
+ #E61A1A +
+
+ #B30000 +
+
+ #800000 +
+
+ #FFD6D6 +
+
+ Background
+ #fff1f1 +
+ Blend mode: source-over | Fill: true +
+ +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadMonochromeRedPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadMonochromeRedPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "monochromeRed", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadMonochromeRedPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/confetti/monochromeRed/eslint.config.js b/palettes/confetti/monochromeRed/eslint.config.js new file mode 100644 index 00000000000..248b4d3dd36 --- /dev/null +++ b/palettes/confetti/monochromeRed/eslint.config.js @@ -0,0 +1,6 @@ +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; +import { defineConfig } from "eslint/config"; + +export default defineConfig([ + tsParticlesESLintConfig, +]); diff --git a/palettes/confetti/monochromeRed/images/sample.png b/palettes/confetti/monochromeRed/images/sample.png new file mode 100644 index 00000000000..444c56b4ec9 Binary files /dev/null and b/palettes/confetti/monochromeRed/images/sample.png differ diff --git a/palettes/confetti/monochromeRed/package.dist.json b/palettes/confetti/monochromeRed/package.dist.json new file mode 100644 index 00000000000..695739e7e7a --- /dev/null +++ b/palettes/confetti/monochromeRed/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-confetti-monochrome-red", + "version": "4.0.0-beta.15", + "description": "tsParticles confetti monochrome red palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/confetti/monochromeRed" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/confetti/monochromeRed/package.json b/palettes/confetti/monochromeRed/package.json new file mode 100644 index 00000000000..4c98f276653 --- /dev/null +++ b/palettes/confetti/monochromeRed/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-confetti-monochrome-red", + "version": "4.0.0-beta.15", + "description": "tsParticles confetti monochrome red palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/confetti/monochromeRed" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/confetti/monochromeRed/rollup.config.js b/palettes/confetti/monochromeRed/rollup.config.js new file mode 100644 index 00000000000..76742f1f2e5 --- /dev/null +++ b/palettes/confetti/monochromeRed/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-monochromeRed", + paletteName: "MonochromeRed Palette", + version, +}); diff --git a/palettes/confetti/monochromeRed/src/browser.ts b/palettes/confetti/monochromeRed/src/browser.ts new file mode 100644 index 00000000000..a6936f8659d --- /dev/null +++ b/palettes/confetti/monochromeRed/src/browser.ts @@ -0,0 +1,10 @@ +import { loadConfettiMonochromeRedPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadConfettiMonochromeRedPalette?: typeof loadConfettiMonochromeRedPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadConfettiMonochromeRedPalette = loadConfettiMonochromeRedPalette; + +export * from "./index.js"; diff --git a/palettes/confetti/monochromeRed/src/index.lazy.ts b/palettes/confetti/monochromeRed/src/index.lazy.ts new file mode 100644 index 00000000000..142c3febcf2 --- /dev/null +++ b/palettes/confetti/monochromeRed/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "confetti-monochrome-red"; + +/** + * @param engine - + */ +export async function loadConfettiMonochromeRedPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/confetti/monochromeRed/src/index.ts b/palettes/confetti/monochromeRed/src/index.ts new file mode 100644 index 00000000000..71338a4dd4e --- /dev/null +++ b/palettes/confetti/monochromeRed/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "confetti-monochrome-red"; + +/** + * @param engine - + */ +export async function loadConfettiMonochromeRedPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/confetti/monochromeRed/src/options.ts b/palettes/confetti/monochromeRed/src/options.ts new file mode 100644 index 00000000000..8165a2eaa62 --- /dev/null +++ b/palettes/confetti/monochromeRed/src/options.ts @@ -0,0 +1,21 @@ +import { type IPalette } from "@tsparticles/engine"; + +export const options: IPalette = { + name: "Confetti - Monochrome Red", + background: "#fff1f1", + blendMode: "source-over", + colors: { + fill: { + enable: true, + value: [ + "#FFB3B3", + "#FF8080", + "#FF4D4D", + "#E61A1A", + "#B30000", + "#800000", + "#FFD6D6", + ], + }, + }, +}; diff --git a/palettes/confetti/confettiRainbow/tsconfig.base.json b/palettes/confetti/monochromeRed/tsconfig.base.json similarity index 100% rename from palettes/confetti/confettiRainbow/tsconfig.base.json rename to palettes/confetti/monochromeRed/tsconfig.base.json diff --git a/palettes/confetti/monochromeRed/tsconfig.browser.json b/palettes/confetti/monochromeRed/tsconfig.browser.json new file mode 100644 index 00000000000..80d78351a7d --- /dev/null +++ b/palettes/confetti/monochromeRed/tsconfig.browser.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.browser.json"], + "compilerOptions": { + "outDir": "./dist/browser" + } +} diff --git a/palettes/confetti/monochromeRed/tsconfig.json b/palettes/confetti/monochromeRed/tsconfig.json new file mode 100644 index 00000000000..630bf828704 --- /dev/null +++ b/palettes/confetti/monochromeRed/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.json"], + "compilerOptions": { + "outDir": "./dist/cjs" + } +} diff --git a/palettes/confetti/monochromeRed/tsconfig.module.json b/palettes/confetti/monochromeRed/tsconfig.module.json new file mode 100644 index 00000000000..bb5035a8403 --- /dev/null +++ b/palettes/confetti/monochromeRed/tsconfig.module.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.module.json"], + "compilerOptions": { + "outDir": "./dist/esm" + } +} diff --git a/palettes/confetti/monochromeRed/tsconfig.types.json b/palettes/confetti/monochromeRed/tsconfig.types.json new file mode 100644 index 00000000000..570e9e9d8c6 --- /dev/null +++ b/palettes/confetti/monochromeRed/tsconfig.types.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.types.json"], + "compilerOptions": { + "outDir": "./dist/types" + } +} diff --git a/palettes/confetti/monochromeRed/typedoc.json b/palettes/confetti/monochromeRed/typedoc.json new file mode 100644 index 00000000000..89fb291b2c8 --- /dev/null +++ b/palettes/confetti/monochromeRed/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles MonochromeRed Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/fire/fire/.browserslistrc b/palettes/confetti/neon/.browserslistrc similarity index 100% rename from palettes/fire/fire/.browserslistrc rename to palettes/confetti/neon/.browserslistrc diff --git a/palettes/confetti/neon/CHANGELOG.md b/palettes/confetti/neon/CHANGELOG.md new file mode 100644 index 00000000000..cd24425e479 --- /dev/null +++ b/palettes/confetti/neon/CHANGELOG.md @@ -0,0 +1,22 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-confetti-neon + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-confetti-neon + +# 4.0.0-beta.0 (2026-04-08) + +### Features + +- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) + +# [4.0.0-alpha.5] + +**Note:** Initial version of package @tsparticles/palette-confetti-neon diff --git a/palettes/fireworks/fireworksGoldStroke/LICENSE b/palettes/confetti/neon/LICENSE similarity index 100% rename from palettes/fireworks/fireworksGoldStroke/LICENSE rename to palettes/confetti/neon/LICENSE diff --git a/palettes/confetti/neon/README.md b/palettes/confetti/neon/README.md new file mode 100644 index 00000000000..08fe4d5552f --- /dev/null +++ b/palettes/confetti/neon/README.md @@ -0,0 +1,130 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Neon Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-neon/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-neon) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-neon.svg)](https://www.npmjs.com/package/@tsparticles/palette-neon) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-neon) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/confetti/neon/images/sample.png)](https://particles.js.org/samples/palettes/neon) + +## Colors + + + + + + + + + + + + + + + + + + + + + + +
+
+ #FF0088 +
+
+ #FF4400 +
+
+ #FFFF00 +
+
+ #00FF44 +
+
+ #00FFFF +
+
+ #0088FF +
+
+ #FF00FF +
+
+ #AAFF00 +
+
+ Background
+ #050505 +
+ Blend mode: screen | Fill: true +
+ +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadNeonPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadNeonPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "neon", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadNeonPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/confetti/confettiNeon/eslint.config.js b/palettes/confetti/neon/eslint.config.js similarity index 100% rename from palettes/confetti/confettiNeon/eslint.config.js rename to palettes/confetti/neon/eslint.config.js diff --git a/palettes/confetti/neon/images/sample.png b/palettes/confetti/neon/images/sample.png new file mode 100644 index 00000000000..4287c5eb125 Binary files /dev/null and b/palettes/confetti/neon/images/sample.png differ diff --git a/palettes/confetti/neon/package.dist.json b/palettes/confetti/neon/package.dist.json new file mode 100644 index 00000000000..b3ed53c90b4 --- /dev/null +++ b/palettes/confetti/neon/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-confetti-neon", + "version": "4.0.0-beta.15", + "description": "tsParticles confetti neon palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/confetti/neon" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/confetti/neon/package.json b/palettes/confetti/neon/package.json new file mode 100644 index 00000000000..fc3a98d0366 --- /dev/null +++ b/palettes/confetti/neon/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-confetti-neon", + "version": "4.0.0-beta.15", + "description": "tsParticles confetti neon palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/confetti/neon" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/confetti/neon/rollup.config.js b/palettes/confetti/neon/rollup.config.js new file mode 100644 index 00000000000..4d57769a869 --- /dev/null +++ b/palettes/confetti/neon/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-neon", + paletteName: "Neon Palette", + version, +}); diff --git a/palettes/confetti/neon/src/browser.ts b/palettes/confetti/neon/src/browser.ts new file mode 100644 index 00000000000..afc06c1c8c3 --- /dev/null +++ b/palettes/confetti/neon/src/browser.ts @@ -0,0 +1,10 @@ +import { loadConfettiNeonPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadConfettiNeonPalette?: typeof loadConfettiNeonPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadConfettiNeonPalette = loadConfettiNeonPalette; + +export * from "./index.js"; diff --git a/palettes/confetti/neon/src/index.lazy.ts b/palettes/confetti/neon/src/index.lazy.ts new file mode 100644 index 00000000000..11429e34e2c --- /dev/null +++ b/palettes/confetti/neon/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "confetti-neon"; + +/** + * @param engine - + */ +export async function loadConfettiNeonPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/confetti/neon/src/index.ts b/palettes/confetti/neon/src/index.ts new file mode 100644 index 00000000000..f1d80255137 --- /dev/null +++ b/palettes/confetti/neon/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "confetti-neon"; + +/** + * @param engine - + */ +export async function loadConfettiNeonPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/confetti/confettiNeon/src/options.ts b/palettes/confetti/neon/src/options.ts similarity index 100% rename from palettes/confetti/confettiNeon/src/options.ts rename to palettes/confetti/neon/src/options.ts diff --git a/palettes/confetti/confettiWinter/tsconfig.base.json b/palettes/confetti/neon/tsconfig.base.json similarity index 100% rename from palettes/confetti/confettiWinter/tsconfig.base.json rename to palettes/confetti/neon/tsconfig.base.json diff --git a/palettes/confetti/confettiPastel/tsconfig.browser.json b/palettes/confetti/neon/tsconfig.browser.json similarity index 100% rename from palettes/confetti/confettiPastel/tsconfig.browser.json rename to palettes/confetti/neon/tsconfig.browser.json diff --git a/palettes/confetti/confettiPastel/tsconfig.json b/palettes/confetti/neon/tsconfig.json similarity index 100% rename from palettes/confetti/confettiPastel/tsconfig.json rename to palettes/confetti/neon/tsconfig.json diff --git a/palettes/confetti/confettiPastel/tsconfig.module.json b/palettes/confetti/neon/tsconfig.module.json similarity index 100% rename from palettes/confetti/confettiPastel/tsconfig.module.json rename to palettes/confetti/neon/tsconfig.module.json diff --git a/palettes/confetti/confettiPastel/tsconfig.types.json b/palettes/confetti/neon/tsconfig.types.json similarity index 100% rename from palettes/confetti/confettiPastel/tsconfig.types.json rename to palettes/confetti/neon/tsconfig.types.json diff --git a/palettes/confetti/neon/typedoc.json b/palettes/confetti/neon/typedoc.json new file mode 100644 index 00000000000..97477c02dfe --- /dev/null +++ b/palettes/confetti/neon/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Neon Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/fire/fireSeed/.browserslistrc b/palettes/confetti/pastel/.browserslistrc similarity index 100% rename from palettes/fire/fireSeed/.browserslistrc rename to palettes/confetti/pastel/.browserslistrc diff --git a/palettes/confetti/pastel/CHANGELOG.md b/palettes/confetti/pastel/CHANGELOG.md new file mode 100644 index 00000000000..1967be8c580 --- /dev/null +++ b/palettes/confetti/pastel/CHANGELOG.md @@ -0,0 +1,22 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-confetti-pastel + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-confetti-pastel + +# 4.0.0-beta.0 (2026-04-08) + +### Features + +- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) + +# [4.0.0-alpha.5] + +**Note:** Initial version of package @tsparticles/palette-confetti-pastel diff --git a/palettes/fireworks/fireworksGreen/LICENSE b/palettes/confetti/pastel/LICENSE similarity index 100% rename from palettes/fireworks/fireworksGreen/LICENSE rename to palettes/confetti/pastel/LICENSE diff --git a/palettes/confetti/pastel/README.md b/palettes/confetti/pastel/README.md new file mode 100644 index 00000000000..b12f0786cee --- /dev/null +++ b/palettes/confetti/pastel/README.md @@ -0,0 +1,130 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Pastel Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-pastel/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-pastel) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-pastel.svg)](https://www.npmjs.com/package/@tsparticles/palette-pastel) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-pastel) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/confetti/pastel/images/sample.png)](https://particles.js.org/samples/palettes/pastel) + +## Colors + + + + + + + + + + + + + + + + + + + + + + +
+
+ #FFB3C1 +
+
+ #FFD59E +
+
+ #FFF4A0 +
+
+ #B8F0B8 +
+
+ #ADD8FF +
+
+ #D8B8FF +
+
+ #FFB3E6 +
+
+ #B8FFF5 +
+
+ Background
+ #FFFFFF +
+ Blend mode: source-over | Fill: true +
+ +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadPastelPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadPastelPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "pastel", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadPastelPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/confetti/confettiPastel/eslint.config.js b/palettes/confetti/pastel/eslint.config.js similarity index 100% rename from palettes/confetti/confettiPastel/eslint.config.js rename to palettes/confetti/pastel/eslint.config.js diff --git a/palettes/confetti/pastel/images/sample.png b/palettes/confetti/pastel/images/sample.png new file mode 100644 index 00000000000..41a568d8f91 Binary files /dev/null and b/palettes/confetti/pastel/images/sample.png differ diff --git a/palettes/confetti/pastel/package.dist.json b/palettes/confetti/pastel/package.dist.json new file mode 100644 index 00000000000..33eed3dbf2a --- /dev/null +++ b/palettes/confetti/pastel/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-confetti-pastel", + "version": "4.0.0-beta.15", + "description": "tsParticles confetti pastel palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/confetti/pastel" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/confetti/pastel/package.json b/palettes/confetti/pastel/package.json new file mode 100644 index 00000000000..956f916a644 --- /dev/null +++ b/palettes/confetti/pastel/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-confetti-pastel", + "version": "4.0.0-beta.15", + "description": "tsParticles confetti pastel palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/confetti/pastel" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/confetti/pastel/rollup.config.js b/palettes/confetti/pastel/rollup.config.js new file mode 100644 index 00000000000..b6f6f92e9af --- /dev/null +++ b/palettes/confetti/pastel/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-pastel", + paletteName: "Pastel Palette", + version, +}); diff --git a/palettes/confetti/pastel/src/browser.ts b/palettes/confetti/pastel/src/browser.ts new file mode 100644 index 00000000000..1cd06fcb531 --- /dev/null +++ b/palettes/confetti/pastel/src/browser.ts @@ -0,0 +1,10 @@ +import { loadConfettiPastelPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadConfettiPastelPalette?: typeof loadConfettiPastelPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadConfettiPastelPalette = loadConfettiPastelPalette; + +export * from "./index.js"; diff --git a/palettes/confetti/pastel/src/index.lazy.ts b/palettes/confetti/pastel/src/index.lazy.ts new file mode 100644 index 00000000000..196c44db8ac --- /dev/null +++ b/palettes/confetti/pastel/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "confetti-pastel"; + +/** + * @param engine - + */ +export async function loadConfettiPastelPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/confetti/pastel/src/index.ts b/palettes/confetti/pastel/src/index.ts new file mode 100644 index 00000000000..d4078e9eea7 --- /dev/null +++ b/palettes/confetti/pastel/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "confetti-pastel"; + +/** + * @param engine - + */ +export async function loadConfettiPastelPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/confetti/confettiPastel/src/options.ts b/palettes/confetti/pastel/src/options.ts similarity index 100% rename from palettes/confetti/confettiPastel/src/options.ts rename to palettes/confetti/pastel/src/options.ts diff --git a/palettes/fire/fire/tsconfig.base.json b/palettes/confetti/pastel/tsconfig.base.json similarity index 100% rename from palettes/fire/fire/tsconfig.base.json rename to palettes/confetti/pastel/tsconfig.base.json diff --git a/palettes/confetti/confettiPatriotic/tsconfig.browser.json b/palettes/confetti/pastel/tsconfig.browser.json similarity index 100% rename from palettes/confetti/confettiPatriotic/tsconfig.browser.json rename to palettes/confetti/pastel/tsconfig.browser.json diff --git a/palettes/confetti/confettiPatriotic/tsconfig.json b/palettes/confetti/pastel/tsconfig.json similarity index 100% rename from palettes/confetti/confettiPatriotic/tsconfig.json rename to palettes/confetti/pastel/tsconfig.json diff --git a/palettes/confetti/confettiPatriotic/tsconfig.module.json b/palettes/confetti/pastel/tsconfig.module.json similarity index 100% rename from palettes/confetti/confettiPatriotic/tsconfig.module.json rename to palettes/confetti/pastel/tsconfig.module.json diff --git a/palettes/confetti/confettiPatriotic/tsconfig.types.json b/palettes/confetti/pastel/tsconfig.types.json similarity index 100% rename from palettes/confetti/confettiPatriotic/tsconfig.types.json rename to palettes/confetti/pastel/tsconfig.types.json diff --git a/palettes/confetti/pastel/typedoc.json b/palettes/confetti/pastel/typedoc.json new file mode 100644 index 00000000000..f5b2eb26b85 --- /dev/null +++ b/palettes/confetti/pastel/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Pastel Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/fireworks/fireworksBlue/.browserslistrc b/palettes/confetti/patriotic/.browserslistrc similarity index 100% rename from palettes/fireworks/fireworksBlue/.browserslistrc rename to palettes/confetti/patriotic/.browserslistrc diff --git a/palettes/confetti/patriotic/CHANGELOG.md b/palettes/confetti/patriotic/CHANGELOG.md new file mode 100644 index 00000000000..f07b358baaf --- /dev/null +++ b/palettes/confetti/patriotic/CHANGELOG.md @@ -0,0 +1,22 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-confetti-patriotic + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-confetti-patriotic + +# 4.0.0-beta.0 (2026-04-08) + +### Features + +- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) + +# [4.0.0-alpha.5] + +**Note:** Initial version of package @tsparticles/palette-confetti-patriotic diff --git a/palettes/fireworks/fireworksGreenStroke/LICENSE b/palettes/confetti/patriotic/LICENSE similarity index 100% rename from palettes/fireworks/fireworksGreenStroke/LICENSE rename to palettes/confetti/patriotic/LICENSE diff --git a/palettes/confetti/patriotic/README.md b/palettes/confetti/patriotic/README.md new file mode 100644 index 00000000000..5ac9d797247 --- /dev/null +++ b/palettes/confetti/patriotic/README.md @@ -0,0 +1,130 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Patriotic Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-patriotic/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-patriotic) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-patriotic.svg)](https://www.npmjs.com/package/@tsparticles/palette-patriotic) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-patriotic) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/confetti/patriotic/images/sample.png)](https://particles.js.org/samples/palettes/patriotic) + +## Colors + + + + + + + + + + + + + + + + + + + + + + +
+
+ #FF0000 +
+
+ #EE1111 +
+
+ #CC0000 +
+
+ #0033BB +
+
+ #0055CC +
+
+ #0077EE +
+
+ #FFFFFF +
+
+ #EEEEEE +
+
+ Background
+ #FFFFFF +
+ Blend mode: source-over | Fill: true +
+ +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadPatrioticPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadPatrioticPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "patriotic", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadPatrioticPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/confetti/confettiPatriotic/eslint.config.js b/palettes/confetti/patriotic/eslint.config.js similarity index 100% rename from palettes/confetti/confettiPatriotic/eslint.config.js rename to palettes/confetti/patriotic/eslint.config.js diff --git a/palettes/confetti/patriotic/images/sample.png b/palettes/confetti/patriotic/images/sample.png new file mode 100644 index 00000000000..66e498b97c0 Binary files /dev/null and b/palettes/confetti/patriotic/images/sample.png differ diff --git a/palettes/confetti/patriotic/package.dist.json b/palettes/confetti/patriotic/package.dist.json new file mode 100644 index 00000000000..b4665035624 --- /dev/null +++ b/palettes/confetti/patriotic/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-confetti-patriotic", + "version": "4.0.0-beta.15", + "description": "tsParticles confetti patriotic palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/confetti/patriotic" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/confetti/patriotic/package.json b/palettes/confetti/patriotic/package.json new file mode 100644 index 00000000000..ca433375161 --- /dev/null +++ b/palettes/confetti/patriotic/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-confetti-patriotic", + "version": "4.0.0-beta.15", + "description": "tsParticles confetti patriotic palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/confetti/patriotic" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/confetti/patriotic/rollup.config.js b/palettes/confetti/patriotic/rollup.config.js new file mode 100644 index 00000000000..ab3ad62dd8e --- /dev/null +++ b/palettes/confetti/patriotic/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-patriotic", + paletteName: "Patriotic Palette", + version, +}); diff --git a/palettes/confetti/patriotic/src/browser.ts b/palettes/confetti/patriotic/src/browser.ts new file mode 100644 index 00000000000..3886e8f2165 --- /dev/null +++ b/palettes/confetti/patriotic/src/browser.ts @@ -0,0 +1,10 @@ +import { loadConfettiPatrioticPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadConfettiPatrioticPalette?: typeof loadConfettiPatrioticPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadConfettiPatrioticPalette = loadConfettiPatrioticPalette; + +export * from "./index.js"; diff --git a/palettes/confetti/patriotic/src/index.lazy.ts b/palettes/confetti/patriotic/src/index.lazy.ts new file mode 100644 index 00000000000..cd1f3841062 --- /dev/null +++ b/palettes/confetti/patriotic/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "confetti-patriotic"; + +/** + * @param engine - + */ +export async function loadConfettiPatrioticPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/confetti/patriotic/src/index.ts b/palettes/confetti/patriotic/src/index.ts new file mode 100644 index 00000000000..2b2673e7e50 --- /dev/null +++ b/palettes/confetti/patriotic/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "confetti-patriotic"; + +/** + * @param engine - + */ +export async function loadConfettiPatrioticPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/confetti/confettiPatriotic/src/options.ts b/palettes/confetti/patriotic/src/options.ts similarity index 100% rename from palettes/confetti/confettiPatriotic/src/options.ts rename to palettes/confetti/patriotic/src/options.ts diff --git a/palettes/fire/fireSeed/tsconfig.base.json b/palettes/confetti/patriotic/tsconfig.base.json similarity index 100% rename from palettes/fire/fireSeed/tsconfig.base.json rename to palettes/confetti/patriotic/tsconfig.base.json diff --git a/palettes/confetti/confettiRainbow/tsconfig.browser.json b/palettes/confetti/patriotic/tsconfig.browser.json similarity index 100% rename from palettes/confetti/confettiRainbow/tsconfig.browser.json rename to palettes/confetti/patriotic/tsconfig.browser.json diff --git a/palettes/confetti/confettiRainbow/tsconfig.json b/palettes/confetti/patriotic/tsconfig.json similarity index 100% rename from palettes/confetti/confettiRainbow/tsconfig.json rename to palettes/confetti/patriotic/tsconfig.json diff --git a/palettes/confetti/confettiRainbow/tsconfig.module.json b/palettes/confetti/patriotic/tsconfig.module.json similarity index 100% rename from palettes/confetti/confettiRainbow/tsconfig.module.json rename to palettes/confetti/patriotic/tsconfig.module.json diff --git a/palettes/confetti/confettiRainbow/tsconfig.types.json b/palettes/confetti/patriotic/tsconfig.types.json similarity index 100% rename from palettes/confetti/confettiRainbow/tsconfig.types.json rename to palettes/confetti/patriotic/tsconfig.types.json diff --git a/palettes/confetti/patriotic/typedoc.json b/palettes/confetti/patriotic/typedoc.json new file mode 100644 index 00000000000..3d37cb6a5ee --- /dev/null +++ b/palettes/confetti/patriotic/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Patriotic Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/fireworks/fireworksBlueStroke/.browserslistrc b/palettes/confetti/rainbow/.browserslistrc similarity index 100% rename from palettes/fireworks/fireworksBlueStroke/.browserslistrc rename to palettes/confetti/rainbow/.browserslistrc diff --git a/palettes/confetti/rainbow/CHANGELOG.md b/palettes/confetti/rainbow/CHANGELOG.md new file mode 100644 index 00000000000..bd5387b9b93 --- /dev/null +++ b/palettes/confetti/rainbow/CHANGELOG.md @@ -0,0 +1,22 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-confetti-rainbow + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-confetti-rainbow + +# 4.0.0-beta.0 (2026-04-08) + +### Features + +- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) + +# [4.0.0-alpha.5] + +**Note:** Initial version of package @tsparticles/palette-confetti-rainbow diff --git a/palettes/fireworks/fireworksIce/LICENSE b/palettes/confetti/rainbow/LICENSE similarity index 100% rename from palettes/fireworks/fireworksIce/LICENSE rename to palettes/confetti/rainbow/LICENSE diff --git a/palettes/confetti/rainbow/README.md b/palettes/confetti/rainbow/README.md new file mode 100644 index 00000000000..4919d0aea6c --- /dev/null +++ b/palettes/confetti/rainbow/README.md @@ -0,0 +1,126 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Rainbow Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-rainbow/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-rainbow) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-rainbow.svg)](https://www.npmjs.com/package/@tsparticles/palette-rainbow) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-rainbow) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/confetti/rainbow/images/sample.png)](https://particles.js.org/samples/palettes/rainbow) + +## Colors + + + + + + + + + + + + + + + + + + + + + +
+
+ #FF0000 +
+
+ #FF7700 +
+
+ #FFFF00 +
+
+ #00CC00 +
+
+ #0000FF +
+
+ #8800FF +
+
+ #FF0099 +
+
+ Background
+ #1a1a2e +
+ Blend mode: source-over | Fill: true +
+ +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadRainbowPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadRainbowPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "rainbow", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadRainbowPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/confetti/confettiRainbow/eslint.config.js b/palettes/confetti/rainbow/eslint.config.js similarity index 100% rename from palettes/confetti/confettiRainbow/eslint.config.js rename to palettes/confetti/rainbow/eslint.config.js diff --git a/palettes/confetti/rainbow/images/sample.png b/palettes/confetti/rainbow/images/sample.png new file mode 100644 index 00000000000..3d0d2f6658d Binary files /dev/null and b/palettes/confetti/rainbow/images/sample.png differ diff --git a/palettes/confetti/rainbow/package.dist.json b/palettes/confetti/rainbow/package.dist.json new file mode 100644 index 00000000000..b321481b45b --- /dev/null +++ b/palettes/confetti/rainbow/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-confetti-rainbow", + "version": "4.0.0-beta.15", + "description": "tsParticles confetti rainbow palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/confetti/rainbow" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/confetti/rainbow/package.json b/palettes/confetti/rainbow/package.json new file mode 100644 index 00000000000..253e4150f01 --- /dev/null +++ b/palettes/confetti/rainbow/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-confetti-rainbow", + "version": "4.0.0-beta.15", + "description": "tsParticles confetti rainbow palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/confetti/rainbow" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/confetti/rainbow/rollup.config.js b/palettes/confetti/rainbow/rollup.config.js new file mode 100644 index 00000000000..03015c77f6d --- /dev/null +++ b/palettes/confetti/rainbow/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-rainbow", + paletteName: "Rainbow Palette", + version, +}); diff --git a/palettes/confetti/rainbow/src/browser.ts b/palettes/confetti/rainbow/src/browser.ts new file mode 100644 index 00000000000..50f8536fb49 --- /dev/null +++ b/palettes/confetti/rainbow/src/browser.ts @@ -0,0 +1,10 @@ +import { loadConfettiRainbowPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadConfettiRainbowPalette?: typeof loadConfettiRainbowPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadConfettiRainbowPalette = loadConfettiRainbowPalette; + +export * from "./index.js"; diff --git a/palettes/confetti/rainbow/src/index.lazy.ts b/palettes/confetti/rainbow/src/index.lazy.ts new file mode 100644 index 00000000000..8febb6d3f27 --- /dev/null +++ b/palettes/confetti/rainbow/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "confetti-rainbow"; + +/** + * @param engine - + */ +export async function loadConfettiRainbowPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/confetti/rainbow/src/index.ts b/palettes/confetti/rainbow/src/index.ts new file mode 100644 index 00000000000..f012a7cc490 --- /dev/null +++ b/palettes/confetti/rainbow/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "confetti-rainbow"; + +/** + * @param engine - + */ +export async function loadConfettiRainbowPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/confetti/confettiRainbow/src/options.ts b/palettes/confetti/rainbow/src/options.ts similarity index 100% rename from palettes/confetti/confettiRainbow/src/options.ts rename to palettes/confetti/rainbow/src/options.ts diff --git a/palettes/fireworks/fireworksBlue/tsconfig.base.json b/palettes/confetti/rainbow/tsconfig.base.json similarity index 100% rename from palettes/fireworks/fireworksBlue/tsconfig.base.json rename to palettes/confetti/rainbow/tsconfig.base.json diff --git a/palettes/confetti/confettiWinter/tsconfig.browser.json b/palettes/confetti/rainbow/tsconfig.browser.json similarity index 100% rename from palettes/confetti/confettiWinter/tsconfig.browser.json rename to palettes/confetti/rainbow/tsconfig.browser.json diff --git a/palettes/confetti/confettiWinter/tsconfig.json b/palettes/confetti/rainbow/tsconfig.json similarity index 100% rename from palettes/confetti/confettiWinter/tsconfig.json rename to palettes/confetti/rainbow/tsconfig.json diff --git a/palettes/confetti/confettiWinter/tsconfig.module.json b/palettes/confetti/rainbow/tsconfig.module.json similarity index 100% rename from palettes/confetti/confettiWinter/tsconfig.module.json rename to palettes/confetti/rainbow/tsconfig.module.json diff --git a/palettes/confetti/confettiWinter/tsconfig.types.json b/palettes/confetti/rainbow/tsconfig.types.json similarity index 100% rename from palettes/confetti/confettiWinter/tsconfig.types.json rename to palettes/confetti/rainbow/tsconfig.types.json diff --git a/palettes/confetti/rainbow/typedoc.json b/palettes/confetti/rainbow/typedoc.json new file mode 100644 index 00000000000..95a8f026815 --- /dev/null +++ b/palettes/confetti/rainbow/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Rainbow Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/fireworks/fireworksCopper/.browserslistrc b/palettes/confetti/winter/.browserslistrc similarity index 100% rename from palettes/fireworks/fireworksCopper/.browserslistrc rename to palettes/confetti/winter/.browserslistrc diff --git a/palettes/confetti/winter/CHANGELOG.md b/palettes/confetti/winter/CHANGELOG.md new file mode 100644 index 00000000000..a245616fc74 --- /dev/null +++ b/palettes/confetti/winter/CHANGELOG.md @@ -0,0 +1,22 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-confetti-winter + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-confetti-winter + +# 4.0.0-beta.0 (2026-04-08) + +### Features + +- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) + +# [4.0.0-alpha.5] + +**Note:** Initial version of package @tsparticles/palette-confetti-winter diff --git a/palettes/fireworks/fireworksIceStroke/LICENSE b/palettes/confetti/winter/LICENSE similarity index 100% rename from palettes/fireworks/fireworksIceStroke/LICENSE rename to palettes/confetti/winter/LICENSE diff --git a/palettes/confetti/winter/README.md b/palettes/confetti/winter/README.md new file mode 100644 index 00000000000..e789bc4beaa --- /dev/null +++ b/palettes/confetti/winter/README.md @@ -0,0 +1,130 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Winter Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-winter/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-winter) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-winter.svg)](https://www.npmjs.com/package/@tsparticles/palette-winter) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-winter) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/confetti/winter/images/sample.png)](https://particles.js.org/samples/palettes/winter) + +## Colors + + + + + + + + + + + + + + + + + + + + + + +
+
+ #FFFFFF +
+
+ #DDEEFF +
+
+ #AACCFF +
+
+ #88BBFF +
+
+ #FF9999 +
+
+ #FFBBBB +
+
+ #99CCFF +
+
+ #CCEEFF +
+
+ Background
+ #eaf4ff +
+ Blend mode: source-over | Fill: true +
+ +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadWinterPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadWinterPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "winter", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadWinterPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/confetti/confettiWinter/eslint.config.js b/palettes/confetti/winter/eslint.config.js similarity index 100% rename from palettes/confetti/confettiWinter/eslint.config.js rename to palettes/confetti/winter/eslint.config.js diff --git a/palettes/confetti/winter/images/sample.png b/palettes/confetti/winter/images/sample.png new file mode 100644 index 00000000000..90f3e30d32d Binary files /dev/null and b/palettes/confetti/winter/images/sample.png differ diff --git a/palettes/confetti/winter/package.dist.json b/palettes/confetti/winter/package.dist.json new file mode 100644 index 00000000000..e0080f5e5ce --- /dev/null +++ b/palettes/confetti/winter/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-confetti-winter", + "version": "4.0.0-beta.15", + "description": "tsParticles confetti winter palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/confetti/winter" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/confetti/winter/package.json b/palettes/confetti/winter/package.json new file mode 100644 index 00000000000..d90b9c16f72 --- /dev/null +++ b/palettes/confetti/winter/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-confetti-winter", + "version": "4.0.0-beta.15", + "description": "tsParticles confetti winter palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/confetti/winter" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/confetti/winter/rollup.config.js b/palettes/confetti/winter/rollup.config.js new file mode 100644 index 00000000000..dcacbfcf4e1 --- /dev/null +++ b/palettes/confetti/winter/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-winter", + paletteName: "Winter Palette", + version, +}); diff --git a/palettes/confetti/winter/src/browser.ts b/palettes/confetti/winter/src/browser.ts new file mode 100644 index 00000000000..34305e453c8 --- /dev/null +++ b/palettes/confetti/winter/src/browser.ts @@ -0,0 +1,10 @@ +import { loadConfettiWinterPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadConfettiWinterPalette?: typeof loadConfettiWinterPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadConfettiWinterPalette = loadConfettiWinterPalette; + +export * from "./index.js"; diff --git a/palettes/confetti/winter/src/index.lazy.ts b/palettes/confetti/winter/src/index.lazy.ts new file mode 100644 index 00000000000..a14690880ad --- /dev/null +++ b/palettes/confetti/winter/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "confetti-winter"; + +/** + * @param engine - + */ +export async function loadConfettiWinterPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/confetti/winter/src/index.ts b/palettes/confetti/winter/src/index.ts new file mode 100644 index 00000000000..4044f01e7f8 --- /dev/null +++ b/palettes/confetti/winter/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "confetti-winter"; + +/** + * @param engine - + */ +export async function loadConfettiWinterPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/confetti/confettiWinter/src/options.ts b/palettes/confetti/winter/src/options.ts similarity index 100% rename from palettes/confetti/confettiWinter/src/options.ts rename to palettes/confetti/winter/src/options.ts diff --git a/palettes/fireworks/fireworksBlueStroke/tsconfig.base.json b/palettes/confetti/winter/tsconfig.base.json similarity index 100% rename from palettes/fireworks/fireworksBlueStroke/tsconfig.base.json rename to palettes/confetti/winter/tsconfig.base.json diff --git a/palettes/fire/fire/tsconfig.browser.json b/palettes/confetti/winter/tsconfig.browser.json similarity index 100% rename from palettes/fire/fire/tsconfig.browser.json rename to palettes/confetti/winter/tsconfig.browser.json diff --git a/palettes/fire/fire/tsconfig.json b/palettes/confetti/winter/tsconfig.json similarity index 100% rename from palettes/fire/fire/tsconfig.json rename to palettes/confetti/winter/tsconfig.json diff --git a/palettes/fire/fire/tsconfig.module.json b/palettes/confetti/winter/tsconfig.module.json similarity index 100% rename from palettes/fire/fire/tsconfig.module.json rename to palettes/confetti/winter/tsconfig.module.json diff --git a/palettes/fire/fire/tsconfig.types.json b/palettes/confetti/winter/tsconfig.types.json similarity index 100% rename from palettes/fire/fire/tsconfig.types.json rename to palettes/confetti/winter/tsconfig.types.json diff --git a/palettes/confetti/winter/typedoc.json b/palettes/confetti/winter/typedoc.json new file mode 100644 index 00000000000..9025494bcb4 --- /dev/null +++ b/palettes/confetti/winter/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Winter Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/earth/caustics/CHANGELOG.md b/palettes/earth/caustics/CHANGELOG.md index fb92d0cda0e..53d6d37602e 100644 --- a/palettes/earth/caustics/CHANGELOG.md +++ b/palettes/earth/caustics/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-caustics + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-caustics diff --git a/palettes/earth/caustics/README.md b/palettes/earth/caustics/README.md index a2ef8cd592a..2e1f4b96c8b 100644 --- a/palettes/earth/caustics/README.md +++ b/palettes/earth/caustics/README.md @@ -2,9 +2,9 @@ # tsParticles Caustics Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-caustics/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-caustics) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-caustics.svg)](https://www.npmjs.com/package/@tsparticles/palette-caustics) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-caustics)](https://www.npmjs.com/package/@tsparticles/palette-caustics) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-caustics/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-caustics) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-caustics.svg)](https://www.npmjs.com/package/@tsparticles/palette-caustics) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-caustics) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for caustics. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/caustics/images/sample.png)](https://particles.js.org/samples/palettes/caustics) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/earth/caustics/images/sample.png)](https://particles.js.org/samples/palettes/caustics) ## Colors @@ -69,7 +69,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -106,47 +106,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "caustics", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadCausticsPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadCausticsPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadCausticsPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -pacaustics[Caustics] -end - -e[tsParticles Engine] --> pacaustics -``` diff --git a/palettes/earth/caustics/package.dist.json b/palettes/earth/caustics/package.dist.json index afaf98254aa..c9459becdd8 100644 --- a/palettes/earth/caustics/package.dist.json +++ b/palettes/earth/caustics/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-caustics", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles caustics palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.caustics.min.js", - "unpkg": "tsparticles.palette.caustics.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/earth/caustics/package.json b/palettes/earth/caustics/package.json index ecc76522fe9..da4a8f89284 100644 --- a/palettes/earth/caustics/package.json +++ b/palettes/earth/caustics/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-caustics", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles caustics palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/earth/caustics/rollup.config.js b/palettes/earth/caustics/rollup.config.js new file mode 100644 index 00000000000..6f8be0d40c8 --- /dev/null +++ b/palettes/earth/caustics/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-caustics", + paletteName: "Caustics Palette", + version, +}); diff --git a/palettes/earth/caustics/src/browser.ts b/palettes/earth/caustics/src/browser.ts new file mode 100644 index 00000000000..d2d823f56bd --- /dev/null +++ b/palettes/earth/caustics/src/browser.ts @@ -0,0 +1,10 @@ +import { loadCausticsPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadCausticsPalette?: typeof loadCausticsPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadCausticsPalette = loadCausticsPalette; + +export * from "./index.js"; diff --git a/palettes/earth/caustics/src/index.lazy.ts b/palettes/earth/caustics/src/index.lazy.ts new file mode 100644 index 00000000000..873ba284c8b --- /dev/null +++ b/palettes/earth/caustics/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "caustics"; + +/** + * @param engine - + */ +export async function loadCausticsPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/earth/caustics/src/index.ts b/palettes/earth/caustics/src/index.ts index d2e15ee5d4d..d71ee24a6f6 100644 --- a/palettes/earth/caustics/src/index.ts +++ b/palettes/earth/caustics/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "caustics"; @@ -6,9 +7,7 @@ const paletteName = "caustics"; * @param engine - */ export async function loadCausticsPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/earth/caustics/typedoc.json b/palettes/earth/caustics/typedoc.json index 3d5f142207b..8d41cbf22c3 100644 --- a/palettes/earth/caustics/typedoc.json +++ b/palettes/earth/caustics/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Caustics Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Caustics Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/earth/caustics/webpack.config.js b/palettes/earth/caustics/webpack.config.js deleted file mode 100644 index ef8a8cc275f..00000000000 --- a/palettes/earth/caustics/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-caustics", - paletteName: "Caustics Palette", - version, -}); diff --git a/palettes/earth/desertSand/CHANGELOG.md b/palettes/earth/desertSand/CHANGELOG.md index 6a74c0ada4e..4ed3f2dcf96 100644 --- a/palettes/earth/desertSand/CHANGELOG.md +++ b/palettes/earth/desertSand/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-desert-sand + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-desert-sand diff --git a/palettes/earth/desertSand/README.md b/palettes/earth/desertSand/README.md index 8ab318242d5..b57448d6b68 100644 --- a/palettes/earth/desertSand/README.md +++ b/palettes/earth/desertSand/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Desert Sand Palette +# tsParticles DesertSand Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-desert-sand/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-desert-sand) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-desert-sand.svg)](https://www.npmjs.com/package/@tsparticles/palette-desert-sand) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-desert-sand)](https://www.npmjs.com/package/@tsparticles/palette-desert-sand) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-desertSand/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-desertSand) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-desertSand.svg)](https://www.npmjs.com/package/@tsparticles/palette-desertSand) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-desertSand) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for desert sand. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/desertSand/images/sample.png)](https://particles.js.org/samples/palettes/desert-sand) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/earth/desertSand/images/sample.png)](https://particles.js.org/samples/palettes/desertSand) ## Colors @@ -79,7 +79,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -101,7 +101,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "desert-sand", + palette: "desertSand", }; await engine.load({ @@ -116,47 +116,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "desert-sand", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadDesertSandPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadDesertSandPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadDesertSandPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -padesertSand[Desert Sand] -end - -e[tsParticles Engine] --> padesertSand -``` diff --git a/palettes/earth/desertSand/package.dist.json b/palettes/earth/desertSand/package.dist.json index cd5b818bcd5..6974591734c 100644 --- a/palettes/earth/desertSand/package.dist.json +++ b/palettes/earth/desertSand/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-desert-sand", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles desert sand palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.desert-sand.min.js", - "unpkg": "tsparticles.palette.desert-sand.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/earth/desertSand/package.json b/palettes/earth/desertSand/package.json index 55d1b325c98..3e0b1dd267d 100644 --- a/palettes/earth/desertSand/package.json +++ b/palettes/earth/desertSand/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-desert-sand", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles desert sand palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/earth/desertSand/rollup.config.js b/palettes/earth/desertSand/rollup.config.js new file mode 100644 index 00000000000..d4555dac86d --- /dev/null +++ b/palettes/earth/desertSand/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-desertSand", + paletteName: "DesertSand Palette", + version, +}); diff --git a/palettes/earth/desertSand/src/browser.ts b/palettes/earth/desertSand/src/browser.ts new file mode 100644 index 00000000000..4ec669402a6 --- /dev/null +++ b/palettes/earth/desertSand/src/browser.ts @@ -0,0 +1,10 @@ +import { loadDesertSandPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadDesertSandPalette?: typeof loadDesertSandPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadDesertSandPalette = loadDesertSandPalette; + +export * from "./index.js"; diff --git a/palettes/earth/desertSand/src/index.lazy.ts b/palettes/earth/desertSand/src/index.lazy.ts new file mode 100644 index 00000000000..36adf2165df --- /dev/null +++ b/palettes/earth/desertSand/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "desert-sand"; + +/** + * @param engine - + */ +export async function loadDesertSandPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/earth/desertSand/src/index.ts b/palettes/earth/desertSand/src/index.ts index df4d2077656..d0b80990b8f 100644 --- a/palettes/earth/desertSand/src/index.ts +++ b/palettes/earth/desertSand/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "desert-sand"; @@ -6,9 +7,7 @@ const paletteName = "desert-sand"; * @param engine - */ export async function loadDesertSandPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/earth/desertSand/typedoc.json b/palettes/earth/desertSand/typedoc.json index 9b5f411946c..f09ebda9c72 100644 --- a/palettes/earth/desertSand/typedoc.json +++ b/palettes/earth/desertSand/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Desert Sand Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles DesertSand Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/earth/desertSand/webpack.config.js b/palettes/earth/desertSand/webpack.config.js deleted file mode 100644 index 6ede75e4f22..00000000000 --- a/palettes/earth/desertSand/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-desert-sand", - paletteName: "Desert Sand Palette", - version, -}); diff --git a/palettes/earth/mudAndDirt/CHANGELOG.md b/palettes/earth/mudAndDirt/CHANGELOG.md index c25492990ae..8375ed837f9 100644 --- a/palettes/earth/mudAndDirt/CHANGELOG.md +++ b/palettes/earth/mudAndDirt/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-mud-and-dirt + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-mud-and-dirt diff --git a/palettes/earth/mudAndDirt/README.md b/palettes/earth/mudAndDirt/README.md index 77abf8d8a1e..730be1d5c1a 100644 --- a/palettes/earth/mudAndDirt/README.md +++ b/palettes/earth/mudAndDirt/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Mud & Dirt Palette +# tsParticles MudAndDirt Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-mud-and-dirt/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-mud-and-dirt) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-mud-and-dirt.svg)](https://www.npmjs.com/package/@tsparticles/palette-mud-and-dirt) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-mud-and-dirt)](https://www.npmjs.com/package/@tsparticles/palette-mud-and-dirt) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-mudAndDirt/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-mudAndDirt) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-mudAndDirt.svg)](https://www.npmjs.com/package/@tsparticles/palette-mudAndDirt) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-mudAndDirt) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for mud & dirt. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/mudAndDirt/images/sample.png)](https://particles.js.org/samples/palettes/mud-and-dirt) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/earth/mudAndDirt/images/sample.png)](https://particles.js.org/samples/palettes/mudAndDirt) ## Colors @@ -75,7 +75,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -97,7 +97,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "mud-and-dirt", + palette: "mudAndDirt", }; await engine.load({ @@ -112,47 +112,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "mud-and-dirt", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadMudAndDirtPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadMudAndDirtPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadMudAndDirtPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -pamudAndDirt[Mud & Dirt] -end - -e[tsParticles Engine] --> pamudAndDirt -``` diff --git a/palettes/earth/mudAndDirt/package.dist.json b/palettes/earth/mudAndDirt/package.dist.json index 5bea146a7b7..4ae9a1ec6bd 100644 --- a/palettes/earth/mudAndDirt/package.dist.json +++ b/palettes/earth/mudAndDirt/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-mud-and-dirt", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles mud & dirt palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.mud-and-dirt.min.js", - "unpkg": "tsparticles.palette.mud-and-dirt.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/earth/mudAndDirt/package.json b/palettes/earth/mudAndDirt/package.json index af672023847..79772593adb 100644 --- a/palettes/earth/mudAndDirt/package.json +++ b/palettes/earth/mudAndDirt/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-mud-and-dirt", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles mud & dirt palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/earth/mudAndDirt/rollup.config.js b/palettes/earth/mudAndDirt/rollup.config.js new file mode 100644 index 00000000000..ade33b799c9 --- /dev/null +++ b/palettes/earth/mudAndDirt/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-mudAndDirt", + paletteName: "MudAndDirt Palette", + version, +}); diff --git a/palettes/earth/mudAndDirt/src/browser.ts b/palettes/earth/mudAndDirt/src/browser.ts new file mode 100644 index 00000000000..07995ed7820 --- /dev/null +++ b/palettes/earth/mudAndDirt/src/browser.ts @@ -0,0 +1,10 @@ +import { loadMudAndDirtPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadMudAndDirtPalette?: typeof loadMudAndDirtPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadMudAndDirtPalette = loadMudAndDirtPalette; + +export * from "./index.js"; diff --git a/palettes/earth/mudAndDirt/src/index.lazy.ts b/palettes/earth/mudAndDirt/src/index.lazy.ts new file mode 100644 index 00000000000..c194395a5fb --- /dev/null +++ b/palettes/earth/mudAndDirt/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "mud-and-dirt"; + +/** + * @param engine - + */ +export async function loadMudAndDirtPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/earth/mudAndDirt/src/index.ts b/palettes/earth/mudAndDirt/src/index.ts index edca6c16b10..9c27829b861 100644 --- a/palettes/earth/mudAndDirt/src/index.ts +++ b/palettes/earth/mudAndDirt/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "mud-and-dirt"; @@ -6,9 +7,7 @@ const paletteName = "mud-and-dirt"; * @param engine - */ export async function loadMudAndDirtPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/earth/mudAndDirt/typedoc.json b/palettes/earth/mudAndDirt/typedoc.json index 252f1b0eeff..787fad605e4 100644 --- a/palettes/earth/mudAndDirt/typedoc.json +++ b/palettes/earth/mudAndDirt/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Mud & Dirt Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles MudAndDirt Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/earth/mudAndDirt/webpack.config.js b/palettes/earth/mudAndDirt/webpack.config.js deleted file mode 100644 index f2d11b9d898..00000000000 --- a/palettes/earth/mudAndDirt/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-mud-and-dirt", - paletteName: "Mud & Dirt Palette", - version, -}); diff --git a/palettes/earth/oilSlick/CHANGELOG.md b/palettes/earth/oilSlick/CHANGELOG.md index 8f30d213fd4..27ad8532fe1 100644 --- a/palettes/earth/oilSlick/CHANGELOG.md +++ b/palettes/earth/oilSlick/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-oil-slick + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-oil-slick diff --git a/palettes/earth/oilSlick/README.md b/palettes/earth/oilSlick/README.md index 9d29704e3c3..02a64575ed6 100644 --- a/palettes/earth/oilSlick/README.md +++ b/palettes/earth/oilSlick/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Oil Slick Palette +# tsParticles OilSlick Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-oil-slick/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-oil-slick) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-oil-slick.svg)](https://www.npmjs.com/package/@tsparticles/palette-oil-slick) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-oil-slick)](https://www.npmjs.com/package/@tsparticles/palette-oil-slick) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-oilSlick/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-oilSlick) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-oilSlick.svg)](https://www.npmjs.com/package/@tsparticles/palette-oilSlick) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-oilSlick) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for oil slick. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/oilSlick/images/sample.png)](https://particles.js.org/samples/palettes/oil-slick) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/earth/oilSlick/images/sample.png)](https://particles.js.org/samples/palettes/oilSlick) ## Colors @@ -79,7 +79,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -101,7 +101,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "oil-slick", + palette: "oilSlick", }; await engine.load({ @@ -116,47 +116,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "oil-slick", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadOilSlickPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadOilSlickPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadOilSlickPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -paoilSlick[Oil Slick] -end - -e[tsParticles Engine] --> paoilSlick -``` diff --git a/palettes/earth/oilSlick/package.dist.json b/palettes/earth/oilSlick/package.dist.json index 444987a1602..1534b209ae0 100644 --- a/palettes/earth/oilSlick/package.dist.json +++ b/palettes/earth/oilSlick/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-oil-slick", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles oil slick palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.oil-slick.min.js", - "unpkg": "tsparticles.palette.oil-slick.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/earth/oilSlick/package.json b/palettes/earth/oilSlick/package.json index 6587acf3e67..e3fcacb37cb 100644 --- a/palettes/earth/oilSlick/package.json +++ b/palettes/earth/oilSlick/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-oil-slick", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles oil slick palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/earth/oilSlick/rollup.config.js b/palettes/earth/oilSlick/rollup.config.js new file mode 100644 index 00000000000..af576c75a1b --- /dev/null +++ b/palettes/earth/oilSlick/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-oilSlick", + paletteName: "OilSlick Palette", + version, +}); diff --git a/palettes/earth/oilSlick/src/browser.ts b/palettes/earth/oilSlick/src/browser.ts new file mode 100644 index 00000000000..0ba1a5aeb52 --- /dev/null +++ b/palettes/earth/oilSlick/src/browser.ts @@ -0,0 +1,10 @@ +import { loadOilSlickPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadOilSlickPalette?: typeof loadOilSlickPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadOilSlickPalette = loadOilSlickPalette; + +export * from "./index.js"; diff --git a/palettes/earth/oilSlick/src/index.lazy.ts b/palettes/earth/oilSlick/src/index.lazy.ts new file mode 100644 index 00000000000..62ddd084719 --- /dev/null +++ b/palettes/earth/oilSlick/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "oil-slick"; + +/** + * @param engine - + */ +export async function loadOilSlickPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/earth/oilSlick/src/index.ts b/palettes/earth/oilSlick/src/index.ts index b0271551719..23b42beccdd 100644 --- a/palettes/earth/oilSlick/src/index.ts +++ b/palettes/earth/oilSlick/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "oil-slick"; @@ -6,9 +7,7 @@ const paletteName = "oil-slick"; * @param engine - */ export async function loadOilSlickPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/earth/oilSlick/typedoc.json b/palettes/earth/oilSlick/typedoc.json index c8551192099..a06a4cbb1fb 100644 --- a/palettes/earth/oilSlick/typedoc.json +++ b/palettes/earth/oilSlick/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Oil Slick Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles OilSlick Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/earth/oilSlick/webpack.config.js b/palettes/earth/oilSlick/webpack.config.js deleted file mode 100644 index bb4251d6a29..00000000000 --- a/palettes/earth/oilSlick/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-oil-slick", - paletteName: "Oil Slick Palette", - version, -}); diff --git a/palettes/earth/rockAndGravel/CHANGELOG.md b/palettes/earth/rockAndGravel/CHANGELOG.md index 3693cc62a0a..9dfe3c4d27e 100644 --- a/palettes/earth/rockAndGravel/CHANGELOG.md +++ b/palettes/earth/rockAndGravel/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-rock-and-gravel + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-rock-and-gravel diff --git a/palettes/earth/rockAndGravel/README.md b/palettes/earth/rockAndGravel/README.md index b3cfc59c509..5c0f1b1eea1 100644 --- a/palettes/earth/rockAndGravel/README.md +++ b/palettes/earth/rockAndGravel/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Rock & Gravel Palette +# tsParticles RockAndGravel Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-rock-and-gravel/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-rock-and-gravel) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-rock-and-gravel.svg)](https://www.npmjs.com/package/@tsparticles/palette-rock-and-gravel) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-rock-and-gravel)](https://www.npmjs.com/package/@tsparticles/palette-rock-and-gravel) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-rockAndGravel/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-rockAndGravel) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-rockAndGravel.svg)](https://www.npmjs.com/package/@tsparticles/palette-rockAndGravel) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-rockAndGravel) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for rock & gravel. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/rockAndGravel/images/sample.png)](https://particles.js.org/samples/palettes/rock-and-gravel) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/earth/rockAndGravel/images/sample.png)](https://particles.js.org/samples/palettes/rockAndGravel) ## Colors @@ -79,7 +79,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -101,7 +101,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "rock-and-gravel", + palette: "rockAndGravel", }; await engine.load({ @@ -116,47 +116,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "rock-and-gravel", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadRockAndGravelPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadRockAndGravelPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadRockAndGravelPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -parockAndGravel[Rock & Gravel] -end - -e[tsParticles Engine] --> parockAndGravel -``` diff --git a/palettes/earth/rockAndGravel/package.dist.json b/palettes/earth/rockAndGravel/package.dist.json index b0430c98729..790a124f74c 100644 --- a/palettes/earth/rockAndGravel/package.dist.json +++ b/palettes/earth/rockAndGravel/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-rock-and-gravel", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles rock & gravel palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.rock-and-gravel.min.js", - "unpkg": "tsparticles.palette.rock-and-gravel.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/earth/rockAndGravel/package.json b/palettes/earth/rockAndGravel/package.json index 104a847717d..9c5ca8f5ff0 100644 --- a/palettes/earth/rockAndGravel/package.json +++ b/palettes/earth/rockAndGravel/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-rock-and-gravel", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles rock & gravel palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/earth/rockAndGravel/rollup.config.js b/palettes/earth/rockAndGravel/rollup.config.js new file mode 100644 index 00000000000..024690df59e --- /dev/null +++ b/palettes/earth/rockAndGravel/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-rockAndGravel", + paletteName: "RockAndGravel Palette", + version, +}); diff --git a/palettes/earth/rockAndGravel/src/browser.ts b/palettes/earth/rockAndGravel/src/browser.ts new file mode 100644 index 00000000000..fc670a895a9 --- /dev/null +++ b/palettes/earth/rockAndGravel/src/browser.ts @@ -0,0 +1,10 @@ +import { loadRockAndGravelPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadRockAndGravelPalette?: typeof loadRockAndGravelPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadRockAndGravelPalette = loadRockAndGravelPalette; + +export * from "./index.js"; diff --git a/palettes/earth/rockAndGravel/src/index.lazy.ts b/palettes/earth/rockAndGravel/src/index.lazy.ts new file mode 100644 index 00000000000..28872e8d27a --- /dev/null +++ b/palettes/earth/rockAndGravel/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "rock-and-gravel"; + +/** + * @param engine - + */ +export async function loadRockAndGravelPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/earth/rockAndGravel/src/index.ts b/palettes/earth/rockAndGravel/src/index.ts index 36e6ea5c963..a76f32a1623 100644 --- a/palettes/earth/rockAndGravel/src/index.ts +++ b/palettes/earth/rockAndGravel/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "rock-and-gravel"; @@ -6,9 +7,7 @@ const paletteName = "rock-and-gravel"; * @param engine - */ export async function loadRockAndGravelPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/earth/rockAndGravel/typedoc.json b/palettes/earth/rockAndGravel/typedoc.json index 2d324e764cf..8962091ff51 100644 --- a/palettes/earth/rockAndGravel/typedoc.json +++ b/palettes/earth/rockAndGravel/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Rock & Gravel Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles RockAndGravel Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/earth/rockAndGravel/webpack.config.js b/palettes/earth/rockAndGravel/webpack.config.js deleted file mode 100644 index 90cb4c740cc..00000000000 --- a/palettes/earth/rockAndGravel/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-rock-and-gravel", - paletteName: "Rock & Gravel Palette", - version, -}); diff --git a/palettes/earth/rustAndCorrosion/CHANGELOG.md b/palettes/earth/rustAndCorrosion/CHANGELOG.md index aa585599c6d..e6e2ee61f01 100644 --- a/palettes/earth/rustAndCorrosion/CHANGELOG.md +++ b/palettes/earth/rustAndCorrosion/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-rust-and-corrosion + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-rust-and-corrosion diff --git a/palettes/earth/rustAndCorrosion/README.md b/palettes/earth/rustAndCorrosion/README.md index c9180a866c4..6001ceb3bfb 100644 --- a/palettes/earth/rustAndCorrosion/README.md +++ b/palettes/earth/rustAndCorrosion/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Rust & Corrosion Palette +# tsParticles RustAndCorrosion Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-rust-and-corrosion/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-rust-and-corrosion) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-rust-and-corrosion.svg)](https://www.npmjs.com/package/@tsparticles/palette-rust-and-corrosion) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-rust-and-corrosion)](https://www.npmjs.com/package/@tsparticles/palette-rust-and-corrosion) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-rustAndCorrosion/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-rustAndCorrosion) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-rustAndCorrosion.svg)](https://www.npmjs.com/package/@tsparticles/palette-rustAndCorrosion) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-rustAndCorrosion) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for rust & corrosion. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/rustAndCorrosion/images/sample.png)](https://particles.js.org/samples/palettes/rust-and-corrosion) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/earth/rustAndCorrosion/images/sample.png)](https://particles.js.org/samples/palettes/rustAndCorrosion) ## Colors @@ -79,7 +79,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -101,7 +101,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "rust-and-corrosion", + palette: "rustAndCorrosion", }; await engine.load({ @@ -116,47 +116,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "rust-and-corrosion", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadRustAndCorrosionPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadRustAndCorrosionPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadRustAndCorrosionPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -parustAndCorrosion[Rust & Corrosion] -end - -e[tsParticles Engine] --> parustAndCorrosion -``` diff --git a/palettes/earth/rustAndCorrosion/package.dist.json b/palettes/earth/rustAndCorrosion/package.dist.json index d88066711c4..58b17b69a44 100644 --- a/palettes/earth/rustAndCorrosion/package.dist.json +++ b/palettes/earth/rustAndCorrosion/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-rust-and-corrosion", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles rust & corrosion palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.rust-and-corrosion.min.js", - "unpkg": "tsparticles.palette.rust-and-corrosion.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/earth/rustAndCorrosion/package.json b/palettes/earth/rustAndCorrosion/package.json index b065b76845e..2c88af093be 100644 --- a/palettes/earth/rustAndCorrosion/package.json +++ b/palettes/earth/rustAndCorrosion/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-rust-and-corrosion", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles rust & corrosion palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/earth/rustAndCorrosion/rollup.config.js b/palettes/earth/rustAndCorrosion/rollup.config.js new file mode 100644 index 00000000000..9d27488235c --- /dev/null +++ b/palettes/earth/rustAndCorrosion/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-rustAndCorrosion", + paletteName: "RustAndCorrosion Palette", + version, +}); diff --git a/palettes/earth/rustAndCorrosion/src/browser.ts b/palettes/earth/rustAndCorrosion/src/browser.ts new file mode 100644 index 00000000000..0a0651a9b67 --- /dev/null +++ b/palettes/earth/rustAndCorrosion/src/browser.ts @@ -0,0 +1,10 @@ +import { loadRustAndCorrosionPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadRustAndCorrosionPalette?: typeof loadRustAndCorrosionPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadRustAndCorrosionPalette = loadRustAndCorrosionPalette; + +export * from "./index.js"; diff --git a/palettes/earth/rustAndCorrosion/src/index.lazy.ts b/palettes/earth/rustAndCorrosion/src/index.lazy.ts new file mode 100644 index 00000000000..0af69184d46 --- /dev/null +++ b/palettes/earth/rustAndCorrosion/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "rust-and-corrosion"; + +/** + * @param engine - + */ +export async function loadRustAndCorrosionPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/earth/rustAndCorrosion/src/index.ts b/palettes/earth/rustAndCorrosion/src/index.ts index 694337a823b..77cc57d64f9 100644 --- a/palettes/earth/rustAndCorrosion/src/index.ts +++ b/palettes/earth/rustAndCorrosion/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "rust-and-corrosion"; @@ -6,9 +7,7 @@ const paletteName = "rust-and-corrosion"; * @param engine - */ export async function loadRustAndCorrosionPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/earth/rustAndCorrosion/typedoc.json b/palettes/earth/rustAndCorrosion/typedoc.json index 8f4da601a6d..6808ad4e76b 100644 --- a/palettes/earth/rustAndCorrosion/typedoc.json +++ b/palettes/earth/rustAndCorrosion/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Rust & Corrosion Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles RustAndCorrosion Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/earth/rustAndCorrosion/webpack.config.js b/palettes/earth/rustAndCorrosion/webpack.config.js deleted file mode 100644 index 55c9443ab1b..00000000000 --- a/palettes/earth/rustAndCorrosion/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-rust-and-corrosion", - paletteName: "Rust & Corrosion Palette", - version, -}); diff --git a/palettes/earth/skinAndOrganic/CHANGELOG.md b/palettes/earth/skinAndOrganic/CHANGELOG.md index dac9267d7a1..10b286e5b25 100644 --- a/palettes/earth/skinAndOrganic/CHANGELOG.md +++ b/palettes/earth/skinAndOrganic/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-skin-and-organic + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-skin-and-organic diff --git a/palettes/earth/skinAndOrganic/README.md b/palettes/earth/skinAndOrganic/README.md index 400961d71cc..accf4b2aefd 100644 --- a/palettes/earth/skinAndOrganic/README.md +++ b/palettes/earth/skinAndOrganic/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Skin & Organic Palette +# tsParticles SkinAndOrganic Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-skin-and-organic/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-skin-and-organic) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-skin-and-organic.svg)](https://www.npmjs.com/package/@tsparticles/palette-skin-and-organic) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-skin-and-organic)](https://www.npmjs.com/package/@tsparticles/palette-skin-and-organic) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-skinAndOrganic/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-skinAndOrganic) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-skinAndOrganic.svg)](https://www.npmjs.com/package/@tsparticles/palette-skinAndOrganic) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-skinAndOrganic) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for skin & organic. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/skinAndOrganic/images/sample.png)](https://particles.js.org/samples/palettes/skin-and-organic) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/earth/skinAndOrganic/images/sample.png)](https://particles.js.org/samples/palettes/skinAndOrganic) ## Colors @@ -101,7 +101,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -123,7 +123,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "skin-and-organic", + palette: "skinAndOrganic", }; await engine.load({ @@ -138,47 +138,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "skin-and-organic", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadSkinAndOrganicPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadSkinAndOrganicPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadSkinAndOrganicPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -paskinAndOrganic[Skin & Organic] -end - -e[tsParticles Engine] --> paskinAndOrganic -``` diff --git a/palettes/earth/skinAndOrganic/package.dist.json b/palettes/earth/skinAndOrganic/package.dist.json index 718ddc59117..5c270e4953e 100644 --- a/palettes/earth/skinAndOrganic/package.dist.json +++ b/palettes/earth/skinAndOrganic/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-skin-and-organic", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles skin & organic palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.skin-and-organic.min.js", - "unpkg": "tsparticles.palette.skin-and-organic.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/earth/skinAndOrganic/package.json b/palettes/earth/skinAndOrganic/package.json index 241cf5de40b..1fd2a50e5a5 100644 --- a/palettes/earth/skinAndOrganic/package.json +++ b/palettes/earth/skinAndOrganic/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-skin-and-organic", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles skin & organic palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/earth/skinAndOrganic/rollup.config.js b/palettes/earth/skinAndOrganic/rollup.config.js new file mode 100644 index 00000000000..640ea0b737b --- /dev/null +++ b/palettes/earth/skinAndOrganic/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-skinAndOrganic", + paletteName: "SkinAndOrganic Palette", + version, +}); diff --git a/palettes/earth/skinAndOrganic/src/browser.ts b/palettes/earth/skinAndOrganic/src/browser.ts new file mode 100644 index 00000000000..5b382626d51 --- /dev/null +++ b/palettes/earth/skinAndOrganic/src/browser.ts @@ -0,0 +1,10 @@ +import { loadSkinAndOrganicPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadSkinAndOrganicPalette?: typeof loadSkinAndOrganicPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadSkinAndOrganicPalette = loadSkinAndOrganicPalette; + +export * from "./index.js"; diff --git a/palettes/earth/skinAndOrganic/src/index.lazy.ts b/palettes/earth/skinAndOrganic/src/index.lazy.ts new file mode 100644 index 00000000000..d5d2746aa59 --- /dev/null +++ b/palettes/earth/skinAndOrganic/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "skin-and-organic"; + +/** + * @param engine - + */ +export async function loadSkinAndOrganicPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/earth/skinAndOrganic/src/index.ts b/palettes/earth/skinAndOrganic/src/index.ts index da8e66d2990..9fdbd8fd2e6 100644 --- a/palettes/earth/skinAndOrganic/src/index.ts +++ b/palettes/earth/skinAndOrganic/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "skin-and-organic"; @@ -6,9 +7,7 @@ const paletteName = "skin-and-organic"; * @param engine - */ export async function loadSkinAndOrganicPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/earth/skinAndOrganic/typedoc.json b/palettes/earth/skinAndOrganic/typedoc.json index b9cf1f37ea6..061dd4f403e 100644 --- a/palettes/earth/skinAndOrganic/typedoc.json +++ b/palettes/earth/skinAndOrganic/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Skin & Organic Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles SkinAndOrganic Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/earth/skinAndOrganic/webpack.config.js b/palettes/earth/skinAndOrganic/webpack.config.js deleted file mode 100644 index 3929081ea46..00000000000 --- a/palettes/earth/skinAndOrganic/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-skin-and-organic", - paletteName: "Skin & Organic Palette", - version, -}); diff --git a/palettes/fantasy/bioluminescence/CHANGELOG.md b/palettes/fantasy/bioluminescence/CHANGELOG.md index e599c76385e..63cd778d40d 100644 --- a/palettes/fantasy/bioluminescence/CHANGELOG.md +++ b/palettes/fantasy/bioluminescence/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-bioluminescence + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-bioluminescence diff --git a/palettes/fantasy/bioluminescence/README.md b/palettes/fantasy/bioluminescence/README.md index bd80fa8b437..03c46cabe02 100644 --- a/palettes/fantasy/bioluminescence/README.md +++ b/palettes/fantasy/bioluminescence/README.md @@ -2,9 +2,9 @@ # tsParticles Bioluminescence Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-bioluminescence/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-bioluminescence) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-bioluminescence.svg)](https://www.npmjs.com/package/@tsparticles/palette-bioluminescence) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-bioluminescence)](https://www.npmjs.com/package/@tsparticles/palette-bioluminescence) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-bioluminescence/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-bioluminescence) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-bioluminescence.svg)](https://www.npmjs.com/package/@tsparticles/palette-bioluminescence) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-bioluminescence) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for bioluminescence. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/bioluminescence/images/sample.png)](https://particles.js.org/samples/palettes/bioluminescence) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fantasy/bioluminescence/images/sample.png)](https://particles.js.org/samples/palettes/bioluminescence) ## Colors @@ -79,7 +79,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -116,47 +116,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "bioluminescence", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadBioluminescencePalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadBioluminescencePalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadBioluminescencePalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -pabioluminescence[Bioluminescence] -end - -e[tsParticles Engine] --> pabioluminescence -``` diff --git a/palettes/fantasy/bioluminescence/package.dist.json b/palettes/fantasy/bioluminescence/package.dist.json index e8e873a1798..0e46f95e1f4 100644 --- a/palettes/fantasy/bioluminescence/package.dist.json +++ b/palettes/fantasy/bioluminescence/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-bioluminescence", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles bioluminescence palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.bioluminescence.min.js", - "unpkg": "tsparticles.palette.bioluminescence.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/fantasy/bioluminescence/package.json b/palettes/fantasy/bioluminescence/package.json index ef08ff1fb2f..2b45f044178 100644 --- a/palettes/fantasy/bioluminescence/package.json +++ b/palettes/fantasy/bioluminescence/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-bioluminescence", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles bioluminescence palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/fantasy/bioluminescence/rollup.config.js b/palettes/fantasy/bioluminescence/rollup.config.js new file mode 100644 index 00000000000..fb519b59673 --- /dev/null +++ b/palettes/fantasy/bioluminescence/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-bioluminescence", + paletteName: "Bioluminescence Palette", + version, +}); diff --git a/palettes/fantasy/bioluminescence/src/browser.ts b/palettes/fantasy/bioluminescence/src/browser.ts new file mode 100644 index 00000000000..3921c430f76 --- /dev/null +++ b/palettes/fantasy/bioluminescence/src/browser.ts @@ -0,0 +1,10 @@ +import { loadBioluminescencePalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadBioluminescencePalette?: typeof loadBioluminescencePalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadBioluminescencePalette = loadBioluminescencePalette; + +export * from "./index.js"; diff --git a/palettes/fantasy/bioluminescence/src/index.lazy.ts b/palettes/fantasy/bioluminescence/src/index.lazy.ts new file mode 100644 index 00000000000..299b5637c4e --- /dev/null +++ b/palettes/fantasy/bioluminescence/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "bioluminescence"; + +/** + * @param engine - + */ +export async function loadBioluminescencePalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fantasy/bioluminescence/src/index.ts b/palettes/fantasy/bioluminescence/src/index.ts index 25858901d67..1ce2ce81521 100644 --- a/palettes/fantasy/bioluminescence/src/index.ts +++ b/palettes/fantasy/bioluminescence/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "bioluminescence"; @@ -6,9 +7,7 @@ const paletteName = "bioluminescence"; * @param engine - */ export async function loadBioluminescencePalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/fantasy/bioluminescence/typedoc.json b/palettes/fantasy/bioluminescence/typedoc.json index b0db1e3e782..1e6701430bd 100644 --- a/palettes/fantasy/bioluminescence/typedoc.json +++ b/palettes/fantasy/bioluminescence/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Bioluminescence Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Bioluminescence Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/fantasy/bioluminescence/webpack.config.js b/palettes/fantasy/bioluminescence/webpack.config.js deleted file mode 100644 index c53e741dc04..00000000000 --- a/palettes/fantasy/bioluminescence/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-bioluminescence", - paletteName: "Bioluminescence Palette", - version, -}); diff --git a/palettes/fantasy/bloodAndGore/CHANGELOG.md b/palettes/fantasy/bloodAndGore/CHANGELOG.md index 4c909c9e834..0d86fa32b06 100644 --- a/palettes/fantasy/bloodAndGore/CHANGELOG.md +++ b/palettes/fantasy/bloodAndGore/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-blood-and-gore + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-blood-and-gore diff --git a/palettes/fantasy/bloodAndGore/README.md b/palettes/fantasy/bloodAndGore/README.md index 99088cd6a61..b17990b9216 100644 --- a/palettes/fantasy/bloodAndGore/README.md +++ b/palettes/fantasy/bloodAndGore/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Blood & Gore Palette +# tsParticles BloodAndGore Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-blood-and-gore/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-blood-and-gore) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-blood-and-gore.svg)](https://www.npmjs.com/package/@tsparticles/palette-blood-and-gore) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-blood-and-gore)](https://www.npmjs.com/package/@tsparticles/palette-blood-and-gore) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-bloodAndGore/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-bloodAndGore) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-bloodAndGore.svg)](https://www.npmjs.com/package/@tsparticles/palette-bloodAndGore) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-bloodAndGore) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for blood & gore. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/bloodAndGore/images/sample.png)](https://particles.js.org/samples/palettes/blood-and-gore) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fantasy/bloodAndGore/images/sample.png)](https://particles.js.org/samples/palettes/bloodAndGore) ## Colors @@ -79,7 +79,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -101,7 +101,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "blood-and-gore", + palette: "bloodAndGore", }; await engine.load({ @@ -116,47 +116,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "blood-and-gore", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadBloodAndGorePalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadBloodAndGorePalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadBloodAndGorePalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -pabloodAndGore[Blood & Gore] -end - -e[tsParticles Engine] --> pabloodAndGore -``` diff --git a/palettes/fantasy/bloodAndGore/package.dist.json b/palettes/fantasy/bloodAndGore/package.dist.json index 212c6bdc997..3b1b042e79d 100644 --- a/palettes/fantasy/bloodAndGore/package.dist.json +++ b/palettes/fantasy/bloodAndGore/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-blood-and-gore", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles blood & gore palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.blood-and-gore.min.js", - "unpkg": "tsparticles.palette.blood-and-gore.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/fantasy/bloodAndGore/package.json b/palettes/fantasy/bloodAndGore/package.json index b7a08d5dabc..be64bd6d972 100644 --- a/palettes/fantasy/bloodAndGore/package.json +++ b/palettes/fantasy/bloodAndGore/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-blood-and-gore", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles blood & gore palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/fantasy/bloodAndGore/rollup.config.js b/palettes/fantasy/bloodAndGore/rollup.config.js new file mode 100644 index 00000000000..fb6ca4c4671 --- /dev/null +++ b/palettes/fantasy/bloodAndGore/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-bloodAndGore", + paletteName: "BloodAndGore Palette", + version, +}); diff --git a/palettes/fantasy/bloodAndGore/src/browser.ts b/palettes/fantasy/bloodAndGore/src/browser.ts new file mode 100644 index 00000000000..021b1115691 --- /dev/null +++ b/palettes/fantasy/bloodAndGore/src/browser.ts @@ -0,0 +1,10 @@ +import { loadBloodAndGorePalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadBloodAndGorePalette?: typeof loadBloodAndGorePalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadBloodAndGorePalette = loadBloodAndGorePalette; + +export * from "./index.js"; diff --git a/palettes/fantasy/bloodAndGore/src/index.lazy.ts b/palettes/fantasy/bloodAndGore/src/index.lazy.ts new file mode 100644 index 00000000000..4e00d2cc820 --- /dev/null +++ b/palettes/fantasy/bloodAndGore/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "blood-and-gore"; + +/** + * @param engine - + */ +export async function loadBloodAndGorePalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fantasy/bloodAndGore/src/index.ts b/palettes/fantasy/bloodAndGore/src/index.ts index bd11aebbeca..c8823e7d6d5 100644 --- a/palettes/fantasy/bloodAndGore/src/index.ts +++ b/palettes/fantasy/bloodAndGore/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "blood-and-gore"; @@ -6,9 +7,7 @@ const paletteName = "blood-and-gore"; * @param engine - */ export async function loadBloodAndGorePalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/fantasy/bloodAndGore/typedoc.json b/palettes/fantasy/bloodAndGore/typedoc.json index 81bbffc98e5..ffa4ffb199e 100644 --- a/palettes/fantasy/bloodAndGore/typedoc.json +++ b/palettes/fantasy/bloodAndGore/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Blood & Gore Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles BloodAndGore Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/fantasy/bloodAndGore/webpack.config.js b/palettes/fantasy/bloodAndGore/webpack.config.js deleted file mode 100644 index 98443127b0b..00000000000 --- a/palettes/fantasy/bloodAndGore/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-blood-and-gore", - paletteName: "Blood & Gore Palette", - version, -}); diff --git a/palettes/fantasy/fairyDust/CHANGELOG.md b/palettes/fantasy/fairyDust/CHANGELOG.md index a9253160e4c..dc0a78c1a7e 100644 --- a/palettes/fantasy/fairyDust/CHANGELOG.md +++ b/palettes/fantasy/fairyDust/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-fairy-dust + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-fairy-dust diff --git a/palettes/fantasy/fairyDust/README.md b/palettes/fantasy/fairyDust/README.md index 242916d0195..97b4ade9eca 100644 --- a/palettes/fantasy/fairyDust/README.md +++ b/palettes/fantasy/fairyDust/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Fairy Dust Palette +# tsParticles FairyDust Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-fairy-dust/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-fairy-dust) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-fairy-dust.svg)](https://www.npmjs.com/package/@tsparticles/palette-fairy-dust) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-fairy-dust)](https://www.npmjs.com/package/@tsparticles/palette-fairy-dust) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-fairyDust/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-fairyDust) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-fairyDust.svg)](https://www.npmjs.com/package/@tsparticles/palette-fairyDust) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-fairyDust) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for fairy dust. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fairyDust/images/sample.png)](https://particles.js.org/samples/palettes/fairy-dust) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fantasy/fairyDust/images/sample.png)](https://particles.js.org/samples/palettes/fairyDust) ## Colors @@ -79,7 +79,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -101,7 +101,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "fairy-dust", + palette: "fairyDust", }; await engine.load({ @@ -116,47 +116,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "fairy-dust", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadFairyDustPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadFairyDustPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadFairyDustPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -pafairyDust[Fairy Dust] -end - -e[tsParticles Engine] --> pafairyDust -``` diff --git a/palettes/fantasy/fairyDust/package.dist.json b/palettes/fantasy/fairyDust/package.dist.json index 92a79c936f4..5d7a50482cf 100644 --- a/palettes/fantasy/fairyDust/package.dist.json +++ b/palettes/fantasy/fairyDust/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-fairy-dust", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles fairy dust palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.fairy-dust.min.js", - "unpkg": "tsparticles.palette.fairy-dust.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/fantasy/fairyDust/package.json b/palettes/fantasy/fairyDust/package.json index 291a71f650d..40f3002e778 100644 --- a/palettes/fantasy/fairyDust/package.json +++ b/palettes/fantasy/fairyDust/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-fairy-dust", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles fairy dust palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/fantasy/fairyDust/rollup.config.js b/palettes/fantasy/fairyDust/rollup.config.js new file mode 100644 index 00000000000..ac5889c2ec2 --- /dev/null +++ b/palettes/fantasy/fairyDust/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-fairyDust", + paletteName: "FairyDust Palette", + version, +}); diff --git a/palettes/fantasy/fairyDust/src/browser.ts b/palettes/fantasy/fairyDust/src/browser.ts new file mode 100644 index 00000000000..a518fb6d9d4 --- /dev/null +++ b/palettes/fantasy/fairyDust/src/browser.ts @@ -0,0 +1,10 @@ +import { loadFairyDustPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadFairyDustPalette?: typeof loadFairyDustPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadFairyDustPalette = loadFairyDustPalette; + +export * from "./index.js"; diff --git a/palettes/fantasy/fairyDust/src/index.lazy.ts b/palettes/fantasy/fairyDust/src/index.lazy.ts new file mode 100644 index 00000000000..405bd5d1822 --- /dev/null +++ b/palettes/fantasy/fairyDust/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "fairy-dust"; + +/** + * @param engine - + */ +export async function loadFairyDustPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fantasy/fairyDust/src/index.ts b/palettes/fantasy/fairyDust/src/index.ts index 879d98c06c7..9b332808c62 100644 --- a/palettes/fantasy/fairyDust/src/index.ts +++ b/palettes/fantasy/fairyDust/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "fairy-dust"; @@ -6,9 +7,7 @@ const paletteName = "fairy-dust"; * @param engine - */ export async function loadFairyDustPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/fantasy/fairyDust/typedoc.json b/palettes/fantasy/fairyDust/typedoc.json index 3a6e38e7d8d..991bb589755 100644 --- a/palettes/fantasy/fairyDust/typedoc.json +++ b/palettes/fantasy/fairyDust/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Fairy Dust Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles FairyDust Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/fantasy/fairyDust/webpack.config.js b/palettes/fantasy/fairyDust/webpack.config.js deleted file mode 100644 index 7dcdaa5566e..00000000000 --- a/palettes/fantasy/fairyDust/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-fairy-dust", - paletteName: "Fairy Dust Palette", - version, -}); diff --git a/palettes/fantasy/holyLight/CHANGELOG.md b/palettes/fantasy/holyLight/CHANGELOG.md index 1a65a8a46b5..f263f077bca 100644 --- a/palettes/fantasy/holyLight/CHANGELOG.md +++ b/palettes/fantasy/holyLight/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-holy-light + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-holy-light diff --git a/palettes/fantasy/holyLight/README.md b/palettes/fantasy/holyLight/README.md index 027e31dbda7..4ab9c41a9bd 100644 --- a/palettes/fantasy/holyLight/README.md +++ b/palettes/fantasy/holyLight/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Holy Light Palette +# tsParticles HolyLight Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-holy-light/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-holy-light) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-holy-light.svg)](https://www.npmjs.com/package/@tsparticles/palette-holy-light) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-holy-light)](https://www.npmjs.com/package/@tsparticles/palette-holy-light) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-holyLight/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-holyLight) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-holyLight.svg)](https://www.npmjs.com/package/@tsparticles/palette-holyLight) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-holyLight) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for holy light. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/holyLight/images/sample.png)](https://particles.js.org/samples/palettes/holy-light) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fantasy/holyLight/images/sample.png)](https://particles.js.org/samples/palettes/holyLight) ## Colors @@ -79,7 +79,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -101,7 +101,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "holy-light", + palette: "holyLight", }; await engine.load({ @@ -116,47 +116,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "holy-light", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadHolyLightPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadHolyLightPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadHolyLightPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -paholyLight[Holy Light] -end - -e[tsParticles Engine] --> paholyLight -``` diff --git a/palettes/fantasy/holyLight/package.dist.json b/palettes/fantasy/holyLight/package.dist.json index c2a279b8aa5..f02c460c070 100644 --- a/palettes/fantasy/holyLight/package.dist.json +++ b/palettes/fantasy/holyLight/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-holy-light", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles holy light palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.holy-light.min.js", - "unpkg": "tsparticles.palette.holy-light.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/fantasy/holyLight/package.json b/palettes/fantasy/holyLight/package.json index 678118d33ed..697dde99a14 100644 --- a/palettes/fantasy/holyLight/package.json +++ b/palettes/fantasy/holyLight/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-holy-light", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles holy light palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/fantasy/holyLight/rollup.config.js b/palettes/fantasy/holyLight/rollup.config.js new file mode 100644 index 00000000000..7ce655e44e3 --- /dev/null +++ b/palettes/fantasy/holyLight/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-holyLight", + paletteName: "HolyLight Palette", + version, +}); diff --git a/palettes/fantasy/holyLight/src/browser.ts b/palettes/fantasy/holyLight/src/browser.ts new file mode 100644 index 00000000000..2483b270e9b --- /dev/null +++ b/palettes/fantasy/holyLight/src/browser.ts @@ -0,0 +1,10 @@ +import { loadHolyLightPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadHolyLightPalette?: typeof loadHolyLightPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadHolyLightPalette = loadHolyLightPalette; + +export * from "./index.js"; diff --git a/palettes/fantasy/holyLight/src/index.lazy.ts b/palettes/fantasy/holyLight/src/index.lazy.ts new file mode 100644 index 00000000000..1047f065f1d --- /dev/null +++ b/palettes/fantasy/holyLight/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "holy-light"; + +/** + * @param engine - + */ +export async function loadHolyLightPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fantasy/holyLight/src/index.ts b/palettes/fantasy/holyLight/src/index.ts index 8faa56eb07a..9242c4aca8f 100644 --- a/palettes/fantasy/holyLight/src/index.ts +++ b/palettes/fantasy/holyLight/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "holy-light"; @@ -6,9 +7,7 @@ const paletteName = "holy-light"; * @param engine - */ export async function loadHolyLightPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/fantasy/holyLight/typedoc.json b/palettes/fantasy/holyLight/typedoc.json index 5c95a480924..6a2c699752e 100644 --- a/palettes/fantasy/holyLight/typedoc.json +++ b/palettes/fantasy/holyLight/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Holy Light Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles HolyLight Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/fantasy/holyLight/webpack.config.js b/palettes/fantasy/holyLight/webpack.config.js deleted file mode 100644 index 81aaba31358..00000000000 --- a/palettes/fantasy/holyLight/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-holy-light", - paletteName: "Holy Light Palette", - version, -}); diff --git a/palettes/fantasy/iceMagic/CHANGELOG.md b/palettes/fantasy/iceMagic/CHANGELOG.md index 0199e972baa..8aad9663004 100644 --- a/palettes/fantasy/iceMagic/CHANGELOG.md +++ b/palettes/fantasy/iceMagic/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-ice-magic + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-ice-magic diff --git a/palettes/fantasy/iceMagic/README.md b/palettes/fantasy/iceMagic/README.md index 138d678715f..b3633cb3497 100644 --- a/palettes/fantasy/iceMagic/README.md +++ b/palettes/fantasy/iceMagic/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Ice Magic Palette +# tsParticles IceMagic Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-ice-magic/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-ice-magic) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-ice-magic.svg)](https://www.npmjs.com/package/@tsparticles/palette-ice-magic) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-ice-magic)](https://www.npmjs.com/package/@tsparticles/palette-ice-magic) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-iceMagic/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-iceMagic) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-iceMagic.svg)](https://www.npmjs.com/package/@tsparticles/palette-iceMagic) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-iceMagic) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for ice magic. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/iceMagic/images/sample.png)](https://particles.js.org/samples/palettes/ice-magic) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fantasy/iceMagic/images/sample.png)](https://particles.js.org/samples/palettes/iceMagic) ## Colors @@ -79,7 +79,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -101,7 +101,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "ice-magic", + palette: "iceMagic", }; await engine.load({ @@ -116,47 +116,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "ice-magic", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadIceMagicPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadIceMagicPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadIceMagicPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -paiceMagic[Ice Magic] -end - -e[tsParticles Engine] --> paiceMagic -``` diff --git a/palettes/fantasy/iceMagic/package.dist.json b/palettes/fantasy/iceMagic/package.dist.json index 01b14ed7aeb..ce6f839c061 100644 --- a/palettes/fantasy/iceMagic/package.dist.json +++ b/palettes/fantasy/iceMagic/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-ice-magic", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles ice magic palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.ice-magic.min.js", - "unpkg": "tsparticles.palette.ice-magic.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/fantasy/iceMagic/package.json b/palettes/fantasy/iceMagic/package.json index 62b0a63fea2..76ee1aee10b 100644 --- a/palettes/fantasy/iceMagic/package.json +++ b/palettes/fantasy/iceMagic/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-ice-magic", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles ice magic palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/fantasy/iceMagic/rollup.config.js b/palettes/fantasy/iceMagic/rollup.config.js new file mode 100644 index 00000000000..b8afd7b4b49 --- /dev/null +++ b/palettes/fantasy/iceMagic/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-iceMagic", + paletteName: "IceMagic Palette", + version, +}); diff --git a/palettes/fantasy/iceMagic/src/browser.ts b/palettes/fantasy/iceMagic/src/browser.ts new file mode 100644 index 00000000000..6e2e12c9532 --- /dev/null +++ b/palettes/fantasy/iceMagic/src/browser.ts @@ -0,0 +1,10 @@ +import { loadIceMagicPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadIceMagicPalette?: typeof loadIceMagicPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadIceMagicPalette = loadIceMagicPalette; + +export * from "./index.js"; diff --git a/palettes/fantasy/iceMagic/src/index.lazy.ts b/palettes/fantasy/iceMagic/src/index.lazy.ts new file mode 100644 index 00000000000..cd22efa6159 --- /dev/null +++ b/palettes/fantasy/iceMagic/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "ice-magic"; + +/** + * @param engine - + */ +export async function loadIceMagicPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fantasy/iceMagic/src/index.ts b/palettes/fantasy/iceMagic/src/index.ts index d47a554d3ca..e0e8b5b1194 100644 --- a/palettes/fantasy/iceMagic/src/index.ts +++ b/palettes/fantasy/iceMagic/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "ice-magic"; @@ -6,9 +7,7 @@ const paletteName = "ice-magic"; * @param engine - */ export async function loadIceMagicPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/fantasy/iceMagic/typedoc.json b/palettes/fantasy/iceMagic/typedoc.json index edc00e50630..c85db14379d 100644 --- a/palettes/fantasy/iceMagic/typedoc.json +++ b/palettes/fantasy/iceMagic/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Ice Magic Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles IceMagic Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/fantasy/iceMagic/webpack.config.js b/palettes/fantasy/iceMagic/webpack.config.js deleted file mode 100644 index 4a8a78ec33e..00000000000 --- a/palettes/fantasy/iceMagic/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-ice-magic", - paletteName: "Ice Magic Palette", - version, -}); diff --git a/palettes/fantasy/iceTriad/CHANGELOG.md b/palettes/fantasy/iceTriad/CHANGELOG.md index 8d2762bd57f..6aa9af52166 100644 --- a/palettes/fantasy/iceTriad/CHANGELOG.md +++ b/palettes/fantasy/iceTriad/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-ice-triad + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-ice-triad diff --git a/palettes/fantasy/iceTriad/README.md b/palettes/fantasy/iceTriad/README.md index 562cb59d5b0..43669e04110 100644 --- a/palettes/fantasy/iceTriad/README.md +++ b/palettes/fantasy/iceTriad/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Ice Triad Palette +# tsParticles IceTriad Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-ice-triad/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-ice-triad) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-ice-triad.svg)](https://www.npmjs.com/package/@tsparticles/palette-ice-triad) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-ice-triad)](https://www.npmjs.com/package/@tsparticles/palette-ice-triad) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-iceTriad/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-iceTriad) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-iceTriad.svg)](https://www.npmjs.com/package/@tsparticles/palette-iceTriad) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-iceTriad) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for ice triad. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/iceTriad/images/sample.png)](https://particles.js.org/samples/palettes/ice-triad) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fantasy/iceTriad/images/sample.png)](https://particles.js.org/samples/palettes/iceTriad) ## Colors @@ -61,7 +61,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -83,7 +83,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "ice-triad", + palette: "iceTriad", }; await engine.load({ @@ -98,47 +98,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "ice-triad", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadIceTriadPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadIceTriadPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadIceTriadPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -paiceTriad[Ice Triad] -end - -e[tsParticles Engine] --> paiceTriad -``` diff --git a/palettes/fantasy/iceTriad/package.dist.json b/palettes/fantasy/iceTriad/package.dist.json index 1a9e2f669a0..beb91a202ec 100644 --- a/palettes/fantasy/iceTriad/package.dist.json +++ b/palettes/fantasy/iceTriad/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-ice-triad", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles ice triad palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.ice-triad.min.js", - "unpkg": "tsparticles.palette.ice-triad.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/fantasy/iceTriad/package.json b/palettes/fantasy/iceTriad/package.json index 5985856c389..1dcf9ffdde1 100644 --- a/palettes/fantasy/iceTriad/package.json +++ b/palettes/fantasy/iceTriad/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-ice-triad", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles ice triad palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/fantasy/iceTriad/rollup.config.js b/palettes/fantasy/iceTriad/rollup.config.js new file mode 100644 index 00000000000..a2870024514 --- /dev/null +++ b/palettes/fantasy/iceTriad/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-iceTriad", + paletteName: "IceTriad Palette", + version, +}); diff --git a/palettes/fantasy/iceTriad/src/browser.ts b/palettes/fantasy/iceTriad/src/browser.ts new file mode 100644 index 00000000000..f19d4346e60 --- /dev/null +++ b/palettes/fantasy/iceTriad/src/browser.ts @@ -0,0 +1,10 @@ +import { loadIceTriadPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadIceTriadPalette?: typeof loadIceTriadPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadIceTriadPalette = loadIceTriadPalette; + +export * from "./index.js"; diff --git a/palettes/fantasy/iceTriad/src/index.lazy.ts b/palettes/fantasy/iceTriad/src/index.lazy.ts new file mode 100644 index 00000000000..53d43d6d1b5 --- /dev/null +++ b/palettes/fantasy/iceTriad/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "ice-triad"; + +/** + * @param engine - + */ +export async function loadIceTriadPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fantasy/iceTriad/src/index.ts b/palettes/fantasy/iceTriad/src/index.ts index 71ee61f54b1..ba9c9ee8957 100644 --- a/palettes/fantasy/iceTriad/src/index.ts +++ b/palettes/fantasy/iceTriad/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "ice-triad"; @@ -6,9 +7,7 @@ const paletteName = "ice-triad"; * @param engine - */ export async function loadIceTriadPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/fantasy/iceTriad/typedoc.json b/palettes/fantasy/iceTriad/typedoc.json index a120eef0f5a..390ff028e9d 100644 --- a/palettes/fantasy/iceTriad/typedoc.json +++ b/palettes/fantasy/iceTriad/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Ice Triad Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles IceTriad Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/fantasy/iceTriad/webpack.config.js b/palettes/fantasy/iceTriad/webpack.config.js deleted file mode 100644 index fa2cdb1a8c8..00000000000 --- a/palettes/fantasy/iceTriad/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-ice-triad", - paletteName: "Ice Triad Palette", - version, -}); diff --git a/palettes/fantasy/iris/CHANGELOG.md b/palettes/fantasy/iris/CHANGELOG.md new file mode 100644 index 00000000000..b7f98aae6cb --- /dev/null +++ b/palettes/fantasy/iris/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-iris diff --git a/palettes/fireworks/fireworksMulticolor/LICENSE b/palettes/fantasy/iris/LICENSE similarity index 100% rename from palettes/fireworks/fireworksMulticolor/LICENSE rename to palettes/fantasy/iris/LICENSE diff --git a/palettes/fantasy/iris/README.md b/palettes/fantasy/iris/README.md new file mode 100644 index 00000000000..019368de2e3 --- /dev/null +++ b/palettes/fantasy/iris/README.md @@ -0,0 +1,209 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Iris Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-iris/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-iris) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-iris.svg)](https://www.npmjs.com/package/@tsparticles/palette-iris) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-iris) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fantasy/iris/images/sample.png)](https://particles.js.org/samples/palettes/iris) + +## Colors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ #1A1000 +
+
+ #3A2200 +
+
+ #6B3D00 +
+
+ #A65A00 +
+
+ #D98A1A +
+
+ #FFC266 +
+
+ #090500 +
+
+ #0A0A0A +
+
+ #F5F7FA +
+
+ #90CAF9 +
+
+ #5C6BC0 +
+
+ #7E57C2 +
+
+ #EC407A +
+
+ #FFCA28 +
+
+ #26C6DA +
+
+ #FFA500 +
+
+ #FFEFD7 +
+
+ #000000 +
+
+ #FFFFFF +
+
+ #F5F5F5 +
+
+ #1E1E1E +
+
+ #252525 +
+
+ #E0E0E0 +
+
+ #A0A0A0 +
+
+ #404040 +
+
+ #1D3557 +
+
+ Background
+ #1A1000 +
+ Blend mode: source-over | Fill: true +
+## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadIrisPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadIrisPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "iris", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadIrisPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/fantasy/iris/eslint.config.js b/palettes/fantasy/iris/eslint.config.js new file mode 100644 index 00000000000..248b4d3dd36 --- /dev/null +++ b/palettes/fantasy/iris/eslint.config.js @@ -0,0 +1,6 @@ +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; +import { defineConfig } from "eslint/config"; + +export default defineConfig([ + tsParticlesESLintConfig, +]); diff --git a/palettes/fantasy/iris/images/sample.png b/palettes/fantasy/iris/images/sample.png new file mode 100644 index 00000000000..d8fc5f5aec5 Binary files /dev/null and b/palettes/fantasy/iris/images/sample.png differ diff --git a/palettes/fantasy/iris/package.dist.json b/palettes/fantasy/iris/package.dist.json new file mode 100644 index 00000000000..e423181ee90 --- /dev/null +++ b/palettes/fantasy/iris/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-iris", + "version": "4.0.0-beta.15", + "description": "tsParticles iris palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fantasy/iris" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/fantasy/iris/package.json b/palettes/fantasy/iris/package.json new file mode 100644 index 00000000000..782494887f8 --- /dev/null +++ b/palettes/fantasy/iris/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-iris", + "version": "4.0.0-beta.15", + "description": "tsParticles iris palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fantasy/iris" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/fantasy/iris/rollup.config.js b/palettes/fantasy/iris/rollup.config.js new file mode 100644 index 00000000000..087a9af7982 --- /dev/null +++ b/palettes/fantasy/iris/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-iris", + paletteName: "Iris Palette", + version, +}); diff --git a/palettes/fantasy/iris/src/browser.ts b/palettes/fantasy/iris/src/browser.ts new file mode 100644 index 00000000000..759fa656a75 --- /dev/null +++ b/palettes/fantasy/iris/src/browser.ts @@ -0,0 +1,10 @@ +import { loadIrisPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadIrisPalette?: typeof loadIrisPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadIrisPalette = loadIrisPalette; + +export * from "./index.js"; diff --git a/palettes/fantasy/iris/src/index.lazy.ts b/palettes/fantasy/iris/src/index.lazy.ts new file mode 100644 index 00000000000..35773b1a5f9 --- /dev/null +++ b/palettes/fantasy/iris/src/index.lazy.ts @@ -0,0 +1,15 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "iris"; + +/** + * + * @param engine + */ +export async function loadIrisPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fantasy/iris/src/index.ts b/palettes/fantasy/iris/src/index.ts new file mode 100644 index 00000000000..ec46fe4937c --- /dev/null +++ b/palettes/fantasy/iris/src/index.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "iris"; + +/** + * + * @param engine + */ +export async function loadIrisPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fantasy/iris/src/options.ts b/palettes/fantasy/iris/src/options.ts new file mode 100644 index 00000000000..177dbaa9023 --- /dev/null +++ b/palettes/fantasy/iris/src/options.ts @@ -0,0 +1,22 @@ +import { type IPalette } from "@tsparticles/engine"; + +// Iris — accurate anodized rainbow +export const options: IPalette = { + name: "Iris", + background: "#0a0a0a", + blendMode: "screen", + colors: { + fill: { + enable: true, + value: [ + "#F5F7FA", // metallic highlight + "#90CAF9", // blue + "#5C6BC0", // indigo + "#7E57C2", // violet + "#EC407A", // magenta/pink + "#FFCA28", // gold/yellow + "#26C6DA", // teal + ], + }, + }, +}; diff --git a/palettes/fireworks/fireworksCopper/tsconfig.base.json b/palettes/fantasy/iris/tsconfig.base.json similarity index 100% rename from palettes/fireworks/fireworksCopper/tsconfig.base.json rename to palettes/fantasy/iris/tsconfig.base.json diff --git a/palettes/fantasy/iris/tsconfig.browser.json b/palettes/fantasy/iris/tsconfig.browser.json new file mode 100644 index 00000000000..0bf2f9217a3 --- /dev/null +++ b/palettes/fantasy/iris/tsconfig.browser.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/browser" + } +} diff --git a/palettes/fantasy/iris/tsconfig.json b/palettes/fantasy/iris/tsconfig.json new file mode 100644 index 00000000000..630bf828704 --- /dev/null +++ b/palettes/fantasy/iris/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.json"], + "compilerOptions": { + "outDir": "./dist/cjs" + } +} diff --git a/palettes/fantasy/iris/tsconfig.module.json b/palettes/fantasy/iris/tsconfig.module.json new file mode 100644 index 00000000000..48ee30e69f5 --- /dev/null +++ b/palettes/fantasy/iris/tsconfig.module.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/esm" + } +} diff --git a/palettes/fantasy/iris/tsconfig.types.json b/palettes/fantasy/iris/tsconfig.types.json new file mode 100644 index 00000000000..4f8341e69ba --- /dev/null +++ b/palettes/fantasy/iris/tsconfig.types.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/types" + } +} diff --git a/palettes/fantasy/iris/typedoc.json b/palettes/fantasy/iris/typedoc.json new file mode 100644 index 00000000000..5446c86c9f8 --- /dev/null +++ b/palettes/fantasy/iris/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Iris Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/fantasy/jellyfishGlow/CHANGELOG.md b/palettes/fantasy/jellyfishGlow/CHANGELOG.md index 013ffd10d7e..335f0355470 100644 --- a/palettes/fantasy/jellyfishGlow/CHANGELOG.md +++ b/palettes/fantasy/jellyfishGlow/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-jellyfish-glow + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-jellyfish-glow diff --git a/palettes/fantasy/jellyfishGlow/README.md b/palettes/fantasy/jellyfishGlow/README.md index 664842846c6..4a4f9fa76c3 100644 --- a/palettes/fantasy/jellyfishGlow/README.md +++ b/palettes/fantasy/jellyfishGlow/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Jellyfish Glow Palette +# tsParticles JellyfishGlow Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-jellyfish-glow/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-jellyfish-glow) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-jellyfish-glow.svg)](https://www.npmjs.com/package/@tsparticles/palette-jellyfish-glow) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-jellyfish-glow)](https://www.npmjs.com/package/@tsparticles/palette-jellyfish-glow) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-jellyfishGlow/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-jellyfishGlow) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-jellyfishGlow.svg)](https://www.npmjs.com/package/@tsparticles/palette-jellyfishGlow) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-jellyfishGlow) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for jellyfish glow. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/jellyfishGlow/images/sample.png)](https://particles.js.org/samples/palettes/jellyfish-glow) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fantasy/jellyfishGlow/images/sample.png)](https://particles.js.org/samples/palettes/jellyfishGlow) ## Colors @@ -79,7 +79,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -101,7 +101,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "jellyfish-glow", + palette: "jellyfishGlow", }; await engine.load({ @@ -116,47 +116,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "jellyfish-glow", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadJellyfishGlowPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadJellyfishGlowPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadJellyfishGlowPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -pajellyfishGlow[Jellyfish Glow] -end - -e[tsParticles Engine] --> pajellyfishGlow -``` diff --git a/palettes/fantasy/jellyfishGlow/package.dist.json b/palettes/fantasy/jellyfishGlow/package.dist.json index e7047270d28..c71ed317224 100644 --- a/palettes/fantasy/jellyfishGlow/package.dist.json +++ b/palettes/fantasy/jellyfishGlow/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-jellyfish-glow", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles jellyfish glow palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.jellyfish-glow.min.js", - "unpkg": "tsparticles.palette.jellyfish-glow.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/fantasy/jellyfishGlow/package.json b/palettes/fantasy/jellyfishGlow/package.json index b191fb9499a..627332d6745 100644 --- a/palettes/fantasy/jellyfishGlow/package.json +++ b/palettes/fantasy/jellyfishGlow/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-jellyfish-glow", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles jellyfish glow palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/fantasy/jellyfishGlow/rollup.config.js b/palettes/fantasy/jellyfishGlow/rollup.config.js new file mode 100644 index 00000000000..32ea4b37fa2 --- /dev/null +++ b/palettes/fantasy/jellyfishGlow/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-jellyfishGlow", + paletteName: "JellyfishGlow Palette", + version, +}); diff --git a/palettes/fantasy/jellyfishGlow/src/browser.ts b/palettes/fantasy/jellyfishGlow/src/browser.ts new file mode 100644 index 00000000000..afcabc2a47e --- /dev/null +++ b/palettes/fantasy/jellyfishGlow/src/browser.ts @@ -0,0 +1,10 @@ +import { loadJellyfishGlowPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadJellyfishGlowPalette?: typeof loadJellyfishGlowPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadJellyfishGlowPalette = loadJellyfishGlowPalette; + +export * from "./index.js"; diff --git a/palettes/fantasy/jellyfishGlow/src/index.lazy.ts b/palettes/fantasy/jellyfishGlow/src/index.lazy.ts new file mode 100644 index 00000000000..3506f35627e --- /dev/null +++ b/palettes/fantasy/jellyfishGlow/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "jellyfish-glow"; + +/** + * @param engine - + */ +export async function loadJellyfishGlowPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fantasy/jellyfishGlow/src/index.ts b/palettes/fantasy/jellyfishGlow/src/index.ts index 0ec78bcea64..06bcea7448a 100644 --- a/palettes/fantasy/jellyfishGlow/src/index.ts +++ b/palettes/fantasy/jellyfishGlow/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "jellyfish-glow"; @@ -6,9 +7,7 @@ const paletteName = "jellyfish-glow"; * @param engine - */ export async function loadJellyfishGlowPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/fantasy/jellyfishGlow/typedoc.json b/palettes/fantasy/jellyfishGlow/typedoc.json index 26ca6437193..63ad6fda1d9 100644 --- a/palettes/fantasy/jellyfishGlow/typedoc.json +++ b/palettes/fantasy/jellyfishGlow/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Jellyfish Glow Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles JellyfishGlow Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/fantasy/jellyfishGlow/webpack.config.js b/palettes/fantasy/jellyfishGlow/webpack.config.js deleted file mode 100644 index f63bf1a55f3..00000000000 --- a/palettes/fantasy/jellyfishGlow/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-jellyfish-glow", - paletteName: "Jellyfish Glow Palette", - version, -}); diff --git a/palettes/fantasy/mermaid/CHANGELOG.md b/palettes/fantasy/mermaid/CHANGELOG.md new file mode 100644 index 00000000000..c9ad67fceda --- /dev/null +++ b/palettes/fantasy/mermaid/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-mermaid diff --git a/palettes/fireworks/fireworksMulticolorStroke/LICENSE b/palettes/fantasy/mermaid/LICENSE similarity index 100% rename from palettes/fireworks/fireworksMulticolorStroke/LICENSE rename to palettes/fantasy/mermaid/LICENSE diff --git a/palettes/fantasy/mermaid/README.md b/palettes/fantasy/mermaid/README.md new file mode 100644 index 00000000000..667bf4517c2 --- /dev/null +++ b/palettes/fantasy/mermaid/README.md @@ -0,0 +1,199 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Mermaid Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-mermaid/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-mermaid) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-mermaid.svg)](https://www.npmjs.com/package/@tsparticles/palette-mermaid) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-mermaid) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fantasy/mermaid/images/sample.png)](https://particles.js.org/samples/palettes/mermaid) + +## Colors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ #1A1000 +
+
+ #3A2200 +
+
+ #6B3D00 +
+
+ #A65A00 +
+
+ #D98A1A +
+
+ #FFC266 +
+
+ #090500 +
+
+ #04101A +
+
+ #B3E5FC +
+
+ #4DD0E1 +
+
+ #26A69A +
+
+ #00897B +
+
+ #006064 +
+
+ #FFA500 +
+
+ #FFEFD7 +
+
+ #000000 +
+
+ #FFFFFF +
+
+ #F5F5F5 +
+
+ #1E1E1E +
+
+ #252525 +
+
+ #E0E0E0 +
+
+ #A0A0A0 +
+
+ #404040 +
+
+ #1D3557 +
+
+ Background
+ #1A1000 +
+ Blend mode: source-over | Fill: true +
+## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadMermaidPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadMermaidPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "mermaid", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadMermaidPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/fantasy/mermaid/eslint.config.js b/palettes/fantasy/mermaid/eslint.config.js new file mode 100644 index 00000000000..248b4d3dd36 --- /dev/null +++ b/palettes/fantasy/mermaid/eslint.config.js @@ -0,0 +1,6 @@ +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; +import { defineConfig } from "eslint/config"; + +export default defineConfig([ + tsParticlesESLintConfig, +]); diff --git a/palettes/fantasy/mermaid/images/sample.png b/palettes/fantasy/mermaid/images/sample.png new file mode 100644 index 00000000000..58558f32e39 Binary files /dev/null and b/palettes/fantasy/mermaid/images/sample.png differ diff --git a/palettes/fantasy/mermaid/package.dist.json b/palettes/fantasy/mermaid/package.dist.json new file mode 100644 index 00000000000..58f1ba21f9e --- /dev/null +++ b/palettes/fantasy/mermaid/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-mermaid", + "version": "4.0.0-beta.15", + "description": "tsParticles mermaid palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fantasy/mermaid" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/fantasy/mermaid/package.json b/palettes/fantasy/mermaid/package.json new file mode 100644 index 00000000000..2702d951f0b --- /dev/null +++ b/palettes/fantasy/mermaid/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-mermaid", + "version": "4.0.0-beta.15", + "description": "tsParticles mermaid palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fantasy/mermaid" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/fantasy/mermaid/rollup.config.js b/palettes/fantasy/mermaid/rollup.config.js new file mode 100644 index 00000000000..b201967bdbd --- /dev/null +++ b/palettes/fantasy/mermaid/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-mermaid", + paletteName: "Mermaid Palette", + version, +}); diff --git a/palettes/fantasy/mermaid/src/browser.ts b/palettes/fantasy/mermaid/src/browser.ts new file mode 100644 index 00000000000..ae0bed069f3 --- /dev/null +++ b/palettes/fantasy/mermaid/src/browser.ts @@ -0,0 +1,10 @@ +import { loadMermaidPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadMermaidPalette?: typeof loadMermaidPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadMermaidPalette = loadMermaidPalette; + +export * from "./index.js"; diff --git a/palettes/fantasy/mermaid/src/index.lazy.ts b/palettes/fantasy/mermaid/src/index.lazy.ts new file mode 100644 index 00000000000..cfc2ab3dcae --- /dev/null +++ b/palettes/fantasy/mermaid/src/index.lazy.ts @@ -0,0 +1,15 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "mermaid"; + +/** + * + * @param engine + */ +export async function loadMermaidPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fantasy/mermaid/src/index.ts b/palettes/fantasy/mermaid/src/index.ts new file mode 100644 index 00000000000..43a38bfd184 --- /dev/null +++ b/palettes/fantasy/mermaid/src/index.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "mermaid"; + +/** + * + * @param engine + */ +export async function loadMermaidPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fantasy/mermaid/src/options.ts b/palettes/fantasy/mermaid/src/options.ts new file mode 100644 index 00000000000..dc03dc75088 --- /dev/null +++ b/palettes/fantasy/mermaid/src/options.ts @@ -0,0 +1,19 @@ +import { type IPalette } from "@tsparticles/engine"; + +export const options: IPalette = { + name: "Mermaid", + background: "#04101a", + blendMode: "screen", + colors: { + fill: { + enable: true, + value: [ + "#B3E5FC", // light shimmer + "#4DD0E1", + "#26A69A", + "#00897B", + "#006064", // deep sea + ], + }, + }, +}; diff --git a/palettes/fireworks/fireworksCopperStroke/tsconfig.base.json b/palettes/fantasy/mermaid/tsconfig.base.json similarity index 100% rename from palettes/fireworks/fireworksCopperStroke/tsconfig.base.json rename to palettes/fantasy/mermaid/tsconfig.base.json diff --git a/palettes/fantasy/mermaid/tsconfig.browser.json b/palettes/fantasy/mermaid/tsconfig.browser.json new file mode 100644 index 00000000000..0bf2f9217a3 --- /dev/null +++ b/palettes/fantasy/mermaid/tsconfig.browser.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/browser" + } +} diff --git a/palettes/fantasy/mermaid/tsconfig.json b/palettes/fantasy/mermaid/tsconfig.json new file mode 100644 index 00000000000..630bf828704 --- /dev/null +++ b/palettes/fantasy/mermaid/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.json"], + "compilerOptions": { + "outDir": "./dist/cjs" + } +} diff --git a/palettes/fantasy/mermaid/tsconfig.module.json b/palettes/fantasy/mermaid/tsconfig.module.json new file mode 100644 index 00000000000..48ee30e69f5 --- /dev/null +++ b/palettes/fantasy/mermaid/tsconfig.module.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/esm" + } +} diff --git a/palettes/fantasy/mermaid/tsconfig.types.json b/palettes/fantasy/mermaid/tsconfig.types.json new file mode 100644 index 00000000000..4f8341e69ba --- /dev/null +++ b/palettes/fantasy/mermaid/tsconfig.types.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/types" + } +} diff --git a/palettes/fantasy/mermaid/typedoc.json b/palettes/fantasy/mermaid/typedoc.json new file mode 100644 index 00000000000..87ded7b99c6 --- /dev/null +++ b/palettes/fantasy/mermaid/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Mermaid Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/fantasy/poisonAndVenom/CHANGELOG.md b/palettes/fantasy/poisonAndVenom/CHANGELOG.md index d23d66f52f2..ae5690baa15 100644 --- a/palettes/fantasy/poisonAndVenom/CHANGELOG.md +++ b/palettes/fantasy/poisonAndVenom/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-poison-and-venom + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-poison-and-venom diff --git a/palettes/fantasy/poisonAndVenom/README.md b/palettes/fantasy/poisonAndVenom/README.md index 453775a7922..604900e906c 100644 --- a/palettes/fantasy/poisonAndVenom/README.md +++ b/palettes/fantasy/poisonAndVenom/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Poison & Venom Palette +# tsParticles PoisonAndVenom Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-poison-and-venom/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-poison-and-venom) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-poison-and-venom.svg)](https://www.npmjs.com/package/@tsparticles/palette-poison-and-venom) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-poison-and-venom)](https://www.npmjs.com/package/@tsparticles/palette-poison-and-venom) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-poisonAndVenom/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-poisonAndVenom) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-poisonAndVenom.svg)](https://www.npmjs.com/package/@tsparticles/palette-poisonAndVenom) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-poisonAndVenom) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for poison & venom. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/poisonAndVenom/images/sample.png)](https://particles.js.org/samples/palettes/poison-and-venom) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fantasy/poisonAndVenom/images/sample.png)](https://particles.js.org/samples/palettes/poisonAndVenom) ## Colors @@ -79,7 +79,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -101,7 +101,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "poison-and-venom", + palette: "poisonAndVenom", }; await engine.load({ @@ -116,47 +116,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "poison-and-venom", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadPoisonAndVenomPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadPoisonAndVenomPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadPoisonAndVenomPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -papoisonAndVenom[Poison & Venom] -end - -e[tsParticles Engine] --> papoisonAndVenom -``` diff --git a/palettes/fantasy/poisonAndVenom/package.dist.json b/palettes/fantasy/poisonAndVenom/package.dist.json index 7334e4cdaaa..69a9c776783 100644 --- a/palettes/fantasy/poisonAndVenom/package.dist.json +++ b/palettes/fantasy/poisonAndVenom/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-poison-and-venom", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles poison & venom palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.poison-and-venom.min.js", - "unpkg": "tsparticles.palette.poison-and-venom.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/fantasy/poisonAndVenom/package.json b/palettes/fantasy/poisonAndVenom/package.json index e45696e7773..aac66ad7a4e 100644 --- a/palettes/fantasy/poisonAndVenom/package.json +++ b/palettes/fantasy/poisonAndVenom/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-poison-and-venom", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles poison & venom palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/fantasy/poisonAndVenom/rollup.config.js b/palettes/fantasy/poisonAndVenom/rollup.config.js new file mode 100644 index 00000000000..86c6b59bbc2 --- /dev/null +++ b/palettes/fantasy/poisonAndVenom/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-poisonAndVenom", + paletteName: "PoisonAndVenom Palette", + version, +}); diff --git a/palettes/fantasy/poisonAndVenom/src/browser.ts b/palettes/fantasy/poisonAndVenom/src/browser.ts new file mode 100644 index 00000000000..3e996d3553c --- /dev/null +++ b/palettes/fantasy/poisonAndVenom/src/browser.ts @@ -0,0 +1,10 @@ +import { loadPoisonAndVenomPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadPoisonAndVenomPalette?: typeof loadPoisonAndVenomPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadPoisonAndVenomPalette = loadPoisonAndVenomPalette; + +export * from "./index.js"; diff --git a/palettes/fantasy/poisonAndVenom/src/index.lazy.ts b/palettes/fantasy/poisonAndVenom/src/index.lazy.ts new file mode 100644 index 00000000000..10374337c6c --- /dev/null +++ b/palettes/fantasy/poisonAndVenom/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "poison-and-venom"; + +/** + * @param engine - + */ +export async function loadPoisonAndVenomPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fantasy/poisonAndVenom/src/index.ts b/palettes/fantasy/poisonAndVenom/src/index.ts index ad6e4a03f36..671b46ceae6 100644 --- a/palettes/fantasy/poisonAndVenom/src/index.ts +++ b/palettes/fantasy/poisonAndVenom/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "poison-and-venom"; @@ -6,9 +7,7 @@ const paletteName = "poison-and-venom"; * @param engine - */ export async function loadPoisonAndVenomPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/fantasy/poisonAndVenom/typedoc.json b/palettes/fantasy/poisonAndVenom/typedoc.json index ef949cc6da7..2870d9abe6c 100644 --- a/palettes/fantasy/poisonAndVenom/typedoc.json +++ b/palettes/fantasy/poisonAndVenom/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Poison & Venom Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles PoisonAndVenom Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/fantasy/poisonAndVenom/webpack.config.js b/palettes/fantasy/poisonAndVenom/webpack.config.js deleted file mode 100644 index d4b43ad539c..00000000000 --- a/palettes/fantasy/poisonAndVenom/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-poison-and-venom", - paletteName: "Poison & Venom Palette", - version, -}); diff --git a/palettes/fantasy/unicorn/CHANGELOG.md b/palettes/fantasy/unicorn/CHANGELOG.md new file mode 100644 index 00000000000..309e6d0d5ba --- /dev/null +++ b/palettes/fantasy/unicorn/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-unicorn diff --git a/palettes/fireworks/fireworksNeon/LICENSE b/palettes/fantasy/unicorn/LICENSE similarity index 100% rename from palettes/fireworks/fireworksNeon/LICENSE rename to palettes/fantasy/unicorn/LICENSE diff --git a/palettes/fantasy/unicorn/README.md b/palettes/fantasy/unicorn/README.md new file mode 100644 index 00000000000..4b6f1c3a3ff --- /dev/null +++ b/palettes/fantasy/unicorn/README.md @@ -0,0 +1,199 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Unicorn Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-unicorn/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-unicorn) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-unicorn.svg)](https://www.npmjs.com/package/@tsparticles/palette-unicorn) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-unicorn) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fantasy/unicorn/images/sample.png)](https://particles.js.org/samples/palettes/unicorn) + +## Colors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ #1A1000 +
+
+ #3A2200 +
+
+ #6B3D00 +
+
+ #A65A00 +
+
+ #D98A1A +
+
+ #FFC266 +
+
+ #090500 +
+
+ #F0F1FF +
+
+ #F8BBD0 +
+
+ #E1BEE7 +
+
+ #B3E5FC +
+
+ #C8E6C9 +
+
+ #FFF9C4 +
+
+ #FFFFFF +
+
+ #FFA500 +
+
+ #FFEFD7 +
+
+ #000000 +
+
+ #F5F5F5 +
+
+ #1E1E1E +
+
+ #252525 +
+
+ #E0E0E0 +
+
+ #A0A0A0 +
+
+ #404040 +
+
+ #1D3557 +
+
+ Background
+ #1A1000 +
+ Blend mode: source-over | Fill: true +
+## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadUnicornPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadUnicornPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "unicorn", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadUnicornPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/fantasy/unicorn/eslint.config.js b/palettes/fantasy/unicorn/eslint.config.js new file mode 100644 index 00000000000..248b4d3dd36 --- /dev/null +++ b/palettes/fantasy/unicorn/eslint.config.js @@ -0,0 +1,6 @@ +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; +import { defineConfig } from "eslint/config"; + +export default defineConfig([ + tsParticlesESLintConfig, +]); diff --git a/palettes/fantasy/unicorn/images/sample.png b/palettes/fantasy/unicorn/images/sample.png new file mode 100644 index 00000000000..4b179d5b412 Binary files /dev/null and b/palettes/fantasy/unicorn/images/sample.png differ diff --git a/palettes/fantasy/unicorn/package.dist.json b/palettes/fantasy/unicorn/package.dist.json new file mode 100644 index 00000000000..641b1b11f7f --- /dev/null +++ b/palettes/fantasy/unicorn/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-unicorn", + "version": "4.0.0-beta.15", + "description": "tsParticles unicorn palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fantasy/unicorn" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/fantasy/unicorn/package.json b/palettes/fantasy/unicorn/package.json new file mode 100644 index 00000000000..f911b2bdfcd --- /dev/null +++ b/palettes/fantasy/unicorn/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-unicorn", + "version": "4.0.0-beta.15", + "description": "tsParticles unicorn palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fantasy/unicorn" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/fantasy/unicorn/rollup.config.js b/palettes/fantasy/unicorn/rollup.config.js new file mode 100644 index 00000000000..b3eb928c848 --- /dev/null +++ b/palettes/fantasy/unicorn/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-unicorn", + paletteName: "Unicorn Palette", + version, +}); diff --git a/palettes/fantasy/unicorn/src/browser.ts b/palettes/fantasy/unicorn/src/browser.ts new file mode 100644 index 00000000000..3300d9fb7b1 --- /dev/null +++ b/palettes/fantasy/unicorn/src/browser.ts @@ -0,0 +1,10 @@ +import { loadUnicornPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadUnicornPalette?: typeof loadUnicornPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadUnicornPalette = loadUnicornPalette; + +export * from "./index.js"; diff --git a/palettes/fantasy/unicorn/src/index.lazy.ts b/palettes/fantasy/unicorn/src/index.lazy.ts new file mode 100644 index 00000000000..44ac1ae7039 --- /dev/null +++ b/palettes/fantasy/unicorn/src/index.lazy.ts @@ -0,0 +1,15 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "unicorn"; + +/** + * + * @param engine + */ +export async function loadUnicornPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fantasy/unicorn/src/index.ts b/palettes/fantasy/unicorn/src/index.ts new file mode 100644 index 00000000000..93d462405cc --- /dev/null +++ b/palettes/fantasy/unicorn/src/index.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "unicorn"; + +/** + * + * @param engine + */ +export async function loadUnicornPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fantasy/unicorn/src/options.ts b/palettes/fantasy/unicorn/src/options.ts new file mode 100644 index 00000000000..a52d1783d6a --- /dev/null +++ b/palettes/fantasy/unicorn/src/options.ts @@ -0,0 +1,20 @@ +import { type IPalette } from "@tsparticles/engine"; + +export const options: IPalette = { + name: "Unicorn", + background: "#F0F1FF", + blendMode: "multiply", + colors: { + fill: { + enable: true, + value: [ + "#F8BBD0", // pink + "#E1BEE7", // lavender + "#B3E5FC", // light blue + "#C8E6C9", // mint + "#FFF9C4", // soft yellow + "#FFFFFF", // highlight + ], + }, + }, +}; diff --git a/palettes/fireworks/fireworksGold/tsconfig.base.json b/palettes/fantasy/unicorn/tsconfig.base.json similarity index 100% rename from palettes/fireworks/fireworksGold/tsconfig.base.json rename to palettes/fantasy/unicorn/tsconfig.base.json diff --git a/palettes/fantasy/unicorn/tsconfig.browser.json b/palettes/fantasy/unicorn/tsconfig.browser.json new file mode 100644 index 00000000000..0bf2f9217a3 --- /dev/null +++ b/palettes/fantasy/unicorn/tsconfig.browser.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/browser" + } +} diff --git a/palettes/fantasy/unicorn/tsconfig.json b/palettes/fantasy/unicorn/tsconfig.json new file mode 100644 index 00000000000..630bf828704 --- /dev/null +++ b/palettes/fantasy/unicorn/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.json"], + "compilerOptions": { + "outDir": "./dist/cjs" + } +} diff --git a/palettes/fantasy/unicorn/tsconfig.module.json b/palettes/fantasy/unicorn/tsconfig.module.json new file mode 100644 index 00000000000..48ee30e69f5 --- /dev/null +++ b/palettes/fantasy/unicorn/tsconfig.module.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/esm" + } +} diff --git a/palettes/fantasy/unicorn/tsconfig.types.json b/palettes/fantasy/unicorn/tsconfig.types.json new file mode 100644 index 00000000000..4f8341e69ba --- /dev/null +++ b/palettes/fantasy/unicorn/tsconfig.types.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/types" + } +} diff --git a/palettes/fantasy/unicorn/typedoc.json b/palettes/fantasy/unicorn/typedoc.json new file mode 100644 index 00000000000..ecc616bcac1 --- /dev/null +++ b/palettes/fantasy/unicorn/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Unicorn Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/fire/candlelight/CHANGELOG.md b/palettes/fire/candlelight/CHANGELOG.md index bb9e03ef120..bde6a88f706 100644 --- a/palettes/fire/candlelight/CHANGELOG.md +++ b/palettes/fire/candlelight/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-candlelight + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-candlelight diff --git a/palettes/fire/candlelight/README.md b/palettes/fire/candlelight/README.md index 7bae005b593..1bca6431944 100644 --- a/palettes/fire/candlelight/README.md +++ b/palettes/fire/candlelight/README.md @@ -2,9 +2,9 @@ # tsParticles Candlelight Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-candlelight/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-candlelight) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-candlelight.svg)](https://www.npmjs.com/package/@tsparticles/palette-candlelight) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-candlelight)](https://www.npmjs.com/package/@tsparticles/palette-candlelight) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-candlelight/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-candlelight) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-candlelight.svg)](https://www.npmjs.com/package/@tsparticles/palette-candlelight) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-candlelight) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for candlelight. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/candlelight/images/sample.png)](https://particles.js.org/samples/palettes/candlelight) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fire/candlelight/images/sample.png)](https://particles.js.org/samples/palettes/candlelight) ## Colors @@ -79,7 +79,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -116,47 +116,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "candlelight", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadCandlelightPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadCandlelightPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadCandlelightPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -pacandlelight[Candlelight] -end - -e[tsParticles Engine] --> pacandlelight -``` diff --git a/palettes/fire/candlelight/package.dist.json b/palettes/fire/candlelight/package.dist.json index 88201805407..3c08c8a4147 100644 --- a/palettes/fire/candlelight/package.dist.json +++ b/palettes/fire/candlelight/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-candlelight", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles candlelight palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.candlelight.min.js", - "unpkg": "tsparticles.palette.candlelight.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/fire/candlelight/package.json b/palettes/fire/candlelight/package.json index 71c1a23a81c..dcfe9963cd2 100644 --- a/palettes/fire/candlelight/package.json +++ b/palettes/fire/candlelight/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-candlelight", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles candlelight palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/fire/candlelight/rollup.config.js b/palettes/fire/candlelight/rollup.config.js new file mode 100644 index 00000000000..dad60f298cf --- /dev/null +++ b/palettes/fire/candlelight/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-candlelight", + paletteName: "Candlelight Palette", + version, +}); diff --git a/palettes/fire/candlelight/src/browser.ts b/palettes/fire/candlelight/src/browser.ts new file mode 100644 index 00000000000..7a499e9eceb --- /dev/null +++ b/palettes/fire/candlelight/src/browser.ts @@ -0,0 +1,10 @@ +import { loadCandlelightPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadCandlelightPalette?: typeof loadCandlelightPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadCandlelightPalette = loadCandlelightPalette; + +export * from "./index.js"; diff --git a/palettes/fire/candlelight/src/index.lazy.ts b/palettes/fire/candlelight/src/index.lazy.ts new file mode 100644 index 00000000000..9964835eca3 --- /dev/null +++ b/palettes/fire/candlelight/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "candlelight"; + +/** + * @param engine - + */ +export async function loadCandlelightPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fire/candlelight/src/index.ts b/palettes/fire/candlelight/src/index.ts index b5358c82814..134318303f7 100644 --- a/palettes/fire/candlelight/src/index.ts +++ b/palettes/fire/candlelight/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "candlelight"; @@ -6,9 +7,7 @@ const paletteName = "candlelight"; * @param engine - */ export async function loadCandlelightPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/fire/candlelight/typedoc.json b/palettes/fire/candlelight/typedoc.json index baa4c4f3d89..18550f800d7 100644 --- a/palettes/fire/candlelight/typedoc.json +++ b/palettes/fire/candlelight/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Candlelight Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Candlelight Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/fire/candlelight/webpack.config.js b/palettes/fire/candlelight/webpack.config.js deleted file mode 100644 index b66124ee2c3..00000000000 --- a/palettes/fire/candlelight/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-candlelight", - paletteName: "Candlelight Palette", - version, -}); diff --git a/palettes/fireworks/fireworksCopperStroke/.browserslistrc b/palettes/fire/default/.browserslistrc similarity index 100% rename from palettes/fireworks/fireworksCopperStroke/.browserslistrc rename to palettes/fire/default/.browserslistrc diff --git a/palettes/fire/default/CHANGELOG.md b/palettes/fire/default/CHANGELOG.md new file mode 100644 index 00000000000..d554432a6cd --- /dev/null +++ b/palettes/fire/default/CHANGELOG.md @@ -0,0 +1,20 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-fire + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-fire + +# 4.0.0-beta.0 (2026-04-08) + +**Note:** Version bump only for package @tsparticles/palette-fire + +# [4.0.0-alpha.5](https://github.com/tsparticles/palettes/compare/v4.0.0-alpha.4...v4.0.0-alpha.5) (2026-03-31) + +**Note:** Version bump only for package @tsparticles/palette-fire diff --git a/palettes/fireworks/fireworksNeonStroke/LICENSE b/palettes/fire/default/LICENSE similarity index 100% rename from palettes/fireworks/fireworksNeonStroke/LICENSE rename to palettes/fire/default/LICENSE diff --git a/palettes/fire/default/README.md b/palettes/fire/default/README.md new file mode 100644 index 00000000000..5332655af9a --- /dev/null +++ b/palettes/fire/default/README.md @@ -0,0 +1,138 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Default Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-default/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-default) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-default.svg)](https://www.npmjs.com/package/@tsparticles/palette-default) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-default) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fire/default/images/sample.png)](https://particles.js.org/samples/palettes/default) + +## Colors + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ #FFFFFF +
+
+ #FFFF88 +
+
+ #FFFF00 +
+
+ #FFCC00 +
+
+ #FF8800 +
+
+ #FF4400 +
+
+ #FF0000 +
+
+ #CC0000 +
+
+ #880000 +
+
+ #440000 +
+
+ Background
+ #000000 +
+ Blend mode: screen | Fill: true +
+ +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadDefaultPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadDefaultPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "default", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadDefaultPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/fire/fire/eslint.config.js b/palettes/fire/default/eslint.config.js similarity index 100% rename from palettes/fire/fire/eslint.config.js rename to palettes/fire/default/eslint.config.js diff --git a/palettes/fire/fire/images/sample.png b/palettes/fire/default/images/sample.png similarity index 100% rename from palettes/fire/fire/images/sample.png rename to palettes/fire/default/images/sample.png diff --git a/palettes/fire/default/package.dist.json b/palettes/fire/default/package.dist.json new file mode 100644 index 00000000000..0ecb78513e4 --- /dev/null +++ b/palettes/fire/default/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-fire", + "version": "4.0.0-beta.15", + "description": "tsParticles fire - full palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fire/default" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/fire/default/package.json b/palettes/fire/default/package.json new file mode 100644 index 00000000000..10bb539a91c --- /dev/null +++ b/palettes/fire/default/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-fire", + "version": "4.0.0-beta.15", + "description": "tsParticles fire - full palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fire/default" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/fire/default/rollup.config.js b/palettes/fire/default/rollup.config.js new file mode 100644 index 00000000000..378de5b5479 --- /dev/null +++ b/palettes/fire/default/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-default", + paletteName: "Default Palette", + version, +}); diff --git a/palettes/fire/default/src/browser.ts b/palettes/fire/default/src/browser.ts new file mode 100644 index 00000000000..4c1982ea40a --- /dev/null +++ b/palettes/fire/default/src/browser.ts @@ -0,0 +1,10 @@ +import { loadFirePalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadFirePalette?: typeof loadFirePalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadFirePalette = loadFirePalette; + +export * from "./index.js"; diff --git a/palettes/fire/default/src/index.lazy.ts b/palettes/fire/default/src/index.lazy.ts new file mode 100644 index 00000000000..7086464daf8 --- /dev/null +++ b/palettes/fire/default/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "fire"; + +/** + * @param engine - + */ +export async function loadFirePalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fire/default/src/index.ts b/palettes/fire/default/src/index.ts new file mode 100644 index 00000000000..174e08ea1f4 --- /dev/null +++ b/palettes/fire/default/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "fire"; + +/** + * @param engine - + */ +export async function loadFirePalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fire/fire/src/options.ts b/palettes/fire/default/src/options.ts similarity index 100% rename from palettes/fire/fire/src/options.ts rename to palettes/fire/default/src/options.ts diff --git a/palettes/fireworks/fireworksGoldStroke/tsconfig.base.json b/palettes/fire/default/tsconfig.base.json similarity index 100% rename from palettes/fireworks/fireworksGoldStroke/tsconfig.base.json rename to palettes/fire/default/tsconfig.base.json diff --git a/palettes/fire/fireSeed/tsconfig.browser.json b/palettes/fire/default/tsconfig.browser.json similarity index 100% rename from palettes/fire/fireSeed/tsconfig.browser.json rename to palettes/fire/default/tsconfig.browser.json diff --git a/palettes/fire/fireSeed/tsconfig.json b/palettes/fire/default/tsconfig.json similarity index 100% rename from palettes/fire/fireSeed/tsconfig.json rename to palettes/fire/default/tsconfig.json diff --git a/palettes/fire/fireSeed/tsconfig.module.json b/palettes/fire/default/tsconfig.module.json similarity index 100% rename from palettes/fire/fireSeed/tsconfig.module.json rename to palettes/fire/default/tsconfig.module.json diff --git a/palettes/fire/fireSeed/tsconfig.types.json b/palettes/fire/default/tsconfig.types.json similarity index 100% rename from palettes/fire/fireSeed/tsconfig.types.json rename to palettes/fire/default/tsconfig.types.json diff --git a/palettes/fire/default/typedoc.json b/palettes/fire/default/typedoc.json new file mode 100644 index 00000000000..64d1b3874a9 --- /dev/null +++ b/palettes/fire/default/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Default Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/fire/embersAndAsh/CHANGELOG.md b/palettes/fire/embersAndAsh/CHANGELOG.md index b335abcaa45..be46fcf281b 100644 --- a/palettes/fire/embersAndAsh/CHANGELOG.md +++ b/palettes/fire/embersAndAsh/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-embers-and-ash + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-embers-and-ash diff --git a/palettes/fire/embersAndAsh/README.md b/palettes/fire/embersAndAsh/README.md index 8d51d3b6e2f..90f06a47fc3 100644 --- a/palettes/fire/embersAndAsh/README.md +++ b/palettes/fire/embersAndAsh/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Embers & Ash Palette +# tsParticles EmbersAndAsh Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-embers-and-ash/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-embers-and-ash) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-embers-and-ash.svg)](https://www.npmjs.com/package/@tsparticles/palette-embers-and-ash) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-embers-and-ash)](https://www.npmjs.com/package/@tsparticles/palette-embers-and-ash) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-embersAndAsh/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-embersAndAsh) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-embersAndAsh.svg)](https://www.npmjs.com/package/@tsparticles/palette-embersAndAsh) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-embersAndAsh) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for embers & ash. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/embersAndAsh/images/sample.png)](https://particles.js.org/samples/palettes/embers-and-ash) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fire/embersAndAsh/images/sample.png)](https://particles.js.org/samples/palettes/embersAndAsh) ## Colors @@ -83,7 +83,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -105,7 +105,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "embers-and-ash", + palette: "embersAndAsh", }; await engine.load({ @@ -120,47 +120,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "embers-and-ash", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadEmbersAndAshPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadEmbersAndAshPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadEmbersAndAshPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -paembersAndAsh[Embers & Ash] -end - -e[tsParticles Engine] --> paembersAndAsh -``` diff --git a/palettes/fire/embersAndAsh/package.dist.json b/palettes/fire/embersAndAsh/package.dist.json index 62f1c9616df..68de3170ffb 100644 --- a/palettes/fire/embersAndAsh/package.dist.json +++ b/palettes/fire/embersAndAsh/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-embers-and-ash", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles embers & ash palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.embers-and-ash.min.js", - "unpkg": "tsparticles.palette.embers-and-ash.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/fire/embersAndAsh/package.json b/palettes/fire/embersAndAsh/package.json index 968d91b085c..32226ab4cdd 100644 --- a/palettes/fire/embersAndAsh/package.json +++ b/palettes/fire/embersAndAsh/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-embers-and-ash", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles embers & ash palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/fire/embersAndAsh/rollup.config.js b/palettes/fire/embersAndAsh/rollup.config.js new file mode 100644 index 00000000000..a078594fa99 --- /dev/null +++ b/palettes/fire/embersAndAsh/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-embersAndAsh", + paletteName: "EmbersAndAsh Palette", + version, +}); diff --git a/palettes/fire/embersAndAsh/src/browser.ts b/palettes/fire/embersAndAsh/src/browser.ts new file mode 100644 index 00000000000..d8cf994e90e --- /dev/null +++ b/palettes/fire/embersAndAsh/src/browser.ts @@ -0,0 +1,10 @@ +import { loadEmbersAndAshPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadEmbersAndAshPalette?: typeof loadEmbersAndAshPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadEmbersAndAshPalette = loadEmbersAndAshPalette; + +export * from "./index.js"; diff --git a/palettes/fire/embersAndAsh/src/index.lazy.ts b/palettes/fire/embersAndAsh/src/index.lazy.ts new file mode 100644 index 00000000000..a85193fdecf --- /dev/null +++ b/palettes/fire/embersAndAsh/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "embers-and-ash"; + +/** + * @param engine - + */ +export async function loadEmbersAndAshPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fire/embersAndAsh/src/index.ts b/palettes/fire/embersAndAsh/src/index.ts index 31027100c3d..816e8e891ef 100644 --- a/palettes/fire/embersAndAsh/src/index.ts +++ b/palettes/fire/embersAndAsh/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "embers-and-ash"; @@ -6,9 +7,7 @@ const paletteName = "embers-and-ash"; * @param engine - */ export async function loadEmbersAndAshPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/fire/embersAndAsh/typedoc.json b/palettes/fire/embersAndAsh/typedoc.json index f130290da21..bf24ec5677b 100644 --- a/palettes/fire/embersAndAsh/typedoc.json +++ b/palettes/fire/embersAndAsh/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Embers & Ash Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles EmbersAndAsh Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/fire/embersAndAsh/webpack.config.js b/palettes/fire/embersAndAsh/webpack.config.js deleted file mode 100644 index 33451f75c4d..00000000000 --- a/palettes/fire/embersAndAsh/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-embers-and-ash", - paletteName: "Embers & Ash Palette", - version, -}); diff --git a/palettes/fire/fire/CHANGELOG.md b/palettes/fire/fire/CHANGELOG.md deleted file mode 100644 index 5bd181429d0..00000000000 --- a/palettes/fire/fire/CHANGELOG.md +++ /dev/null @@ -1,16 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-fire - -# 4.0.0-beta.0 (2026-04-08) - -**Note:** Version bump only for package @tsparticles/palette-fire - -# [4.0.0-alpha.5](https://github.com/tsparticles/palettes/compare/v4.0.0-alpha.4...v4.0.0-alpha.5) (2026-03-31) - -**Note:** Version bump only for package @tsparticles/palette-fire diff --git a/palettes/fire/fire/README.md b/palettes/fire/fire/README.md deleted file mode 100644 index 00ce789dfc8..00000000000 --- a/palettes/fire/fire/README.md +++ /dev/null @@ -1,174 +0,0 @@ -[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) - -# tsParticles Fire Full Palette - -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-fire/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-fire) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-fire.svg)](https://www.npmjs.com/package/@tsparticles/palette-fire) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-fire)](https://www.npmjs.com/package/@tsparticles/palette-fire) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for fire - full. - -[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) - -[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") - -## Sample - -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fire/images/sample.png)](https://particles.js.org/samples/palettes/fire) - -## Colors - - - - - - - - - - - - - - - - - - - - - - - - -
-
- #FFFFFF -
-
- #FFFF88 -
-
- #FFFF00 -
-
- #FFCC00 -
-
- #FF8800 -
-
- #FF4400 -
-
- #FF0000 -
-
- #CC0000 -
-
- #880000 -
-
- #440000 -
-
- Background
- #000000 -
- Blend mode: screen | Fill: true -
- -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadFirePalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## How to use it - -### CDN / Vanilla JS / jQuery - -```html - - -``` - -### Usage - -Once the scripts are loaded you can set up `tsParticles` like this: - -```javascript -(async engine => { - await loadBasic(engine); - await loadFirePalette(engine); - - const options = { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "fire", - }; - - await engine.load({ - id: "tsparticles", - options, - }); -})(tsParticles); -``` - -#### Customization - -**Important ⚠️** -You can override all the options defining the properties like in any standard `tsParticles` installation. - -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "fire", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - -### Frameworks with a tsParticles component library - -Checkout the documentation in the component library repository and call the `loadFirePalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadFirePalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly - -## Related docs - -- Presets and palettes catalog: -- Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -pafire[Fire Full] -end - -e[tsParticles Engine] --> pafire -``` diff --git a/palettes/fire/fire/package.dist.json b/palettes/fire/fire/package.dist.json deleted file mode 100644 index 86e1bebc075..00000000000 --- a/palettes/fire/fire/package.dist.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "name": "@tsparticles/palette-fire", - "version": "4.0.0-beta.12", - "description": "tsParticles fire - full palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fire/fire" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "jsdelivr": "tsparticles.palette.fire.min.js", - "unpkg": "tsparticles.palette.fire.min.js", - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "publishConfig": { - "access": "public" - }, - "type": "module" -} diff --git a/palettes/fire/fire/package.json b/palettes/fire/fire/package.json deleted file mode 100644 index 90cc0cfe59e..00000000000 --- a/palettes/fire/fire/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-fire", - "version": "4.0.0-beta.12", - "description": "tsParticles fire - full palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fire/fire" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/fire/fire/src/index.ts b/palettes/fire/fire/src/index.ts deleted file mode 100644 index b696ab05d71..00000000000 --- a/palettes/fire/fire/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; - -const paletteName = "fire"; - -/** - * @param engine - - */ -export async function loadFirePalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/fire/fire/typedoc.json b/palettes/fire/fire/typedoc.json deleted file mode 100644 index a531e8883a1..00000000000 --- a/palettes/fire/fire/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Fire Full Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/fire/fire/webpack.config.js b/palettes/fire/fire/webpack.config.js deleted file mode 100644 index 90dd9f5956c..00000000000 --- a/palettes/fire/fire/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-fire", - paletteName: "Fire Full Palette", - version, -}); diff --git a/palettes/fire/fireSeed/CHANGELOG.md b/palettes/fire/fireSeed/CHANGELOG.md deleted file mode 100644 index 1fb4f2bfe8e..00000000000 --- a/palettes/fire/fireSeed/CHANGELOG.md +++ /dev/null @@ -1,16 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-fire-seed - -# 4.0.0-beta.0 (2026-04-08) - -**Note:** Version bump only for package @tsparticles/palette-fire-seed - -# [4.0.0-alpha.5](https://github.com/tsparticles/palettes/compare/v4.0.0-alpha.4...v4.0.0-alpha.5) (2026-03-31) - -**Note:** Version bump only for package @tsparticles/palette-fire-seed diff --git a/palettes/fire/fireSeed/README.md b/palettes/fire/fireSeed/README.md deleted file mode 100644 index 96b71e1d4ed..00000000000 --- a/palettes/fire/fireSeed/README.md +++ /dev/null @@ -1,144 +0,0 @@ -[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) - -# tsParticles Fire Seed Palette - -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-fire-seed/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-fire-seed) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-fire-seed.svg)](https://www.npmjs.com/package/@tsparticles/palette-fire-seed) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-fire-seed)](https://www.npmjs.com/package/@tsparticles/palette-fire-seed) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for fire seed. - -[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) - -[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") - -## Sample - -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fireSeed/images/sample.png)](https://particles.js.org/samples/palettes/fire-seed) - -## Colors - - - - - - - - - - - - - - - -
-
- #ff0000 -
-
- #ff8800 -
-
- #ffff00 -
-
- Background
- #000000 -
- Blend mode: screen | Fill: true -
- -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadFireSeedPalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## How to use it - -### CDN / Vanilla JS / jQuery - -```html - - -``` - -### Usage - -Once the scripts are loaded you can set up `tsParticles` like this: - -```javascript -(async engine => { - await loadBasic(engine); - await loadFireSeedPalette(engine); - - const options = { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "fire-seed", - }; - - await engine.load({ - id: "tsparticles", - options, - }); -})(tsParticles); -``` - -#### Customization - -**Important ⚠️** -You can override all the options defining the properties like in any standard `tsParticles` installation. - -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "fire-seed", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - -### Frameworks with a tsParticles component library - -Checkout the documentation in the component library repository and call the `loadFireSeedPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadFireSeedPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly - -## Related docs - -- Presets and palettes catalog: -- Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -pafireSeed[Fire Seed] -end - -e[tsParticles Engine] --> pafireSeed -``` diff --git a/palettes/fire/fireSeed/package.dist.json b/palettes/fire/fireSeed/package.dist.json deleted file mode 100644 index ebec6f797cb..00000000000 --- a/palettes/fire/fireSeed/package.dist.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "name": "@tsparticles/palette-fire-seed", - "version": "4.0.0-beta.12", - "description": "tsParticles fire seed palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fire/fireSeed" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "jsdelivr": "tsparticles.palette.fire-seed.min.js", - "unpkg": "tsparticles.palette.fire-seed.min.js", - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "publishConfig": { - "access": "public" - }, - "type": "module" -} diff --git a/palettes/fire/fireSeed/package.json b/palettes/fire/fireSeed/package.json deleted file mode 100644 index 246aecbad95..00000000000 --- a/palettes/fire/fireSeed/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-fire-seed", - "version": "4.0.0-beta.12", - "description": "tsParticles fire seed palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fire/fireSeed" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/fire/fireSeed/src/index.ts b/palettes/fire/fireSeed/src/index.ts deleted file mode 100644 index 426d2f983e6..00000000000 --- a/palettes/fire/fireSeed/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; - -const paletteName = "fire-seed"; - -/** - * @param engine - - */ -export async function loadFireSeedPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/fire/fireSeed/typedoc.json b/palettes/fire/fireSeed/typedoc.json deleted file mode 100644 index ecd86649a0e..00000000000 --- a/palettes/fire/fireSeed/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Fire Seed Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/fire/fireSeed/webpack.config.js b/palettes/fire/fireSeed/webpack.config.js deleted file mode 100644 index 0640a8cde8f..00000000000 --- a/palettes/fire/fireSeed/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-fire-seed", - paletteName: "Fire Seed Palette", - version, -}); diff --git a/palettes/fire/fullFireGradient/CHANGELOG.md b/palettes/fire/fullFireGradient/CHANGELOG.md index fb86a5ee4eb..d5abbaf817a 100644 --- a/palettes/fire/fullFireGradient/CHANGELOG.md +++ b/palettes/fire/fullFireGradient/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-full-fire-gradient + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-full-fire-gradient diff --git a/palettes/fire/fullFireGradient/README.md b/palettes/fire/fullFireGradient/README.md index 09d1a401a2f..1deb1f57ab1 100644 --- a/palettes/fire/fullFireGradient/README.md +++ b/palettes/fire/fullFireGradient/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Full Fire Gradient Palette +# tsParticles FullFireGradient Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-full-fire-gradient/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-full-fire-gradient) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-full-fire-gradient.svg)](https://www.npmjs.com/package/@tsparticles/palette-full-fire-gradient) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-full-fire-gradient)](https://www.npmjs.com/package/@tsparticles/palette-full-fire-gradient) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-fullFireGradient/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-fullFireGradient) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-fullFireGradient.svg)](https://www.npmjs.com/package/@tsparticles/palette-fullFireGradient) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-fullFireGradient) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for full fire gradient. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fullFireGradient/images/sample.png)](https://particles.js.org/samples/palettes/full-fire-gradient) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fire/fullFireGradient/images/sample.png)](https://particles.js.org/samples/palettes/fullFireGradient) ## Colors @@ -145,7 +145,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -167,7 +167,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "full-fire-gradient", + palette: "fullFireGradient", }; await engine.load({ @@ -182,47 +182,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "full-fire-gradient", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadFullFireGradientPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadFullFireGradientPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadFullFireGradientPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -pafullFireGradient[Full Fire Gradient] -end - -e[tsParticles Engine] --> pafullFireGradient -``` diff --git a/palettes/fire/fullFireGradient/package.dist.json b/palettes/fire/fullFireGradient/package.dist.json index c43b56f193f..f91a92332a3 100644 --- a/palettes/fire/fullFireGradient/package.dist.json +++ b/palettes/fire/fullFireGradient/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-full-fire-gradient", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles full fire gradient palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.full-fire-gradient.min.js", - "unpkg": "tsparticles.palette.full-fire-gradient.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/fire/fullFireGradient/package.json b/palettes/fire/fullFireGradient/package.json index afab708ece2..366f44d43a6 100644 --- a/palettes/fire/fullFireGradient/package.json +++ b/palettes/fire/fullFireGradient/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-full-fire-gradient", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles full fire gradient palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/fire/fullFireGradient/rollup.config.js b/palettes/fire/fullFireGradient/rollup.config.js new file mode 100644 index 00000000000..cb3cfed8a86 --- /dev/null +++ b/palettes/fire/fullFireGradient/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-fullFireGradient", + paletteName: "FullFireGradient Palette", + version, +}); diff --git a/palettes/fire/fullFireGradient/src/browser.ts b/palettes/fire/fullFireGradient/src/browser.ts new file mode 100644 index 00000000000..9715514b53b --- /dev/null +++ b/palettes/fire/fullFireGradient/src/browser.ts @@ -0,0 +1,10 @@ +import { loadFullFireGradientPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadFullFireGradientPalette?: typeof loadFullFireGradientPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadFullFireGradientPalette = loadFullFireGradientPalette; + +export * from "./index.js"; diff --git a/palettes/fire/fullFireGradient/src/index.lazy.ts b/palettes/fire/fullFireGradient/src/index.lazy.ts new file mode 100644 index 00000000000..6475c2cd1a1 --- /dev/null +++ b/palettes/fire/fullFireGradient/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "full-fire-gradient"; + +/** + * @param engine - + */ +export async function loadFullFireGradientPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fire/fullFireGradient/src/index.ts b/palettes/fire/fullFireGradient/src/index.ts index 8cfc57cdd9c..450492020c4 100644 --- a/palettes/fire/fullFireGradient/src/index.ts +++ b/palettes/fire/fullFireGradient/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "full-fire-gradient"; @@ -6,9 +7,7 @@ const paletteName = "full-fire-gradient"; * @param engine - */ export async function loadFullFireGradientPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/fire/fullFireGradient/typedoc.json b/palettes/fire/fullFireGradient/typedoc.json index 62c4cd76a0a..a7f66289b49 100644 --- a/palettes/fire/fullFireGradient/typedoc.json +++ b/palettes/fire/fullFireGradient/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Full Fire Gradient Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles FullFireGradient Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/fire/fullFireGradient/webpack.config.js b/palettes/fire/fullFireGradient/webpack.config.js deleted file mode 100644 index 50ecbc5416c..00000000000 --- a/palettes/fire/fullFireGradient/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-full-fire-gradient", - paletteName: "Full Fire Gradient Palette", - version, -}); diff --git a/palettes/fire/lavaLamp/CHANGELOG.md b/palettes/fire/lavaLamp/CHANGELOG.md index 4d8cabbe599..4eeb420d521 100644 --- a/palettes/fire/lavaLamp/CHANGELOG.md +++ b/palettes/fire/lavaLamp/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-lava-lamp + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-lava-lamp diff --git a/palettes/fire/lavaLamp/README.md b/palettes/fire/lavaLamp/README.md index 33a6e0f486e..4987aca00c1 100644 --- a/palettes/fire/lavaLamp/README.md +++ b/palettes/fire/lavaLamp/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Lava Lamp Palette +# tsParticles LavaLamp Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-lava-lamp/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-lava-lamp) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-lava-lamp.svg)](https://www.npmjs.com/package/@tsparticles/palette-lava-lamp) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-lava-lamp)](https://www.npmjs.com/package/@tsparticles/palette-lava-lamp) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-lavaLamp/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-lavaLamp) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-lavaLamp.svg)](https://www.npmjs.com/package/@tsparticles/palette-lavaLamp) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-lavaLamp) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for lava lamp. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/lavaLamp/images/sample.png)](https://particles.js.org/samples/palettes/lava-lamp) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fire/lavaLamp/images/sample.png)](https://particles.js.org/samples/palettes/lavaLamp) ## Colors @@ -87,7 +87,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -109,7 +109,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "lava-lamp", + palette: "lavaLamp", }; await engine.load({ @@ -124,47 +124,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "lava-lamp", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadLavaLampPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadLavaLampPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadLavaLampPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -palavaLamp[Lava Lamp] -end - -e[tsParticles Engine] --> palavaLamp -``` diff --git a/palettes/fire/lavaLamp/package.dist.json b/palettes/fire/lavaLamp/package.dist.json index 9d952afe72e..16004a1ab48 100644 --- a/palettes/fire/lavaLamp/package.dist.json +++ b/palettes/fire/lavaLamp/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-lava-lamp", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles lava lamp palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.lava-lamp.min.js", - "unpkg": "tsparticles.palette.lava-lamp.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/fire/lavaLamp/package.json b/palettes/fire/lavaLamp/package.json index 1f0b4a72fff..06eb6da6160 100644 --- a/palettes/fire/lavaLamp/package.json +++ b/palettes/fire/lavaLamp/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-lava-lamp", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles lava lamp palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/fire/lavaLamp/rollup.config.js b/palettes/fire/lavaLamp/rollup.config.js new file mode 100644 index 00000000000..b5e3254a937 --- /dev/null +++ b/palettes/fire/lavaLamp/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-lavaLamp", + paletteName: "LavaLamp Palette", + version, +}); diff --git a/palettes/fire/lavaLamp/src/browser.ts b/palettes/fire/lavaLamp/src/browser.ts new file mode 100644 index 00000000000..bf2b50c9595 --- /dev/null +++ b/palettes/fire/lavaLamp/src/browser.ts @@ -0,0 +1,10 @@ +import { loadLavaLampPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadLavaLampPalette?: typeof loadLavaLampPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadLavaLampPalette = loadLavaLampPalette; + +export * from "./index.js"; diff --git a/palettes/fire/lavaLamp/src/index.lazy.ts b/palettes/fire/lavaLamp/src/index.lazy.ts new file mode 100644 index 00000000000..0a97c2f2806 --- /dev/null +++ b/palettes/fire/lavaLamp/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "lava-lamp"; + +/** + * @param engine - + */ +export async function loadLavaLampPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fire/lavaLamp/src/index.ts b/palettes/fire/lavaLamp/src/index.ts index 366af2ade6d..457470ffe01 100644 --- a/palettes/fire/lavaLamp/src/index.ts +++ b/palettes/fire/lavaLamp/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "lava-lamp"; @@ -6,9 +7,7 @@ const paletteName = "lava-lamp"; * @param engine - */ export async function loadLavaLampPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/fire/lavaLamp/typedoc.json b/palettes/fire/lavaLamp/typedoc.json index 896cd6c1301..2b6a788e0d5 100644 --- a/palettes/fire/lavaLamp/typedoc.json +++ b/palettes/fire/lavaLamp/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Lava Lamp Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles LavaLamp Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/fire/lavaLamp/webpack.config.js b/palettes/fire/lavaLamp/webpack.config.js deleted file mode 100644 index 3555ea418ff..00000000000 --- a/palettes/fire/lavaLamp/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-lava-lamp", - paletteName: "Lava Lamp Palette", - version, -}); diff --git a/palettes/fire/metalSparks/CHANGELOG.md b/palettes/fire/metalSparks/CHANGELOG.md index 45e92d70cb8..02b68c0f9b0 100644 --- a/palettes/fire/metalSparks/CHANGELOG.md +++ b/palettes/fire/metalSparks/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-metal-sparks + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-metal-sparks diff --git a/palettes/fire/metalSparks/README.md b/palettes/fire/metalSparks/README.md index 785665a9cad..07b58087cc9 100644 --- a/palettes/fire/metalSparks/README.md +++ b/palettes/fire/metalSparks/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Metal Sparks Palette +# tsParticles MetalSparks Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-metal-sparks/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-metal-sparks) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-metal-sparks.svg)](https://www.npmjs.com/package/@tsparticles/palette-metal-sparks) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-metal-sparks)](https://www.npmjs.com/package/@tsparticles/palette-metal-sparks) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-metalSparks/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-metalSparks) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-metalSparks.svg)](https://www.npmjs.com/package/@tsparticles/palette-metalSparks) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-metalSparks) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for metal sparks. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/metalSparks/images/sample.png)](https://particles.js.org/samples/palettes/metal-sparks) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fire/metalSparks/images/sample.png)](https://particles.js.org/samples/palettes/metalSparks) ## Colors @@ -75,7 +75,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -97,7 +97,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "metal-sparks", + palette: "metalSparks", }; await engine.load({ @@ -112,47 +112,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "metal-sparks", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadMetalSparksPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadMetalSparksPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadMetalSparksPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -pametalSparks[Metal Sparks] -end - -e[tsParticles Engine] --> pametalSparks -``` diff --git a/palettes/fire/metalSparks/package.dist.json b/palettes/fire/metalSparks/package.dist.json index 6d858e88227..6d6313ba4cf 100644 --- a/palettes/fire/metalSparks/package.dist.json +++ b/palettes/fire/metalSparks/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-metal-sparks", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles metal sparks palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.metal-sparks.min.js", - "unpkg": "tsparticles.palette.metal-sparks.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/fire/metalSparks/package.json b/palettes/fire/metalSparks/package.json index 873cb80e21f..0a5e9e403e4 100644 --- a/palettes/fire/metalSparks/package.json +++ b/palettes/fire/metalSparks/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-metal-sparks", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles metal sparks palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/fire/metalSparks/rollup.config.js b/palettes/fire/metalSparks/rollup.config.js new file mode 100644 index 00000000000..8a9ed10ea40 --- /dev/null +++ b/palettes/fire/metalSparks/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-metalSparks", + paletteName: "MetalSparks Palette", + version, +}); diff --git a/palettes/fire/metalSparks/src/browser.ts b/palettes/fire/metalSparks/src/browser.ts new file mode 100644 index 00000000000..395232f3e38 --- /dev/null +++ b/palettes/fire/metalSparks/src/browser.ts @@ -0,0 +1,10 @@ +import { loadMetalSparksPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadMetalSparksPalette?: typeof loadMetalSparksPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadMetalSparksPalette = loadMetalSparksPalette; + +export * from "./index.js"; diff --git a/palettes/fire/metalSparks/src/index.lazy.ts b/palettes/fire/metalSparks/src/index.lazy.ts new file mode 100644 index 00000000000..40eb4e7b179 --- /dev/null +++ b/palettes/fire/metalSparks/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "metal-sparks"; + +/** + * @param engine - + */ +export async function loadMetalSparksPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fire/metalSparks/src/index.ts b/palettes/fire/metalSparks/src/index.ts index 30155e799f6..aef5eb3a5fe 100644 --- a/palettes/fire/metalSparks/src/index.ts +++ b/palettes/fire/metalSparks/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "metal-sparks"; @@ -6,9 +7,7 @@ const paletteName = "metal-sparks"; * @param engine - */ export async function loadMetalSparksPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/fire/metalSparks/typedoc.json b/palettes/fire/metalSparks/typedoc.json index 97b21647d36..ddc006a5af9 100644 --- a/palettes/fire/metalSparks/typedoc.json +++ b/palettes/fire/metalSparks/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Metal Sparks Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles MetalSparks Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/fire/metalSparks/webpack.config.js b/palettes/fire/metalSparks/webpack.config.js deleted file mode 100644 index 09d1868d68b..00000000000 --- a/palettes/fire/metalSparks/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-metal-sparks", - paletteName: "Metal Sparks Palette", - version, -}); diff --git a/palettes/fire/moltenMetal/CHANGELOG.md b/palettes/fire/moltenMetal/CHANGELOG.md index 58c4060d2cf..54121d987b3 100644 --- a/palettes/fire/moltenMetal/CHANGELOG.md +++ b/palettes/fire/moltenMetal/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-molten-metal + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-molten-metal diff --git a/palettes/fire/moltenMetal/README.md b/palettes/fire/moltenMetal/README.md index 5f2373a63b6..0c7fa59e0a3 100644 --- a/palettes/fire/moltenMetal/README.md +++ b/palettes/fire/moltenMetal/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Molten Metal Palette +# tsParticles MoltenMetal Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-molten-metal/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-molten-metal) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-molten-metal.svg)](https://www.npmjs.com/package/@tsparticles/palette-molten-metal) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-molten-metal)](https://www.npmjs.com/package/@tsparticles/palette-molten-metal) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-moltenMetal/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-moltenMetal) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-moltenMetal.svg)](https://www.npmjs.com/package/@tsparticles/palette-moltenMetal) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-moltenMetal) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for molten metal. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/moltenMetal/images/sample.png)](https://particles.js.org/samples/palettes/molten-metal) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fire/moltenMetal/images/sample.png)](https://particles.js.org/samples/palettes/moltenMetal) ## Colors @@ -79,7 +79,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -101,7 +101,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "molten-metal", + palette: "moltenMetal", }; await engine.load({ @@ -116,47 +116,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "molten-metal", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadMoltenMetalPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadMoltenMetalPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadMoltenMetalPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -pamoltenMetal[Molten Metal] -end - -e[tsParticles Engine] --> pamoltenMetal -``` diff --git a/palettes/fire/moltenMetal/package.dist.json b/palettes/fire/moltenMetal/package.dist.json index 4d2e677f01e..458afa8c933 100644 --- a/palettes/fire/moltenMetal/package.dist.json +++ b/palettes/fire/moltenMetal/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-molten-metal", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles molten metal palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.molten-metal.min.js", - "unpkg": "tsparticles.palette.molten-metal.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/fire/moltenMetal/package.json b/palettes/fire/moltenMetal/package.json index 016a1cc30eb..6ce4c739861 100644 --- a/palettes/fire/moltenMetal/package.json +++ b/palettes/fire/moltenMetal/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-molten-metal", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles molten metal palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/fire/moltenMetal/rollup.config.js b/palettes/fire/moltenMetal/rollup.config.js new file mode 100644 index 00000000000..0d71634d67b --- /dev/null +++ b/palettes/fire/moltenMetal/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-moltenMetal", + paletteName: "MoltenMetal Palette", + version, +}); diff --git a/palettes/fire/moltenMetal/src/browser.ts b/palettes/fire/moltenMetal/src/browser.ts new file mode 100644 index 00000000000..2928153e412 --- /dev/null +++ b/palettes/fire/moltenMetal/src/browser.ts @@ -0,0 +1,10 @@ +import { loadMoltenMetalPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadMoltenMetalPalette?: typeof loadMoltenMetalPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadMoltenMetalPalette = loadMoltenMetalPalette; + +export * from "./index.js"; diff --git a/palettes/fire/moltenMetal/src/index.lazy.ts b/palettes/fire/moltenMetal/src/index.lazy.ts new file mode 100644 index 00000000000..daed48a56fd --- /dev/null +++ b/palettes/fire/moltenMetal/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "molten-metal"; + +/** + * @param engine - + */ +export async function loadMoltenMetalPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fire/moltenMetal/src/index.ts b/palettes/fire/moltenMetal/src/index.ts index 9f338a67c35..c6dff4b2fc0 100644 --- a/palettes/fire/moltenMetal/src/index.ts +++ b/palettes/fire/moltenMetal/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "molten-metal"; @@ -6,9 +7,7 @@ const paletteName = "molten-metal"; * @param engine - */ export async function loadMoltenMetalPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/fire/moltenMetal/typedoc.json b/palettes/fire/moltenMetal/typedoc.json index 247d0a8d317..72b4183f012 100644 --- a/palettes/fire/moltenMetal/typedoc.json +++ b/palettes/fire/moltenMetal/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Molten Metal Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles MoltenMetal Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/fire/moltenMetal/webpack.config.js b/palettes/fire/moltenMetal/webpack.config.js deleted file mode 100644 index 170bab5245d..00000000000 --- a/palettes/fire/moltenMetal/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-molten-metal", - paletteName: "Molten Metal Palette", - version, -}); diff --git a/palettes/fireworks/fireworksGold/.browserslistrc b/palettes/fire/seed/.browserslistrc similarity index 100% rename from palettes/fireworks/fireworksGold/.browserslistrc rename to palettes/fire/seed/.browserslistrc diff --git a/palettes/fire/seed/CHANGELOG.md b/palettes/fire/seed/CHANGELOG.md new file mode 100644 index 00000000000..3a435c8e41b --- /dev/null +++ b/palettes/fire/seed/CHANGELOG.md @@ -0,0 +1,20 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-fire-seed + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-fire-seed + +# 4.0.0-beta.0 (2026-04-08) + +**Note:** Version bump only for package @tsparticles/palette-fire-seed + +# [4.0.0-alpha.5](https://github.com/tsparticles/palettes/compare/v4.0.0-alpha.4...v4.0.0-alpha.5) (2026-03-31) + +**Note:** Version bump only for package @tsparticles/palette-fire-seed diff --git a/palettes/fireworks/fireworksPastel/LICENSE b/palettes/fire/seed/LICENSE similarity index 100% rename from palettes/fireworks/fireworksPastel/LICENSE rename to palettes/fire/seed/LICENSE diff --git a/palettes/fire/seed/README.md b/palettes/fire/seed/README.md new file mode 100644 index 00000000000..5731967458e --- /dev/null +++ b/palettes/fire/seed/README.md @@ -0,0 +1,108 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Seed Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-seed/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-seed) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-seed.svg)](https://www.npmjs.com/package/@tsparticles/palette-seed) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-seed) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fire/seed/images/sample.png)](https://particles.js.org/samples/palettes/seed) + +## Colors + + + + + + + + + + + + + + + +
+
+ #ff0000 +
+
+ #ff8800 +
+
+ #ffff00 +
+
+ Background
+ #000000 +
+ Blend mode: screen | Fill: true +
+ +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadSeedPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadSeedPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "seed", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadSeedPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/fire/fireSeed/eslint.config.js b/palettes/fire/seed/eslint.config.js similarity index 100% rename from palettes/fire/fireSeed/eslint.config.js rename to palettes/fire/seed/eslint.config.js diff --git a/palettes/fire/fireSeed/images/sample.png b/palettes/fire/seed/images/sample.png similarity index 100% rename from palettes/fire/fireSeed/images/sample.png rename to palettes/fire/seed/images/sample.png diff --git a/palettes/fire/seed/package.dist.json b/palettes/fire/seed/package.dist.json new file mode 100644 index 00000000000..f2055cf67cf --- /dev/null +++ b/palettes/fire/seed/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-fire-seed", + "version": "4.0.0-beta.15", + "description": "tsParticles fire seed palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fire/seed" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/fire/seed/package.json b/palettes/fire/seed/package.json new file mode 100644 index 00000000000..1f89568017a --- /dev/null +++ b/palettes/fire/seed/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-fire-seed", + "version": "4.0.0-beta.15", + "description": "tsParticles fire seed palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fire/seed" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/fire/seed/rollup.config.js b/palettes/fire/seed/rollup.config.js new file mode 100644 index 00000000000..a03e19f79e6 --- /dev/null +++ b/palettes/fire/seed/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-seed", + paletteName: "Seed Palette", + version, +}); diff --git a/palettes/fire/seed/src/browser.ts b/palettes/fire/seed/src/browser.ts new file mode 100644 index 00000000000..51f4efe4ab4 --- /dev/null +++ b/palettes/fire/seed/src/browser.ts @@ -0,0 +1,10 @@ +import { loadFireSeedPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadFireSeedPalette?: typeof loadFireSeedPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadFireSeedPalette = loadFireSeedPalette; + +export * from "./index.js"; diff --git a/palettes/fire/seed/src/index.lazy.ts b/palettes/fire/seed/src/index.lazy.ts new file mode 100644 index 00000000000..9ac70e06cdc --- /dev/null +++ b/palettes/fire/seed/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "seed"; + +/** + * @param engine - + */ +export async function loadSeedPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fire/seed/src/index.ts b/palettes/fire/seed/src/index.ts new file mode 100644 index 00000000000..a3bd9a16ff7 --- /dev/null +++ b/palettes/fire/seed/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "fire-seed"; + +/** + * @param engine - + */ +export async function loadFireSeedPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fire/fireSeed/src/options.ts b/palettes/fire/seed/src/options.ts similarity index 100% rename from palettes/fire/fireSeed/src/options.ts rename to palettes/fire/seed/src/options.ts diff --git a/palettes/fireworks/fireworksGreen/tsconfig.base.json b/palettes/fire/seed/tsconfig.base.json similarity index 100% rename from palettes/fireworks/fireworksGreen/tsconfig.base.json rename to palettes/fire/seed/tsconfig.base.json diff --git a/palettes/fireworks/fireworksBlue/tsconfig.browser.json b/palettes/fire/seed/tsconfig.browser.json similarity index 100% rename from palettes/fireworks/fireworksBlue/tsconfig.browser.json rename to palettes/fire/seed/tsconfig.browser.json diff --git a/palettes/fireworks/fireworksBlue/tsconfig.json b/palettes/fire/seed/tsconfig.json similarity index 100% rename from palettes/fireworks/fireworksBlue/tsconfig.json rename to palettes/fire/seed/tsconfig.json diff --git a/palettes/fireworks/fireworksBlue/tsconfig.module.json b/palettes/fire/seed/tsconfig.module.json similarity index 100% rename from palettes/fireworks/fireworksBlue/tsconfig.module.json rename to palettes/fire/seed/tsconfig.module.json diff --git a/palettes/fireworks/fireworksBlue/tsconfig.types.json b/palettes/fire/seed/tsconfig.types.json similarity index 100% rename from palettes/fireworks/fireworksBlue/tsconfig.types.json rename to palettes/fire/seed/tsconfig.types.json diff --git a/palettes/fire/seed/typedoc.json b/palettes/fire/seed/typedoc.json new file mode 100644 index 00000000000..6c162203dfe --- /dev/null +++ b/palettes/fire/seed/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Seed Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/fireworks/fireworksGoldStroke/.browserslistrc b/palettes/fireworks/blue/.browserslistrc similarity index 100% rename from palettes/fireworks/fireworksGoldStroke/.browserslistrc rename to palettes/fireworks/blue/.browserslistrc diff --git a/palettes/fireworks/blue/CHANGELOG.md b/palettes/fireworks/blue/CHANGELOG.md new file mode 100644 index 00000000000..0dd873aea69 --- /dev/null +++ b/palettes/fireworks/blue/CHANGELOG.md @@ -0,0 +1,22 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-fireworks-blue + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-fireworks-blue + +# 4.0.0-beta.0 (2026-04-08) + +### Features + +- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) + +# [4.0.0-alpha.5] + +**Note:** Initial version of package @tsparticles/palette-fireworks-blue diff --git a/palettes/fireworks/fireworksPastelStroke/LICENSE b/palettes/fireworks/blue/LICENSE similarity index 100% rename from palettes/fireworks/fireworksPastelStroke/LICENSE rename to palettes/fireworks/blue/LICENSE diff --git a/palettes/fireworks/blue/README.md b/palettes/fireworks/blue/README.md new file mode 100644 index 00000000000..34b139efa4e --- /dev/null +++ b/palettes/fireworks/blue/README.md @@ -0,0 +1,126 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Blue Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-blue/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-blue) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-blue.svg)](https://www.npmjs.com/package/@tsparticles/palette-blue) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-blue) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fireworks/blue/images/sample.png)](https://particles.js.org/samples/palettes/blue) + +## Colors + + + + + + + + + + + + + + + + + + + + + +
+
+ #FFFFFF +
+
+ #CCDDFF +
+
+ #88AAFF +
+
+ #4477FF +
+
+ #1144DD +
+
+ #002299 +
+
+ #001144 +
+
+ Background
+ #000011 +
+ Blend mode: screen | Fill: true +
+ +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadBluePalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadBluePalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "blue", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadBluePalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/fireworks/fireworksBlue/eslint.config.js b/palettes/fireworks/blue/eslint.config.js similarity index 100% rename from palettes/fireworks/fireworksBlue/eslint.config.js rename to palettes/fireworks/blue/eslint.config.js diff --git a/palettes/fireworks/blue/images/sample.png b/palettes/fireworks/blue/images/sample.png new file mode 100644 index 00000000000..81d06e653db Binary files /dev/null and b/palettes/fireworks/blue/images/sample.png differ diff --git a/palettes/fireworks/blue/package.dist.json b/palettes/fireworks/blue/package.dist.json new file mode 100644 index 00000000000..033c49f8322 --- /dev/null +++ b/palettes/fireworks/blue/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-fireworks-blue", + "version": "4.0.0-beta.15", + "description": "tsParticles fireworks blue palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fireworks/blue" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/fireworks/blue/package.json b/palettes/fireworks/blue/package.json new file mode 100644 index 00000000000..6ec7cc5b097 --- /dev/null +++ b/palettes/fireworks/blue/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-fireworks-blue", + "version": "4.0.0-beta.15", + "description": "tsParticles fireworks blue palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fireworks/blue" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/fireworks/blue/rollup.config.js b/palettes/fireworks/blue/rollup.config.js new file mode 100644 index 00000000000..6f7b3f3490a --- /dev/null +++ b/palettes/fireworks/blue/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-blue", + paletteName: "Blue Palette", + version, +}); diff --git a/palettes/fireworks/blue/src/browser.ts b/palettes/fireworks/blue/src/browser.ts new file mode 100644 index 00000000000..7a497bf4b6b --- /dev/null +++ b/palettes/fireworks/blue/src/browser.ts @@ -0,0 +1,10 @@ +import { loadFireworksBluePalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadFireworksBluePalette?: typeof loadFireworksBluePalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadFireworksBluePalette = loadFireworksBluePalette; + +export * from "./index.js"; diff --git a/palettes/fireworks/blue/src/index.lazy.ts b/palettes/fireworks/blue/src/index.lazy.ts new file mode 100644 index 00000000000..e6056feebd3 --- /dev/null +++ b/palettes/fireworks/blue/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "fireworks-blue"; + +/** + * @param engine - + */ +export async function loadFireworksBluePalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fireworks/blue/src/index.ts b/palettes/fireworks/blue/src/index.ts new file mode 100644 index 00000000000..d82d4a47b6c --- /dev/null +++ b/palettes/fireworks/blue/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "fireworks-blue"; + +/** + * @param engine - + */ +export async function loadFireworksBluePalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fireworks/fireworksBlue/src/options.ts b/palettes/fireworks/blue/src/options.ts similarity index 100% rename from palettes/fireworks/fireworksBlue/src/options.ts rename to palettes/fireworks/blue/src/options.ts diff --git a/palettes/fireworks/fireworksGreenStroke/tsconfig.base.json b/palettes/fireworks/blue/tsconfig.base.json similarity index 100% rename from palettes/fireworks/fireworksGreenStroke/tsconfig.base.json rename to palettes/fireworks/blue/tsconfig.base.json diff --git a/palettes/fireworks/fireworksBlueStroke/tsconfig.browser.json b/palettes/fireworks/blue/tsconfig.browser.json similarity index 100% rename from palettes/fireworks/fireworksBlueStroke/tsconfig.browser.json rename to palettes/fireworks/blue/tsconfig.browser.json diff --git a/palettes/fireworks/fireworksBlueStroke/tsconfig.json b/palettes/fireworks/blue/tsconfig.json similarity index 100% rename from palettes/fireworks/fireworksBlueStroke/tsconfig.json rename to palettes/fireworks/blue/tsconfig.json diff --git a/palettes/fireworks/fireworksBlueStroke/tsconfig.module.json b/palettes/fireworks/blue/tsconfig.module.json similarity index 100% rename from palettes/fireworks/fireworksBlueStroke/tsconfig.module.json rename to palettes/fireworks/blue/tsconfig.module.json diff --git a/palettes/fireworks/fireworksBlueStroke/tsconfig.types.json b/palettes/fireworks/blue/tsconfig.types.json similarity index 100% rename from palettes/fireworks/fireworksBlueStroke/tsconfig.types.json rename to palettes/fireworks/blue/tsconfig.types.json diff --git a/palettes/fireworks/blue/typedoc.json b/palettes/fireworks/blue/typedoc.json new file mode 100644 index 00000000000..2875b0c14cc --- /dev/null +++ b/palettes/fireworks/blue/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Blue Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/fireworks/fireworksGreen/.browserslistrc b/palettes/fireworks/blueStroke/.browserslistrc similarity index 100% rename from palettes/fireworks/fireworksGreen/.browserslistrc rename to palettes/fireworks/blueStroke/.browserslistrc diff --git a/palettes/fireworks/blueStroke/CHANGELOG.md b/palettes/fireworks/blueStroke/CHANGELOG.md new file mode 100644 index 00000000000..15bce960c9c --- /dev/null +++ b/palettes/fireworks/blueStroke/CHANGELOG.md @@ -0,0 +1,22 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-fireworks-blue-stroke + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-fireworks-blue-stroke + +# 4.0.0-beta.0 (2026-04-08) + +### Features + +- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) + +# [4.0.0-alpha.5] + +**Note:** Initial version of package @tsparticles/palette-fireworks-blue-stroke diff --git a/palettes/fireworks/fireworksPurple/LICENSE b/palettes/fireworks/blueStroke/LICENSE similarity index 100% rename from palettes/fireworks/fireworksPurple/LICENSE rename to palettes/fireworks/blueStroke/LICENSE diff --git a/palettes/fireworks/blueStroke/README.md b/palettes/fireworks/blueStroke/README.md new file mode 100644 index 00000000000..931be6e75bf --- /dev/null +++ b/palettes/fireworks/blueStroke/README.md @@ -0,0 +1,79 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles BlueStroke Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-blueStroke/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-blueStroke) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-blueStroke.svg)](https://www.npmjs.com/package/@tsparticles/palette-blueStroke) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-blueStroke) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fireworks/blueStroke/images/sample.png)](https://particles.js.org/samples/palettes/blueStroke) + +## Colors + +See the palette source for stroke layer details. + +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadBlueStrokePalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadBlueStrokePalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "blueStroke", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadBlueStrokePalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/fireworks/fireworksBlueStroke/eslint.config.js b/palettes/fireworks/blueStroke/eslint.config.js similarity index 100% rename from palettes/fireworks/fireworksBlueStroke/eslint.config.js rename to palettes/fireworks/blueStroke/eslint.config.js diff --git a/palettes/fireworks/blueStroke/images/sample.png b/palettes/fireworks/blueStroke/images/sample.png new file mode 100644 index 00000000000..140e09cfcf0 Binary files /dev/null and b/palettes/fireworks/blueStroke/images/sample.png differ diff --git a/palettes/fireworks/blueStroke/package.dist.json b/palettes/fireworks/blueStroke/package.dist.json new file mode 100644 index 00000000000..26c3fa0fde1 --- /dev/null +++ b/palettes/fireworks/blueStroke/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-fireworks-blue-stroke", + "version": "4.0.0-beta.15", + "description": "tsParticles fireworks blue stroke palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fireworks/blueStroke" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/fireworks/blueStroke/package.json b/palettes/fireworks/blueStroke/package.json new file mode 100644 index 00000000000..a1ac6dcd9f6 --- /dev/null +++ b/palettes/fireworks/blueStroke/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-fireworks-blue-stroke", + "version": "4.0.0-beta.15", + "description": "tsParticles fireworks blue stroke palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fireworks/blueStroke" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/fireworks/blueStroke/rollup.config.js b/palettes/fireworks/blueStroke/rollup.config.js new file mode 100644 index 00000000000..810c13e2a54 --- /dev/null +++ b/palettes/fireworks/blueStroke/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-blueStroke", + paletteName: "BlueStroke Palette", + version, +}); diff --git a/palettes/fireworks/blueStroke/src/browser.ts b/palettes/fireworks/blueStroke/src/browser.ts new file mode 100644 index 00000000000..d3b8801f583 --- /dev/null +++ b/palettes/fireworks/blueStroke/src/browser.ts @@ -0,0 +1,10 @@ +import { loadFireworksBlueStrokePalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadFireworksBlueStrokePalette?: typeof loadFireworksBlueStrokePalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadFireworksBlueStrokePalette = loadFireworksBlueStrokePalette; + +export * from "./index.js"; diff --git a/palettes/fireworks/blueStroke/src/index.lazy.ts b/palettes/fireworks/blueStroke/src/index.lazy.ts new file mode 100644 index 00000000000..2321c571c20 --- /dev/null +++ b/palettes/fireworks/blueStroke/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "fireworks-blue-stroke"; + +/** + * @param engine - + */ +export async function loadFireworksBlueStrokePalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fireworks/blueStroke/src/index.ts b/palettes/fireworks/blueStroke/src/index.ts new file mode 100644 index 00000000000..a8569087122 --- /dev/null +++ b/palettes/fireworks/blueStroke/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "fireworks-blue-stroke"; + +/** + * @param engine - + */ +export async function loadFireworksBlueStrokePalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fireworks/fireworksBlueStroke/src/options.ts b/palettes/fireworks/blueStroke/src/options.ts similarity index 100% rename from palettes/fireworks/fireworksBlueStroke/src/options.ts rename to palettes/fireworks/blueStroke/src/options.ts diff --git a/palettes/fireworks/fireworksIce/tsconfig.base.json b/palettes/fireworks/blueStroke/tsconfig.base.json similarity index 100% rename from palettes/fireworks/fireworksIce/tsconfig.base.json rename to palettes/fireworks/blueStroke/tsconfig.base.json diff --git a/palettes/fireworks/fireworksCopper/tsconfig.browser.json b/palettes/fireworks/blueStroke/tsconfig.browser.json similarity index 100% rename from palettes/fireworks/fireworksCopper/tsconfig.browser.json rename to palettes/fireworks/blueStroke/tsconfig.browser.json diff --git a/palettes/fireworks/fireworksCopper/tsconfig.json b/palettes/fireworks/blueStroke/tsconfig.json similarity index 100% rename from palettes/fireworks/fireworksCopper/tsconfig.json rename to palettes/fireworks/blueStroke/tsconfig.json diff --git a/palettes/fireworks/fireworksCopper/tsconfig.module.json b/palettes/fireworks/blueStroke/tsconfig.module.json similarity index 100% rename from palettes/fireworks/fireworksCopper/tsconfig.module.json rename to palettes/fireworks/blueStroke/tsconfig.module.json diff --git a/palettes/fireworks/fireworksCopper/tsconfig.types.json b/palettes/fireworks/blueStroke/tsconfig.types.json similarity index 100% rename from palettes/fireworks/fireworksCopper/tsconfig.types.json rename to palettes/fireworks/blueStroke/tsconfig.types.json diff --git a/palettes/fireworks/blueStroke/typedoc.json b/palettes/fireworks/blueStroke/typedoc.json new file mode 100644 index 00000000000..825f90a5fca --- /dev/null +++ b/palettes/fireworks/blueStroke/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles BlueStroke Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/fireworks/fireworksGreenStroke/.browserslistrc b/palettes/fireworks/copper/.browserslistrc similarity index 100% rename from palettes/fireworks/fireworksGreenStroke/.browserslistrc rename to palettes/fireworks/copper/.browserslistrc diff --git a/palettes/fireworks/copper/CHANGELOG.md b/palettes/fireworks/copper/CHANGELOG.md new file mode 100644 index 00000000000..6d16f54ec74 --- /dev/null +++ b/palettes/fireworks/copper/CHANGELOG.md @@ -0,0 +1,22 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-fireworks-copper + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-fireworks-copper + +# 4.0.0-beta.0 (2026-04-08) + +### Features + +- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) + +# [4.0.0-alpha.5] + +**Note:** Initial version of package @tsparticles/palette-fireworks-copper diff --git a/palettes/fireworks/fireworksPurpleStroke/LICENSE b/palettes/fireworks/copper/LICENSE similarity index 100% rename from palettes/fireworks/fireworksPurpleStroke/LICENSE rename to palettes/fireworks/copper/LICENSE diff --git a/palettes/fireworks/copper/README.md b/palettes/fireworks/copper/README.md new file mode 100644 index 00000000000..b124a83b85b --- /dev/null +++ b/palettes/fireworks/copper/README.md @@ -0,0 +1,126 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Copper Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-copper/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-copper) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-copper.svg)](https://www.npmjs.com/package/@tsparticles/palette-copper) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-copper) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fireworks/copper/images/sample.png)](https://particles.js.org/samples/palettes/copper) + +## Colors + + + + + + + + + + + + + + + + + + + + + +
+
+ #FFFFFF +
+
+ #FFEECC +
+
+ #DDAA55 +
+
+ #BB7722 +
+
+ #883300 +
+
+ #551100 +
+
+ #220800 +
+
+ Background
+ #040100 +
+ Blend mode: screen | Fill: true +
+ +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadCopperPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadCopperPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "copper", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadCopperPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/fireworks/fireworksCopper/eslint.config.js b/palettes/fireworks/copper/eslint.config.js similarity index 100% rename from palettes/fireworks/fireworksCopper/eslint.config.js rename to palettes/fireworks/copper/eslint.config.js diff --git a/palettes/fireworks/copper/images/sample.png b/palettes/fireworks/copper/images/sample.png new file mode 100644 index 00000000000..b78cfb7b960 Binary files /dev/null and b/palettes/fireworks/copper/images/sample.png differ diff --git a/palettes/fireworks/copper/package.dist.json b/palettes/fireworks/copper/package.dist.json new file mode 100644 index 00000000000..0e530a84c8c --- /dev/null +++ b/palettes/fireworks/copper/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-fireworks-copper", + "version": "4.0.0-beta.15", + "description": "tsParticles fireworks copper palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fireworks/copper" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/fireworks/copper/package.json b/palettes/fireworks/copper/package.json new file mode 100644 index 00000000000..b8fb0a86bd2 --- /dev/null +++ b/palettes/fireworks/copper/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-fireworks-copper", + "version": "4.0.0-beta.15", + "description": "tsParticles fireworks copper palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fireworks/copper" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/fireworks/copper/rollup.config.js b/palettes/fireworks/copper/rollup.config.js new file mode 100644 index 00000000000..c83c3e12990 --- /dev/null +++ b/palettes/fireworks/copper/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-copper", + paletteName: "Copper Palette", + version, +}); diff --git a/palettes/fireworks/copper/src/browser.ts b/palettes/fireworks/copper/src/browser.ts new file mode 100644 index 00000000000..651bec1c7ac --- /dev/null +++ b/palettes/fireworks/copper/src/browser.ts @@ -0,0 +1,10 @@ +import { loadFireworksCopperPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadFireworksCopperPalette?: typeof loadFireworksCopperPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadFireworksCopperPalette = loadFireworksCopperPalette; + +export * from "./index.js"; diff --git a/palettes/fireworks/copper/src/index.lazy.ts b/palettes/fireworks/copper/src/index.lazy.ts new file mode 100644 index 00000000000..9bd992f5898 --- /dev/null +++ b/palettes/fireworks/copper/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "fireworks-copper"; + +/** + * @param engine - + */ +export async function loadFireworksCopperPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fireworks/copper/src/index.ts b/palettes/fireworks/copper/src/index.ts new file mode 100644 index 00000000000..188ad56ffb9 --- /dev/null +++ b/palettes/fireworks/copper/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "fireworks-copper"; + +/** + * @param engine - + */ +export async function loadFireworksCopperPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fireworks/fireworksCopper/src/options.ts b/palettes/fireworks/copper/src/options.ts similarity index 100% rename from palettes/fireworks/fireworksCopper/src/options.ts rename to palettes/fireworks/copper/src/options.ts diff --git a/palettes/fireworks/fireworksIceStroke/tsconfig.base.json b/palettes/fireworks/copper/tsconfig.base.json similarity index 100% rename from palettes/fireworks/fireworksIceStroke/tsconfig.base.json rename to palettes/fireworks/copper/tsconfig.base.json diff --git a/palettes/fireworks/fireworksCopperStroke/tsconfig.browser.json b/palettes/fireworks/copper/tsconfig.browser.json similarity index 100% rename from palettes/fireworks/fireworksCopperStroke/tsconfig.browser.json rename to palettes/fireworks/copper/tsconfig.browser.json diff --git a/palettes/fireworks/fireworksCopperStroke/tsconfig.json b/palettes/fireworks/copper/tsconfig.json similarity index 100% rename from palettes/fireworks/fireworksCopperStroke/tsconfig.json rename to palettes/fireworks/copper/tsconfig.json diff --git a/palettes/fireworks/fireworksCopperStroke/tsconfig.module.json b/palettes/fireworks/copper/tsconfig.module.json similarity index 100% rename from palettes/fireworks/fireworksCopperStroke/tsconfig.module.json rename to palettes/fireworks/copper/tsconfig.module.json diff --git a/palettes/fireworks/fireworksCopperStroke/tsconfig.types.json b/palettes/fireworks/copper/tsconfig.types.json similarity index 100% rename from palettes/fireworks/fireworksCopperStroke/tsconfig.types.json rename to palettes/fireworks/copper/tsconfig.types.json diff --git a/palettes/fireworks/copper/typedoc.json b/palettes/fireworks/copper/typedoc.json new file mode 100644 index 00000000000..ed5480b9647 --- /dev/null +++ b/palettes/fireworks/copper/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Copper Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/fireworks/fireworksIce/.browserslistrc b/palettes/fireworks/copperStroke/.browserslistrc similarity index 100% rename from palettes/fireworks/fireworksIce/.browserslistrc rename to palettes/fireworks/copperStroke/.browserslistrc diff --git a/palettes/fireworks/copperStroke/CHANGELOG.md b/palettes/fireworks/copperStroke/CHANGELOG.md new file mode 100644 index 00000000000..7431eb1cf63 --- /dev/null +++ b/palettes/fireworks/copperStroke/CHANGELOG.md @@ -0,0 +1,22 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-fireworks-copper-stroke + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-fireworks-copper-stroke + +# 4.0.0-beta.0 (2026-04-08) + +### Features + +- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) + +# [4.0.0-alpha.5] + +**Note:** Initial version of package @tsparticles/palette-fireworks-copper-stroke diff --git a/palettes/fireworks/fireworksRainbowStroke/LICENSE b/palettes/fireworks/copperStroke/LICENSE similarity index 100% rename from palettes/fireworks/fireworksRainbowStroke/LICENSE rename to palettes/fireworks/copperStroke/LICENSE diff --git a/palettes/fireworks/copperStroke/README.md b/palettes/fireworks/copperStroke/README.md new file mode 100644 index 00000000000..619e1be16f3 --- /dev/null +++ b/palettes/fireworks/copperStroke/README.md @@ -0,0 +1,79 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles CopperStroke Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-copperStroke/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-copperStroke) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-copperStroke.svg)](https://www.npmjs.com/package/@tsparticles/palette-copperStroke) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-copperStroke) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fireworks/copperStroke/images/sample.png)](https://particles.js.org/samples/palettes/copperStroke) + +## Colors + +See the palette source for stroke layer details. + +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadCopperStrokePalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadCopperStrokePalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "copperStroke", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadCopperStrokePalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/fireworks/fireworksCopperStroke/eslint.config.js b/palettes/fireworks/copperStroke/eslint.config.js similarity index 100% rename from palettes/fireworks/fireworksCopperStroke/eslint.config.js rename to palettes/fireworks/copperStroke/eslint.config.js diff --git a/palettes/fireworks/copperStroke/images/sample.png b/palettes/fireworks/copperStroke/images/sample.png new file mode 100644 index 00000000000..8ff9b4b59a8 Binary files /dev/null and b/palettes/fireworks/copperStroke/images/sample.png differ diff --git a/palettes/fireworks/copperStroke/package.dist.json b/palettes/fireworks/copperStroke/package.dist.json new file mode 100644 index 00000000000..f34693c9996 --- /dev/null +++ b/palettes/fireworks/copperStroke/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-fireworks-copper-stroke", + "version": "4.0.0-beta.15", + "description": "tsParticles fireworks copper stroke palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fireworks/copperStroke" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/fireworks/copperStroke/package.json b/palettes/fireworks/copperStroke/package.json new file mode 100644 index 00000000000..11a30504419 --- /dev/null +++ b/palettes/fireworks/copperStroke/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-fireworks-copper-stroke", + "version": "4.0.0-beta.15", + "description": "tsParticles fireworks copper stroke palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fireworks/copperStroke" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/fireworks/copperStroke/rollup.config.js b/palettes/fireworks/copperStroke/rollup.config.js new file mode 100644 index 00000000000..c9f45abb2e9 --- /dev/null +++ b/palettes/fireworks/copperStroke/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-copperStroke", + paletteName: "CopperStroke Palette", + version, +}); diff --git a/palettes/fireworks/copperStroke/src/browser.ts b/palettes/fireworks/copperStroke/src/browser.ts new file mode 100644 index 00000000000..deff560b581 --- /dev/null +++ b/palettes/fireworks/copperStroke/src/browser.ts @@ -0,0 +1,10 @@ +import { loadFireworksCopperStrokePalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadFireworksCopperStrokePalette?: typeof loadFireworksCopperStrokePalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadFireworksCopperStrokePalette = loadFireworksCopperStrokePalette; + +export * from "./index.js"; diff --git a/palettes/fireworks/copperStroke/src/index.lazy.ts b/palettes/fireworks/copperStroke/src/index.lazy.ts new file mode 100644 index 00000000000..585ddd42cef --- /dev/null +++ b/palettes/fireworks/copperStroke/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "fireworks-copper-stroke"; + +/** + * @param engine - + */ +export async function loadFireworksCopperStrokePalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fireworks/copperStroke/src/index.ts b/palettes/fireworks/copperStroke/src/index.ts new file mode 100644 index 00000000000..99eea68b232 --- /dev/null +++ b/palettes/fireworks/copperStroke/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "fireworks-copper-stroke"; + +/** + * @param engine - + */ +export async function loadFireworksCopperStrokePalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fireworks/fireworksCopperStroke/src/options.ts b/palettes/fireworks/copperStroke/src/options.ts similarity index 100% rename from palettes/fireworks/fireworksCopperStroke/src/options.ts rename to palettes/fireworks/copperStroke/src/options.ts diff --git a/palettes/fireworks/fireworksMulticolor/tsconfig.base.json b/palettes/fireworks/copperStroke/tsconfig.base.json similarity index 100% rename from palettes/fireworks/fireworksMulticolor/tsconfig.base.json rename to palettes/fireworks/copperStroke/tsconfig.base.json diff --git a/palettes/fireworks/fireworksGold/tsconfig.browser.json b/palettes/fireworks/copperStroke/tsconfig.browser.json similarity index 100% rename from palettes/fireworks/fireworksGold/tsconfig.browser.json rename to palettes/fireworks/copperStroke/tsconfig.browser.json diff --git a/palettes/fireworks/fireworksGold/tsconfig.json b/palettes/fireworks/copperStroke/tsconfig.json similarity index 100% rename from palettes/fireworks/fireworksGold/tsconfig.json rename to palettes/fireworks/copperStroke/tsconfig.json diff --git a/palettes/fireworks/fireworksGold/tsconfig.module.json b/palettes/fireworks/copperStroke/tsconfig.module.json similarity index 100% rename from palettes/fireworks/fireworksGold/tsconfig.module.json rename to palettes/fireworks/copperStroke/tsconfig.module.json diff --git a/palettes/fireworks/fireworksGold/tsconfig.types.json b/palettes/fireworks/copperStroke/tsconfig.types.json similarity index 100% rename from palettes/fireworks/fireworksGold/tsconfig.types.json rename to palettes/fireworks/copperStroke/tsconfig.types.json diff --git a/palettes/fireworks/copperStroke/typedoc.json b/palettes/fireworks/copperStroke/typedoc.json new file mode 100644 index 00000000000..3be65a03bed --- /dev/null +++ b/palettes/fireworks/copperStroke/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles CopperStroke Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/fireworks/fireworksBlue/CHANGELOG.md b/palettes/fireworks/fireworksBlue/CHANGELOG.md deleted file mode 100644 index 962d7db7a0e..00000000000 --- a/palettes/fireworks/fireworksBlue/CHANGELOG.md +++ /dev/null @@ -1,18 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-fireworks-blue - -# 4.0.0-beta.0 (2026-04-08) - -### Features - -- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) - -# [4.0.0-alpha.5] - -**Note:** Initial version of package @tsparticles/palette-fireworks-blue diff --git a/palettes/fireworks/fireworksBlue/README.md b/palettes/fireworks/fireworksBlue/README.md deleted file mode 100644 index 1a3d3fb585a..00000000000 --- a/palettes/fireworks/fireworksBlue/README.md +++ /dev/null @@ -1,126 +0,0 @@ -[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) - -# tsParticles Fireworks Blue Palette - -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-fireworks-blue/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-fireworks-blue) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-fireworks-blue.svg)](https://www.npmjs.com/package/@tsparticles/palette-fireworks-blue) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-fireworks-blue)](https://www.npmjs.com/package/@tsparticles/palette-fireworks-blue) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for fireworks blue. - -[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) - -[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") - -## Sample - -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/fireworks/fireworksBlue/images/sample.png)](https://particles.js.org/samples/palettes/fireworks-blue) - -## Colors - - - - - - - - - - - - - - - - - - - - - -
-
- #FFFFFF -
-
- #CCDDFF -
-
- #88AAFF -
-
- #4477FF -
-
- #1144DD -
-
- #002299 -
-
- #001144 -
-
- Background
- #000011 -
- Blend mode: screen | Fill: true -
- -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadFireworksBluePalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## How to use it - -### CDN / Vanilla JS / jQuery - -```html - - -``` - -### Usage - -Once the scripts are loaded you can set up `tsParticles` like this: - -```javascript -(async engine => { - await loadBasic(engine); - await loadFireworksBluePalette(engine); - - const options = { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "fireworks-blue", - }; - - await engine.load({ - id: "tsparticles", - options, - }); -})(tsParticles); -``` - -#### Customization - -**Important ⚠️** -You can override all the options defining the properties like in any standard `tsParticles` installation. - -### Frameworks with a tsParticles component library - -Checkout the documentation in the component library repository and call the `loadFireworksBluePalette` function. - -## Related docs - -- Presets and palettes catalog: -- Main docs: diff --git a/palettes/fireworks/fireworksBlue/images/sample.png b/palettes/fireworks/fireworksBlue/images/sample.png deleted file mode 100644 index 5b9030f5e8f..00000000000 Binary files a/palettes/fireworks/fireworksBlue/images/sample.png and /dev/null differ diff --git a/palettes/fireworks/fireworksBlue/package.dist.json b/palettes/fireworks/fireworksBlue/package.dist.json deleted file mode 100644 index 8de12afce86..00000000000 --- a/palettes/fireworks/fireworksBlue/package.dist.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "name": "@tsparticles/palette-fireworks-blue", - "version": "4.0.0-beta.12", - "description": "tsParticles fireworks blue palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fireworks/fireworksBlue" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "type": "module", - "jsdelivr": "tsparticles.palette-fireworks-blue.min.js", - "unpkg": "tsparticles.palette-fireworks-blue.min.js", - "publishConfig": { - "access": "public" - } -} diff --git a/palettes/fireworks/fireworksBlue/package.json b/palettes/fireworks/fireworksBlue/package.json deleted file mode 100644 index b45989b4c62..00000000000 --- a/palettes/fireworks/fireworksBlue/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-fireworks-blue", - "version": "4.0.0-beta.12", - "description": "tsParticles fireworks blue palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fireworks/fireworksBlue" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/fireworks/fireworksBlue/src/index.ts b/palettes/fireworks/fireworksBlue/src/index.ts deleted file mode 100644 index 3d7bf796d22..00000000000 --- a/palettes/fireworks/fireworksBlue/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; - -const paletteName = "fireworks-blue"; - -/** - * @param engine - - */ -export async function loadFireworksBluePalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/fireworks/fireworksBlue/typedoc.json b/palettes/fireworks/fireworksBlue/typedoc.json deleted file mode 100644 index 852aebabcbc..00000000000 --- a/palettes/fireworks/fireworksBlue/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Fireworks Blue Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/fireworks/fireworksBlue/webpack.config.js b/palettes/fireworks/fireworksBlue/webpack.config.js deleted file mode 100644 index 9eebfaca48d..00000000000 --- a/palettes/fireworks/fireworksBlue/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-fireworks-blue", - paletteName: "Fireworks Blue Palette", - version, -}); diff --git a/palettes/fireworks/fireworksBlueStroke/CHANGELOG.md b/palettes/fireworks/fireworksBlueStroke/CHANGELOG.md deleted file mode 100644 index d26b95f6176..00000000000 --- a/palettes/fireworks/fireworksBlueStroke/CHANGELOG.md +++ /dev/null @@ -1,18 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-fireworks-blue-stroke - -# 4.0.0-beta.0 (2026-04-08) - -### Features - -- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) - -# [4.0.0-alpha.5] - -**Note:** Initial version of package @tsparticles/palette-fireworks-blue-stroke diff --git a/palettes/fireworks/fireworksBlueStroke/README.md b/palettes/fireworks/fireworksBlueStroke/README.md deleted file mode 100644 index b1b193ceaa1..00000000000 --- a/palettes/fireworks/fireworksBlueStroke/README.md +++ /dev/null @@ -1,68 +0,0 @@ -[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) - -# tsParticles Fireworks Blue Stroke Palette - -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-fireworks-blue-stroke/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-fireworks-blue-stroke) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-fireworks-blue-stroke.svg)](https://www.npmjs.com/package/@tsparticles/palette-fireworks-blue-stroke) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-fireworks-blue-stroke)](https://www.npmjs.com/package/@tsparticles/palette-fireworks-blue-stroke) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for fireworks blue stroke. - -[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) - -## Sample - -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fireworks/fireworksBlueStroke/images/sample.png)](https://particles.js.org/samples/palettes/fireworks-blue-stroke) - -## Colors - -See the palette source for stroke layer details. - -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadFireworksBlueStrokePalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## How to use it - -### CDN / Vanilla JS / jQuery - -```html - - -``` - -### Usage - -Once the scripts are loaded you can set up `tsParticles` like this: - -```javascript -(async engine => { - await loadBasic(engine); - await loadFireworksBlueStrokePalette(engine); - - const options = { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "fireworks-blue-stroke", - }; - - await engine.load({ - id: "tsparticles", - options, - }); -})(tsParticles); -``` - -## Related docs - -- Presets and palettes catalog: -- Main docs: diff --git a/palettes/fireworks/fireworksBlueStroke/images/sample.png b/palettes/fireworks/fireworksBlueStroke/images/sample.png deleted file mode 100644 index 346ffe09dd7..00000000000 Binary files a/palettes/fireworks/fireworksBlueStroke/images/sample.png and /dev/null differ diff --git a/palettes/fireworks/fireworksBlueStroke/package.dist.json b/palettes/fireworks/fireworksBlueStroke/package.dist.json deleted file mode 100644 index d0579c0331c..00000000000 --- a/palettes/fireworks/fireworksBlueStroke/package.dist.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "name": "@tsparticles/palette-fireworks-blue-stroke", - "version": "4.0.0-beta.12", - "description": "tsParticles fireworks blue stroke palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fireworks/fireworksBlueStroke" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "type": "module", - "jsdelivr": "tsparticles.palette-fireworks-blue-stroke.min.js", - "unpkg": "tsparticles.palette-fireworks-blue-stroke.min.js", - "publishConfig": { - "access": "public" - } -} diff --git a/palettes/fireworks/fireworksBlueStroke/package.json b/palettes/fireworks/fireworksBlueStroke/package.json deleted file mode 100644 index a66c48fad52..00000000000 --- a/palettes/fireworks/fireworksBlueStroke/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-fireworks-blue-stroke", - "version": "4.0.0-beta.12", - "description": "tsParticles fireworks blue stroke palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fireworks/fireworksBlueStroke" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/fireworks/fireworksBlueStroke/src/index.ts b/palettes/fireworks/fireworksBlueStroke/src/index.ts deleted file mode 100644 index fc13f6abdd8..00000000000 --- a/palettes/fireworks/fireworksBlueStroke/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; - -const paletteName = "fireworks-blue-stroke"; - -/** - * @param engine - - */ -export async function loadFireworksBlueStrokePalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/fireworks/fireworksBlueStroke/typedoc.json b/palettes/fireworks/fireworksBlueStroke/typedoc.json deleted file mode 100644 index 0456aadd02a..00000000000 --- a/palettes/fireworks/fireworksBlueStroke/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Fireworks Blue Stroke Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/fireworks/fireworksBlueStroke/webpack.config.js b/palettes/fireworks/fireworksBlueStroke/webpack.config.js deleted file mode 100644 index 87a8862bc2c..00000000000 --- a/palettes/fireworks/fireworksBlueStroke/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-fireworks-blue-stroke", - paletteName: "Fireworks Blue Stroke Palette", - version, -}); diff --git a/palettes/fireworks/fireworksCopper/CHANGELOG.md b/palettes/fireworks/fireworksCopper/CHANGELOG.md deleted file mode 100644 index 26059e6cd44..00000000000 --- a/palettes/fireworks/fireworksCopper/CHANGELOG.md +++ /dev/null @@ -1,18 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-fireworks-copper - -# 4.0.0-beta.0 (2026-04-08) - -### Features - -- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) - -# [4.0.0-alpha.5] - -**Note:** Initial version of package @tsparticles/palette-fireworks-copper diff --git a/palettes/fireworks/fireworksCopper/README.md b/palettes/fireworks/fireworksCopper/README.md deleted file mode 100644 index 984f87379f9..00000000000 --- a/palettes/fireworks/fireworksCopper/README.md +++ /dev/null @@ -1,126 +0,0 @@ -[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) - -# tsParticles Fireworks Copper Palette - -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-fireworks-copper/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-fireworks-copper) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-fireworks-copper.svg)](https://www.npmjs.com/package/@tsparticles/palette-fireworks-copper) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-fireworks-copper)](https://www.npmjs.com/package/@tsparticles/palette-fireworks-copper) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for fireworks copper. - -[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) - -[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") - -## Sample - -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/fireworks/fireworksCopper/images/sample.png)](https://particles.js.org/samples/palettes/fireworks-copper) - -## Colors - - - - - - - - - - - - - - - - - - - - - -
-
- #FFFFFF -
-
- #FFEECC -
-
- #DDAA55 -
-
- #BB7722 -
-
- #883300 -
-
- #551100 -
-
- #220800 -
-
- Background
- #040100 -
- Blend mode: screen | Fill: true -
- -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadFireworksCopperPalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## How to use it - -### CDN / Vanilla JS / jQuery - -```html - - -``` - -### Usage - -Once the scripts are loaded you can set up `tsParticles` like this: - -```javascript -(async engine => { - await loadBasic(engine); - await loadFireworksCopperPalette(engine); - - const options = { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "fireworks-copper", - }; - - await engine.load({ - id: "tsparticles", - options, - }); -})(tsParticles); -``` - -#### Customization - -**Important ⚠️** -You can override all the options defining the properties like in any standard `tsParticles` installation. - -### Frameworks with a tsParticles component library - -Checkout the documentation in the component library repository and call the `loadFireworksCopperPalette` function. - -## Related docs - -- Presets and palettes catalog: -- Main docs: diff --git a/palettes/fireworks/fireworksCopper/images/sample.png b/palettes/fireworks/fireworksCopper/images/sample.png deleted file mode 100644 index d4eb3dc639e..00000000000 Binary files a/palettes/fireworks/fireworksCopper/images/sample.png and /dev/null differ diff --git a/palettes/fireworks/fireworksCopper/package.dist.json b/palettes/fireworks/fireworksCopper/package.dist.json deleted file mode 100644 index b4c21a76038..00000000000 --- a/palettes/fireworks/fireworksCopper/package.dist.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "name": "@tsparticles/palette-fireworks-copper", - "version": "4.0.0-beta.12", - "description": "tsParticles fireworks copper palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fireworks/fireworksCopper" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "type": "module", - "jsdelivr": "tsparticles.palette-fireworks-copper.min.js", - "unpkg": "tsparticles.palette-fireworks-copper.min.js", - "publishConfig": { - "access": "public" - } -} diff --git a/palettes/fireworks/fireworksCopper/package.json b/palettes/fireworks/fireworksCopper/package.json deleted file mode 100644 index acd2bcd1d72..00000000000 --- a/palettes/fireworks/fireworksCopper/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-fireworks-copper", - "version": "4.0.0-beta.12", - "description": "tsParticles fireworks copper palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fireworks/fireworksCopper" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/fireworks/fireworksCopper/src/index.ts b/palettes/fireworks/fireworksCopper/src/index.ts deleted file mode 100644 index 9db00a6b63a..00000000000 --- a/palettes/fireworks/fireworksCopper/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; - -const paletteName = "fireworks-copper"; - -/** - * @param engine - - */ -export async function loadFireworksCopperPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/fireworks/fireworksCopper/typedoc.json b/palettes/fireworks/fireworksCopper/typedoc.json deleted file mode 100644 index 92a6314ca9a..00000000000 --- a/palettes/fireworks/fireworksCopper/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Fireworks Copper Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/fireworks/fireworksCopper/webpack.config.js b/palettes/fireworks/fireworksCopper/webpack.config.js deleted file mode 100644 index 866338eba62..00000000000 --- a/palettes/fireworks/fireworksCopper/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-fireworks-copper", - paletteName: "Fireworks Copper Palette", - version, -}); diff --git a/palettes/fireworks/fireworksCopperStroke/CHANGELOG.md b/palettes/fireworks/fireworksCopperStroke/CHANGELOG.md deleted file mode 100644 index c754f305c93..00000000000 --- a/palettes/fireworks/fireworksCopperStroke/CHANGELOG.md +++ /dev/null @@ -1,18 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-fireworks-copper-stroke - -# 4.0.0-beta.0 (2026-04-08) - -### Features - -- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) - -# [4.0.0-alpha.5] - -**Note:** Initial version of package @tsparticles/palette-fireworks-copper-stroke diff --git a/palettes/fireworks/fireworksCopperStroke/README.md b/palettes/fireworks/fireworksCopperStroke/README.md deleted file mode 100644 index 918c89df153..00000000000 --- a/palettes/fireworks/fireworksCopperStroke/README.md +++ /dev/null @@ -1,68 +0,0 @@ -[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) - -# tsParticles Fireworks Copper Stroke Palette - -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-fireworks-copper-stroke/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-fireworks-copper-stroke) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-fireworks-copper-stroke.svg)](https://www.npmjs.com/package/@tsparticles/palette-fireworks-copper-stroke) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-fireworks-copper-stroke)](https://www.npmjs.com/package/@tsparticles/palette-fireworks-copper-stroke) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for fireworks copper stroke. - -[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) - -## Sample - -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fireworks/fireworksCopperStroke/images/sample.png)](https://particles.js.org/samples/palettes/fireworks-copper-stroke) - -## Colors - -See the palette source for stroke layer details. - -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadFireworksCopperStrokePalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## How to use it - -### CDN / Vanilla JS / jQuery - -```html - - -``` - -### Usage - -Once the scripts are loaded you can set up `tsParticles` like this: - -```javascript -(async engine => { - await loadBasic(engine); - await loadFireworksCopperStrokePalette(engine); - - const options = { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "fireworks-copper-stroke", - }; - - await engine.load({ - id: "tsparticles", - options, - }); -})(tsParticles); -``` - -## Related docs - -- Presets and palettes catalog: -- Main docs: diff --git a/palettes/fireworks/fireworksCopperStroke/images/sample.png b/palettes/fireworks/fireworksCopperStroke/images/sample.png deleted file mode 100644 index b235b118244..00000000000 Binary files a/palettes/fireworks/fireworksCopperStroke/images/sample.png and /dev/null differ diff --git a/palettes/fireworks/fireworksCopperStroke/package.dist.json b/palettes/fireworks/fireworksCopperStroke/package.dist.json deleted file mode 100644 index ff7554e08f4..00000000000 --- a/palettes/fireworks/fireworksCopperStroke/package.dist.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "name": "@tsparticles/palette-fireworks-copper-stroke", - "version": "4.0.0-beta.12", - "description": "tsParticles fireworks copper stroke palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fireworks/fireworksCopperStroke" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "type": "module", - "jsdelivr": "tsparticles.palette-fireworks-copper-stroke.min.js", - "unpkg": "tsparticles.palette-fireworks-copper-stroke.min.js", - "publishConfig": { - "access": "public" - } -} diff --git a/palettes/fireworks/fireworksCopperStroke/package.json b/palettes/fireworks/fireworksCopperStroke/package.json deleted file mode 100644 index e3253d9606d..00000000000 --- a/palettes/fireworks/fireworksCopperStroke/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-fireworks-copper-stroke", - "version": "4.0.0-beta.12", - "description": "tsParticles fireworks copper stroke palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fireworks/fireworksCopperStroke" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/fireworks/fireworksCopperStroke/src/index.ts b/palettes/fireworks/fireworksCopperStroke/src/index.ts deleted file mode 100644 index 290cb72e23e..00000000000 --- a/palettes/fireworks/fireworksCopperStroke/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; - -const paletteName = "fireworks-copper-stroke"; - -/** - * @param engine - - */ -export async function loadFireworksCopperStrokePalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/fireworks/fireworksCopperStroke/typedoc.json b/palettes/fireworks/fireworksCopperStroke/typedoc.json deleted file mode 100644 index 3d773c4b15b..00000000000 --- a/palettes/fireworks/fireworksCopperStroke/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Fireworks Copper Stroke Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/fireworks/fireworksCopperStroke/webpack.config.js b/palettes/fireworks/fireworksCopperStroke/webpack.config.js deleted file mode 100644 index 4c2f6df4eeb..00000000000 --- a/palettes/fireworks/fireworksCopperStroke/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-fireworks-copper-stroke", - paletteName: "Fireworks Copper Stroke Palette", - version, -}); diff --git a/palettes/fireworks/fireworksGold/CHANGELOG.md b/palettes/fireworks/fireworksGold/CHANGELOG.md deleted file mode 100644 index f6f77a417ac..00000000000 --- a/palettes/fireworks/fireworksGold/CHANGELOG.md +++ /dev/null @@ -1,18 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-fireworks-gold - -# 4.0.0-beta.0 (2026-04-08) - -### Features - -- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) - -# [4.0.0-alpha.5](https://github.com/tsparticles/palettes/compare/v4.0.0-alpha.4...v4.0.0-alpha.5) (2026-03-31) - -**Note:** Version bump only for package @tsparticles/palette-fireworks-gold diff --git a/palettes/fireworks/fireworksGold/README.md b/palettes/fireworks/fireworksGold/README.md deleted file mode 100644 index 391451abe8c..00000000000 --- a/palettes/fireworks/fireworksGold/README.md +++ /dev/null @@ -1,162 +0,0 @@ -[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) - -# tsParticles Fireworks Gold Palette - -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-fireworks-gold/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-fireworks-gold) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-fireworks-gold.svg)](https://www.npmjs.com/package/@tsparticles/palette-fireworks-gold) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-fireworks-gold)](https://www.npmjs.com/package/@tsparticles/palette-fireworks-gold) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for fireworks - gold. - -[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) - -[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") - -## Sample - -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fireworksGold/images/sample.png)](https://particles.js.org/samples/palettes/fireworks-gold) - -## Colors - - - - - - - - - - - - - - - - - - - - - -
-
- #FFFFFF -
-
- #FFEECC -
-
- #FFCC44 -
-
- #FFAA00 -
-
- #FF6600 -
-
- #AA2200 -
-
- #330000 -
-
- Background
- #000000 -
- Blend mode: screen | Fill: true -
- -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadFireworksGoldPalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## How to use it - -### CDN / Vanilla JS / jQuery - -```html - - -``` - -### Usage - -Once the scripts are loaded you can set up `tsParticles` like this: - -```javascript -(async engine => { - await loadBasic(engine); - await loadFireworksGoldPalette(engine); - - const options = { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "fireworks-gold", - }; - - await engine.load({ - id: "tsparticles", - options, - }); -})(tsParticles); -``` - -#### Customization - -**Important ⚠️** -You can override all the options defining the properties like in any standard `tsParticles` installation. - -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "fireworks-gold", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - -### Frameworks with a tsParticles component library - -Checkout the documentation in the component library repository and call the `loadFireworksGoldPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadFireworksGoldPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly - -## Related docs - -- Presets and palettes catalog: -- Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -pafireworksGold[Fireworks Gold] -end - -e[tsParticles Engine] --> pafireworksGold -``` diff --git a/palettes/fireworks/fireworksGold/package.dist.json b/palettes/fireworks/fireworksGold/package.dist.json deleted file mode 100644 index affe05a380f..00000000000 --- a/palettes/fireworks/fireworksGold/package.dist.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "name": "@tsparticles/palette-fireworks-gold", - "version": "4.0.0-beta.12", - "description": "tsParticles fireworks - gold palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fireworks/fireworksGold" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "jsdelivr": "tsparticles.palette.fireworks-gold.min.js", - "unpkg": "tsparticles.palette.fireworks-gold.min.js", - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "publishConfig": { - "access": "public" - }, - "type": "module" -} diff --git a/palettes/fireworks/fireworksGold/package.json b/palettes/fireworks/fireworksGold/package.json deleted file mode 100644 index a7c322d481d..00000000000 --- a/palettes/fireworks/fireworksGold/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-fireworks-gold", - "version": "4.0.0-beta.12", - "description": "tsParticles fireworks - gold palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fireworks/fireworksGold" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/fireworks/fireworksGold/src/index.ts b/palettes/fireworks/fireworksGold/src/index.ts deleted file mode 100644 index a3316c99c81..00000000000 --- a/palettes/fireworks/fireworksGold/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; - -const paletteName = "fireworks-gold"; - -/** - * @param engine - - */ -export async function loadFireworksGoldPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/fireworks/fireworksGold/typedoc.json b/palettes/fireworks/fireworksGold/typedoc.json deleted file mode 100644 index 8a94b0f5c93..00000000000 --- a/palettes/fireworks/fireworksGold/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Fireworks Gold Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/fireworks/fireworksGold/webpack.config.js b/palettes/fireworks/fireworksGold/webpack.config.js deleted file mode 100644 index 5f264134ec0..00000000000 --- a/palettes/fireworks/fireworksGold/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-fireworks-gold", - paletteName: "Fireworks Gold Palette", - version, -}); diff --git a/palettes/fireworks/fireworksGoldStroke/CHANGELOG.md b/palettes/fireworks/fireworksGoldStroke/CHANGELOG.md deleted file mode 100644 index 18e70c9d46b..00000000000 --- a/palettes/fireworks/fireworksGoldStroke/CHANGELOG.md +++ /dev/null @@ -1,18 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-fireworks-gold-stroke - -# 4.0.0-beta.0 (2026-04-08) - -### Features - -- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) - -# [4.0.0-alpha.5](https://github.com/tsparticles/palettes/compare/v4.0.0-alpha.4...v4.0.0-alpha.5) (2026-03-31) - -**Note:** Version bump only for package @tsparticles/palette-fireworks-gold diff --git a/palettes/fireworks/fireworksGoldStroke/README.md b/palettes/fireworks/fireworksGoldStroke/README.md deleted file mode 100644 index ad8368910e7..00000000000 --- a/palettes/fireworks/fireworksGoldStroke/README.md +++ /dev/null @@ -1,162 +0,0 @@ -[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) - -# tsParticles Fireworks Gold Palette - -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-fireworks-gold/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-fireworks-gold) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-fireworks-gold.svg)](https://www.npmjs.com/package/@tsparticles/palette-fireworks-gold) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-fireworks-gold)](https://www.npmjs.com/package/@tsparticles/palette-fireworks-gold) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for fireworks - gold. - -[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) - -[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") - -## Sample - -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fireworksGold/images/sample.png)](https://particles.js.org/samples/palettes/fireworks-gold) - -## Colors - - - - - - - - - - - - - - - - - - - - - -
-
- #FFFFFF -
-
- #FFEECC -
-
- #FFCC44 -
-
- #FFAA00 -
-
- #FF6600 -
-
- #AA2200 -
-
- #330000 -
-
- Background
- #000000 -
- Blend mode: screen | Fill: true -
- -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadFireworksGoldStrokePalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## How to use it - -### CDN / Vanilla JS / jQuery - -```html - - -``` - -### Usage - -Once the scripts are loaded you can set up `tsParticles` like this: - -```javascript -(async engine => { - await loadBasic(engine); - await loadFireworksGoldStrokePalette(engine); - - const options = { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "fireworks-gold-stroke", - }; - - await engine.load({ - id: "tsparticles", - options, - }); -})(tsParticles); -``` - -#### Customization - -**Important ⚠️** -You can override all the options defining the properties like in any standard `tsParticles` installation. - -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "fireworks-gold", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - -### Frameworks with a tsParticles component library - -Checkout the documentation in the component library repository and call the `loadFireworksGoldPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadFireworksGoldPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly - -## Related docs - -- Presets and palettes catalog: -- Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -pafireworksGold[Fireworks Gold] -end - -e[tsParticles Engine] --> pafireworksGold -``` diff --git a/palettes/fireworks/fireworksGoldStroke/package.dist.json b/palettes/fireworks/fireworksGoldStroke/package.dist.json deleted file mode 100644 index e9ecdfa4be1..00000000000 --- a/palettes/fireworks/fireworksGoldStroke/package.dist.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "name": "@tsparticles/palette-fireworks-gold-stroke", - "version": "4.0.0-beta.12", - "description": "tsParticles fireworks - gold stroke palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fireworks/fireworksGoldStroke" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "jsdelivr": "tsparticles.palette.palette-fireworks-gold-stroke.min.js", - "unpkg": "tsparticles.palette.palette-fireworks-gold-stroke.min.js", - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "publishConfig": { - "access": "public" - }, - "type": "module" -} diff --git a/palettes/fireworks/fireworksGoldStroke/package.json b/palettes/fireworks/fireworksGoldStroke/package.json deleted file mode 100644 index 7b5df6e1c7d..00000000000 --- a/palettes/fireworks/fireworksGoldStroke/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-fireworks-gold-stroke", - "version": "4.0.0-beta.12", - "description": "tsParticles fireworks - gold stroke palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fireworks/fireworksGoldStroke" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/fireworks/fireworksGoldStroke/src/index.ts b/palettes/fireworks/fireworksGoldStroke/src/index.ts deleted file mode 100644 index 17f0d5e5c3c..00000000000 --- a/palettes/fireworks/fireworksGoldStroke/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; - -const paletteName = "fireworks-gold-stroke"; - -/** - * @param engine - - */ -export async function loadFireworksGoldStrokePalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/fireworks/fireworksGoldStroke/typedoc.json b/palettes/fireworks/fireworksGoldStroke/typedoc.json deleted file mode 100644 index 8a94b0f5c93..00000000000 --- a/palettes/fireworks/fireworksGoldStroke/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Fireworks Gold Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/fireworks/fireworksGoldStroke/webpack.config.js b/palettes/fireworks/fireworksGoldStroke/webpack.config.js deleted file mode 100644 index ce9b27116fa..00000000000 --- a/palettes/fireworks/fireworksGoldStroke/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-fireworks-gold-stroke", - paletteName: "Fireworks Gold Stroke Palette", - version, -}); diff --git a/palettes/fireworks/fireworksGreen/CHANGELOG.md b/palettes/fireworks/fireworksGreen/CHANGELOG.md deleted file mode 100644 index 8c5bc1ab55c..00000000000 --- a/palettes/fireworks/fireworksGreen/CHANGELOG.md +++ /dev/null @@ -1,18 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-fireworks-green - -# 4.0.0-beta.0 (2026-04-08) - -### Features - -- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) - -# [4.0.0-alpha.5] - -**Note:** Initial version of package @tsparticles/palette-fireworks-green diff --git a/palettes/fireworks/fireworksGreen/README.md b/palettes/fireworks/fireworksGreen/README.md deleted file mode 100644 index 2a1e4f9fe91..00000000000 --- a/palettes/fireworks/fireworksGreen/README.md +++ /dev/null @@ -1,126 +0,0 @@ -[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) - -# tsParticles Fireworks Green Palette - -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-fireworks-green/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-fireworks-green) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-fireworks-green.svg)](https://www.npmjs.com/package/@tsparticles/palette-fireworks-green) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-fireworks-green)](https://www.npmjs.com/package/@tsparticles/palette-fireworks-green) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for fireworks green. - -[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) - -[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") - -## Sample - -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/fireworks/fireworksGreen/images/sample.png)](https://particles.js.org/samples/palettes/fireworks-green) - -## Colors - - - - - - - - - - - - - - - - - - - - - -
-
- #FFFFFF -
-
- #CCFFDD -
-
- #88FFAA -
-
- #33FF66 -
-
- #00CC33 -
-
- #007722 -
-
- #003311 -
-
- Background
- #001100 -
- Blend mode: screen | Fill: true -
- -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadFireworksGreenPalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## How to use it - -### CDN / Vanilla JS / jQuery - -```html - - -``` - -### Usage - -Once the scripts are loaded you can set up `tsParticles` like this: - -```javascript -(async engine => { - await loadBasic(engine); - await loadFireworksGreenPalette(engine); - - const options = { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "fireworks-green", - }; - - await engine.load({ - id: "tsparticles", - options, - }); -})(tsParticles); -``` - -#### Customization - -**Important ⚠️** -You can override all the options defining the properties like in any standard `tsParticles` installation. - -### Frameworks with a tsParticles component library - -Checkout the documentation in the component library repository and call the `loadFireworksGreenPalette` function. - -## Related docs - -- Presets and palettes catalog: -- Main docs: diff --git a/palettes/fireworks/fireworksGreen/images/sample.png b/palettes/fireworks/fireworksGreen/images/sample.png deleted file mode 100644 index b05a8dca2d0..00000000000 Binary files a/palettes/fireworks/fireworksGreen/images/sample.png and /dev/null differ diff --git a/palettes/fireworks/fireworksGreen/package.dist.json b/palettes/fireworks/fireworksGreen/package.dist.json deleted file mode 100644 index 86a4d0dc7fe..00000000000 --- a/palettes/fireworks/fireworksGreen/package.dist.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "name": "@tsparticles/palette-fireworks-green", - "version": "4.0.0-beta.12", - "description": "tsParticles fireworks green palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fireworks/fireworksGreen" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "type": "module", - "jsdelivr": "tsparticles.palette-fireworks-green.min.js", - "unpkg": "tsparticles.palette-fireworks-green.min.js", - "publishConfig": { - "access": "public" - } -} diff --git a/palettes/fireworks/fireworksGreen/package.json b/palettes/fireworks/fireworksGreen/package.json deleted file mode 100644 index edbb30c37a7..00000000000 --- a/palettes/fireworks/fireworksGreen/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-fireworks-green", - "version": "4.0.0-beta.12", - "description": "tsParticles fireworks green palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fireworks/fireworksGreen" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/fireworks/fireworksGreen/src/index.ts b/palettes/fireworks/fireworksGreen/src/index.ts deleted file mode 100644 index 20cb660963e..00000000000 --- a/palettes/fireworks/fireworksGreen/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; - -const paletteName = "fireworks-green"; - -/** - * @param engine - - */ -export async function loadFireworksGreenPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/fireworks/fireworksGreen/typedoc.json b/palettes/fireworks/fireworksGreen/typedoc.json deleted file mode 100644 index 723dd9ae82d..00000000000 --- a/palettes/fireworks/fireworksGreen/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Fireworks Green Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/fireworks/fireworksGreen/webpack.config.js b/palettes/fireworks/fireworksGreen/webpack.config.js deleted file mode 100644 index 86b6d81ec77..00000000000 --- a/palettes/fireworks/fireworksGreen/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-fireworks-green", - paletteName: "Fireworks Green Palette", - version, -}); diff --git a/palettes/fireworks/fireworksGreenStroke/CHANGELOG.md b/palettes/fireworks/fireworksGreenStroke/CHANGELOG.md deleted file mode 100644 index d22068a43af..00000000000 --- a/palettes/fireworks/fireworksGreenStroke/CHANGELOG.md +++ /dev/null @@ -1,18 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-fireworks-green-stroke - -# 4.0.0-beta.0 (2026-04-08) - -### Features - -- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) - -# [4.0.0-alpha.5] - -**Note:** Initial version of package @tsparticles/palette-fireworks-green-stroke diff --git a/palettes/fireworks/fireworksGreenStroke/README.md b/palettes/fireworks/fireworksGreenStroke/README.md deleted file mode 100644 index 3bdccea0419..00000000000 --- a/palettes/fireworks/fireworksGreenStroke/README.md +++ /dev/null @@ -1,68 +0,0 @@ -[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) - -# tsParticles Fireworks Green Stroke Palette - -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-fireworks-green-stroke/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-fireworks-green-stroke) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-fireworks-green-stroke.svg)](https://www.npmjs.com/package/@tsparticles/palette-fireworks-green-stroke) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-fireworks-green-stroke)](https://www.npmjs.com/package/@tsparticles/palette-fireworks-green-stroke) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for fireworks green stroke. - -[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) - -## Sample - -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fireworks/fireworksGreenStroke/images/sample.png)](https://particles.js.org/samples/palettes/fireworks-green-stroke) - -## Colors - -See the palette source for stroke layer details. - -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadFireworksGreenStrokePalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## How to use it - -### CDN / Vanilla JS / jQuery - -```html - - -``` - -### Usage - -Once the scripts are loaded you can set up `tsParticles` like this: - -```javascript -(async engine => { - await loadBasic(engine); - await loadFireworksGreenStrokePalette(engine); - - const options = { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "fireworks-green-stroke", - }; - - await engine.load({ - id: "tsparticles", - options, - }); -})(tsParticles); -``` - -## Related docs - -- Presets and palettes catalog: -- Main docs: diff --git a/palettes/fireworks/fireworksGreenStroke/images/sample.png b/palettes/fireworks/fireworksGreenStroke/images/sample.png deleted file mode 100644 index a55da8ceae4..00000000000 Binary files a/palettes/fireworks/fireworksGreenStroke/images/sample.png and /dev/null differ diff --git a/palettes/fireworks/fireworksGreenStroke/package.dist.json b/palettes/fireworks/fireworksGreenStroke/package.dist.json deleted file mode 100644 index 42d0b652270..00000000000 --- a/palettes/fireworks/fireworksGreenStroke/package.dist.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "name": "@tsparticles/palette-fireworks-green-stroke", - "version": "4.0.0-beta.12", - "description": "tsParticles fireworks green stroke palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fireworks/fireworksGreenStroke" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "type": "module", - "jsdelivr": "tsparticles.palette-fireworks-green-stroke.min.js", - "unpkg": "tsparticles.palette-fireworks-green-stroke.min.js", - "publishConfig": { - "access": "public" - } -} diff --git a/palettes/fireworks/fireworksGreenStroke/package.json b/palettes/fireworks/fireworksGreenStroke/package.json deleted file mode 100644 index 7ecef3ed150..00000000000 --- a/palettes/fireworks/fireworksGreenStroke/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-fireworks-green-stroke", - "version": "4.0.0-beta.12", - "description": "tsParticles fireworks green stroke palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fireworks/fireworksGreenStroke" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/fireworks/fireworksGreenStroke/src/index.ts b/palettes/fireworks/fireworksGreenStroke/src/index.ts deleted file mode 100644 index 8112f095b6d..00000000000 --- a/palettes/fireworks/fireworksGreenStroke/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; - -const paletteName = "fireworks-green-stroke"; - -/** - * @param engine - - */ -export async function loadFireworksGreenStrokePalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/fireworks/fireworksGreenStroke/typedoc.json b/palettes/fireworks/fireworksGreenStroke/typedoc.json deleted file mode 100644 index 9db08b0c9c5..00000000000 --- a/palettes/fireworks/fireworksGreenStroke/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Fireworks Green Stroke Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/fireworks/fireworksGreenStroke/webpack.config.js b/palettes/fireworks/fireworksGreenStroke/webpack.config.js deleted file mode 100644 index 2c54d7be620..00000000000 --- a/palettes/fireworks/fireworksGreenStroke/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-fireworks-green-stroke", - paletteName: "Fireworks Green Stroke Palette", - version, -}); diff --git a/palettes/fireworks/fireworksIce/CHANGELOG.md b/palettes/fireworks/fireworksIce/CHANGELOG.md deleted file mode 100644 index f9a1df1f911..00000000000 --- a/palettes/fireworks/fireworksIce/CHANGELOG.md +++ /dev/null @@ -1,18 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-fireworks-ice - -# 4.0.0-beta.0 (2026-04-08) - -### Features - -- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) - -# [4.0.0-alpha.5] - -**Note:** Initial version of package @tsparticles/palette-fireworks-ice diff --git a/palettes/fireworks/fireworksIce/README.md b/palettes/fireworks/fireworksIce/README.md deleted file mode 100644 index 3aea44a65c4..00000000000 --- a/palettes/fireworks/fireworksIce/README.md +++ /dev/null @@ -1,126 +0,0 @@ -[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) - -# tsParticles Fireworks Ice Palette - -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-fireworks-ice/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-fireworks-ice) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-fireworks-ice.svg)](https://www.npmjs.com/package/@tsparticles/palette-fireworks-ice) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-fireworks-ice)](https://www.npmjs.com/package/@tsparticles/palette-fireworks-ice) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for fireworks ice. - -[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) - -[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") - -## Sample - -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/fireworks/fireworksIce/images/sample.png)](https://particles.js.org/samples/palettes/fireworks-ice) - -## Colors - - - - - - - - - - - - - - - - - - - - - -
-
- #FFFFFF -
-
- #E8F8FF -
-
- #AADDFF -
-
- #66BBFF -
-
- #2299FF -
-
- #0055CC -
-
- #001144 -
-
- Background
- #010a14 -
- Blend mode: screen | Fill: true -
- -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadFireworksIcePalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## How to use it - -### CDN / Vanilla JS / jQuery - -```html - - -``` - -### Usage - -Once the scripts are loaded you can set up `tsParticles` like this: - -```javascript -(async engine => { - await loadBasic(engine); - await loadFireworksIcePalette(engine); - - const options = { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "fireworks-ice", - }; - - await engine.load({ - id: "tsparticles", - options, - }); -})(tsParticles); -``` - -#### Customization - -**Important ⚠️** -You can override all the options defining the properties like in any standard `tsParticles` installation. - -### Frameworks with a tsParticles component library - -Checkout the documentation in the component library repository and call the `loadFireworksIcePalette` function. - -## Related docs - -- Presets and palettes catalog: -- Main docs: diff --git a/palettes/fireworks/fireworksIce/images/sample.png b/palettes/fireworks/fireworksIce/images/sample.png deleted file mode 100644 index 358b4140201..00000000000 Binary files a/palettes/fireworks/fireworksIce/images/sample.png and /dev/null differ diff --git a/palettes/fireworks/fireworksIce/package.dist.json b/palettes/fireworks/fireworksIce/package.dist.json deleted file mode 100644 index fc0649a8db2..00000000000 --- a/palettes/fireworks/fireworksIce/package.dist.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "name": "@tsparticles/palette-fireworks-ice", - "version": "4.0.0-beta.12", - "description": "tsParticles fireworks ice palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fireworks/fireworksIce" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "type": "module", - "jsdelivr": "tsparticles.palette-fireworks-ice.min.js", - "unpkg": "tsparticles.palette-fireworks-ice.min.js", - "publishConfig": { - "access": "public" - } -} diff --git a/palettes/fireworks/fireworksIce/package.json b/palettes/fireworks/fireworksIce/package.json deleted file mode 100644 index b4ad253ac4a..00000000000 --- a/palettes/fireworks/fireworksIce/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-fireworks-ice", - "version": "4.0.0-beta.12", - "description": "tsParticles fireworks ice palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fireworks/fireworksIce" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/fireworks/fireworksIce/src/index.ts b/palettes/fireworks/fireworksIce/src/index.ts deleted file mode 100644 index f9b10cd52fe..00000000000 --- a/palettes/fireworks/fireworksIce/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; - -const paletteName = "fireworks-ice"; - -/** - * @param engine - - */ -export async function loadFireworksIcePalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/fireworks/fireworksIce/typedoc.json b/palettes/fireworks/fireworksIce/typedoc.json deleted file mode 100644 index 8f183d71425..00000000000 --- a/palettes/fireworks/fireworksIce/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Fireworks Ice Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/fireworks/fireworksIce/webpack.config.js b/palettes/fireworks/fireworksIce/webpack.config.js deleted file mode 100644 index 60b292cadb9..00000000000 --- a/palettes/fireworks/fireworksIce/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-fireworks-ice", - paletteName: "Fireworks Ice Palette", - version, -}); diff --git a/palettes/fireworks/fireworksIceStroke/CHANGELOG.md b/palettes/fireworks/fireworksIceStroke/CHANGELOG.md deleted file mode 100644 index 4a34cfa7c11..00000000000 --- a/palettes/fireworks/fireworksIceStroke/CHANGELOG.md +++ /dev/null @@ -1,18 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-fireworks-ice-stroke - -# 4.0.0-beta.0 (2026-04-08) - -### Features - -- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) - -# [4.0.0-alpha.5] - -**Note:** Initial version of package @tsparticles/palette-fireworks-ice-stroke diff --git a/palettes/fireworks/fireworksIceStroke/README.md b/palettes/fireworks/fireworksIceStroke/README.md deleted file mode 100644 index 878b03cf887..00000000000 --- a/palettes/fireworks/fireworksIceStroke/README.md +++ /dev/null @@ -1,68 +0,0 @@ -[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) - -# tsParticles Fireworks Ice Stroke Palette - -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-fireworks-ice-stroke/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-fireworks-ice-stroke) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-fireworks-ice-stroke.svg)](https://www.npmjs.com/package/@tsparticles/palette-fireworks-ice-stroke) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-fireworks-ice-stroke)](https://www.npmjs.com/package/@tsparticles/palette-fireworks-ice-stroke) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for fireworks ice stroke. - -[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) - -## Sample - -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fireworks/fireworksIceStroke/images/sample.png)](https://particles.js.org/samples/palettes/fireworks-ice-stroke) - -## Colors - -See the palette source for stroke layer details. - -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadFireworksIceStrokePalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## How to use it - -### CDN / Vanilla JS / jQuery - -```html - - -``` - -### Usage - -Once the scripts are loaded you can set up `tsParticles` like this: - -```javascript -(async engine => { - await loadBasic(engine); - await loadFireworksIceStrokePalette(engine); - - const options = { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "fireworks-ice-stroke", - }; - - await engine.load({ - id: "tsparticles", - options, - }); -})(tsParticles); -``` - -## Related docs - -- Presets and palettes catalog: -- Main docs: diff --git a/palettes/fireworks/fireworksIceStroke/images/sample.png b/palettes/fireworks/fireworksIceStroke/images/sample.png deleted file mode 100644 index 33f10f74ccc..00000000000 Binary files a/palettes/fireworks/fireworksIceStroke/images/sample.png and /dev/null differ diff --git a/palettes/fireworks/fireworksIceStroke/package.dist.json b/palettes/fireworks/fireworksIceStroke/package.dist.json deleted file mode 100644 index 0606a7b6d3b..00000000000 --- a/palettes/fireworks/fireworksIceStroke/package.dist.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "name": "@tsparticles/palette-fireworks-ice-stroke", - "version": "4.0.0-beta.12", - "description": "tsParticles fireworks ice stroke palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fireworks/fireworksIceStroke" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "type": "module", - "jsdelivr": "tsparticles.palette-fireworks-ice-stroke.min.js", - "unpkg": "tsparticles.palette-fireworks-ice-stroke.min.js", - "publishConfig": { - "access": "public" - } -} diff --git a/palettes/fireworks/fireworksIceStroke/package.json b/palettes/fireworks/fireworksIceStroke/package.json deleted file mode 100644 index bc699bc3c25..00000000000 --- a/palettes/fireworks/fireworksIceStroke/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-fireworks-ice-stroke", - "version": "4.0.0-beta.12", - "description": "tsParticles fireworks ice stroke palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fireworks/fireworksIceStroke" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/fireworks/fireworksIceStroke/src/index.ts b/palettes/fireworks/fireworksIceStroke/src/index.ts deleted file mode 100644 index 2f75e35f6bd..00000000000 --- a/palettes/fireworks/fireworksIceStroke/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; - -const paletteName = "fireworks-ice-stroke"; - -/** - * @param engine - - */ -export async function loadFireworksIceStrokePalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/fireworks/fireworksIceStroke/typedoc.json b/palettes/fireworks/fireworksIceStroke/typedoc.json deleted file mode 100644 index 2c85b73d55f..00000000000 --- a/palettes/fireworks/fireworksIceStroke/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Fireworks Ice Stroke Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/fireworks/fireworksIceStroke/webpack.config.js b/palettes/fireworks/fireworksIceStroke/webpack.config.js deleted file mode 100644 index 343cb07a235..00000000000 --- a/palettes/fireworks/fireworksIceStroke/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-fireworks-ice-stroke", - paletteName: "Fireworks Ice Stroke Palette", - version, -}); diff --git a/palettes/fireworks/fireworksMulticolor/CHANGELOG.md b/palettes/fireworks/fireworksMulticolor/CHANGELOG.md deleted file mode 100644 index a4a3880033b..00000000000 --- a/palettes/fireworks/fireworksMulticolor/CHANGELOG.md +++ /dev/null @@ -1,18 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-fireworks-multicolor - -# 4.0.0-beta.0 (2026-04-08) - -### Features - -- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) - -# [4.0.0-alpha.5](https://github.com/tsparticles/palettes/compare/v4.0.0-alpha.4...v4.0.0-alpha.5) (2026-03-31) - -**Note:** Version bump only for package @tsparticles/palette-fireworks-multicolor diff --git a/palettes/fireworks/fireworksMulticolor/README.md b/palettes/fireworks/fireworksMulticolor/README.md deleted file mode 100644 index e3f38af9f3e..00000000000 --- a/palettes/fireworks/fireworksMulticolor/README.md +++ /dev/null @@ -1,170 +0,0 @@ -[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) - -# tsParticles Fireworks Multicolor Palette - -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-fireworks-multicolor/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-fireworks-multicolor) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-fireworks-multicolor.svg)](https://www.npmjs.com/package/@tsparticles/palette-fireworks-multicolor) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-fireworks-multicolor)](https://www.npmjs.com/package/@tsparticles/palette-fireworks-multicolor) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for fireworks - multicolor. - -[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) - -[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") - -## Sample - -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fireworksMulticolor/images/sample.png)](https://particles.js.org/samples/palettes/fireworks-multicolor) - -## Colors - - - - - - - - - - - - - - - - - - - - - - - -
-
- #FF0000 -
-
- #FF4400 -
-
- #FFCC00 -
-
- #00FF44 -
-
- #00FFFF -
-
- #0088FF -
-
- #AA00FF -
-
- #FF00AA -
-
- #FFFFFF -
-
- Background
- #000000 -
- Blend mode: lighter | Fill: true -
- -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadFireworksMulticolorPalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## How to use it - -### CDN / Vanilla JS / jQuery - -```html - - -``` - -### Usage - -Once the scripts are loaded you can set up `tsParticles` like this: - -```javascript -(async engine => { - await loadBasic(engine); - await loadFireworksMulticolorPalette(engine); - - const options = { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "fireworks-multicolor", - }; - - await engine.load({ - id: "tsparticles", - options, - }); -})(tsParticles); -``` - -#### Customization - -**Important ⚠️** -You can override all the options defining the properties like in any standard `tsParticles` installation. - -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "fireworks-multicolor", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - -### Frameworks with a tsParticles component library - -Checkout the documentation in the component library repository and call the `loadFireworksMulticolorPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadFireworksMulticolorPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly - -## Related docs - -- Presets and palettes catalog: -- Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -pafireworksMulticolor[Fireworks Multicolor] -end - -e[tsParticles Engine] --> pafireworksMulticolor -``` diff --git a/palettes/fireworks/fireworksMulticolor/package.dist.json b/palettes/fireworks/fireworksMulticolor/package.dist.json deleted file mode 100644 index ec440713ac2..00000000000 --- a/palettes/fireworks/fireworksMulticolor/package.dist.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "name": "@tsparticles/palette-fireworks-multicolor", - "version": "4.0.0-beta.12", - "description": "tsParticles fireworks - multicolor palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fireworks/fireworksMulticolor" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "jsdelivr": "tsparticles.palette.fireworks-multicolor.min.js", - "unpkg": "tsparticles.palette.fireworks-multicolor.min.js", - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "publishConfig": { - "access": "public" - }, - "type": "module" -} diff --git a/palettes/fireworks/fireworksMulticolor/package.json b/palettes/fireworks/fireworksMulticolor/package.json deleted file mode 100644 index 1baf3a00da5..00000000000 --- a/palettes/fireworks/fireworksMulticolor/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-fireworks-multicolor", - "version": "4.0.0-beta.12", - "description": "tsParticles fireworks - multicolor palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fireworks/fireworksMulticolor" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/fireworks/fireworksMulticolor/src/index.ts b/palettes/fireworks/fireworksMulticolor/src/index.ts deleted file mode 100644 index cfd0b125fc2..00000000000 --- a/palettes/fireworks/fireworksMulticolor/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; - -const paletteName = "fireworks-multicolor"; - -/** - * @param engine - - */ -export async function loadFireworksMulticolorPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/fireworks/fireworksMulticolor/typedoc.json b/palettes/fireworks/fireworksMulticolor/typedoc.json deleted file mode 100644 index fcec2763cec..00000000000 --- a/palettes/fireworks/fireworksMulticolor/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Fireworks Multicolor Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/fireworks/fireworksMulticolor/webpack.config.js b/palettes/fireworks/fireworksMulticolor/webpack.config.js deleted file mode 100644 index 1b703765694..00000000000 --- a/palettes/fireworks/fireworksMulticolor/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-fireworks-multicolor", - paletteName: "Fireworks Multicolor Palette", - version, -}); diff --git a/palettes/fireworks/fireworksMulticolorStroke/CHANGELOG.md b/palettes/fireworks/fireworksMulticolorStroke/CHANGELOG.md deleted file mode 100644 index 313fd7a7237..00000000000 --- a/palettes/fireworks/fireworksMulticolorStroke/CHANGELOG.md +++ /dev/null @@ -1,18 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-fireworks-multicolor-stroke - -# 4.0.0-beta.0 (2026-04-08) - -### Features - -- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) - -# [4.0.0-alpha.5](https://github.com/tsparticles/palettes/compare/v4.0.0-alpha.4...v4.0.0-alpha.5) (2026-03-31) - -**Note:** Version bump only for package @tsparticles/palette-fireworks-multicolor diff --git a/palettes/fireworks/fireworksMulticolorStroke/README.md b/palettes/fireworks/fireworksMulticolorStroke/README.md deleted file mode 100644 index 196f89a9315..00000000000 --- a/palettes/fireworks/fireworksMulticolorStroke/README.md +++ /dev/null @@ -1,170 +0,0 @@ -[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) - -# tsParticles Fireworks Multicolor Palette - -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-fireworks-multicolor/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-fireworks-multicolor) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-fireworks-multicolor.svg)](https://www.npmjs.com/package/@tsparticles/palette-fireworks-multicolor) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-fireworks-multicolor)](https://www.npmjs.com/package/@tsparticles/palette-fireworks-multicolor) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for fireworks - multicolor. - -[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) - -[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") - -## Sample - -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fireworksMulticolor/images/sample.png)](https://particles.js.org/samples/palettes/fireworks-multicolor) - -## Colors - - - - - - - - - - - - - - - - - - - - - - - -
-
- #FF0000 -
-
- #FF4400 -
-
- #FFCC00 -
-
- #00FF44 -
-
- #00FFFF -
-
- #0088FF -
-
- #AA00FF -
-
- #FF00AA -
-
- #FFFFFF -
-
- Background
- #000000 -
- Blend mode: lighter | Fill: true -
- -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadFireworksMulticolorStrokePalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## How to use it - -### CDN / Vanilla JS / jQuery - -```html - - -``` - -### Usage - -Once the scripts are loaded you can set up `tsParticles` like this: - -```javascript -(async engine => { - await loadBasic(engine); - await loadFireworksMulticolorStrokePalette(engine); - - const options = { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "fireworks-multicolor-stroke", - }; - - await engine.load({ - id: "tsparticles", - options, - }); -})(tsParticles); -``` - -#### Customization - -**Important ⚠️** -You can override all the options defining the properties like in any standard `tsParticles` installation. - -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "fireworks-multicolor", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - -### Frameworks with a tsParticles component library - -Checkout the documentation in the component library repository and call the `loadFireworksMulticolorPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadFireworksMulticolorPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly - -## Related docs - -- Presets and palettes catalog: -- Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -pafireworksMulticolor[Fireworks Multicolor] -end - -e[tsParticles Engine] --> pafireworksMulticolor -``` diff --git a/palettes/fireworks/fireworksMulticolorStroke/package.dist.json b/palettes/fireworks/fireworksMulticolorStroke/package.dist.json deleted file mode 100644 index f576f71c90d..00000000000 --- a/palettes/fireworks/fireworksMulticolorStroke/package.dist.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "name": "@tsparticles/palette-fireworks-multicolor-stroke", - "version": "4.0.0-beta.12", - "description": "tsParticles fireworks - multicolor stroke palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fireworks/fireworksMulticolorStroke" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "jsdelivr": "tsparticles.palette.fireworks-multicolor-stroke.min.js", - "unpkg": "tsparticles.palette.fireworks-multicolor-stroke.min.js", - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "publishConfig": { - "access": "public" - }, - "type": "module" -} diff --git a/palettes/fireworks/fireworksMulticolorStroke/package.json b/palettes/fireworks/fireworksMulticolorStroke/package.json deleted file mode 100644 index dce96ede523..00000000000 --- a/palettes/fireworks/fireworksMulticolorStroke/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-fireworks-multicolor-stroke", - "version": "4.0.0-beta.12", - "description": "tsParticles fireworks - multicolor stroke palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fireworks/fireworksMulticolorStroke" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/fireworks/fireworksMulticolorStroke/src/index.ts b/palettes/fireworks/fireworksMulticolorStroke/src/index.ts deleted file mode 100644 index 2442c3b5665..00000000000 --- a/palettes/fireworks/fireworksMulticolorStroke/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; - -const paletteName = "fireworks-multicolor-stroke"; - -/** - * @param engine - - */ -export async function loadFireworksMulticolorStrokePalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/fireworks/fireworksMulticolorStroke/typedoc.json b/palettes/fireworks/fireworksMulticolorStroke/typedoc.json deleted file mode 100644 index fcec2763cec..00000000000 --- a/palettes/fireworks/fireworksMulticolorStroke/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Fireworks Multicolor Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/fireworks/fireworksMulticolorStroke/webpack.config.js b/palettes/fireworks/fireworksMulticolorStroke/webpack.config.js deleted file mode 100644 index 878bd21e215..00000000000 --- a/palettes/fireworks/fireworksMulticolorStroke/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-fireworks-multicolor-stroke", - paletteName: "Fireworks Multicolor Stroke Palette", - version, -}); diff --git a/palettes/fireworks/fireworksNeon/CHANGELOG.md b/palettes/fireworks/fireworksNeon/CHANGELOG.md deleted file mode 100644 index ce0772a304c..00000000000 --- a/palettes/fireworks/fireworksNeon/CHANGELOG.md +++ /dev/null @@ -1,18 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-fireworks-neon - -# 4.0.0-beta.0 (2026-04-08) - -### Features - -- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) - -# [4.0.0-alpha.5] - -**Note:** Initial version of package @tsparticles/palette-fireworks-neon diff --git a/palettes/fireworks/fireworksNeon/README.md b/palettes/fireworks/fireworksNeon/README.md deleted file mode 100644 index c5e7d76294b..00000000000 --- a/palettes/fireworks/fireworksNeon/README.md +++ /dev/null @@ -1,130 +0,0 @@ -[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) - -# tsParticles Fireworks Neon Palette - -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-fireworks-neon/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-fireworks-neon) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-fireworks-neon.svg)](https://www.npmjs.com/package/@tsparticles/palette-fireworks-neon) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-fireworks-neon)](https://www.npmjs.com/package/@tsparticles/palette-fireworks-neon) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for fireworks neon. - -[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) - -[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") - -## Sample - -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/fireworks/fireworksNeon/images/sample.png)](https://particles.js.org/samples/palettes/fireworks-neon) - -## Colors - - - - - - - - - - - - - - - - - - - - - - -
-
- #FF0088 -
-
- #FF4400 -
-
- #FFFF00 -
-
- #00FF44 -
-
- #00FFFF -
-
- #0088FF -
-
- #FF00FF -
-
- #AAFF00 -
-
- Background
- #000000 -
- Blend mode: lighter | Fill: true -
- -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadFireworksNeonPalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## How to use it - -### CDN / Vanilla JS / jQuery - -```html - - -``` - -### Usage - -Once the scripts are loaded you can set up `tsParticles` like this: - -```javascript -(async engine => { - await loadBasic(engine); - await loadFireworksNeonPalette(engine); - - const options = { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "fireworks-neon", - }; - - await engine.load({ - id: "tsparticles", - options, - }); -})(tsParticles); -``` - -#### Customization - -**Important ⚠️** -You can override all the options defining the properties like in any standard `tsParticles` installation. - -### Frameworks with a tsParticles component library - -Checkout the documentation in the component library repository and call the `loadFireworksNeonPalette` function. - -## Related docs - -- Presets and palettes catalog: -- Main docs: diff --git a/palettes/fireworks/fireworksNeon/images/sample.png b/palettes/fireworks/fireworksNeon/images/sample.png deleted file mode 100644 index 662c53090cc..00000000000 Binary files a/palettes/fireworks/fireworksNeon/images/sample.png and /dev/null differ diff --git a/palettes/fireworks/fireworksNeon/package.dist.json b/palettes/fireworks/fireworksNeon/package.dist.json deleted file mode 100644 index a77b76a6c30..00000000000 --- a/palettes/fireworks/fireworksNeon/package.dist.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "name": "@tsparticles/palette-fireworks-neon", - "version": "4.0.0-beta.12", - "description": "tsParticles fireworks neon palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fireworks/fireworksNeon" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "type": "module", - "jsdelivr": "tsparticles.palette-fireworks-neon.min.js", - "unpkg": "tsparticles.palette-fireworks-neon.min.js", - "publishConfig": { - "access": "public" - } -} diff --git a/palettes/fireworks/fireworksNeon/package.json b/palettes/fireworks/fireworksNeon/package.json deleted file mode 100644 index 30b111726cc..00000000000 --- a/palettes/fireworks/fireworksNeon/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-fireworks-neon", - "version": "4.0.0-beta.12", - "description": "tsParticles fireworks neon palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fireworks/fireworksNeon" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/fireworks/fireworksNeon/src/index.ts b/palettes/fireworks/fireworksNeon/src/index.ts deleted file mode 100644 index 299452763d3..00000000000 --- a/palettes/fireworks/fireworksNeon/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; - -const paletteName = "fireworks-neon"; - -/** - * @param engine - - */ -export async function loadFireworksNeonPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/fireworks/fireworksNeon/typedoc.json b/palettes/fireworks/fireworksNeon/typedoc.json deleted file mode 100644 index 8e19f0c5512..00000000000 --- a/palettes/fireworks/fireworksNeon/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Fireworks Neon Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/fireworks/fireworksNeon/webpack.config.js b/palettes/fireworks/fireworksNeon/webpack.config.js deleted file mode 100644 index 5243bce2f47..00000000000 --- a/palettes/fireworks/fireworksNeon/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-fireworks-neon", - paletteName: "Fireworks Neon Palette", - version, -}); diff --git a/palettes/fireworks/fireworksNeonStroke/CHANGELOG.md b/palettes/fireworks/fireworksNeonStroke/CHANGELOG.md deleted file mode 100644 index 44ef00cbe1f..00000000000 --- a/palettes/fireworks/fireworksNeonStroke/CHANGELOG.md +++ /dev/null @@ -1,18 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-fireworks-neon-stroke - -# 4.0.0-beta.0 (2026-04-08) - -### Features - -- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) - -# [4.0.0-alpha.5] - -**Note:** Initial version of package @tsparticles/palette-fireworks-neon-stroke diff --git a/palettes/fireworks/fireworksNeonStroke/README.md b/palettes/fireworks/fireworksNeonStroke/README.md deleted file mode 100644 index 7c9405fb0bb..00000000000 --- a/palettes/fireworks/fireworksNeonStroke/README.md +++ /dev/null @@ -1,68 +0,0 @@ -[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) - -# tsParticles Fireworks Neon Stroke Palette - -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-fireworks-neon-stroke/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-fireworks-neon-stroke) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-fireworks-neon-stroke.svg)](https://www.npmjs.com/package/@tsparticles/palette-fireworks-neon-stroke) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-fireworks-neon-stroke)](https://www.npmjs.com/package/@tsparticles/palette-fireworks-neon-stroke) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for fireworks neon stroke. - -[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) - -## Sample - -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fireworks/fireworksNeonStroke/images/sample.png)](https://particles.js.org/samples/palettes/fireworks-neon-stroke) - -## Colors - -See the palette source for stroke layer details. - -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadFireworksNeonStrokePalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## How to use it - -### CDN / Vanilla JS / jQuery - -```html - - -``` - -### Usage - -Once the scripts are loaded you can set up `tsParticles` like this: - -```javascript -(async engine => { - await loadBasic(engine); - await loadFireworksNeonStrokePalette(engine); - - const options = { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "fireworks-neon-stroke", - }; - - await engine.load({ - id: "tsparticles", - options, - }); -})(tsParticles); -``` - -## Related docs - -- Presets and palettes catalog: -- Main docs: diff --git a/palettes/fireworks/fireworksNeonStroke/images/sample.png b/palettes/fireworks/fireworksNeonStroke/images/sample.png deleted file mode 100644 index 3493a80c4df..00000000000 Binary files a/palettes/fireworks/fireworksNeonStroke/images/sample.png and /dev/null differ diff --git a/palettes/fireworks/fireworksNeonStroke/package.dist.json b/palettes/fireworks/fireworksNeonStroke/package.dist.json deleted file mode 100644 index 3adf817e21c..00000000000 --- a/palettes/fireworks/fireworksNeonStroke/package.dist.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "name": "@tsparticles/palette-fireworks-neon-stroke", - "version": "4.0.0-beta.12", - "description": "tsParticles fireworks neon stroke palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fireworks/fireworksNeonStroke" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "type": "module", - "jsdelivr": "tsparticles.palette-fireworks-neon-stroke.min.js", - "unpkg": "tsparticles.palette-fireworks-neon-stroke.min.js", - "publishConfig": { - "access": "public" - } -} diff --git a/palettes/fireworks/fireworksNeonStroke/package.json b/palettes/fireworks/fireworksNeonStroke/package.json deleted file mode 100644 index 69c51c473b4..00000000000 --- a/palettes/fireworks/fireworksNeonStroke/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-fireworks-neon-stroke", - "version": "4.0.0-beta.12", - "description": "tsParticles fireworks neon stroke palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fireworks/fireworksNeonStroke" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/fireworks/fireworksNeonStroke/src/index.ts b/palettes/fireworks/fireworksNeonStroke/src/index.ts deleted file mode 100644 index b57a7ea467c..00000000000 --- a/palettes/fireworks/fireworksNeonStroke/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; - -const paletteName = "fireworks-neon-stroke"; - -/** - * @param engine - - */ -export async function loadFireworksNeonStrokePalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/fireworks/fireworksNeonStroke/typedoc.json b/palettes/fireworks/fireworksNeonStroke/typedoc.json deleted file mode 100644 index dfd537f86eb..00000000000 --- a/palettes/fireworks/fireworksNeonStroke/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Fireworks Neon Stroke Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/fireworks/fireworksNeonStroke/webpack.config.js b/palettes/fireworks/fireworksNeonStroke/webpack.config.js deleted file mode 100644 index 52710839e80..00000000000 --- a/palettes/fireworks/fireworksNeonStroke/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-fireworks-neon-stroke", - paletteName: "Fireworks Neon Stroke Palette", - version, -}); diff --git a/palettes/fireworks/fireworksPastel/CHANGELOG.md b/palettes/fireworks/fireworksPastel/CHANGELOG.md deleted file mode 100644 index b3bf9c62596..00000000000 --- a/palettes/fireworks/fireworksPastel/CHANGELOG.md +++ /dev/null @@ -1,18 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-fireworks-pastel - -# 4.0.0-beta.0 (2026-04-08) - -### Features - -- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) - -# [4.0.0-alpha.5] - -**Note:** Initial version of package @tsparticles/palette-fireworks-pastel diff --git a/palettes/fireworks/fireworksPastel/README.md b/palettes/fireworks/fireworksPastel/README.md deleted file mode 100644 index 8f12f780ca8..00000000000 --- a/palettes/fireworks/fireworksPastel/README.md +++ /dev/null @@ -1,130 +0,0 @@ -[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) - -# tsParticles Fireworks Pastel Palette - -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-fireworks-pastel/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-fireworks-pastel) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-fireworks-pastel.svg)](https://www.npmjs.com/package/@tsparticles/palette-fireworks-pastel) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-fireworks-pastel)](https://www.npmjs.com/package/@tsparticles/palette-fireworks-pastel) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for fireworks pastel. - -[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) - -[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") - -## Sample - -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/fireworks/fireworksPastel/images/sample.png)](https://particles.js.org/samples/palettes/fireworks-pastel) - -## Colors - - - - - - - - - - - - - - - - - - - - - - -
-
- #FFD1DC -
-
- #FFE4B5 -
-
- #FFFACD -
-
- #B5EAD7 -
-
- #B5C8FF -
-
- #E8B5FF -
-
- #FFC8C8 -
-
- #FFFFFF -
-
- Background
- #1a1a2e -
- Blend mode: screen | Fill: true -
- -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadFireworksPastelPalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## How to use it - -### CDN / Vanilla JS / jQuery - -```html - - -``` - -### Usage - -Once the scripts are loaded you can set up `tsParticles` like this: - -```javascript -(async engine => { - await loadBasic(engine); - await loadFireworksPastelPalette(engine); - - const options = { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "fireworks-pastel", - }; - - await engine.load({ - id: "tsparticles", - options, - }); -})(tsParticles); -``` - -#### Customization - -**Important ⚠️** -You can override all the options defining the properties like in any standard `tsParticles` installation. - -### Frameworks with a tsParticles component library - -Checkout the documentation in the component library repository and call the `loadFireworksPastelPalette` function. - -## Related docs - -- Presets and palettes catalog: -- Main docs: diff --git a/palettes/fireworks/fireworksPastel/images/sample.png b/palettes/fireworks/fireworksPastel/images/sample.png deleted file mode 100644 index b010fd694b7..00000000000 Binary files a/palettes/fireworks/fireworksPastel/images/sample.png and /dev/null differ diff --git a/palettes/fireworks/fireworksPastel/package.dist.json b/palettes/fireworks/fireworksPastel/package.dist.json deleted file mode 100644 index 7bc98dcdccd..00000000000 --- a/palettes/fireworks/fireworksPastel/package.dist.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "name": "@tsparticles/palette-fireworks-pastel", - "version": "4.0.0-beta.12", - "description": "tsParticles fireworks pastel palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fireworks/fireworksPastel" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "type": "module", - "jsdelivr": "tsparticles.palette-fireworks-pastel.min.js", - "unpkg": "tsparticles.palette-fireworks-pastel.min.js", - "publishConfig": { - "access": "public" - } -} diff --git a/palettes/fireworks/fireworksPastel/package.json b/palettes/fireworks/fireworksPastel/package.json deleted file mode 100644 index 48ddf8d64a5..00000000000 --- a/palettes/fireworks/fireworksPastel/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-fireworks-pastel", - "version": "4.0.0-beta.12", - "description": "tsParticles fireworks pastel palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fireworks/fireworksPastel" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/fireworks/fireworksPastel/src/index.ts b/palettes/fireworks/fireworksPastel/src/index.ts deleted file mode 100644 index a5b860d00b7..00000000000 --- a/palettes/fireworks/fireworksPastel/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; - -const paletteName = "fireworks-pastel"; - -/** - * @param engine - - */ -export async function loadFireworksPastelPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/fireworks/fireworksPastel/typedoc.json b/palettes/fireworks/fireworksPastel/typedoc.json deleted file mode 100644 index cf3f452cc27..00000000000 --- a/palettes/fireworks/fireworksPastel/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Fireworks Pastel Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/fireworks/fireworksPastel/webpack.config.js b/palettes/fireworks/fireworksPastel/webpack.config.js deleted file mode 100644 index bc4f9c5a460..00000000000 --- a/palettes/fireworks/fireworksPastel/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-fireworks-pastel", - paletteName: "Fireworks Pastel Palette", - version, -}); diff --git a/palettes/fireworks/fireworksPastelStroke/CHANGELOG.md b/palettes/fireworks/fireworksPastelStroke/CHANGELOG.md deleted file mode 100644 index 9bd4266cc49..00000000000 --- a/palettes/fireworks/fireworksPastelStroke/CHANGELOG.md +++ /dev/null @@ -1,18 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-fireworks-pastel-stroke - -# 4.0.0-beta.0 (2026-04-08) - -### Features - -- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) - -# [4.0.0-alpha.5] - -**Note:** Initial version of package @tsparticles/palette-fireworks-pastel-stroke diff --git a/palettes/fireworks/fireworksPastelStroke/README.md b/palettes/fireworks/fireworksPastelStroke/README.md deleted file mode 100644 index 0827223ffad..00000000000 --- a/palettes/fireworks/fireworksPastelStroke/README.md +++ /dev/null @@ -1,68 +0,0 @@ -[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) - -# tsParticles Fireworks Pastel Stroke Palette - -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-fireworks-pastel-stroke/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-fireworks-pastel-stroke) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-fireworks-pastel-stroke.svg)](https://www.npmjs.com/package/@tsparticles/palette-fireworks-pastel-stroke) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-fireworks-pastel-stroke)](https://www.npmjs.com/package/@tsparticles/palette-fireworks-pastel-stroke) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for fireworks pastel stroke. - -[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) - -## Sample - -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fireworks/fireworksPastelStroke/images/sample.png)](https://particles.js.org/samples/palettes/fireworks-pastel-stroke) - -## Colors - -See the palette source for stroke layer details. - -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadFireworksPastelStrokePalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## How to use it - -### CDN / Vanilla JS / jQuery - -```html - - -``` - -### Usage - -Once the scripts are loaded you can set up `tsParticles` like this: - -```javascript -(async engine => { - await loadBasic(engine); - await loadFireworksPastelStrokePalette(engine); - - const options = { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "fireworks-pastel-stroke", - }; - - await engine.load({ - id: "tsparticles", - options, - }); -})(tsParticles); -``` - -## Related docs - -- Presets and palettes catalog: -- Main docs: diff --git a/palettes/fireworks/fireworksPastelStroke/images/sample.png b/palettes/fireworks/fireworksPastelStroke/images/sample.png deleted file mode 100644 index 2dfded55e4f..00000000000 Binary files a/palettes/fireworks/fireworksPastelStroke/images/sample.png and /dev/null differ diff --git a/palettes/fireworks/fireworksPastelStroke/package.dist.json b/palettes/fireworks/fireworksPastelStroke/package.dist.json deleted file mode 100644 index 05e06384809..00000000000 --- a/palettes/fireworks/fireworksPastelStroke/package.dist.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "name": "@tsparticles/palette-fireworks-pastel-stroke", - "version": "4.0.0-beta.12", - "description": "tsParticles fireworks pastel stroke palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fireworks/fireworksPastelStroke" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "type": "module", - "jsdelivr": "tsparticles.palette-fireworks-pastel-stroke.min.js", - "unpkg": "tsparticles.palette-fireworks-pastel-stroke.min.js", - "publishConfig": { - "access": "public" - } -} diff --git a/palettes/fireworks/fireworksPastelStroke/package.json b/palettes/fireworks/fireworksPastelStroke/package.json deleted file mode 100644 index 226c2a31ded..00000000000 --- a/palettes/fireworks/fireworksPastelStroke/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-fireworks-pastel-stroke", - "version": "4.0.0-beta.12", - "description": "tsParticles fireworks pastel stroke palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fireworks/fireworksPastelStroke" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/fireworks/fireworksPastelStroke/src/index.ts b/palettes/fireworks/fireworksPastelStroke/src/index.ts deleted file mode 100644 index b8fac638d2a..00000000000 --- a/palettes/fireworks/fireworksPastelStroke/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; - -const paletteName = "fireworks-pastel-stroke"; - -/** - * @param engine - - */ -export async function loadFireworksPastelStrokePalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/fireworks/fireworksPastelStroke/typedoc.json b/palettes/fireworks/fireworksPastelStroke/typedoc.json deleted file mode 100644 index 6f109c19669..00000000000 --- a/palettes/fireworks/fireworksPastelStroke/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Fireworks Pastel Stroke Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/fireworks/fireworksPastelStroke/webpack.config.js b/palettes/fireworks/fireworksPastelStroke/webpack.config.js deleted file mode 100644 index 287c7380c68..00000000000 --- a/palettes/fireworks/fireworksPastelStroke/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-fireworks-pastel-stroke", - paletteName: "Fireworks Pastel Stroke Palette", - version, -}); diff --git a/palettes/fireworks/fireworksPurple/CHANGELOG.md b/palettes/fireworks/fireworksPurple/CHANGELOG.md deleted file mode 100644 index 5c088036a8a..00000000000 --- a/palettes/fireworks/fireworksPurple/CHANGELOG.md +++ /dev/null @@ -1,18 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-fireworks-purple - -# 4.0.0-beta.0 (2026-04-08) - -### Features - -- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) - -# [4.0.0-alpha.5] - -**Note:** Initial version of package @tsparticles/palette-fireworks-purple diff --git a/palettes/fireworks/fireworksPurple/README.md b/palettes/fireworks/fireworksPurple/README.md deleted file mode 100644 index b548d38ac14..00000000000 --- a/palettes/fireworks/fireworksPurple/README.md +++ /dev/null @@ -1,126 +0,0 @@ -[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) - -# tsParticles Fireworks Purple Palette - -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-fireworks-purple/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-fireworks-purple) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-fireworks-purple.svg)](https://www.npmjs.com/package/@tsparticles/palette-fireworks-purple) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-fireworks-purple)](https://www.npmjs.com/package/@tsparticles/palette-fireworks-purple) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for fireworks purple. - -[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) - -[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") - -## Sample - -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/fireworks/fireworksPurple/images/sample.png)](https://particles.js.org/samples/palettes/fireworks-purple) - -## Colors - - - - - - - - - - - - - - - - - - - - - -
-
- #FFFFFF -
-
- #EEDDFF -
-
- #CC99FF -
-
- #AA55FF -
-
- #7700FF -
-
- #440088 -
-
- #110033 -
-
- Background
- #060011 -
- Blend mode: screen | Fill: true -
- -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadFireworksPurplePalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## How to use it - -### CDN / Vanilla JS / jQuery - -```html - - -``` - -### Usage - -Once the scripts are loaded you can set up `tsParticles` like this: - -```javascript -(async engine => { - await loadBasic(engine); - await loadFireworksPurplePalette(engine); - - const options = { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "fireworks-purple", - }; - - await engine.load({ - id: "tsparticles", - options, - }); -})(tsParticles); -``` - -#### Customization - -**Important ⚠️** -You can override all the options defining the properties like in any standard `tsParticles` installation. - -### Frameworks with a tsParticles component library - -Checkout the documentation in the component library repository and call the `loadFireworksPurplePalette` function. - -## Related docs - -- Presets and palettes catalog: -- Main docs: diff --git a/palettes/fireworks/fireworksPurple/images/sample.png b/palettes/fireworks/fireworksPurple/images/sample.png deleted file mode 100644 index 9ce991d2b4b..00000000000 Binary files a/palettes/fireworks/fireworksPurple/images/sample.png and /dev/null differ diff --git a/palettes/fireworks/fireworksPurple/package.dist.json b/palettes/fireworks/fireworksPurple/package.dist.json deleted file mode 100644 index c41dc8c43f5..00000000000 --- a/palettes/fireworks/fireworksPurple/package.dist.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "name": "@tsparticles/palette-fireworks-purple", - "version": "4.0.0-beta.12", - "description": "tsParticles fireworks purple palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fireworks/fireworksPurple" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "type": "module", - "jsdelivr": "tsparticles.palette-fireworks-purple.min.js", - "unpkg": "tsparticles.palette-fireworks-purple.min.js", - "publishConfig": { - "access": "public" - } -} diff --git a/palettes/fireworks/fireworksPurple/package.json b/palettes/fireworks/fireworksPurple/package.json deleted file mode 100644 index b5b2cb995b7..00000000000 --- a/palettes/fireworks/fireworksPurple/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-fireworks-purple", - "version": "4.0.0-beta.12", - "description": "tsParticles fireworks purple palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fireworks/fireworksPurple" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/fireworks/fireworksPurple/src/index.ts b/palettes/fireworks/fireworksPurple/src/index.ts deleted file mode 100644 index c367bcecd5a..00000000000 --- a/palettes/fireworks/fireworksPurple/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; - -const paletteName = "fireworks-purple"; - -/** - * @param engine - - */ -export async function loadFireworksPurplePalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/fireworks/fireworksPurple/typedoc.json b/palettes/fireworks/fireworksPurple/typedoc.json deleted file mode 100644 index a0a70ba413f..00000000000 --- a/palettes/fireworks/fireworksPurple/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Fireworks Purple Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/fireworks/fireworksPurple/webpack.config.js b/palettes/fireworks/fireworksPurple/webpack.config.js deleted file mode 100644 index f653647cb8b..00000000000 --- a/palettes/fireworks/fireworksPurple/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-fireworks-purple", - paletteName: "Fireworks Purple Palette", - version, -}); diff --git a/palettes/fireworks/fireworksPurpleStroke/CHANGELOG.md b/palettes/fireworks/fireworksPurpleStroke/CHANGELOG.md deleted file mode 100644 index e34149e5abf..00000000000 --- a/palettes/fireworks/fireworksPurpleStroke/CHANGELOG.md +++ /dev/null @@ -1,18 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-fireworks-purple-stroke - -# 4.0.0-beta.0 (2026-04-08) - -### Features - -- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) - -# [4.0.0-alpha.5] - -**Note:** Initial version of package @tsparticles/palette-fireworks-purple-stroke diff --git a/palettes/fireworks/fireworksPurpleStroke/README.md b/palettes/fireworks/fireworksPurpleStroke/README.md deleted file mode 100644 index da11c6e912d..00000000000 --- a/palettes/fireworks/fireworksPurpleStroke/README.md +++ /dev/null @@ -1,68 +0,0 @@ -[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) - -# tsParticles Fireworks Purple Stroke Palette - -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-fireworks-purple-stroke/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-fireworks-purple-stroke) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-fireworks-purple-stroke.svg)](https://www.npmjs.com/package/@tsparticles/palette-fireworks-purple-stroke) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-fireworks-purple-stroke)](https://www.npmjs.com/package/@tsparticles/palette-fireworks-purple-stroke) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for fireworks purple stroke. - -[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) - -## Sample - -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fireworks/fireworksPurpleStroke/images/sample.png)](https://particles.js.org/samples/palettes/fireworks-purple-stroke) - -## Colors - -See the palette source for stroke layer details. - -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadFireworksPurpleStrokePalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## How to use it - -### CDN / Vanilla JS / jQuery - -```html - - -``` - -### Usage - -Once the scripts are loaded you can set up `tsParticles` like this: - -```javascript -(async engine => { - await loadBasic(engine); - await loadFireworksPurpleStrokePalette(engine); - - const options = { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "fireworks-purple-stroke", - }; - - await engine.load({ - id: "tsparticles", - options, - }); -})(tsParticles); -``` - -## Related docs - -- Presets and palettes catalog: -- Main docs: diff --git a/palettes/fireworks/fireworksPurpleStroke/images/sample.png b/palettes/fireworks/fireworksPurpleStroke/images/sample.png deleted file mode 100644 index b342f524ed1..00000000000 Binary files a/palettes/fireworks/fireworksPurpleStroke/images/sample.png and /dev/null differ diff --git a/palettes/fireworks/fireworksPurpleStroke/package.dist.json b/palettes/fireworks/fireworksPurpleStroke/package.dist.json deleted file mode 100644 index abd8e203cd2..00000000000 --- a/palettes/fireworks/fireworksPurpleStroke/package.dist.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "name": "@tsparticles/palette-fireworks-purple-stroke", - "version": "4.0.0-beta.12", - "description": "tsParticles fireworks purple stroke palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fireworks/fireworksPurpleStroke" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "type": "module", - "jsdelivr": "tsparticles.palette-fireworks-purple-stroke.min.js", - "unpkg": "tsparticles.palette-fireworks-purple-stroke.min.js", - "publishConfig": { - "access": "public" - } -} diff --git a/palettes/fireworks/fireworksPurpleStroke/package.json b/palettes/fireworks/fireworksPurpleStroke/package.json deleted file mode 100644 index 53f4fabad73..00000000000 --- a/palettes/fireworks/fireworksPurpleStroke/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-fireworks-purple-stroke", - "version": "4.0.0-beta.12", - "description": "tsParticles fireworks purple stroke palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fireworks/fireworksPurpleStroke" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/fireworks/fireworksPurpleStroke/src/index.ts b/palettes/fireworks/fireworksPurpleStroke/src/index.ts deleted file mode 100644 index 28a47090810..00000000000 --- a/palettes/fireworks/fireworksPurpleStroke/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; - -const paletteName = "fireworks-purple-stroke"; - -/** - * @param engine - - */ -export async function loadFireworksPurpleStrokePalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/fireworks/fireworksPurpleStroke/typedoc.json b/palettes/fireworks/fireworksPurpleStroke/typedoc.json deleted file mode 100644 index 1d45ab36515..00000000000 --- a/palettes/fireworks/fireworksPurpleStroke/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Fireworks Purple Stroke Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/fireworks/fireworksPurpleStroke/webpack.config.js b/palettes/fireworks/fireworksPurpleStroke/webpack.config.js deleted file mode 100644 index 4c8d75109e0..00000000000 --- a/palettes/fireworks/fireworksPurpleStroke/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-fireworks-purple-stroke", - paletteName: "Fireworks Purple Stroke Palette", - version, -}); diff --git a/palettes/fireworks/fireworksRainbowStroke/CHANGELOG.md b/palettes/fireworks/fireworksRainbowStroke/CHANGELOG.md deleted file mode 100644 index 6e4b5fe2a62..00000000000 --- a/palettes/fireworks/fireworksRainbowStroke/CHANGELOG.md +++ /dev/null @@ -1,18 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-fireworks-rainbow-stroke - -# 4.0.0-beta.0 (2026-04-08) - -### Features - -- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) - -# [4.0.0-alpha.5] - -**Note:** Initial version of package @tsparticles/palette-fireworks-rainbow-stroke diff --git a/palettes/fireworks/fireworksRainbowStroke/README.md b/palettes/fireworks/fireworksRainbowStroke/README.md deleted file mode 100644 index c8cc672d5b0..00000000000 --- a/palettes/fireworks/fireworksRainbowStroke/README.md +++ /dev/null @@ -1,79 +0,0 @@ -[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) - -# tsParticles Fireworks Rainbow Stroke Palette - -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-fireworks-rainbow-stroke/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-fireworks-rainbow-stroke) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-fireworks-rainbow-stroke.svg)](https://www.npmjs.com/package/@tsparticles/palette-fireworks-rainbow-stroke) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-fireworks-rainbow-stroke)](https://www.npmjs.com/package/@tsparticles/palette-fireworks-rainbow-stroke) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for fireworks rainbow stroke. - -[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) - -[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") - -## Sample - -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/fireworks/fireworksRainbowStroke/images/sample.png)](https://particles.js.org/samples/palettes/fireworks-rainbow-stroke) - -## Colors - -See the palette source for stroke layer details. - -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadFireworksRainbowStrokePalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## How to use it - -### CDN / Vanilla JS / jQuery - -```html - - -``` - -### Usage - -Once the scripts are loaded you can set up `tsParticles` like this: - -```javascript -(async engine => { - await loadBasic(engine); - await loadFireworksRainbowStrokePalette(engine); - - const options = { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "fireworks-rainbow-stroke", - }; - - await engine.load({ - id: "tsparticles", - options, - }); -})(tsParticles); -``` - -#### Customization - -**Important ⚠️** -You can override all the options defining the properties like in any standard `tsParticles` installation. - -### Frameworks with a tsParticles component library - -Checkout the documentation in the component library repository and call the `loadFireworksRainbowStrokePalette` function. - -## Related docs - -- Presets and palettes catalog: -- Main docs: diff --git a/palettes/fireworks/fireworksRainbowStroke/images/sample.png b/palettes/fireworks/fireworksRainbowStroke/images/sample.png deleted file mode 100644 index 8f2381d4ef6..00000000000 Binary files a/palettes/fireworks/fireworksRainbowStroke/images/sample.png and /dev/null differ diff --git a/palettes/fireworks/fireworksRainbowStroke/package.dist.json b/palettes/fireworks/fireworksRainbowStroke/package.dist.json deleted file mode 100644 index 09e8314fc7e..00000000000 --- a/palettes/fireworks/fireworksRainbowStroke/package.dist.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "name": "@tsparticles/palette-fireworks-rainbow-stroke", - "version": "4.0.0-beta.12", - "description": "tsParticles fireworks rainbow stroke palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fireworks/fireworksRainbowStroke" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "type": "module", - "jsdelivr": "tsparticles.palette-fireworks-rainbow-stroke.min.js", - "unpkg": "tsparticles.palette-fireworks-rainbow-stroke.min.js", - "publishConfig": { - "access": "public" - } -} diff --git a/palettes/fireworks/fireworksRainbowStroke/package.json b/palettes/fireworks/fireworksRainbowStroke/package.json deleted file mode 100644 index 3bb25241c52..00000000000 --- a/palettes/fireworks/fireworksRainbowStroke/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-fireworks-rainbow-stroke", - "version": "4.0.0-beta.12", - "description": "tsParticles fireworks rainbow stroke palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fireworks/fireworksRainbowStroke" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/fireworks/fireworksRainbowStroke/src/index.ts b/palettes/fireworks/fireworksRainbowStroke/src/index.ts deleted file mode 100644 index 258cc98e009..00000000000 --- a/palettes/fireworks/fireworksRainbowStroke/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; - -const paletteName = "fireworks-rainbow-stroke"; - -/** - * @param engine - - */ -export async function loadFireworksRainbowStrokePalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/fireworks/fireworksRainbowStroke/typedoc.json b/palettes/fireworks/fireworksRainbowStroke/typedoc.json deleted file mode 100644 index c746f90b18a..00000000000 --- a/palettes/fireworks/fireworksRainbowStroke/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Fireworks Rainbow Stroke Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/fireworks/fireworksRainbowStroke/webpack.config.js b/palettes/fireworks/fireworksRainbowStroke/webpack.config.js deleted file mode 100644 index b73ccdf0e5d..00000000000 --- a/palettes/fireworks/fireworksRainbowStroke/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-fireworks-rainbow-stroke", - paletteName: "Fireworks Rainbow Stroke Palette", - version, -}); diff --git a/palettes/fireworks/fireworksRed/CHANGELOG.md b/palettes/fireworks/fireworksRed/CHANGELOG.md deleted file mode 100644 index da3b4c93d0a..00000000000 --- a/palettes/fireworks/fireworksRed/CHANGELOG.md +++ /dev/null @@ -1,18 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-fireworks-red - -# 4.0.0-beta.0 (2026-04-08) - -### Features - -- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) - -# [4.0.0-alpha.5] - -**Note:** Initial version of package @tsparticles/palette-fireworks-red diff --git a/palettes/fireworks/fireworksRed/README.md b/palettes/fireworks/fireworksRed/README.md deleted file mode 100644 index ff005f84155..00000000000 --- a/palettes/fireworks/fireworksRed/README.md +++ /dev/null @@ -1,126 +0,0 @@ -[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) - -# tsParticles Fireworks Red Palette - -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-fireworks-red/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-fireworks-red) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-fireworks-red.svg)](https://www.npmjs.com/package/@tsparticles/palette-fireworks-red) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-fireworks-red)](https://www.npmjs.com/package/@tsparticles/palette-fireworks-red) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for fireworks red. - -[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) - -[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") - -## Sample - -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/fireworks/fireworksRed/images/sample.png)](https://particles.js.org/samples/palettes/fireworks-red) - -## Colors - - - - - - - - - - - - - - - - - - - - - -
-
- #FFFFFF -
-
- #FFDDCC -
-
- #FF9966 -
-
- #FF4422 -
-
- #CC1100 -
-
- #880000 -
-
- #330000 -
-
- Background
- #110000 -
- Blend mode: screen | Fill: true -
- -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadFireworksRedPalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## How to use it - -### CDN / Vanilla JS / jQuery - -```html - - -``` - -### Usage - -Once the scripts are loaded you can set up `tsParticles` like this: - -```javascript -(async engine => { - await loadBasic(engine); - await loadFireworksRedPalette(engine); - - const options = { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "fireworks-red", - }; - - await engine.load({ - id: "tsparticles", - options, - }); -})(tsParticles); -``` - -#### Customization - -**Important ⚠️** -You can override all the options defining the properties like in any standard `tsParticles` installation. - -### Frameworks with a tsParticles component library - -Checkout the documentation in the component library repository and call the `loadFireworksRedPalette` function. - -## Related docs - -- Presets and palettes catalog: -- Main docs: diff --git a/palettes/fireworks/fireworksRed/images/sample.png b/palettes/fireworks/fireworksRed/images/sample.png deleted file mode 100644 index f3c53d2191b..00000000000 Binary files a/palettes/fireworks/fireworksRed/images/sample.png and /dev/null differ diff --git a/palettes/fireworks/fireworksRed/package.dist.json b/palettes/fireworks/fireworksRed/package.dist.json deleted file mode 100644 index b84eb0994d1..00000000000 --- a/palettes/fireworks/fireworksRed/package.dist.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "name": "@tsparticles/palette-fireworks-red", - "version": "4.0.0-beta.12", - "description": "tsParticles fireworks red palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fireworks/fireworksRed" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "type": "module", - "jsdelivr": "tsparticles.palette-fireworks-red.min.js", - "unpkg": "tsparticles.palette-fireworks-red.min.js", - "publishConfig": { - "access": "public" - } -} diff --git a/palettes/fireworks/fireworksRed/package.json b/palettes/fireworks/fireworksRed/package.json deleted file mode 100644 index 2f6ce062baa..00000000000 --- a/palettes/fireworks/fireworksRed/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-fireworks-red", - "version": "4.0.0-beta.12", - "description": "tsParticles fireworks red palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fireworks/fireworksRed" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/fireworks/fireworksRed/src/index.ts b/palettes/fireworks/fireworksRed/src/index.ts deleted file mode 100644 index 3e77ba5a995..00000000000 --- a/palettes/fireworks/fireworksRed/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; - -const paletteName = "fireworks-red"; - -/** - * @param engine - - */ -export async function loadFireworksRedPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/fireworks/fireworksRed/typedoc.json b/palettes/fireworks/fireworksRed/typedoc.json deleted file mode 100644 index 00ce288e7a3..00000000000 --- a/palettes/fireworks/fireworksRed/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Fireworks Red Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/fireworks/fireworksRed/webpack.config.js b/palettes/fireworks/fireworksRed/webpack.config.js deleted file mode 100644 index 9bb30a593bd..00000000000 --- a/palettes/fireworks/fireworksRed/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-fireworks-red", - paletteName: "Fireworks Red Palette", - version, -}); diff --git a/palettes/fireworks/fireworksRedStroke/CHANGELOG.md b/palettes/fireworks/fireworksRedStroke/CHANGELOG.md deleted file mode 100644 index 2b654b22d95..00000000000 --- a/palettes/fireworks/fireworksRedStroke/CHANGELOG.md +++ /dev/null @@ -1,18 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-fireworks-red-stroke - -# 4.0.0-beta.0 (2026-04-08) - -### Features - -- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) - -# [4.0.0-alpha.5] - -**Note:** Initial version of package @tsparticles/palette-fireworks-red-stroke diff --git a/palettes/fireworks/fireworksRedStroke/README.md b/palettes/fireworks/fireworksRedStroke/README.md deleted file mode 100644 index fc268399ff5..00000000000 --- a/palettes/fireworks/fireworksRedStroke/README.md +++ /dev/null @@ -1,68 +0,0 @@ -[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) - -# tsParticles Fireworks Red Stroke Palette - -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-fireworks-red-stroke/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-fireworks-red-stroke) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-fireworks-red-stroke.svg)](https://www.npmjs.com/package/@tsparticles/palette-fireworks-red-stroke) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-fireworks-red-stroke)](https://www.npmjs.com/package/@tsparticles/palette-fireworks-red-stroke) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for fireworks red stroke. - -[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) - -## Sample - -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fireworks/fireworksRedStroke/images/sample.png)](https://particles.js.org/samples/palettes/fireworks-red-stroke) - -## Colors - -See the palette source for stroke layer details. - -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadFireworksRedStrokePalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## How to use it - -### CDN / Vanilla JS / jQuery - -```html - - -``` - -### Usage - -Once the scripts are loaded you can set up `tsParticles` like this: - -```javascript -(async engine => { - await loadBasic(engine); - await loadFireworksRedStrokePalette(engine); - - const options = { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "fireworks-red-stroke", - }; - - await engine.load({ - id: "tsparticles", - options, - }); -})(tsParticles); -``` - -## Related docs - -- Presets and palettes catalog: -- Main docs: diff --git a/palettes/fireworks/fireworksRedStroke/images/sample.png b/palettes/fireworks/fireworksRedStroke/images/sample.png deleted file mode 100644 index 0791d2bc726..00000000000 Binary files a/palettes/fireworks/fireworksRedStroke/images/sample.png and /dev/null differ diff --git a/palettes/fireworks/fireworksRedStroke/package.dist.json b/palettes/fireworks/fireworksRedStroke/package.dist.json deleted file mode 100644 index 63097248fb5..00000000000 --- a/palettes/fireworks/fireworksRedStroke/package.dist.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "name": "@tsparticles/palette-fireworks-red-stroke", - "version": "4.0.0-beta.12", - "description": "tsParticles fireworks red stroke palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fireworks/fireworksRedStroke" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "type": "module", - "jsdelivr": "tsparticles.palette-fireworks-red-stroke.min.js", - "unpkg": "tsparticles.palette-fireworks-red-stroke.min.js", - "publishConfig": { - "access": "public" - } -} diff --git a/palettes/fireworks/fireworksRedStroke/package.json b/palettes/fireworks/fireworksRedStroke/package.json deleted file mode 100644 index ec58ece8430..00000000000 --- a/palettes/fireworks/fireworksRedStroke/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-fireworks-red-stroke", - "version": "4.0.0-beta.12", - "description": "tsParticles fireworks red stroke palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fireworks/fireworksRedStroke" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/fireworks/fireworksRedStroke/src/index.ts b/palettes/fireworks/fireworksRedStroke/src/index.ts deleted file mode 100644 index 9da7acbc26a..00000000000 --- a/palettes/fireworks/fireworksRedStroke/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; - -const paletteName = "fireworks-red-stroke"; - -/** - * @param engine - - */ -export async function loadFireworksRedStrokePalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/fireworks/fireworksRedStroke/typedoc.json b/palettes/fireworks/fireworksRedStroke/typedoc.json deleted file mode 100644 index b1cf36a9d74..00000000000 --- a/palettes/fireworks/fireworksRedStroke/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Fireworks Red Stroke Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/fireworks/fireworksRedStroke/webpack.config.js b/palettes/fireworks/fireworksRedStroke/webpack.config.js deleted file mode 100644 index 67210049341..00000000000 --- a/palettes/fireworks/fireworksRedStroke/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-fireworks-red-stroke", - paletteName: "Fireworks Red Stroke Palette", - version, -}); diff --git a/palettes/fireworks/fireworksSilver/CHANGELOG.md b/palettes/fireworks/fireworksSilver/CHANGELOG.md deleted file mode 100644 index 4ce182f7fa5..00000000000 --- a/palettes/fireworks/fireworksSilver/CHANGELOG.md +++ /dev/null @@ -1,18 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-fireworks-silver - -# 4.0.0-beta.0 (2026-04-08) - -### Features - -- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) - -# [4.0.0-alpha.5] - -**Note:** Initial version of package @tsparticles/palette-fireworks-silver diff --git a/palettes/fireworks/fireworksSilver/README.md b/palettes/fireworks/fireworksSilver/README.md deleted file mode 100644 index 2c272d55c44..00000000000 --- a/palettes/fireworks/fireworksSilver/README.md +++ /dev/null @@ -1,126 +0,0 @@ -[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) - -# tsParticles Fireworks Silver Palette - -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-fireworks-silver/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-fireworks-silver) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-fireworks-silver.svg)](https://www.npmjs.com/package/@tsparticles/palette-fireworks-silver) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-fireworks-silver)](https://www.npmjs.com/package/@tsparticles/palette-fireworks-silver) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for fireworks silver. - -[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) - -[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") - -## Sample - -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/fireworks/fireworksSilver/images/sample.png)](https://particles.js.org/samples/palettes/fireworks-silver) - -## Colors - - - - - - - - - - - - - - - - - - - - - -
-
- #FFFFFF -
-
- #EEEEFF -
-
- #CCCCDD -
-
- #AAAACC -
-
- #8888BB -
-
- #555577 -
-
- #111133 -
-
- Background
- #000000 -
- Blend mode: screen | Fill: true -
- -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadFireworksSilverPalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## How to use it - -### CDN / Vanilla JS / jQuery - -```html - - -``` - -### Usage - -Once the scripts are loaded you can set up `tsParticles` like this: - -```javascript -(async engine => { - await loadBasic(engine); - await loadFireworksSilverPalette(engine); - - const options = { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "fireworks-silver", - }; - - await engine.load({ - id: "tsparticles", - options, - }); -})(tsParticles); -``` - -#### Customization - -**Important ⚠️** -You can override all the options defining the properties like in any standard `tsParticles` installation. - -### Frameworks with a tsParticles component library - -Checkout the documentation in the component library repository and call the `loadFireworksSilverPalette` function. - -## Related docs - -- Presets and palettes catalog: -- Main docs: diff --git a/palettes/fireworks/fireworksSilver/images/sample.png b/palettes/fireworks/fireworksSilver/images/sample.png deleted file mode 100644 index e4be624654f..00000000000 Binary files a/palettes/fireworks/fireworksSilver/images/sample.png and /dev/null differ diff --git a/palettes/fireworks/fireworksSilver/package.dist.json b/palettes/fireworks/fireworksSilver/package.dist.json deleted file mode 100644 index d969be8f1c6..00000000000 --- a/palettes/fireworks/fireworksSilver/package.dist.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "name": "@tsparticles/palette-fireworks-silver", - "version": "4.0.0-beta.12", - "description": "tsParticles fireworks silver palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fireworks/fireworksSilver" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "type": "module", - "jsdelivr": "tsparticles.palette-fireworks-silver.min.js", - "unpkg": "tsparticles.palette-fireworks-silver.min.js", - "publishConfig": { - "access": "public" - } -} diff --git a/palettes/fireworks/fireworksSilver/package.json b/palettes/fireworks/fireworksSilver/package.json deleted file mode 100644 index 01bf5703bc7..00000000000 --- a/palettes/fireworks/fireworksSilver/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-fireworks-silver", - "version": "4.0.0-beta.12", - "description": "tsParticles fireworks silver palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fireworks/fireworksSilver" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/fireworks/fireworksSilver/src/index.ts b/palettes/fireworks/fireworksSilver/src/index.ts deleted file mode 100644 index c18dfb949ba..00000000000 --- a/palettes/fireworks/fireworksSilver/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; - -const paletteName = "fireworks-silver"; - -/** - * @param engine - - */ -export async function loadFireworksSilverPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/fireworks/fireworksSilver/typedoc.json b/palettes/fireworks/fireworksSilver/typedoc.json deleted file mode 100644 index d1078fd0c1c..00000000000 --- a/palettes/fireworks/fireworksSilver/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Fireworks Silver Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/fireworks/fireworksSilver/webpack.config.js b/palettes/fireworks/fireworksSilver/webpack.config.js deleted file mode 100644 index 048bcdc49a6..00000000000 --- a/palettes/fireworks/fireworksSilver/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-fireworks-silver", - paletteName: "Fireworks Silver Palette", - version, -}); diff --git a/palettes/fireworks/fireworksSilverStroke/CHANGELOG.md b/palettes/fireworks/fireworksSilverStroke/CHANGELOG.md deleted file mode 100644 index baa617fab61..00000000000 --- a/palettes/fireworks/fireworksSilverStroke/CHANGELOG.md +++ /dev/null @@ -1,18 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-fireworks-silver-stroke - -# 4.0.0-beta.0 (2026-04-08) - -### Features - -- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) - -# [4.0.0-alpha.5] - -**Note:** Initial version of package @tsparticles/palette-fireworks-silver-stroke diff --git a/palettes/fireworks/fireworksSilverStroke/README.md b/palettes/fireworks/fireworksSilverStroke/README.md deleted file mode 100644 index 9b7a941ea02..00000000000 --- a/palettes/fireworks/fireworksSilverStroke/README.md +++ /dev/null @@ -1,68 +0,0 @@ -[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) - -# tsParticles Fireworks Silver Stroke Palette - -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-fireworks-silver-stroke/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-fireworks-silver-stroke) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-fireworks-silver-stroke.svg)](https://www.npmjs.com/package/@tsparticles/palette-fireworks-silver-stroke) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-fireworks-silver-stroke)](https://www.npmjs.com/package/@tsparticles/palette-fireworks-silver-stroke) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for fireworks silver stroke. - -[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) - -## Sample - -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fireworks/fireworksSilverStroke/images/sample.png)](https://particles.js.org/samples/palettes/fireworks-silver-stroke) - -## Colors - -See the palette source for stroke layer details. - -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadFireworksSilverStrokePalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## How to use it - -### CDN / Vanilla JS / jQuery - -```html - - -``` - -### Usage - -Once the scripts are loaded you can set up `tsParticles` like this: - -```javascript -(async engine => { - await loadBasic(engine); - await loadFireworksSilverStrokePalette(engine); - - const options = { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "fireworks-silver-stroke", - }; - - await engine.load({ - id: "tsparticles", - options, - }); -})(tsParticles); -``` - -## Related docs - -- Presets and palettes catalog: -- Main docs: diff --git a/palettes/fireworks/fireworksSilverStroke/images/sample.png b/palettes/fireworks/fireworksSilverStroke/images/sample.png deleted file mode 100644 index 92e759c9972..00000000000 Binary files a/palettes/fireworks/fireworksSilverStroke/images/sample.png and /dev/null differ diff --git a/palettes/fireworks/fireworksSilverStroke/package.dist.json b/palettes/fireworks/fireworksSilverStroke/package.dist.json deleted file mode 100644 index 4d5a84971a5..00000000000 --- a/palettes/fireworks/fireworksSilverStroke/package.dist.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "name": "@tsparticles/palette-fireworks-silver-stroke", - "version": "4.0.0-beta.12", - "description": "tsParticles fireworks silver stroke palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fireworks/fireworksSilverStroke" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "type": "module", - "jsdelivr": "tsparticles.palette-fireworks-silver-stroke.min.js", - "unpkg": "tsparticles.palette-fireworks-silver-stroke.min.js", - "publishConfig": { - "access": "public" - } -} diff --git a/palettes/fireworks/fireworksSilverStroke/package.json b/palettes/fireworks/fireworksSilverStroke/package.json deleted file mode 100644 index 17bc05c5971..00000000000 --- a/palettes/fireworks/fireworksSilverStroke/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-fireworks-silver-stroke", - "version": "4.0.0-beta.12", - "description": "tsParticles fireworks silver stroke palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/fireworks/fireworksSilverStroke" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/fireworks/fireworksSilverStroke/src/index.ts b/palettes/fireworks/fireworksSilverStroke/src/index.ts deleted file mode 100644 index 1d54bc1395e..00000000000 --- a/palettes/fireworks/fireworksSilverStroke/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; - -const paletteName = "fireworks-silver-stroke"; - -/** - * @param engine - - */ -export async function loadFireworksSilverStrokePalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/fireworks/fireworksSilverStroke/typedoc.json b/palettes/fireworks/fireworksSilverStroke/typedoc.json deleted file mode 100644 index 6142930deaf..00000000000 --- a/palettes/fireworks/fireworksSilverStroke/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Fireworks Silver Stroke Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/fireworks/fireworksSilverStroke/webpack.config.js b/palettes/fireworks/fireworksSilverStroke/webpack.config.js deleted file mode 100644 index 7b8bbec55ce..00000000000 --- a/palettes/fireworks/fireworksSilverStroke/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-fireworks-silver-stroke", - paletteName: "Fireworks Silver Stroke Palette", - version, -}); diff --git a/palettes/fireworks/fireworksIceStroke/.browserslistrc b/palettes/fireworks/gold/.browserslistrc similarity index 100% rename from palettes/fireworks/fireworksIceStroke/.browserslistrc rename to palettes/fireworks/gold/.browserslistrc diff --git a/palettes/fireworks/gold/CHANGELOG.md b/palettes/fireworks/gold/CHANGELOG.md new file mode 100644 index 00000000000..937ea97127c --- /dev/null +++ b/palettes/fireworks/gold/CHANGELOG.md @@ -0,0 +1,22 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-fireworks-gold + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-fireworks-gold + +# 4.0.0-beta.0 (2026-04-08) + +### Features + +- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) + +# [4.0.0-alpha.5](https://github.com/tsparticles/palettes/compare/v4.0.0-alpha.4...v4.0.0-alpha.5) (2026-03-31) + +**Note:** Version bump only for package @tsparticles/palette-fireworks-gold diff --git a/palettes/fireworks/fireworksRed/LICENSE b/palettes/fireworks/gold/LICENSE similarity index 100% rename from palettes/fireworks/fireworksRed/LICENSE rename to palettes/fireworks/gold/LICENSE diff --git a/palettes/fireworks/gold/README.md b/palettes/fireworks/gold/README.md new file mode 100644 index 00000000000..bb87ada9326 --- /dev/null +++ b/palettes/fireworks/gold/README.md @@ -0,0 +1,126 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Gold Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-gold/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-gold) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-gold.svg)](https://www.npmjs.com/package/@tsparticles/palette-gold) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-gold) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fireworks/gold/images/sample.png)](https://particles.js.org/samples/palettes/gold) + +## Colors + + + + + + + + + + + + + + + + + + + + + +
+
+ #FFFFFF +
+
+ #FFEECC +
+
+ #FFCC44 +
+
+ #FFAA00 +
+
+ #FF6600 +
+
+ #AA2200 +
+
+ #330000 +
+
+ Background
+ #000000 +
+ Blend mode: screen | Fill: true +
+ +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadGoldPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadGoldPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "gold", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadGoldPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/fireworks/fireworksGold/eslint.config.js b/palettes/fireworks/gold/eslint.config.js similarity index 100% rename from palettes/fireworks/fireworksGold/eslint.config.js rename to palettes/fireworks/gold/eslint.config.js diff --git a/palettes/fireworks/fireworksGold/images/sample.png b/palettes/fireworks/gold/images/sample.png similarity index 100% rename from palettes/fireworks/fireworksGold/images/sample.png rename to palettes/fireworks/gold/images/sample.png diff --git a/palettes/fireworks/gold/package.dist.json b/palettes/fireworks/gold/package.dist.json new file mode 100644 index 00000000000..22788fed85f --- /dev/null +++ b/palettes/fireworks/gold/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-fireworks-gold", + "version": "4.0.0-beta.15", + "description": "tsParticles fireworks - gold palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fireworks/gold" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/fireworks/gold/package.json b/palettes/fireworks/gold/package.json new file mode 100644 index 00000000000..b4b02e93325 --- /dev/null +++ b/palettes/fireworks/gold/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-fireworks-gold", + "version": "4.0.0-beta.15", + "description": "tsParticles fireworks - gold palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fireworks/gold" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/fireworks/gold/rollup.config.js b/palettes/fireworks/gold/rollup.config.js new file mode 100644 index 00000000000..b9badc6be85 --- /dev/null +++ b/palettes/fireworks/gold/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-gold", + paletteName: "Gold Palette", + version, +}); diff --git a/palettes/fireworks/gold/src/browser.ts b/palettes/fireworks/gold/src/browser.ts new file mode 100644 index 00000000000..3040f8be485 --- /dev/null +++ b/palettes/fireworks/gold/src/browser.ts @@ -0,0 +1,10 @@ +import { loadFireworksGoldPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadFireworksGoldPalette?: typeof loadFireworksGoldPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadFireworksGoldPalette = loadFireworksGoldPalette; + +export * from "./index.js"; diff --git a/palettes/fireworks/gold/src/index.lazy.ts b/palettes/fireworks/gold/src/index.lazy.ts new file mode 100644 index 00000000000..47ed82be47d --- /dev/null +++ b/palettes/fireworks/gold/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "fireworks-gold"; + +/** + * @param engine - + */ +export async function loadFireworksGoldPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fireworks/gold/src/index.ts b/palettes/fireworks/gold/src/index.ts new file mode 100644 index 00000000000..8b6682dbb87 --- /dev/null +++ b/palettes/fireworks/gold/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "fireworks-gold"; + +/** + * @param engine - + */ +export async function loadFireworksGoldPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fireworks/fireworksGold/src/options.ts b/palettes/fireworks/gold/src/options.ts similarity index 100% rename from palettes/fireworks/fireworksGold/src/options.ts rename to palettes/fireworks/gold/src/options.ts diff --git a/palettes/fireworks/fireworksMulticolorStroke/tsconfig.base.json b/palettes/fireworks/gold/tsconfig.base.json similarity index 100% rename from palettes/fireworks/fireworksMulticolorStroke/tsconfig.base.json rename to palettes/fireworks/gold/tsconfig.base.json diff --git a/palettes/fireworks/fireworksGoldStroke/tsconfig.browser.json b/palettes/fireworks/gold/tsconfig.browser.json similarity index 100% rename from palettes/fireworks/fireworksGoldStroke/tsconfig.browser.json rename to palettes/fireworks/gold/tsconfig.browser.json diff --git a/palettes/fireworks/fireworksGoldStroke/tsconfig.json b/palettes/fireworks/gold/tsconfig.json similarity index 100% rename from palettes/fireworks/fireworksGoldStroke/tsconfig.json rename to palettes/fireworks/gold/tsconfig.json diff --git a/palettes/fireworks/fireworksGoldStroke/tsconfig.module.json b/palettes/fireworks/gold/tsconfig.module.json similarity index 100% rename from palettes/fireworks/fireworksGoldStroke/tsconfig.module.json rename to palettes/fireworks/gold/tsconfig.module.json diff --git a/palettes/fireworks/fireworksGoldStroke/tsconfig.types.json b/palettes/fireworks/gold/tsconfig.types.json similarity index 100% rename from palettes/fireworks/fireworksGoldStroke/tsconfig.types.json rename to palettes/fireworks/gold/tsconfig.types.json diff --git a/palettes/fireworks/gold/typedoc.json b/palettes/fireworks/gold/typedoc.json new file mode 100644 index 00000000000..9e95e43dd88 --- /dev/null +++ b/palettes/fireworks/gold/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Gold Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/fireworks/fireworksMulticolor/.browserslistrc b/palettes/fireworks/goldStroke/.browserslistrc similarity index 100% rename from palettes/fireworks/fireworksMulticolor/.browserslistrc rename to palettes/fireworks/goldStroke/.browserslistrc diff --git a/palettes/fireworks/goldStroke/CHANGELOG.md b/palettes/fireworks/goldStroke/CHANGELOG.md new file mode 100644 index 00000000000..40513bf0f0b --- /dev/null +++ b/palettes/fireworks/goldStroke/CHANGELOG.md @@ -0,0 +1,22 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-fireworks-gold-stroke + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-fireworks-gold-stroke + +# 4.0.0-beta.0 (2026-04-08) + +### Features + +- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) + +# [4.0.0-alpha.5](https://github.com/tsparticles/palettes/compare/v4.0.0-alpha.4...v4.0.0-alpha.5) (2026-03-31) + +**Note:** Version bump only for package @tsparticles/palette-fireworks-gold diff --git a/palettes/fireworks/fireworksRedStroke/LICENSE b/palettes/fireworks/goldStroke/LICENSE similarity index 100% rename from palettes/fireworks/fireworksRedStroke/LICENSE rename to palettes/fireworks/goldStroke/LICENSE diff --git a/palettes/fireworks/goldStroke/README.md b/palettes/fireworks/goldStroke/README.md new file mode 100644 index 00000000000..29337d0e822 --- /dev/null +++ b/palettes/fireworks/goldStroke/README.md @@ -0,0 +1,126 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles GoldStroke Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-goldStroke/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-goldStroke) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-goldStroke.svg)](https://www.npmjs.com/package/@tsparticles/palette-goldStroke) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-goldStroke) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fireworks/goldStroke/images/sample.png)](https://particles.js.org/samples/palettes/goldStroke) + +## Colors + + + + + + + + + + + + + + + + + + + + + +
+
+ #FFFFFF +
+
+ #FFEECC +
+
+ #FFCC44 +
+
+ #FFAA00 +
+
+ #FF6600 +
+
+ #AA2200 +
+
+ #330000 +
+
+ Background
+ #000000 +
+ Blend mode: screen | Fill: true +
+ +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadGoldStrokePalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadGoldStrokePalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "goldStroke", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadGoldStrokePalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/fireworks/fireworksGoldStroke/eslint.config.js b/palettes/fireworks/goldStroke/eslint.config.js similarity index 100% rename from palettes/fireworks/fireworksGoldStroke/eslint.config.js rename to palettes/fireworks/goldStroke/eslint.config.js diff --git a/palettes/fireworks/fireworksGoldStroke/images/sample.png b/palettes/fireworks/goldStroke/images/sample.png similarity index 100% rename from palettes/fireworks/fireworksGoldStroke/images/sample.png rename to palettes/fireworks/goldStroke/images/sample.png diff --git a/palettes/fireworks/goldStroke/package.dist.json b/palettes/fireworks/goldStroke/package.dist.json new file mode 100644 index 00000000000..d84cf3a4fe7 --- /dev/null +++ b/palettes/fireworks/goldStroke/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-fireworks-gold-stroke", + "version": "4.0.0-beta.15", + "description": "tsParticles fireworks - gold stroke palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fireworks/goldStroke" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/fireworks/goldStroke/package.json b/palettes/fireworks/goldStroke/package.json new file mode 100644 index 00000000000..127f992c884 --- /dev/null +++ b/palettes/fireworks/goldStroke/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-fireworks-gold-stroke", + "version": "4.0.0-beta.15", + "description": "tsParticles fireworks - gold stroke palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fireworks/goldStroke" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/fireworks/goldStroke/rollup.config.js b/palettes/fireworks/goldStroke/rollup.config.js new file mode 100644 index 00000000000..7ddbe50b2e5 --- /dev/null +++ b/palettes/fireworks/goldStroke/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-goldStroke", + paletteName: "GoldStroke Palette", + version, +}); diff --git a/palettes/fireworks/goldStroke/src/browser.ts b/palettes/fireworks/goldStroke/src/browser.ts new file mode 100644 index 00000000000..d9f495ea721 --- /dev/null +++ b/palettes/fireworks/goldStroke/src/browser.ts @@ -0,0 +1,10 @@ +import { loadFireworksGoldStrokePalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadFireworksGoldStrokePalette?: typeof loadFireworksGoldStrokePalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadFireworksGoldStrokePalette = loadFireworksGoldStrokePalette; + +export * from "./index.js"; diff --git a/palettes/fireworks/goldStroke/src/index.lazy.ts b/palettes/fireworks/goldStroke/src/index.lazy.ts new file mode 100644 index 00000000000..47dae0612b2 --- /dev/null +++ b/palettes/fireworks/goldStroke/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "fireworks-gold-stroke"; + +/** + * @param engine - + */ +export async function loadFireworksGoldStrokePalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fireworks/goldStroke/src/index.ts b/palettes/fireworks/goldStroke/src/index.ts new file mode 100644 index 00000000000..3e85adb53e5 --- /dev/null +++ b/palettes/fireworks/goldStroke/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "fireworks-gold-stroke"; + +/** + * @param engine - + */ +export async function loadFireworksGoldStrokePalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fireworks/fireworksGoldStroke/src/options.ts b/palettes/fireworks/goldStroke/src/options.ts similarity index 100% rename from palettes/fireworks/fireworksGoldStroke/src/options.ts rename to palettes/fireworks/goldStroke/src/options.ts diff --git a/palettes/fireworks/fireworksNeon/tsconfig.base.json b/palettes/fireworks/goldStroke/tsconfig.base.json similarity index 100% rename from palettes/fireworks/fireworksNeon/tsconfig.base.json rename to palettes/fireworks/goldStroke/tsconfig.base.json diff --git a/palettes/fireworks/fireworksGreen/tsconfig.browser.json b/palettes/fireworks/goldStroke/tsconfig.browser.json similarity index 100% rename from palettes/fireworks/fireworksGreen/tsconfig.browser.json rename to palettes/fireworks/goldStroke/tsconfig.browser.json diff --git a/palettes/fireworks/fireworksGreen/tsconfig.json b/palettes/fireworks/goldStroke/tsconfig.json similarity index 100% rename from palettes/fireworks/fireworksGreen/tsconfig.json rename to palettes/fireworks/goldStroke/tsconfig.json diff --git a/palettes/fireworks/fireworksGreen/tsconfig.module.json b/palettes/fireworks/goldStroke/tsconfig.module.json similarity index 100% rename from palettes/fireworks/fireworksGreen/tsconfig.module.json rename to palettes/fireworks/goldStroke/tsconfig.module.json diff --git a/palettes/fireworks/fireworksGreen/tsconfig.types.json b/palettes/fireworks/goldStroke/tsconfig.types.json similarity index 100% rename from palettes/fireworks/fireworksGreen/tsconfig.types.json rename to palettes/fireworks/goldStroke/tsconfig.types.json diff --git a/palettes/fireworks/goldStroke/typedoc.json b/palettes/fireworks/goldStroke/typedoc.json new file mode 100644 index 00000000000..9eaabe495a5 --- /dev/null +++ b/palettes/fireworks/goldStroke/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles GoldStroke Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/fireworks/fireworksMulticolorStroke/.browserslistrc b/palettes/fireworks/green/.browserslistrc similarity index 100% rename from palettes/fireworks/fireworksMulticolorStroke/.browserslistrc rename to palettes/fireworks/green/.browserslistrc diff --git a/palettes/fireworks/green/CHANGELOG.md b/palettes/fireworks/green/CHANGELOG.md new file mode 100644 index 00000000000..9dbe96a670f --- /dev/null +++ b/palettes/fireworks/green/CHANGELOG.md @@ -0,0 +1,22 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-fireworks-green + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-fireworks-green + +# 4.0.0-beta.0 (2026-04-08) + +### Features + +- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) + +# [4.0.0-alpha.5] + +**Note:** Initial version of package @tsparticles/palette-fireworks-green diff --git a/palettes/fireworks/fireworksSilver/LICENSE b/palettes/fireworks/green/LICENSE similarity index 100% rename from palettes/fireworks/fireworksSilver/LICENSE rename to palettes/fireworks/green/LICENSE diff --git a/palettes/fireworks/green/README.md b/palettes/fireworks/green/README.md new file mode 100644 index 00000000000..931270233ee --- /dev/null +++ b/palettes/fireworks/green/README.md @@ -0,0 +1,126 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Green Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-green/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-green) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-green.svg)](https://www.npmjs.com/package/@tsparticles/palette-green) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-green) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fireworks/green/images/sample.png)](https://particles.js.org/samples/palettes/green) + +## Colors + + + + + + + + + + + + + + + + + + + + + +
+
+ #FFFFFF +
+
+ #CCFFDD +
+
+ #88FFAA +
+
+ #33FF66 +
+
+ #00CC33 +
+
+ #007722 +
+
+ #003311 +
+
+ Background
+ #001100 +
+ Blend mode: screen | Fill: true +
+ +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadGreenPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadGreenPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "green", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadGreenPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/fireworks/fireworksGreen/eslint.config.js b/palettes/fireworks/green/eslint.config.js similarity index 100% rename from palettes/fireworks/fireworksGreen/eslint.config.js rename to palettes/fireworks/green/eslint.config.js diff --git a/palettes/fireworks/green/images/sample.png b/palettes/fireworks/green/images/sample.png new file mode 100644 index 00000000000..84968df9bb0 Binary files /dev/null and b/palettes/fireworks/green/images/sample.png differ diff --git a/palettes/fireworks/green/package.dist.json b/palettes/fireworks/green/package.dist.json new file mode 100644 index 00000000000..7561e59e81a --- /dev/null +++ b/palettes/fireworks/green/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-fireworks-green", + "version": "4.0.0-beta.15", + "description": "tsParticles fireworks green palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fireworks/green" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/fireworks/green/package.json b/palettes/fireworks/green/package.json new file mode 100644 index 00000000000..93f9738ab1e --- /dev/null +++ b/palettes/fireworks/green/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-fireworks-green", + "version": "4.0.0-beta.15", + "description": "tsParticles fireworks green palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fireworks/green" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/fireworks/green/rollup.config.js b/palettes/fireworks/green/rollup.config.js new file mode 100644 index 00000000000..4ff4da8e157 --- /dev/null +++ b/palettes/fireworks/green/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-green", + paletteName: "Green Palette", + version, +}); diff --git a/palettes/fireworks/green/src/browser.ts b/palettes/fireworks/green/src/browser.ts new file mode 100644 index 00000000000..ed433f020b7 --- /dev/null +++ b/palettes/fireworks/green/src/browser.ts @@ -0,0 +1,10 @@ +import { loadFireworksGreenPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadFireworksGreenPalette?: typeof loadFireworksGreenPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadFireworksGreenPalette = loadFireworksGreenPalette; + +export * from "./index.js"; diff --git a/palettes/fireworks/green/src/index.lazy.ts b/palettes/fireworks/green/src/index.lazy.ts new file mode 100644 index 00000000000..f18fdad90fe --- /dev/null +++ b/palettes/fireworks/green/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "fireworks-green"; + +/** + * @param engine - + */ +export async function loadFireworksGreenPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fireworks/green/src/index.ts b/palettes/fireworks/green/src/index.ts new file mode 100644 index 00000000000..4a311085235 --- /dev/null +++ b/palettes/fireworks/green/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "fireworks-green"; + +/** + * @param engine - + */ +export async function loadFireworksGreenPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fireworks/fireworksGreen/src/options.ts b/palettes/fireworks/green/src/options.ts similarity index 100% rename from palettes/fireworks/fireworksGreen/src/options.ts rename to palettes/fireworks/green/src/options.ts diff --git a/palettes/fireworks/fireworksNeonStroke/tsconfig.base.json b/palettes/fireworks/green/tsconfig.base.json similarity index 100% rename from palettes/fireworks/fireworksNeonStroke/tsconfig.base.json rename to palettes/fireworks/green/tsconfig.base.json diff --git a/palettes/fireworks/fireworksGreenStroke/tsconfig.browser.json b/palettes/fireworks/green/tsconfig.browser.json similarity index 100% rename from palettes/fireworks/fireworksGreenStroke/tsconfig.browser.json rename to palettes/fireworks/green/tsconfig.browser.json diff --git a/palettes/fireworks/fireworksGreenStroke/tsconfig.json b/palettes/fireworks/green/tsconfig.json similarity index 100% rename from palettes/fireworks/fireworksGreenStroke/tsconfig.json rename to palettes/fireworks/green/tsconfig.json diff --git a/palettes/fireworks/fireworksGreenStroke/tsconfig.module.json b/palettes/fireworks/green/tsconfig.module.json similarity index 100% rename from palettes/fireworks/fireworksGreenStroke/tsconfig.module.json rename to palettes/fireworks/green/tsconfig.module.json diff --git a/palettes/fireworks/fireworksGreenStroke/tsconfig.types.json b/palettes/fireworks/green/tsconfig.types.json similarity index 100% rename from palettes/fireworks/fireworksGreenStroke/tsconfig.types.json rename to palettes/fireworks/green/tsconfig.types.json diff --git a/palettes/fireworks/green/typedoc.json b/palettes/fireworks/green/typedoc.json new file mode 100644 index 00000000000..fcfbd946271 --- /dev/null +++ b/palettes/fireworks/green/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Green Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/fireworks/fireworksNeon/.browserslistrc b/palettes/fireworks/greenStroke/.browserslistrc similarity index 100% rename from palettes/fireworks/fireworksNeon/.browserslistrc rename to palettes/fireworks/greenStroke/.browserslistrc diff --git a/palettes/fireworks/greenStroke/CHANGELOG.md b/palettes/fireworks/greenStroke/CHANGELOG.md new file mode 100644 index 00000000000..878c941f1be --- /dev/null +++ b/palettes/fireworks/greenStroke/CHANGELOG.md @@ -0,0 +1,22 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-fireworks-green-stroke + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-fireworks-green-stroke + +# 4.0.0-beta.0 (2026-04-08) + +### Features + +- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) + +# [4.0.0-alpha.5] + +**Note:** Initial version of package @tsparticles/palette-fireworks-green-stroke diff --git a/palettes/fireworks/fireworksSilverStroke/LICENSE b/palettes/fireworks/greenStroke/LICENSE similarity index 100% rename from palettes/fireworks/fireworksSilverStroke/LICENSE rename to palettes/fireworks/greenStroke/LICENSE diff --git a/palettes/fireworks/greenStroke/README.md b/palettes/fireworks/greenStroke/README.md new file mode 100644 index 00000000000..505ab15b15e --- /dev/null +++ b/palettes/fireworks/greenStroke/README.md @@ -0,0 +1,79 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles GreenStroke Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-greenStroke/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-greenStroke) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-greenStroke.svg)](https://www.npmjs.com/package/@tsparticles/palette-greenStroke) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-greenStroke) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fireworks/greenStroke/images/sample.png)](https://particles.js.org/samples/palettes/greenStroke) + +## Colors + +See the palette source for stroke layer details. + +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadGreenStrokePalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadGreenStrokePalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "greenStroke", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadGreenStrokePalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/fireworks/fireworksGreenStroke/eslint.config.js b/palettes/fireworks/greenStroke/eslint.config.js similarity index 100% rename from palettes/fireworks/fireworksGreenStroke/eslint.config.js rename to palettes/fireworks/greenStroke/eslint.config.js diff --git a/palettes/fireworks/greenStroke/images/sample.png b/palettes/fireworks/greenStroke/images/sample.png new file mode 100644 index 00000000000..21fd918b354 Binary files /dev/null and b/palettes/fireworks/greenStroke/images/sample.png differ diff --git a/palettes/fireworks/greenStroke/package.dist.json b/palettes/fireworks/greenStroke/package.dist.json new file mode 100644 index 00000000000..862deb0530b --- /dev/null +++ b/palettes/fireworks/greenStroke/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-fireworks-green-stroke", + "version": "4.0.0-beta.15", + "description": "tsParticles fireworks green stroke palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fireworks/greenStroke" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/fireworks/greenStroke/package.json b/palettes/fireworks/greenStroke/package.json new file mode 100644 index 00000000000..cfa41b4ee76 --- /dev/null +++ b/palettes/fireworks/greenStroke/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-fireworks-green-stroke", + "version": "4.0.0-beta.15", + "description": "tsParticles fireworks green stroke palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fireworks/greenStroke" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/fireworks/greenStroke/rollup.config.js b/palettes/fireworks/greenStroke/rollup.config.js new file mode 100644 index 00000000000..947831a8695 --- /dev/null +++ b/palettes/fireworks/greenStroke/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-greenStroke", + paletteName: "GreenStroke Palette", + version, +}); diff --git a/palettes/fireworks/greenStroke/src/browser.ts b/palettes/fireworks/greenStroke/src/browser.ts new file mode 100644 index 00000000000..d35475d21ab --- /dev/null +++ b/palettes/fireworks/greenStroke/src/browser.ts @@ -0,0 +1,10 @@ +import { loadFireworksGreenStrokePalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadFireworksGreenStrokePalette?: typeof loadFireworksGreenStrokePalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadFireworksGreenStrokePalette = loadFireworksGreenStrokePalette; + +export * from "./index.js"; diff --git a/palettes/fireworks/greenStroke/src/index.lazy.ts b/palettes/fireworks/greenStroke/src/index.lazy.ts new file mode 100644 index 00000000000..14771493a20 --- /dev/null +++ b/palettes/fireworks/greenStroke/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "fireworks-green-stroke"; + +/** + * @param engine - + */ +export async function loadFireworksGreenStrokePalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fireworks/greenStroke/src/index.ts b/palettes/fireworks/greenStroke/src/index.ts new file mode 100644 index 00000000000..8ff9fd8eb6a --- /dev/null +++ b/palettes/fireworks/greenStroke/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "fireworks-green-stroke"; + +/** + * @param engine - + */ +export async function loadFireworksGreenStrokePalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fireworks/fireworksGreenStroke/src/options.ts b/palettes/fireworks/greenStroke/src/options.ts similarity index 100% rename from palettes/fireworks/fireworksGreenStroke/src/options.ts rename to palettes/fireworks/greenStroke/src/options.ts diff --git a/palettes/fireworks/fireworksPastel/tsconfig.base.json b/palettes/fireworks/greenStroke/tsconfig.base.json similarity index 100% rename from palettes/fireworks/fireworksPastel/tsconfig.base.json rename to palettes/fireworks/greenStroke/tsconfig.base.json diff --git a/palettes/fireworks/fireworksIce/tsconfig.browser.json b/palettes/fireworks/greenStroke/tsconfig.browser.json similarity index 100% rename from palettes/fireworks/fireworksIce/tsconfig.browser.json rename to palettes/fireworks/greenStroke/tsconfig.browser.json diff --git a/palettes/fireworks/fireworksIce/tsconfig.json b/palettes/fireworks/greenStroke/tsconfig.json similarity index 100% rename from palettes/fireworks/fireworksIce/tsconfig.json rename to palettes/fireworks/greenStroke/tsconfig.json diff --git a/palettes/fireworks/fireworksIce/tsconfig.module.json b/palettes/fireworks/greenStroke/tsconfig.module.json similarity index 100% rename from palettes/fireworks/fireworksIce/tsconfig.module.json rename to palettes/fireworks/greenStroke/tsconfig.module.json diff --git a/palettes/fireworks/fireworksIce/tsconfig.types.json b/palettes/fireworks/greenStroke/tsconfig.types.json similarity index 100% rename from palettes/fireworks/fireworksIce/tsconfig.types.json rename to palettes/fireworks/greenStroke/tsconfig.types.json diff --git a/palettes/fireworks/greenStroke/typedoc.json b/palettes/fireworks/greenStroke/typedoc.json new file mode 100644 index 00000000000..e8f32ff2b24 --- /dev/null +++ b/palettes/fireworks/greenStroke/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles GreenStroke Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/fireworks/fireworksNeonStroke/.browserslistrc b/palettes/fireworks/ice/.browserslistrc similarity index 100% rename from palettes/fireworks/fireworksNeonStroke/.browserslistrc rename to palettes/fireworks/ice/.browserslistrc diff --git a/palettes/fireworks/ice/CHANGELOG.md b/palettes/fireworks/ice/CHANGELOG.md new file mode 100644 index 00000000000..8231505d122 --- /dev/null +++ b/palettes/fireworks/ice/CHANGELOG.md @@ -0,0 +1,22 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-fireworks-ice + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-fireworks-ice + +# 4.0.0-beta.0 (2026-04-08) + +### Features + +- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) + +# [4.0.0-alpha.5] + +**Note:** Initial version of package @tsparticles/palette-fireworks-ice diff --git a/palettes/monochromatic/monochromeBlues/LICENSE b/palettes/fireworks/ice/LICENSE similarity index 100% rename from palettes/monochromatic/monochromeBlues/LICENSE rename to palettes/fireworks/ice/LICENSE diff --git a/palettes/fireworks/ice/README.md b/palettes/fireworks/ice/README.md new file mode 100644 index 00000000000..91fdb70b5a2 --- /dev/null +++ b/palettes/fireworks/ice/README.md @@ -0,0 +1,126 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Ice Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-ice/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-ice) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-ice.svg)](https://www.npmjs.com/package/@tsparticles/palette-ice) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-ice) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fireworks/ice/images/sample.png)](https://particles.js.org/samples/palettes/ice) + +## Colors + + + + + + + + + + + + + + + + + + + + + +
+
+ #FFFFFF +
+
+ #E8F8FF +
+
+ #AADDFF +
+
+ #66BBFF +
+
+ #2299FF +
+
+ #0055CC +
+
+ #001144 +
+
+ Background
+ #010a14 +
+ Blend mode: screen | Fill: true +
+ +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadIcePalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadIcePalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "ice", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadIcePalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/fireworks/fireworksIce/eslint.config.js b/palettes/fireworks/ice/eslint.config.js similarity index 100% rename from palettes/fireworks/fireworksIce/eslint.config.js rename to palettes/fireworks/ice/eslint.config.js diff --git a/palettes/fireworks/ice/images/sample.png b/palettes/fireworks/ice/images/sample.png new file mode 100644 index 00000000000..f577a1febac Binary files /dev/null and b/palettes/fireworks/ice/images/sample.png differ diff --git a/palettes/fireworks/ice/package.dist.json b/palettes/fireworks/ice/package.dist.json new file mode 100644 index 00000000000..e5a5fb57074 --- /dev/null +++ b/palettes/fireworks/ice/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-fireworks-ice", + "version": "4.0.0-beta.15", + "description": "tsParticles fireworks ice palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fireworks/ice" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/fireworks/ice/package.json b/palettes/fireworks/ice/package.json new file mode 100644 index 00000000000..096e205123d --- /dev/null +++ b/palettes/fireworks/ice/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-fireworks-ice", + "version": "4.0.0-beta.15", + "description": "tsParticles fireworks ice palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fireworks/ice" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/fireworks/ice/rollup.config.js b/palettes/fireworks/ice/rollup.config.js new file mode 100644 index 00000000000..66d2f5a9f9f --- /dev/null +++ b/palettes/fireworks/ice/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-ice", + paletteName: "Ice Palette", + version, +}); diff --git a/palettes/fireworks/ice/src/browser.ts b/palettes/fireworks/ice/src/browser.ts new file mode 100644 index 00000000000..c25eae13c64 --- /dev/null +++ b/palettes/fireworks/ice/src/browser.ts @@ -0,0 +1,10 @@ +import { loadFireworksIcePalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadFireworksIcePalette?: typeof loadFireworksIcePalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadFireworksIcePalette = loadFireworksIcePalette; + +export * from "./index.js"; diff --git a/palettes/fireworks/ice/src/index.lazy.ts b/palettes/fireworks/ice/src/index.lazy.ts new file mode 100644 index 00000000000..bed60fc0107 --- /dev/null +++ b/palettes/fireworks/ice/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "fireworks-ice"; + +/** + * @param engine - + */ +export async function loadFireworksIcePalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fireworks/ice/src/index.ts b/palettes/fireworks/ice/src/index.ts new file mode 100644 index 00000000000..15a5637e88b --- /dev/null +++ b/palettes/fireworks/ice/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "fireworks-ice"; + +/** + * @param engine - + */ +export async function loadFireworksIcePalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fireworks/fireworksIce/src/options.ts b/palettes/fireworks/ice/src/options.ts similarity index 100% rename from palettes/fireworks/fireworksIce/src/options.ts rename to palettes/fireworks/ice/src/options.ts diff --git a/palettes/fireworks/fireworksPastelStroke/tsconfig.base.json b/palettes/fireworks/ice/tsconfig.base.json similarity index 100% rename from palettes/fireworks/fireworksPastelStroke/tsconfig.base.json rename to palettes/fireworks/ice/tsconfig.base.json diff --git a/palettes/fireworks/fireworksIceStroke/tsconfig.browser.json b/palettes/fireworks/ice/tsconfig.browser.json similarity index 100% rename from palettes/fireworks/fireworksIceStroke/tsconfig.browser.json rename to palettes/fireworks/ice/tsconfig.browser.json diff --git a/palettes/fireworks/fireworksIceStroke/tsconfig.json b/palettes/fireworks/ice/tsconfig.json similarity index 100% rename from palettes/fireworks/fireworksIceStroke/tsconfig.json rename to palettes/fireworks/ice/tsconfig.json diff --git a/palettes/fireworks/fireworksIceStroke/tsconfig.module.json b/palettes/fireworks/ice/tsconfig.module.json similarity index 100% rename from palettes/fireworks/fireworksIceStroke/tsconfig.module.json rename to palettes/fireworks/ice/tsconfig.module.json diff --git a/palettes/fireworks/fireworksIceStroke/tsconfig.types.json b/palettes/fireworks/ice/tsconfig.types.json similarity index 100% rename from palettes/fireworks/fireworksIceStroke/tsconfig.types.json rename to palettes/fireworks/ice/tsconfig.types.json diff --git a/palettes/fireworks/ice/typedoc.json b/palettes/fireworks/ice/typedoc.json new file mode 100644 index 00000000000..50f2336b5bc --- /dev/null +++ b/palettes/fireworks/ice/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Ice Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/fireworks/fireworksPastel/.browserslistrc b/palettes/fireworks/iceStroke/.browserslistrc similarity index 100% rename from palettes/fireworks/fireworksPastel/.browserslistrc rename to palettes/fireworks/iceStroke/.browserslistrc diff --git a/palettes/fireworks/iceStroke/CHANGELOG.md b/palettes/fireworks/iceStroke/CHANGELOG.md new file mode 100644 index 00000000000..f749c1e4618 --- /dev/null +++ b/palettes/fireworks/iceStroke/CHANGELOG.md @@ -0,0 +1,22 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-fireworks-ice-stroke + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-fireworks-ice-stroke + +# 4.0.0-beta.0 (2026-04-08) + +### Features + +- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) + +# [4.0.0-alpha.5] + +**Note:** Initial version of package @tsparticles/palette-fireworks-ice-stroke diff --git a/palettes/monochromatic/monochromeBrown/LICENSE b/palettes/fireworks/iceStroke/LICENSE similarity index 100% rename from palettes/monochromatic/monochromeBrown/LICENSE rename to palettes/fireworks/iceStroke/LICENSE diff --git a/palettes/fireworks/iceStroke/README.md b/palettes/fireworks/iceStroke/README.md new file mode 100644 index 00000000000..d58c9a252ab --- /dev/null +++ b/palettes/fireworks/iceStroke/README.md @@ -0,0 +1,79 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles IceStroke Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-iceStroke/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-iceStroke) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-iceStroke.svg)](https://www.npmjs.com/package/@tsparticles/palette-iceStroke) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-iceStroke) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fireworks/iceStroke/images/sample.png)](https://particles.js.org/samples/palettes/iceStroke) + +## Colors + +See the palette source for stroke layer details. + +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadIceStrokePalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadIceStrokePalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "iceStroke", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadIceStrokePalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/fireworks/fireworksIceStroke/eslint.config.js b/palettes/fireworks/iceStroke/eslint.config.js similarity index 100% rename from palettes/fireworks/fireworksIceStroke/eslint.config.js rename to palettes/fireworks/iceStroke/eslint.config.js diff --git a/palettes/fireworks/iceStroke/images/sample.png b/palettes/fireworks/iceStroke/images/sample.png new file mode 100644 index 00000000000..4fc79dc1737 Binary files /dev/null and b/palettes/fireworks/iceStroke/images/sample.png differ diff --git a/palettes/fireworks/iceStroke/package.dist.json b/palettes/fireworks/iceStroke/package.dist.json new file mode 100644 index 00000000000..cc2c04d268a --- /dev/null +++ b/palettes/fireworks/iceStroke/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-fireworks-ice-stroke", + "version": "4.0.0-beta.15", + "description": "tsParticles fireworks ice stroke palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fireworks/iceStroke" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/fireworks/iceStroke/package.json b/palettes/fireworks/iceStroke/package.json new file mode 100644 index 00000000000..9fb03107e83 --- /dev/null +++ b/palettes/fireworks/iceStroke/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-fireworks-ice-stroke", + "version": "4.0.0-beta.15", + "description": "tsParticles fireworks ice stroke palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fireworks/iceStroke" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/fireworks/iceStroke/rollup.config.js b/palettes/fireworks/iceStroke/rollup.config.js new file mode 100644 index 00000000000..326a8c90705 --- /dev/null +++ b/palettes/fireworks/iceStroke/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-iceStroke", + paletteName: "IceStroke Palette", + version, +}); diff --git a/palettes/fireworks/iceStroke/src/browser.ts b/palettes/fireworks/iceStroke/src/browser.ts new file mode 100644 index 00000000000..14e6ee2fc93 --- /dev/null +++ b/palettes/fireworks/iceStroke/src/browser.ts @@ -0,0 +1,10 @@ +import { loadFireworksIceStrokePalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadFireworksIceStrokePalette?: typeof loadFireworksIceStrokePalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadFireworksIceStrokePalette = loadFireworksIceStrokePalette; + +export * from "./index.js"; diff --git a/palettes/fireworks/iceStroke/src/index.lazy.ts b/palettes/fireworks/iceStroke/src/index.lazy.ts new file mode 100644 index 00000000000..862025e444b --- /dev/null +++ b/palettes/fireworks/iceStroke/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "fireworks-ice-stroke"; + +/** + * @param engine - + */ +export async function loadFireworksIceStrokePalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fireworks/iceStroke/src/index.ts b/palettes/fireworks/iceStroke/src/index.ts new file mode 100644 index 00000000000..89296400a2c --- /dev/null +++ b/palettes/fireworks/iceStroke/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "fireworks-ice-stroke"; + +/** + * @param engine - + */ +export async function loadFireworksIceStrokePalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fireworks/fireworksIceStroke/src/options.ts b/palettes/fireworks/iceStroke/src/options.ts similarity index 100% rename from palettes/fireworks/fireworksIceStroke/src/options.ts rename to palettes/fireworks/iceStroke/src/options.ts diff --git a/palettes/fireworks/fireworksPurple/tsconfig.base.json b/palettes/fireworks/iceStroke/tsconfig.base.json similarity index 100% rename from palettes/fireworks/fireworksPurple/tsconfig.base.json rename to palettes/fireworks/iceStroke/tsconfig.base.json diff --git a/palettes/fireworks/fireworksMulticolor/tsconfig.browser.json b/palettes/fireworks/iceStroke/tsconfig.browser.json similarity index 100% rename from palettes/fireworks/fireworksMulticolor/tsconfig.browser.json rename to palettes/fireworks/iceStroke/tsconfig.browser.json diff --git a/palettes/fireworks/fireworksMulticolor/tsconfig.json b/palettes/fireworks/iceStroke/tsconfig.json similarity index 100% rename from palettes/fireworks/fireworksMulticolor/tsconfig.json rename to palettes/fireworks/iceStroke/tsconfig.json diff --git a/palettes/fireworks/fireworksMulticolor/tsconfig.module.json b/palettes/fireworks/iceStroke/tsconfig.module.json similarity index 100% rename from palettes/fireworks/fireworksMulticolor/tsconfig.module.json rename to palettes/fireworks/iceStroke/tsconfig.module.json diff --git a/palettes/fireworks/fireworksMulticolor/tsconfig.types.json b/palettes/fireworks/iceStroke/tsconfig.types.json similarity index 100% rename from palettes/fireworks/fireworksMulticolor/tsconfig.types.json rename to palettes/fireworks/iceStroke/tsconfig.types.json diff --git a/palettes/fireworks/iceStroke/typedoc.json b/palettes/fireworks/iceStroke/typedoc.json new file mode 100644 index 00000000000..2ed0c066aa9 --- /dev/null +++ b/palettes/fireworks/iceStroke/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles IceStroke Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/fireworks/fireworksPastelStroke/.browserslistrc b/palettes/fireworks/multicolor/.browserslistrc similarity index 100% rename from palettes/fireworks/fireworksPastelStroke/.browserslistrc rename to palettes/fireworks/multicolor/.browserslistrc diff --git a/palettes/fireworks/multicolor/CHANGELOG.md b/palettes/fireworks/multicolor/CHANGELOG.md new file mode 100644 index 00000000000..873bc4bb3f1 --- /dev/null +++ b/palettes/fireworks/multicolor/CHANGELOG.md @@ -0,0 +1,22 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-fireworks-multicolor + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-fireworks-multicolor + +# 4.0.0-beta.0 (2026-04-08) + +### Features + +- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) + +# [4.0.0-alpha.5](https://github.com/tsparticles/palettes/compare/v4.0.0-alpha.4...v4.0.0-alpha.5) (2026-03-31) + +**Note:** Version bump only for package @tsparticles/palette-fireworks-multicolor diff --git a/palettes/monochromatic/monochromeCyan/LICENSE b/palettes/fireworks/multicolor/LICENSE similarity index 100% rename from palettes/monochromatic/monochromeCyan/LICENSE rename to palettes/fireworks/multicolor/LICENSE diff --git a/palettes/fireworks/multicolor/README.md b/palettes/fireworks/multicolor/README.md new file mode 100644 index 00000000000..464bb0ab65d --- /dev/null +++ b/palettes/fireworks/multicolor/README.md @@ -0,0 +1,134 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Multicolor Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-multicolor/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-multicolor) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-multicolor.svg)](https://www.npmjs.com/package/@tsparticles/palette-multicolor) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-multicolor) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fireworks/multicolor/images/sample.png)](https://particles.js.org/samples/palettes/multicolor) + +## Colors + + + + + + + + + + + + + + + + + + + + + + + +
+
+ #FF0000 +
+
+ #FF4400 +
+
+ #FFCC00 +
+
+ #00FF44 +
+
+ #00FFFF +
+
+ #0088FF +
+
+ #AA00FF +
+
+ #FF00AA +
+
+ #FFFFFF +
+
+ Background
+ #000000 +
+ Blend mode: lighter | Fill: true +
+ +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadMulticolorPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadMulticolorPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "multicolor", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadMulticolorPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/fireworks/fireworksMulticolor/eslint.config.js b/palettes/fireworks/multicolor/eslint.config.js similarity index 100% rename from palettes/fireworks/fireworksMulticolor/eslint.config.js rename to palettes/fireworks/multicolor/eslint.config.js diff --git a/palettes/fireworks/fireworksMulticolor/images/sample.png b/palettes/fireworks/multicolor/images/sample.png similarity index 100% rename from palettes/fireworks/fireworksMulticolor/images/sample.png rename to palettes/fireworks/multicolor/images/sample.png diff --git a/palettes/fireworks/multicolor/package.dist.json b/palettes/fireworks/multicolor/package.dist.json new file mode 100644 index 00000000000..39864ebb298 --- /dev/null +++ b/palettes/fireworks/multicolor/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-fireworks-multicolor", + "version": "4.0.0-beta.15", + "description": "tsParticles fireworks - multicolor palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fireworks/multicolor" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/fireworks/multicolor/package.json b/palettes/fireworks/multicolor/package.json new file mode 100644 index 00000000000..736876c4269 --- /dev/null +++ b/palettes/fireworks/multicolor/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-fireworks-multicolor", + "version": "4.0.0-beta.15", + "description": "tsParticles fireworks - multicolor palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fireworks/multicolor" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/fireworks/multicolor/rollup.config.js b/palettes/fireworks/multicolor/rollup.config.js new file mode 100644 index 00000000000..e4c414ad6e5 --- /dev/null +++ b/palettes/fireworks/multicolor/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-multicolor", + paletteName: "Multicolor Palette", + version, +}); diff --git a/palettes/fireworks/multicolor/src/browser.ts b/palettes/fireworks/multicolor/src/browser.ts new file mode 100644 index 00000000000..c45daf4122b --- /dev/null +++ b/palettes/fireworks/multicolor/src/browser.ts @@ -0,0 +1,10 @@ +import { loadFireworksMulticolorPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadFireworksMulticolorPalette?: typeof loadFireworksMulticolorPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadFireworksMulticolorPalette = loadFireworksMulticolorPalette; + +export * from "./index.js"; diff --git a/palettes/fireworks/multicolor/src/index.lazy.ts b/palettes/fireworks/multicolor/src/index.lazy.ts new file mode 100644 index 00000000000..32aec9a16f9 --- /dev/null +++ b/palettes/fireworks/multicolor/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "fireworks-multicolor"; + +/** + * @param engine - + */ +export async function loadFireworksMulticolorPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fireworks/multicolor/src/index.ts b/palettes/fireworks/multicolor/src/index.ts new file mode 100644 index 00000000000..b15b3fe395d --- /dev/null +++ b/palettes/fireworks/multicolor/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "fireworks-multicolor"; + +/** + * @param engine - + */ +export async function loadFireworksMulticolorPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fireworks/fireworksMulticolor/src/options.ts b/palettes/fireworks/multicolor/src/options.ts similarity index 100% rename from palettes/fireworks/fireworksMulticolor/src/options.ts rename to palettes/fireworks/multicolor/src/options.ts diff --git a/palettes/fireworks/fireworksPurpleStroke/tsconfig.base.json b/palettes/fireworks/multicolor/tsconfig.base.json similarity index 100% rename from palettes/fireworks/fireworksPurpleStroke/tsconfig.base.json rename to palettes/fireworks/multicolor/tsconfig.base.json diff --git a/palettes/fireworks/fireworksMulticolorStroke/tsconfig.browser.json b/palettes/fireworks/multicolor/tsconfig.browser.json similarity index 100% rename from palettes/fireworks/fireworksMulticolorStroke/tsconfig.browser.json rename to palettes/fireworks/multicolor/tsconfig.browser.json diff --git a/palettes/fireworks/fireworksMulticolorStroke/tsconfig.json b/palettes/fireworks/multicolor/tsconfig.json similarity index 100% rename from palettes/fireworks/fireworksMulticolorStroke/tsconfig.json rename to palettes/fireworks/multicolor/tsconfig.json diff --git a/palettes/fireworks/fireworksMulticolorStroke/tsconfig.module.json b/palettes/fireworks/multicolor/tsconfig.module.json similarity index 100% rename from palettes/fireworks/fireworksMulticolorStroke/tsconfig.module.json rename to palettes/fireworks/multicolor/tsconfig.module.json diff --git a/palettes/fireworks/fireworksMulticolorStroke/tsconfig.types.json b/palettes/fireworks/multicolor/tsconfig.types.json similarity index 100% rename from palettes/fireworks/fireworksMulticolorStroke/tsconfig.types.json rename to palettes/fireworks/multicolor/tsconfig.types.json diff --git a/palettes/fireworks/multicolor/typedoc.json b/palettes/fireworks/multicolor/typedoc.json new file mode 100644 index 00000000000..23cb36f4954 --- /dev/null +++ b/palettes/fireworks/multicolor/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Multicolor Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/fireworks/fireworksPurple/.browserslistrc b/palettes/fireworks/multicolorStroke/.browserslistrc similarity index 100% rename from palettes/fireworks/fireworksPurple/.browserslistrc rename to palettes/fireworks/multicolorStroke/.browserslistrc diff --git a/palettes/fireworks/multicolorStroke/CHANGELOG.md b/palettes/fireworks/multicolorStroke/CHANGELOG.md new file mode 100644 index 00000000000..d2c30e7734e --- /dev/null +++ b/palettes/fireworks/multicolorStroke/CHANGELOG.md @@ -0,0 +1,22 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-fireworks-multicolor-stroke + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-fireworks-multicolor-stroke + +# 4.0.0-beta.0 (2026-04-08) + +### Features + +- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) + +# [4.0.0-alpha.5](https://github.com/tsparticles/palettes/compare/v4.0.0-alpha.4...v4.0.0-alpha.5) (2026-03-31) + +**Note:** Version bump only for package @tsparticles/palette-fireworks-multicolor diff --git a/palettes/monochromatic/monochromeGold/LICENSE b/palettes/fireworks/multicolorStroke/LICENSE similarity index 100% rename from palettes/monochromatic/monochromeGold/LICENSE rename to palettes/fireworks/multicolorStroke/LICENSE diff --git a/palettes/fireworks/multicolorStroke/README.md b/palettes/fireworks/multicolorStroke/README.md new file mode 100644 index 00000000000..38264a46d03 --- /dev/null +++ b/palettes/fireworks/multicolorStroke/README.md @@ -0,0 +1,134 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles MulticolorStroke Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-multicolorStroke/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-multicolorStroke) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-multicolorStroke.svg)](https://www.npmjs.com/package/@tsparticles/palette-multicolorStroke) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-multicolorStroke) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fireworks/multicolorStroke/images/sample.png)](https://particles.js.org/samples/palettes/multicolorStroke) + +## Colors + + + + + + + + + + + + + + + + + + + + + + + +
+
+ #FF0000 +
+
+ #FF4400 +
+
+ #FFCC00 +
+
+ #00FF44 +
+
+ #00FFFF +
+
+ #0088FF +
+
+ #AA00FF +
+
+ #FF00AA +
+
+ #FFFFFF +
+
+ Background
+ #000000 +
+ Blend mode: lighter | Fill: true +
+ +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadMulticolorStrokePalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadMulticolorStrokePalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "multicolorStroke", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadMulticolorStrokePalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/fireworks/fireworksMulticolorStroke/eslint.config.js b/palettes/fireworks/multicolorStroke/eslint.config.js similarity index 100% rename from palettes/fireworks/fireworksMulticolorStroke/eslint.config.js rename to palettes/fireworks/multicolorStroke/eslint.config.js diff --git a/palettes/fireworks/fireworksMulticolorStroke/images/sample.png b/palettes/fireworks/multicolorStroke/images/sample.png similarity index 100% rename from palettes/fireworks/fireworksMulticolorStroke/images/sample.png rename to palettes/fireworks/multicolorStroke/images/sample.png diff --git a/palettes/fireworks/multicolorStroke/package.dist.json b/palettes/fireworks/multicolorStroke/package.dist.json new file mode 100644 index 00000000000..b8af9005ba4 --- /dev/null +++ b/palettes/fireworks/multicolorStroke/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-fireworks-multicolor-stroke", + "version": "4.0.0-beta.15", + "description": "tsParticles fireworks - multicolor stroke palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fireworks/multicolorStroke" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/fireworks/multicolorStroke/package.json b/palettes/fireworks/multicolorStroke/package.json new file mode 100644 index 00000000000..e3ce173a004 --- /dev/null +++ b/palettes/fireworks/multicolorStroke/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-fireworks-multicolor-stroke", + "version": "4.0.0-beta.15", + "description": "tsParticles fireworks - multicolor stroke palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fireworks/multicolorStroke" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/fireworks/multicolorStroke/rollup.config.js b/palettes/fireworks/multicolorStroke/rollup.config.js new file mode 100644 index 00000000000..5eacfe50e3a --- /dev/null +++ b/palettes/fireworks/multicolorStroke/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-multicolorStroke", + paletteName: "MulticolorStroke Palette", + version, +}); diff --git a/palettes/fireworks/multicolorStroke/src/browser.ts b/palettes/fireworks/multicolorStroke/src/browser.ts new file mode 100644 index 00000000000..630acb35112 --- /dev/null +++ b/palettes/fireworks/multicolorStroke/src/browser.ts @@ -0,0 +1,10 @@ +import { loadFireworksMulticolorStrokePalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadFireworksMulticolorStrokePalette?: typeof loadFireworksMulticolorStrokePalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadFireworksMulticolorStrokePalette = loadFireworksMulticolorStrokePalette; + +export * from "./index.js"; diff --git a/palettes/fireworks/multicolorStroke/src/index.lazy.ts b/palettes/fireworks/multicolorStroke/src/index.lazy.ts new file mode 100644 index 00000000000..fae616e0051 --- /dev/null +++ b/palettes/fireworks/multicolorStroke/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "fireworks-multicolor-stroke"; + +/** + * @param engine - + */ +export async function loadFireworksMulticolorStrokePalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fireworks/multicolorStroke/src/index.ts b/palettes/fireworks/multicolorStroke/src/index.ts new file mode 100644 index 00000000000..72a38b2715a --- /dev/null +++ b/palettes/fireworks/multicolorStroke/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "fireworks-multicolor-stroke"; + +/** + * @param engine - + */ +export async function loadFireworksMulticolorStrokePalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fireworks/fireworksMulticolorStroke/src/options.ts b/palettes/fireworks/multicolorStroke/src/options.ts similarity index 100% rename from palettes/fireworks/fireworksMulticolorStroke/src/options.ts rename to palettes/fireworks/multicolorStroke/src/options.ts diff --git a/palettes/fireworks/fireworksRainbowStroke/tsconfig.base.json b/palettes/fireworks/multicolorStroke/tsconfig.base.json similarity index 100% rename from palettes/fireworks/fireworksRainbowStroke/tsconfig.base.json rename to palettes/fireworks/multicolorStroke/tsconfig.base.json diff --git a/palettes/fireworks/fireworksNeon/tsconfig.browser.json b/palettes/fireworks/multicolorStroke/tsconfig.browser.json similarity index 100% rename from palettes/fireworks/fireworksNeon/tsconfig.browser.json rename to palettes/fireworks/multicolorStroke/tsconfig.browser.json diff --git a/palettes/fireworks/fireworksNeon/tsconfig.json b/palettes/fireworks/multicolorStroke/tsconfig.json similarity index 100% rename from palettes/fireworks/fireworksNeon/tsconfig.json rename to palettes/fireworks/multicolorStroke/tsconfig.json diff --git a/palettes/fireworks/fireworksNeon/tsconfig.module.json b/palettes/fireworks/multicolorStroke/tsconfig.module.json similarity index 100% rename from palettes/fireworks/fireworksNeon/tsconfig.module.json rename to palettes/fireworks/multicolorStroke/tsconfig.module.json diff --git a/palettes/fireworks/fireworksNeon/tsconfig.types.json b/palettes/fireworks/multicolorStroke/tsconfig.types.json similarity index 100% rename from palettes/fireworks/fireworksNeon/tsconfig.types.json rename to palettes/fireworks/multicolorStroke/tsconfig.types.json diff --git a/palettes/fireworks/multicolorStroke/typedoc.json b/palettes/fireworks/multicolorStroke/typedoc.json new file mode 100644 index 00000000000..0eafcc5300c --- /dev/null +++ b/palettes/fireworks/multicolorStroke/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles MulticolorStroke Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/fireworks/fireworksPurpleStroke/.browserslistrc b/palettes/fireworks/neon/.browserslistrc similarity index 100% rename from palettes/fireworks/fireworksPurpleStroke/.browserslistrc rename to palettes/fireworks/neon/.browserslistrc diff --git a/palettes/fireworks/neon/CHANGELOG.md b/palettes/fireworks/neon/CHANGELOG.md new file mode 100644 index 00000000000..e1544328e0e --- /dev/null +++ b/palettes/fireworks/neon/CHANGELOG.md @@ -0,0 +1,22 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-fireworks-neon + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-fireworks-neon + +# 4.0.0-beta.0 (2026-04-08) + +### Features + +- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) + +# [4.0.0-alpha.5] + +**Note:** Initial version of package @tsparticles/palette-fireworks-neon diff --git a/palettes/monochromatic/monochromeGreens/LICENSE b/palettes/fireworks/neon/LICENSE similarity index 100% rename from palettes/monochromatic/monochromeGreens/LICENSE rename to palettes/fireworks/neon/LICENSE diff --git a/palettes/fireworks/neon/README.md b/palettes/fireworks/neon/README.md new file mode 100644 index 00000000000..e0d96479c66 --- /dev/null +++ b/palettes/fireworks/neon/README.md @@ -0,0 +1,130 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Neon Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-neon/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-neon) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-neon.svg)](https://www.npmjs.com/package/@tsparticles/palette-neon) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-neon) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fireworks/neon/images/sample.png)](https://particles.js.org/samples/palettes/neon) + +## Colors + + + + + + + + + + + + + + + + + + + + + + +
+
+ #FF0088 +
+
+ #FF4400 +
+
+ #FFFF00 +
+
+ #00FF44 +
+
+ #00FFFF +
+
+ #0088FF +
+
+ #FF00FF +
+
+ #AAFF00 +
+
+ Background
+ #000000 +
+ Blend mode: lighter | Fill: true +
+ +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadNeonPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadNeonPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "neon", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadNeonPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/fireworks/fireworksNeon/eslint.config.js b/palettes/fireworks/neon/eslint.config.js similarity index 100% rename from palettes/fireworks/fireworksNeon/eslint.config.js rename to palettes/fireworks/neon/eslint.config.js diff --git a/palettes/fireworks/neon/images/sample.png b/palettes/fireworks/neon/images/sample.png new file mode 100644 index 00000000000..4f197deda05 Binary files /dev/null and b/palettes/fireworks/neon/images/sample.png differ diff --git a/palettes/fireworks/neon/package.dist.json b/palettes/fireworks/neon/package.dist.json new file mode 100644 index 00000000000..8ca6500b598 --- /dev/null +++ b/palettes/fireworks/neon/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-fireworks-neon", + "version": "4.0.0-beta.15", + "description": "tsParticles fireworks neon palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fireworks/neon" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/fireworks/neon/package.json b/palettes/fireworks/neon/package.json new file mode 100644 index 00000000000..2fc03b9bbb8 --- /dev/null +++ b/palettes/fireworks/neon/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-fireworks-neon", + "version": "4.0.0-beta.15", + "description": "tsParticles fireworks neon palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fireworks/neon" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/fireworks/neon/rollup.config.js b/palettes/fireworks/neon/rollup.config.js new file mode 100644 index 00000000000..4d57769a869 --- /dev/null +++ b/palettes/fireworks/neon/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-neon", + paletteName: "Neon Palette", + version, +}); diff --git a/palettes/fireworks/neon/src/browser.ts b/palettes/fireworks/neon/src/browser.ts new file mode 100644 index 00000000000..92bd259bb22 --- /dev/null +++ b/palettes/fireworks/neon/src/browser.ts @@ -0,0 +1,10 @@ +import { loadFireworksNeonPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadFireworksNeonPalette?: typeof loadFireworksNeonPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadFireworksNeonPalette = loadFireworksNeonPalette; + +export * from "./index.js"; diff --git a/palettes/fireworks/neon/src/index.lazy.ts b/palettes/fireworks/neon/src/index.lazy.ts new file mode 100644 index 00000000000..bd9c36ac982 --- /dev/null +++ b/palettes/fireworks/neon/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "fireworks-neon"; + +/** + * @param engine - + */ +export async function loadFireworksNeonPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fireworks/neon/src/index.ts b/palettes/fireworks/neon/src/index.ts new file mode 100644 index 00000000000..8e5a9705761 --- /dev/null +++ b/palettes/fireworks/neon/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "fireworks-neon"; + +/** + * @param engine - + */ +export async function loadFireworksNeonPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fireworks/fireworksNeon/src/options.ts b/palettes/fireworks/neon/src/options.ts similarity index 100% rename from palettes/fireworks/fireworksNeon/src/options.ts rename to palettes/fireworks/neon/src/options.ts diff --git a/palettes/fireworks/fireworksRed/tsconfig.base.json b/palettes/fireworks/neon/tsconfig.base.json similarity index 100% rename from palettes/fireworks/fireworksRed/tsconfig.base.json rename to palettes/fireworks/neon/tsconfig.base.json diff --git a/palettes/fireworks/fireworksNeonStroke/tsconfig.browser.json b/palettes/fireworks/neon/tsconfig.browser.json similarity index 100% rename from palettes/fireworks/fireworksNeonStroke/tsconfig.browser.json rename to palettes/fireworks/neon/tsconfig.browser.json diff --git a/palettes/fireworks/fireworksNeonStroke/tsconfig.json b/palettes/fireworks/neon/tsconfig.json similarity index 100% rename from palettes/fireworks/fireworksNeonStroke/tsconfig.json rename to palettes/fireworks/neon/tsconfig.json diff --git a/palettes/fireworks/fireworksNeonStroke/tsconfig.module.json b/palettes/fireworks/neon/tsconfig.module.json similarity index 100% rename from palettes/fireworks/fireworksNeonStroke/tsconfig.module.json rename to palettes/fireworks/neon/tsconfig.module.json diff --git a/palettes/fireworks/fireworksNeonStroke/tsconfig.types.json b/palettes/fireworks/neon/tsconfig.types.json similarity index 100% rename from palettes/fireworks/fireworksNeonStroke/tsconfig.types.json rename to palettes/fireworks/neon/tsconfig.types.json diff --git a/palettes/fireworks/neon/typedoc.json b/palettes/fireworks/neon/typedoc.json new file mode 100644 index 00000000000..97477c02dfe --- /dev/null +++ b/palettes/fireworks/neon/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Neon Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/fireworks/fireworksRainbowStroke/.browserslistrc b/palettes/fireworks/neonStroke/.browserslistrc similarity index 100% rename from palettes/fireworks/fireworksRainbowStroke/.browserslistrc rename to palettes/fireworks/neonStroke/.browserslistrc diff --git a/palettes/fireworks/neonStroke/CHANGELOG.md b/palettes/fireworks/neonStroke/CHANGELOG.md new file mode 100644 index 00000000000..3f619a24dec --- /dev/null +++ b/palettes/fireworks/neonStroke/CHANGELOG.md @@ -0,0 +1,22 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-fireworks-neon-stroke + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-fireworks-neon-stroke + +# 4.0.0-beta.0 (2026-04-08) + +### Features + +- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) + +# [4.0.0-alpha.5] + +**Note:** Initial version of package @tsparticles/palette-fireworks-neon-stroke diff --git a/palettes/monochromatic/monochromeNoir/LICENSE b/palettes/fireworks/neonStroke/LICENSE similarity index 100% rename from palettes/monochromatic/monochromeNoir/LICENSE rename to palettes/fireworks/neonStroke/LICENSE diff --git a/palettes/fireworks/neonStroke/README.md b/palettes/fireworks/neonStroke/README.md new file mode 100644 index 00000000000..0592c74f42f --- /dev/null +++ b/palettes/fireworks/neonStroke/README.md @@ -0,0 +1,79 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles NeonStroke Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-neonStroke/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-neonStroke) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-neonStroke.svg)](https://www.npmjs.com/package/@tsparticles/palette-neonStroke) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-neonStroke) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fireworks/neonStroke/images/sample.png)](https://particles.js.org/samples/palettes/neonStroke) + +## Colors + +See the palette source for stroke layer details. + +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadNeonStrokePalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadNeonStrokePalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "neonStroke", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadNeonStrokePalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/fireworks/fireworksNeonStroke/eslint.config.js b/palettes/fireworks/neonStroke/eslint.config.js similarity index 100% rename from palettes/fireworks/fireworksNeonStroke/eslint.config.js rename to palettes/fireworks/neonStroke/eslint.config.js diff --git a/palettes/fireworks/neonStroke/images/sample.png b/palettes/fireworks/neonStroke/images/sample.png new file mode 100644 index 00000000000..feb97ccb268 Binary files /dev/null and b/palettes/fireworks/neonStroke/images/sample.png differ diff --git a/palettes/fireworks/neonStroke/package.dist.json b/palettes/fireworks/neonStroke/package.dist.json new file mode 100644 index 00000000000..bc5236a033c --- /dev/null +++ b/palettes/fireworks/neonStroke/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-fireworks-neon-stroke", + "version": "4.0.0-beta.15", + "description": "tsParticles fireworks neon stroke palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fireworks/neonStroke" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/fireworks/neonStroke/package.json b/palettes/fireworks/neonStroke/package.json new file mode 100644 index 00000000000..13cb874fc50 --- /dev/null +++ b/palettes/fireworks/neonStroke/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-fireworks-neon-stroke", + "version": "4.0.0-beta.15", + "description": "tsParticles fireworks neon stroke palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fireworks/neonStroke" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/fireworks/neonStroke/rollup.config.js b/palettes/fireworks/neonStroke/rollup.config.js new file mode 100644 index 00000000000..e7824a44611 --- /dev/null +++ b/palettes/fireworks/neonStroke/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-neonStroke", + paletteName: "NeonStroke Palette", + version, +}); diff --git a/palettes/fireworks/neonStroke/src/browser.ts b/palettes/fireworks/neonStroke/src/browser.ts new file mode 100644 index 00000000000..38d89702453 --- /dev/null +++ b/palettes/fireworks/neonStroke/src/browser.ts @@ -0,0 +1,10 @@ +import { loadFireworksNeonStrokePalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadFireworksNeonStrokePalette?: typeof loadFireworksNeonStrokePalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadFireworksNeonStrokePalette = loadFireworksNeonStrokePalette; + +export * from "./index.js"; diff --git a/palettes/fireworks/neonStroke/src/index.lazy.ts b/palettes/fireworks/neonStroke/src/index.lazy.ts new file mode 100644 index 00000000000..3ea1878fea5 --- /dev/null +++ b/palettes/fireworks/neonStroke/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "fireworks-neon-stroke"; + +/** + * @param engine - + */ +export async function loadFireworksNeonStrokePalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fireworks/neonStroke/src/index.ts b/palettes/fireworks/neonStroke/src/index.ts new file mode 100644 index 00000000000..d52bc1ffa34 --- /dev/null +++ b/palettes/fireworks/neonStroke/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "fireworks-neon-stroke"; + +/** + * @param engine - + */ +export async function loadFireworksNeonStrokePalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fireworks/fireworksNeonStroke/src/options.ts b/palettes/fireworks/neonStroke/src/options.ts similarity index 100% rename from palettes/fireworks/fireworksNeonStroke/src/options.ts rename to palettes/fireworks/neonStroke/src/options.ts diff --git a/palettes/fireworks/fireworksRedStroke/tsconfig.base.json b/palettes/fireworks/neonStroke/tsconfig.base.json similarity index 100% rename from palettes/fireworks/fireworksRedStroke/tsconfig.base.json rename to palettes/fireworks/neonStroke/tsconfig.base.json diff --git a/palettes/fireworks/fireworksPastel/tsconfig.browser.json b/palettes/fireworks/neonStroke/tsconfig.browser.json similarity index 100% rename from palettes/fireworks/fireworksPastel/tsconfig.browser.json rename to palettes/fireworks/neonStroke/tsconfig.browser.json diff --git a/palettes/fireworks/fireworksPastel/tsconfig.json b/palettes/fireworks/neonStroke/tsconfig.json similarity index 100% rename from palettes/fireworks/fireworksPastel/tsconfig.json rename to palettes/fireworks/neonStroke/tsconfig.json diff --git a/palettes/fireworks/fireworksPastel/tsconfig.module.json b/palettes/fireworks/neonStroke/tsconfig.module.json similarity index 100% rename from palettes/fireworks/fireworksPastel/tsconfig.module.json rename to palettes/fireworks/neonStroke/tsconfig.module.json diff --git a/palettes/fireworks/fireworksPastel/tsconfig.types.json b/palettes/fireworks/neonStroke/tsconfig.types.json similarity index 100% rename from palettes/fireworks/fireworksPastel/tsconfig.types.json rename to palettes/fireworks/neonStroke/tsconfig.types.json diff --git a/palettes/fireworks/neonStroke/typedoc.json b/palettes/fireworks/neonStroke/typedoc.json new file mode 100644 index 00000000000..a39d29567db --- /dev/null +++ b/palettes/fireworks/neonStroke/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles NeonStroke Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/fireworks/fireworksRed/.browserslistrc b/palettes/fireworks/pastel/.browserslistrc similarity index 100% rename from palettes/fireworks/fireworksRed/.browserslistrc rename to palettes/fireworks/pastel/.browserslistrc diff --git a/palettes/fireworks/pastel/CHANGELOG.md b/palettes/fireworks/pastel/CHANGELOG.md new file mode 100644 index 00000000000..938a6fb22af --- /dev/null +++ b/palettes/fireworks/pastel/CHANGELOG.md @@ -0,0 +1,22 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-fireworks-pastel + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-fireworks-pastel + +# 4.0.0-beta.0 (2026-04-08) + +### Features + +- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) + +# [4.0.0-alpha.5] + +**Note:** Initial version of package @tsparticles/palette-fireworks-pastel diff --git a/palettes/monochromatic/monochromeOranges/LICENSE b/palettes/fireworks/pastel/LICENSE similarity index 100% rename from palettes/monochromatic/monochromeOranges/LICENSE rename to palettes/fireworks/pastel/LICENSE diff --git a/palettes/fireworks/pastel/README.md b/palettes/fireworks/pastel/README.md new file mode 100644 index 00000000000..3b820104324 --- /dev/null +++ b/palettes/fireworks/pastel/README.md @@ -0,0 +1,130 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Pastel Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-pastel/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-pastel) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-pastel.svg)](https://www.npmjs.com/package/@tsparticles/palette-pastel) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-pastel) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fireworks/pastel/images/sample.png)](https://particles.js.org/samples/palettes/pastel) + +## Colors + + + + + + + + + + + + + + + + + + + + + + +
+
+ #FFD1DC +
+
+ #FFE4B5 +
+
+ #FFFACD +
+
+ #B5EAD7 +
+
+ #B5C8FF +
+
+ #E8B5FF +
+
+ #FFC8C8 +
+
+ #FFFFFF +
+
+ Background
+ #1a1a2e +
+ Blend mode: screen | Fill: true +
+ +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadPastelPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadPastelPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "pastel", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadPastelPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/fireworks/fireworksPastel/eslint.config.js b/palettes/fireworks/pastel/eslint.config.js similarity index 100% rename from palettes/fireworks/fireworksPastel/eslint.config.js rename to palettes/fireworks/pastel/eslint.config.js diff --git a/palettes/fireworks/pastel/images/sample.png b/palettes/fireworks/pastel/images/sample.png new file mode 100644 index 00000000000..df98077c592 Binary files /dev/null and b/palettes/fireworks/pastel/images/sample.png differ diff --git a/palettes/fireworks/pastel/package.dist.json b/palettes/fireworks/pastel/package.dist.json new file mode 100644 index 00000000000..4ee704e8130 --- /dev/null +++ b/palettes/fireworks/pastel/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-fireworks-pastel", + "version": "4.0.0-beta.15", + "description": "tsParticles fireworks pastel palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fireworks/pastel" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/fireworks/pastel/package.json b/palettes/fireworks/pastel/package.json new file mode 100644 index 00000000000..ce62aa780c2 --- /dev/null +++ b/palettes/fireworks/pastel/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-fireworks-pastel", + "version": "4.0.0-beta.15", + "description": "tsParticles fireworks pastel palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fireworks/pastel" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/fireworks/pastel/rollup.config.js b/palettes/fireworks/pastel/rollup.config.js new file mode 100644 index 00000000000..b6f6f92e9af --- /dev/null +++ b/palettes/fireworks/pastel/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-pastel", + paletteName: "Pastel Palette", + version, +}); diff --git a/palettes/fireworks/pastel/src/browser.ts b/palettes/fireworks/pastel/src/browser.ts new file mode 100644 index 00000000000..7c855a96d1c --- /dev/null +++ b/palettes/fireworks/pastel/src/browser.ts @@ -0,0 +1,10 @@ +import { loadFireworksPastelPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadFireworksPastelPalette?: typeof loadFireworksPastelPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadFireworksPastelPalette = loadFireworksPastelPalette; + +export * from "./index.js"; diff --git a/palettes/fireworks/pastel/src/index.lazy.ts b/palettes/fireworks/pastel/src/index.lazy.ts new file mode 100644 index 00000000000..b045f341865 --- /dev/null +++ b/palettes/fireworks/pastel/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "fireworks-pastel"; + +/** + * @param engine - + */ +export async function loadFireworksPastelPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fireworks/pastel/src/index.ts b/palettes/fireworks/pastel/src/index.ts new file mode 100644 index 00000000000..2a3f2b813e3 --- /dev/null +++ b/palettes/fireworks/pastel/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "fireworks-pastel"; + +/** + * @param engine - + */ +export async function loadFireworksPastelPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fireworks/fireworksPastel/src/options.ts b/palettes/fireworks/pastel/src/options.ts similarity index 100% rename from palettes/fireworks/fireworksPastel/src/options.ts rename to palettes/fireworks/pastel/src/options.ts diff --git a/palettes/fireworks/fireworksSilver/tsconfig.base.json b/palettes/fireworks/pastel/tsconfig.base.json similarity index 100% rename from palettes/fireworks/fireworksSilver/tsconfig.base.json rename to palettes/fireworks/pastel/tsconfig.base.json diff --git a/palettes/fireworks/fireworksPastelStroke/tsconfig.browser.json b/palettes/fireworks/pastel/tsconfig.browser.json similarity index 100% rename from palettes/fireworks/fireworksPastelStroke/tsconfig.browser.json rename to palettes/fireworks/pastel/tsconfig.browser.json diff --git a/palettes/fireworks/fireworksPastelStroke/tsconfig.json b/palettes/fireworks/pastel/tsconfig.json similarity index 100% rename from palettes/fireworks/fireworksPastelStroke/tsconfig.json rename to palettes/fireworks/pastel/tsconfig.json diff --git a/palettes/fireworks/fireworksPastelStroke/tsconfig.module.json b/palettes/fireworks/pastel/tsconfig.module.json similarity index 100% rename from palettes/fireworks/fireworksPastelStroke/tsconfig.module.json rename to palettes/fireworks/pastel/tsconfig.module.json diff --git a/palettes/fireworks/fireworksPastelStroke/tsconfig.types.json b/palettes/fireworks/pastel/tsconfig.types.json similarity index 100% rename from palettes/fireworks/fireworksPastelStroke/tsconfig.types.json rename to palettes/fireworks/pastel/tsconfig.types.json diff --git a/palettes/fireworks/pastel/typedoc.json b/palettes/fireworks/pastel/typedoc.json new file mode 100644 index 00000000000..f5b2eb26b85 --- /dev/null +++ b/palettes/fireworks/pastel/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Pastel Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/fireworks/fireworksRedStroke/.browserslistrc b/palettes/fireworks/pastelStroke/.browserslistrc similarity index 100% rename from palettes/fireworks/fireworksRedStroke/.browserslistrc rename to palettes/fireworks/pastelStroke/.browserslistrc diff --git a/palettes/fireworks/pastelStroke/CHANGELOG.md b/palettes/fireworks/pastelStroke/CHANGELOG.md new file mode 100644 index 00000000000..1710da4a6ea --- /dev/null +++ b/palettes/fireworks/pastelStroke/CHANGELOG.md @@ -0,0 +1,22 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-fireworks-pastel-stroke + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-fireworks-pastel-stroke + +# 4.0.0-beta.0 (2026-04-08) + +### Features + +- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) + +# [4.0.0-alpha.5] + +**Note:** Initial version of package @tsparticles/palette-fireworks-pastel-stroke diff --git a/palettes/monochromatic/monochromePinks/LICENSE b/palettes/fireworks/pastelStroke/LICENSE similarity index 100% rename from palettes/monochromatic/monochromePinks/LICENSE rename to palettes/fireworks/pastelStroke/LICENSE diff --git a/palettes/fireworks/pastelStroke/README.md b/palettes/fireworks/pastelStroke/README.md new file mode 100644 index 00000000000..54d7318818e --- /dev/null +++ b/palettes/fireworks/pastelStroke/README.md @@ -0,0 +1,79 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles PastelStroke Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-pastelStroke/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-pastelStroke) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-pastelStroke.svg)](https://www.npmjs.com/package/@tsparticles/palette-pastelStroke) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-pastelStroke) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fireworks/pastelStroke/images/sample.png)](https://particles.js.org/samples/palettes/pastelStroke) + +## Colors + +See the palette source for stroke layer details. + +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadPastelStrokePalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadPastelStrokePalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "pastelStroke", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadPastelStrokePalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/fireworks/fireworksPastelStroke/eslint.config.js b/palettes/fireworks/pastelStroke/eslint.config.js similarity index 100% rename from palettes/fireworks/fireworksPastelStroke/eslint.config.js rename to palettes/fireworks/pastelStroke/eslint.config.js diff --git a/palettes/fireworks/pastelStroke/images/sample.png b/palettes/fireworks/pastelStroke/images/sample.png new file mode 100644 index 00000000000..f94ca74a49d Binary files /dev/null and b/palettes/fireworks/pastelStroke/images/sample.png differ diff --git a/palettes/fireworks/pastelStroke/package.dist.json b/palettes/fireworks/pastelStroke/package.dist.json new file mode 100644 index 00000000000..ddfccf2c316 --- /dev/null +++ b/palettes/fireworks/pastelStroke/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-fireworks-pastel-stroke", + "version": "4.0.0-beta.15", + "description": "tsParticles fireworks pastel stroke palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fireworks/pastelStroke" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/fireworks/pastelStroke/package.json b/palettes/fireworks/pastelStroke/package.json new file mode 100644 index 00000000000..814f5cfaa13 --- /dev/null +++ b/palettes/fireworks/pastelStroke/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-fireworks-pastel-stroke", + "version": "4.0.0-beta.15", + "description": "tsParticles fireworks pastel stroke palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fireworks/pastelStroke" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/fireworks/pastelStroke/rollup.config.js b/palettes/fireworks/pastelStroke/rollup.config.js new file mode 100644 index 00000000000..48b609d0539 --- /dev/null +++ b/palettes/fireworks/pastelStroke/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-pastelStroke", + paletteName: "PastelStroke Palette", + version, +}); diff --git a/palettes/fireworks/pastelStroke/src/browser.ts b/palettes/fireworks/pastelStroke/src/browser.ts new file mode 100644 index 00000000000..a7b1149ffa2 --- /dev/null +++ b/palettes/fireworks/pastelStroke/src/browser.ts @@ -0,0 +1,10 @@ +import { loadFireworksPastelStrokePalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadFireworksPastelStrokePalette?: typeof loadFireworksPastelStrokePalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadFireworksPastelStrokePalette = loadFireworksPastelStrokePalette; + +export * from "./index.js"; diff --git a/palettes/fireworks/pastelStroke/src/index.lazy.ts b/palettes/fireworks/pastelStroke/src/index.lazy.ts new file mode 100644 index 00000000000..0c71624ab3e --- /dev/null +++ b/palettes/fireworks/pastelStroke/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "fireworks-pastel-stroke"; + +/** + * @param engine - + */ +export async function loadFireworksPastelStrokePalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fireworks/pastelStroke/src/index.ts b/palettes/fireworks/pastelStroke/src/index.ts new file mode 100644 index 00000000000..82bd1a16343 --- /dev/null +++ b/palettes/fireworks/pastelStroke/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "fireworks-pastel-stroke"; + +/** + * @param engine - + */ +export async function loadFireworksPastelStrokePalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fireworks/fireworksPastelStroke/src/options.ts b/palettes/fireworks/pastelStroke/src/options.ts similarity index 100% rename from palettes/fireworks/fireworksPastelStroke/src/options.ts rename to palettes/fireworks/pastelStroke/src/options.ts diff --git a/palettes/fireworks/fireworksSilverStroke/tsconfig.base.json b/palettes/fireworks/pastelStroke/tsconfig.base.json similarity index 100% rename from palettes/fireworks/fireworksSilverStroke/tsconfig.base.json rename to palettes/fireworks/pastelStroke/tsconfig.base.json diff --git a/palettes/fireworks/fireworksPurple/tsconfig.browser.json b/palettes/fireworks/pastelStroke/tsconfig.browser.json similarity index 100% rename from palettes/fireworks/fireworksPurple/tsconfig.browser.json rename to palettes/fireworks/pastelStroke/tsconfig.browser.json diff --git a/palettes/fireworks/fireworksPurple/tsconfig.json b/palettes/fireworks/pastelStroke/tsconfig.json similarity index 100% rename from palettes/fireworks/fireworksPurple/tsconfig.json rename to palettes/fireworks/pastelStroke/tsconfig.json diff --git a/palettes/fireworks/fireworksPurple/tsconfig.module.json b/palettes/fireworks/pastelStroke/tsconfig.module.json similarity index 100% rename from palettes/fireworks/fireworksPurple/tsconfig.module.json rename to palettes/fireworks/pastelStroke/tsconfig.module.json diff --git a/palettes/fireworks/fireworksPurple/tsconfig.types.json b/palettes/fireworks/pastelStroke/tsconfig.types.json similarity index 100% rename from palettes/fireworks/fireworksPurple/tsconfig.types.json rename to palettes/fireworks/pastelStroke/tsconfig.types.json diff --git a/palettes/fireworks/pastelStroke/typedoc.json b/palettes/fireworks/pastelStroke/typedoc.json new file mode 100644 index 00000000000..e85ee05508a --- /dev/null +++ b/palettes/fireworks/pastelStroke/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles PastelStroke Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/fireworks/fireworksSilver/.browserslistrc b/palettes/fireworks/purple/.browserslistrc similarity index 100% rename from palettes/fireworks/fireworksSilver/.browserslistrc rename to palettes/fireworks/purple/.browserslistrc diff --git a/palettes/fireworks/purple/CHANGELOG.md b/palettes/fireworks/purple/CHANGELOG.md new file mode 100644 index 00000000000..3df6680a8b9 --- /dev/null +++ b/palettes/fireworks/purple/CHANGELOG.md @@ -0,0 +1,22 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-fireworks-purple + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-fireworks-purple + +# 4.0.0-beta.0 (2026-04-08) + +### Features + +- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) + +# [4.0.0-alpha.5] + +**Note:** Initial version of package @tsparticles/palette-fireworks-purple diff --git a/palettes/monochromatic/monochromePurples/LICENSE b/palettes/fireworks/purple/LICENSE similarity index 100% rename from palettes/monochromatic/monochromePurples/LICENSE rename to palettes/fireworks/purple/LICENSE diff --git a/palettes/fireworks/purple/README.md b/palettes/fireworks/purple/README.md new file mode 100644 index 00000000000..887b7d427fb --- /dev/null +++ b/palettes/fireworks/purple/README.md @@ -0,0 +1,126 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Purple Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-purple/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-purple) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-purple.svg)](https://www.npmjs.com/package/@tsparticles/palette-purple) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-purple) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fireworks/purple/images/sample.png)](https://particles.js.org/samples/palettes/purple) + +## Colors + + + + + + + + + + + + + + + + + + + + + +
+
+ #FFFFFF +
+
+ #EEDDFF +
+
+ #CC99FF +
+
+ #AA55FF +
+
+ #7700FF +
+
+ #440088 +
+
+ #110033 +
+
+ Background
+ #060011 +
+ Blend mode: screen | Fill: true +
+ +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadPurplePalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadPurplePalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "purple", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadPurplePalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/fireworks/fireworksPurple/eslint.config.js b/palettes/fireworks/purple/eslint.config.js similarity index 100% rename from palettes/fireworks/fireworksPurple/eslint.config.js rename to palettes/fireworks/purple/eslint.config.js diff --git a/palettes/fireworks/purple/images/sample.png b/palettes/fireworks/purple/images/sample.png new file mode 100644 index 00000000000..9c8f39bd221 Binary files /dev/null and b/palettes/fireworks/purple/images/sample.png differ diff --git a/palettes/fireworks/purple/package.dist.json b/palettes/fireworks/purple/package.dist.json new file mode 100644 index 00000000000..3915b68ffa2 --- /dev/null +++ b/palettes/fireworks/purple/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-fireworks-purple", + "version": "4.0.0-beta.15", + "description": "tsParticles fireworks purple palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fireworks/purple" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/fireworks/purple/package.json b/palettes/fireworks/purple/package.json new file mode 100644 index 00000000000..e00c94227ed --- /dev/null +++ b/palettes/fireworks/purple/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-fireworks-purple", + "version": "4.0.0-beta.15", + "description": "tsParticles fireworks purple palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fireworks/purple" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/fireworks/purple/rollup.config.js b/palettes/fireworks/purple/rollup.config.js new file mode 100644 index 00000000000..b562bba6f34 --- /dev/null +++ b/palettes/fireworks/purple/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-purple", + paletteName: "Purple Palette", + version, +}); diff --git a/palettes/fireworks/purple/src/browser.ts b/palettes/fireworks/purple/src/browser.ts new file mode 100644 index 00000000000..6d321a7b3a2 --- /dev/null +++ b/palettes/fireworks/purple/src/browser.ts @@ -0,0 +1,10 @@ +import { loadFireworksPurplePalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadFireworksPurplePalette?: typeof loadFireworksPurplePalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadFireworksPurplePalette = loadFireworksPurplePalette; + +export * from "./index.js"; diff --git a/palettes/fireworks/purple/src/index.lazy.ts b/palettes/fireworks/purple/src/index.lazy.ts new file mode 100644 index 00000000000..7be4973ce30 --- /dev/null +++ b/palettes/fireworks/purple/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "fireworks-purple"; + +/** + * @param engine - + */ +export async function loadFireworksPurplePalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fireworks/purple/src/index.ts b/palettes/fireworks/purple/src/index.ts new file mode 100644 index 00000000000..03c4e816b90 --- /dev/null +++ b/palettes/fireworks/purple/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "fireworks-purple"; + +/** + * @param engine - + */ +export async function loadFireworksPurplePalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fireworks/fireworksPurple/src/options.ts b/palettes/fireworks/purple/src/options.ts similarity index 100% rename from palettes/fireworks/fireworksPurple/src/options.ts rename to palettes/fireworks/purple/src/options.ts diff --git a/palettes/monochromatic/monochromeBlues/tsconfig.base.json b/palettes/fireworks/purple/tsconfig.base.json similarity index 100% rename from palettes/monochromatic/monochromeBlues/tsconfig.base.json rename to palettes/fireworks/purple/tsconfig.base.json diff --git a/palettes/fireworks/fireworksPurpleStroke/tsconfig.browser.json b/palettes/fireworks/purple/tsconfig.browser.json similarity index 100% rename from palettes/fireworks/fireworksPurpleStroke/tsconfig.browser.json rename to palettes/fireworks/purple/tsconfig.browser.json diff --git a/palettes/fireworks/fireworksPurpleStroke/tsconfig.json b/palettes/fireworks/purple/tsconfig.json similarity index 100% rename from palettes/fireworks/fireworksPurpleStroke/tsconfig.json rename to palettes/fireworks/purple/tsconfig.json diff --git a/palettes/fireworks/fireworksPurpleStroke/tsconfig.module.json b/palettes/fireworks/purple/tsconfig.module.json similarity index 100% rename from palettes/fireworks/fireworksPurpleStroke/tsconfig.module.json rename to palettes/fireworks/purple/tsconfig.module.json diff --git a/palettes/fireworks/fireworksPurpleStroke/tsconfig.types.json b/palettes/fireworks/purple/tsconfig.types.json similarity index 100% rename from palettes/fireworks/fireworksPurpleStroke/tsconfig.types.json rename to palettes/fireworks/purple/tsconfig.types.json diff --git a/palettes/fireworks/purple/typedoc.json b/palettes/fireworks/purple/typedoc.json new file mode 100644 index 00000000000..7d1c938324d --- /dev/null +++ b/palettes/fireworks/purple/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Purple Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/fireworks/fireworksSilverStroke/.browserslistrc b/palettes/fireworks/purpleStroke/.browserslistrc similarity index 100% rename from palettes/fireworks/fireworksSilverStroke/.browserslistrc rename to palettes/fireworks/purpleStroke/.browserslistrc diff --git a/palettes/fireworks/purpleStroke/CHANGELOG.md b/palettes/fireworks/purpleStroke/CHANGELOG.md new file mode 100644 index 00000000000..1414134c57a --- /dev/null +++ b/palettes/fireworks/purpleStroke/CHANGELOG.md @@ -0,0 +1,22 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-fireworks-purple-stroke + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-fireworks-purple-stroke + +# 4.0.0-beta.0 (2026-04-08) + +### Features + +- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) + +# [4.0.0-alpha.5] + +**Note:** Initial version of package @tsparticles/palette-fireworks-purple-stroke diff --git a/palettes/monochromatic/monochromeReds/LICENSE b/palettes/fireworks/purpleStroke/LICENSE similarity index 100% rename from palettes/monochromatic/monochromeReds/LICENSE rename to palettes/fireworks/purpleStroke/LICENSE diff --git a/palettes/fireworks/purpleStroke/README.md b/palettes/fireworks/purpleStroke/README.md new file mode 100644 index 00000000000..13bfe0cf464 --- /dev/null +++ b/palettes/fireworks/purpleStroke/README.md @@ -0,0 +1,79 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles PurpleStroke Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-purpleStroke/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-purpleStroke) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-purpleStroke.svg)](https://www.npmjs.com/package/@tsparticles/palette-purpleStroke) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-purpleStroke) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fireworks/purpleStroke/images/sample.png)](https://particles.js.org/samples/palettes/purpleStroke) + +## Colors + +See the palette source for stroke layer details. + +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadPurpleStrokePalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadPurpleStrokePalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "purpleStroke", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadPurpleStrokePalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/fireworks/fireworksPurpleStroke/eslint.config.js b/palettes/fireworks/purpleStroke/eslint.config.js similarity index 100% rename from palettes/fireworks/fireworksPurpleStroke/eslint.config.js rename to palettes/fireworks/purpleStroke/eslint.config.js diff --git a/palettes/fireworks/purpleStroke/images/sample.png b/palettes/fireworks/purpleStroke/images/sample.png new file mode 100644 index 00000000000..ea54dc55095 Binary files /dev/null and b/palettes/fireworks/purpleStroke/images/sample.png differ diff --git a/palettes/fireworks/purpleStroke/package.dist.json b/palettes/fireworks/purpleStroke/package.dist.json new file mode 100644 index 00000000000..d7bde2d75d3 --- /dev/null +++ b/palettes/fireworks/purpleStroke/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-fireworks-purple-stroke", + "version": "4.0.0-beta.15", + "description": "tsParticles fireworks purple stroke palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fireworks/purpleStroke" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/fireworks/purpleStroke/package.json b/palettes/fireworks/purpleStroke/package.json new file mode 100644 index 00000000000..4d25bfa2b3a --- /dev/null +++ b/palettes/fireworks/purpleStroke/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-fireworks-purple-stroke", + "version": "4.0.0-beta.15", + "description": "tsParticles fireworks purple stroke palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fireworks/purpleStroke" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/fireworks/purpleStroke/rollup.config.js b/palettes/fireworks/purpleStroke/rollup.config.js new file mode 100644 index 00000000000..c1b52d7d9eb --- /dev/null +++ b/palettes/fireworks/purpleStroke/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-purpleStroke", + paletteName: "PurpleStroke Palette", + version, +}); diff --git a/palettes/fireworks/purpleStroke/src/browser.ts b/palettes/fireworks/purpleStroke/src/browser.ts new file mode 100644 index 00000000000..b7e4e3feb79 --- /dev/null +++ b/palettes/fireworks/purpleStroke/src/browser.ts @@ -0,0 +1,10 @@ +import { loadFireworksPurpleStrokePalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadFireworksPurpleStrokePalette?: typeof loadFireworksPurpleStrokePalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadFireworksPurpleStrokePalette = loadFireworksPurpleStrokePalette; + +export * from "./index.js"; diff --git a/palettes/fireworks/purpleStroke/src/index.lazy.ts b/palettes/fireworks/purpleStroke/src/index.lazy.ts new file mode 100644 index 00000000000..073d228e9e1 --- /dev/null +++ b/palettes/fireworks/purpleStroke/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "fireworks-purple-stroke"; + +/** + * @param engine - + */ +export async function loadFireworksPurpleStrokePalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fireworks/purpleStroke/src/index.ts b/palettes/fireworks/purpleStroke/src/index.ts new file mode 100644 index 00000000000..26e6b4eea1c --- /dev/null +++ b/palettes/fireworks/purpleStroke/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "fireworks-purple-stroke"; + +/** + * @param engine - + */ +export async function loadFireworksPurpleStrokePalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fireworks/fireworksPurpleStroke/src/options.ts b/palettes/fireworks/purpleStroke/src/options.ts similarity index 100% rename from palettes/fireworks/fireworksPurpleStroke/src/options.ts rename to palettes/fireworks/purpleStroke/src/options.ts diff --git a/palettes/monochromatic/monochromeBrown/tsconfig.base.json b/palettes/fireworks/purpleStroke/tsconfig.base.json similarity index 100% rename from palettes/monochromatic/monochromeBrown/tsconfig.base.json rename to palettes/fireworks/purpleStroke/tsconfig.base.json diff --git a/palettes/fireworks/fireworksRainbowStroke/tsconfig.browser.json b/palettes/fireworks/purpleStroke/tsconfig.browser.json similarity index 100% rename from palettes/fireworks/fireworksRainbowStroke/tsconfig.browser.json rename to palettes/fireworks/purpleStroke/tsconfig.browser.json diff --git a/palettes/fireworks/fireworksRainbowStroke/tsconfig.json b/palettes/fireworks/purpleStroke/tsconfig.json similarity index 100% rename from palettes/fireworks/fireworksRainbowStroke/tsconfig.json rename to palettes/fireworks/purpleStroke/tsconfig.json diff --git a/palettes/fireworks/fireworksRainbowStroke/tsconfig.module.json b/palettes/fireworks/purpleStroke/tsconfig.module.json similarity index 100% rename from palettes/fireworks/fireworksRainbowStroke/tsconfig.module.json rename to palettes/fireworks/purpleStroke/tsconfig.module.json diff --git a/palettes/fireworks/fireworksRainbowStroke/tsconfig.types.json b/palettes/fireworks/purpleStroke/tsconfig.types.json similarity index 100% rename from palettes/fireworks/fireworksRainbowStroke/tsconfig.types.json rename to palettes/fireworks/purpleStroke/tsconfig.types.json diff --git a/palettes/fireworks/purpleStroke/typedoc.json b/palettes/fireworks/purpleStroke/typedoc.json new file mode 100644 index 00000000000..9939a2273e3 --- /dev/null +++ b/palettes/fireworks/purpleStroke/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles PurpleStroke Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/monochromatic/monochromeBlues/.browserslistrc b/palettes/fireworks/rainbow/.browserslistrc similarity index 100% rename from palettes/monochromatic/monochromeBlues/.browserslistrc rename to palettes/fireworks/rainbow/.browserslistrc diff --git a/palettes/fireworks/rainbow/CHANGELOG.md b/palettes/fireworks/rainbow/CHANGELOG.md new file mode 100644 index 00000000000..206542bb067 --- /dev/null +++ b/palettes/fireworks/rainbow/CHANGELOG.md @@ -0,0 +1,12 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-fireworks-rainbow + +# [4.0.0-beta.12] + +**Note:** Initial version of package @tsparticles/palette-fireworks-rainbow diff --git a/palettes/monochromatic/monochromeTeal/LICENSE b/palettes/fireworks/rainbow/LICENSE similarity index 100% rename from palettes/monochromatic/monochromeTeal/LICENSE rename to palettes/fireworks/rainbow/LICENSE diff --git a/palettes/fireworks/rainbow/README.md b/palettes/fireworks/rainbow/README.md new file mode 100644 index 00000000000..0815ef1424d --- /dev/null +++ b/palettes/fireworks/rainbow/README.md @@ -0,0 +1,134 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Rainbow Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-rainbow/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-rainbow) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-rainbow.svg)](https://www.npmjs.com/package/@tsparticles/palette-rainbow) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-rainbow) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fireworks/rainbow/images/sample.png)](https://particles.js.org/samples/palettes/rainbow) + +## Colors + + + + + + + + + + + + + + + + + + + + + + + +
+
+ #FFFFFF +
+
+ #FF0000 +
+
+ #FF8800 +
+
+ #FFFF00 +
+
+ #00FF00 +
+
+ #00FFFF +
+
+ #0000FF +
+
+ #FF00FF +
+
+ #CC00FF +
+
+ Background
+ #000000 +
+ Blend mode: lighter | Fill: true +
+ +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadRainbowPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadRainbowPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "rainbow", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadRainbowPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/fireworks/rainbow/eslint.config.js b/palettes/fireworks/rainbow/eslint.config.js new file mode 100644 index 00000000000..248b4d3dd36 --- /dev/null +++ b/palettes/fireworks/rainbow/eslint.config.js @@ -0,0 +1,6 @@ +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; +import { defineConfig } from "eslint/config"; + +export default defineConfig([ + tsParticlesESLintConfig, +]); diff --git a/palettes/fireworks/rainbow/images/sample.png b/palettes/fireworks/rainbow/images/sample.png new file mode 100644 index 00000000000..0e78e759c2c Binary files /dev/null and b/palettes/fireworks/rainbow/images/sample.png differ diff --git a/palettes/fireworks/rainbow/package.dist.json b/palettes/fireworks/rainbow/package.dist.json new file mode 100644 index 00000000000..2425eb59ccd --- /dev/null +++ b/palettes/fireworks/rainbow/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-fireworks-rainbow", + "version": "4.0.0-beta.15", + "description": "tsParticles fireworks rainbow palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fireworks/rainbow" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/fireworks/rainbow/package.json b/palettes/fireworks/rainbow/package.json new file mode 100644 index 00000000000..f97bf255d60 --- /dev/null +++ b/palettes/fireworks/rainbow/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-fireworks-rainbow", + "version": "4.0.0-beta.15", + "description": "tsParticles fireworks rainbow palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fireworks/rainbow" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/fireworks/rainbow/rollup.config.js b/palettes/fireworks/rainbow/rollup.config.js new file mode 100644 index 00000000000..03015c77f6d --- /dev/null +++ b/palettes/fireworks/rainbow/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-rainbow", + paletteName: "Rainbow Palette", + version, +}); diff --git a/palettes/fireworks/rainbow/src/browser.ts b/palettes/fireworks/rainbow/src/browser.ts new file mode 100644 index 00000000000..4c8f8eccb69 --- /dev/null +++ b/palettes/fireworks/rainbow/src/browser.ts @@ -0,0 +1,10 @@ +import { loadFireworksRainbowPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadFireworksRainbowPalette?: typeof loadFireworksRainbowPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadFireworksRainbowPalette = loadFireworksRainbowPalette; + +export * from "./index.js"; diff --git a/palettes/fireworks/rainbow/src/index.lazy.ts b/palettes/fireworks/rainbow/src/index.lazy.ts new file mode 100644 index 00000000000..2865d945e9e --- /dev/null +++ b/palettes/fireworks/rainbow/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "fireworks-rainbow"; + +/** + * @param engine - + */ +export async function loadFireworksRainbowPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fireworks/rainbow/src/index.ts b/palettes/fireworks/rainbow/src/index.ts new file mode 100644 index 00000000000..50584916f94 --- /dev/null +++ b/palettes/fireworks/rainbow/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "fireworks-rainbow"; + +/** + * @param engine - + */ +export async function loadFireworksRainbowPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fireworks/rainbow/src/options.ts b/palettes/fireworks/rainbow/src/options.ts new file mode 100644 index 00000000000..be6c5030590 --- /dev/null +++ b/palettes/fireworks/rainbow/src/options.ts @@ -0,0 +1,23 @@ +import { type IPalette } from "@tsparticles/engine"; + +export const options: IPalette = { + name: "Fireworks - Rainbow", + background: "#000000", + blendMode: "lighter", + colors: { + fill: { + enable: true, + value: [ + "#FFFFFF", + "#FF0000", + "#FF8800", + "#FFFF00", + "#00FF00", + "#00FFFF", + "#0000FF", + "#FF00FF", + "#CC00FF", + ], + }, + }, +}; diff --git a/palettes/monochromatic/monochromeCyan/tsconfig.base.json b/palettes/fireworks/rainbow/tsconfig.base.json similarity index 100% rename from palettes/monochromatic/monochromeCyan/tsconfig.base.json rename to palettes/fireworks/rainbow/tsconfig.base.json diff --git a/palettes/fireworks/rainbow/tsconfig.browser.json b/palettes/fireworks/rainbow/tsconfig.browser.json new file mode 100644 index 00000000000..80d78351a7d --- /dev/null +++ b/palettes/fireworks/rainbow/tsconfig.browser.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.browser.json"], + "compilerOptions": { + "outDir": "./dist/browser" + } +} diff --git a/palettes/fireworks/rainbow/tsconfig.json b/palettes/fireworks/rainbow/tsconfig.json new file mode 100644 index 00000000000..630bf828704 --- /dev/null +++ b/palettes/fireworks/rainbow/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.json"], + "compilerOptions": { + "outDir": "./dist/cjs" + } +} diff --git a/palettes/fireworks/rainbow/tsconfig.module.json b/palettes/fireworks/rainbow/tsconfig.module.json new file mode 100644 index 00000000000..bb5035a8403 --- /dev/null +++ b/palettes/fireworks/rainbow/tsconfig.module.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.module.json"], + "compilerOptions": { + "outDir": "./dist/esm" + } +} diff --git a/palettes/fireworks/rainbow/tsconfig.types.json b/palettes/fireworks/rainbow/tsconfig.types.json new file mode 100644 index 00000000000..570e9e9d8c6 --- /dev/null +++ b/palettes/fireworks/rainbow/tsconfig.types.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.types.json"], + "compilerOptions": { + "outDir": "./dist/types" + } +} diff --git a/palettes/fireworks/rainbow/typedoc.json b/palettes/fireworks/rainbow/typedoc.json new file mode 100644 index 00000000000..95a8f026815 --- /dev/null +++ b/palettes/fireworks/rainbow/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Rainbow Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/monochromatic/monochromeBrown/.browserslistrc b/palettes/fireworks/rainbowStroke/.browserslistrc similarity index 100% rename from palettes/monochromatic/monochromeBrown/.browserslistrc rename to palettes/fireworks/rainbowStroke/.browserslistrc diff --git a/palettes/fireworks/rainbowStroke/CHANGELOG.md b/palettes/fireworks/rainbowStroke/CHANGELOG.md new file mode 100644 index 00000000000..6ac652f071b --- /dev/null +++ b/palettes/fireworks/rainbowStroke/CHANGELOG.md @@ -0,0 +1,22 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-fireworks-rainbow-stroke + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-fireworks-rainbow-stroke + +# 4.0.0-beta.0 (2026-04-08) + +### Features + +- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) + +# [4.0.0-alpha.5] + +**Note:** Initial version of package @tsparticles/palette-fireworks-rainbow-stroke diff --git a/palettes/monochromatic/monochromeWhite/LICENSE b/palettes/fireworks/rainbowStroke/LICENSE similarity index 100% rename from palettes/monochromatic/monochromeWhite/LICENSE rename to palettes/fireworks/rainbowStroke/LICENSE diff --git a/palettes/fireworks/rainbowStroke/README.md b/palettes/fireworks/rainbowStroke/README.md new file mode 100644 index 00000000000..a464f58e4ba --- /dev/null +++ b/palettes/fireworks/rainbowStroke/README.md @@ -0,0 +1,79 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles RainbowStroke Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-rainbowStroke/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-rainbowStroke) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-rainbowStroke.svg)](https://www.npmjs.com/package/@tsparticles/palette-rainbowStroke) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-rainbowStroke) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fireworks/rainbowStroke/images/sample.png)](https://particles.js.org/samples/palettes/rainbowStroke) + +## Colors + +See the palette source for stroke layer details. + +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadRainbowStrokePalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadRainbowStrokePalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "rainbowStroke", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadRainbowStrokePalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/fireworks/fireworksRainbowStroke/eslint.config.js b/palettes/fireworks/rainbowStroke/eslint.config.js similarity index 100% rename from palettes/fireworks/fireworksRainbowStroke/eslint.config.js rename to palettes/fireworks/rainbowStroke/eslint.config.js diff --git a/palettes/fireworks/rainbowStroke/images/sample.png b/palettes/fireworks/rainbowStroke/images/sample.png new file mode 100644 index 00000000000..9e628ec070f Binary files /dev/null and b/palettes/fireworks/rainbowStroke/images/sample.png differ diff --git a/palettes/fireworks/rainbowStroke/package.dist.json b/palettes/fireworks/rainbowStroke/package.dist.json new file mode 100644 index 00000000000..a68809e9da1 --- /dev/null +++ b/palettes/fireworks/rainbowStroke/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-fireworks-rainbow-stroke", + "version": "4.0.0-beta.15", + "description": "tsParticles fireworks rainbow stroke palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fireworks/rainbowStroke" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/fireworks/rainbowStroke/package.json b/palettes/fireworks/rainbowStroke/package.json new file mode 100644 index 00000000000..8868ddc1d86 --- /dev/null +++ b/palettes/fireworks/rainbowStroke/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-fireworks-rainbow-stroke", + "version": "4.0.0-beta.15", + "description": "tsParticles fireworks rainbow stroke palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fireworks/rainbowStroke" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/fireworks/rainbowStroke/rollup.config.js b/palettes/fireworks/rainbowStroke/rollup.config.js new file mode 100644 index 00000000000..0ecca0a21f3 --- /dev/null +++ b/palettes/fireworks/rainbowStroke/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-rainbowStroke", + paletteName: "RainbowStroke Palette", + version, +}); diff --git a/palettes/fireworks/rainbowStroke/src/browser.ts b/palettes/fireworks/rainbowStroke/src/browser.ts new file mode 100644 index 00000000000..25b1f1d5b92 --- /dev/null +++ b/palettes/fireworks/rainbowStroke/src/browser.ts @@ -0,0 +1,10 @@ +import { loadFireworksRainbowStrokePalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadFireworksRainbowStrokePalette?: typeof loadFireworksRainbowStrokePalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadFireworksRainbowStrokePalette = loadFireworksRainbowStrokePalette; + +export * from "./index.js"; diff --git a/palettes/fireworks/rainbowStroke/src/index.lazy.ts b/palettes/fireworks/rainbowStroke/src/index.lazy.ts new file mode 100644 index 00000000000..bface8499cb --- /dev/null +++ b/palettes/fireworks/rainbowStroke/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "fireworks-rainbow-stroke"; + +/** + * @param engine - + */ +export async function loadFireworksRainbowStrokePalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fireworks/rainbowStroke/src/index.ts b/palettes/fireworks/rainbowStroke/src/index.ts new file mode 100644 index 00000000000..339cca75edd --- /dev/null +++ b/palettes/fireworks/rainbowStroke/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "fireworks-rainbow-stroke"; + +/** + * @param engine - + */ +export async function loadFireworksRainbowStrokePalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fireworks/fireworksRainbowStroke/src/options.ts b/palettes/fireworks/rainbowStroke/src/options.ts similarity index 100% rename from palettes/fireworks/fireworksRainbowStroke/src/options.ts rename to palettes/fireworks/rainbowStroke/src/options.ts diff --git a/palettes/monochromatic/monochromeGold/tsconfig.base.json b/palettes/fireworks/rainbowStroke/tsconfig.base.json similarity index 100% rename from palettes/monochromatic/monochromeGold/tsconfig.base.json rename to palettes/fireworks/rainbowStroke/tsconfig.base.json diff --git a/palettes/fireworks/fireworksRed/tsconfig.browser.json b/palettes/fireworks/rainbowStroke/tsconfig.browser.json similarity index 100% rename from palettes/fireworks/fireworksRed/tsconfig.browser.json rename to palettes/fireworks/rainbowStroke/tsconfig.browser.json diff --git a/palettes/fireworks/fireworksRed/tsconfig.json b/palettes/fireworks/rainbowStroke/tsconfig.json similarity index 100% rename from palettes/fireworks/fireworksRed/tsconfig.json rename to palettes/fireworks/rainbowStroke/tsconfig.json diff --git a/palettes/fireworks/fireworksRed/tsconfig.module.json b/palettes/fireworks/rainbowStroke/tsconfig.module.json similarity index 100% rename from palettes/fireworks/fireworksRed/tsconfig.module.json rename to palettes/fireworks/rainbowStroke/tsconfig.module.json diff --git a/palettes/fireworks/fireworksRed/tsconfig.types.json b/palettes/fireworks/rainbowStroke/tsconfig.types.json similarity index 100% rename from palettes/fireworks/fireworksRed/tsconfig.types.json rename to palettes/fireworks/rainbowStroke/tsconfig.types.json diff --git a/palettes/fireworks/rainbowStroke/typedoc.json b/palettes/fireworks/rainbowStroke/typedoc.json new file mode 100644 index 00000000000..d435bd95e1c --- /dev/null +++ b/palettes/fireworks/rainbowStroke/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles RainbowStroke Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/monochromatic/monochromeCyan/.browserslistrc b/palettes/fireworks/red/.browserslistrc similarity index 100% rename from palettes/monochromatic/monochromeCyan/.browserslistrc rename to palettes/fireworks/red/.browserslistrc diff --git a/palettes/fireworks/red/CHANGELOG.md b/palettes/fireworks/red/CHANGELOG.md new file mode 100644 index 00000000000..ff0809d1424 --- /dev/null +++ b/palettes/fireworks/red/CHANGELOG.md @@ -0,0 +1,22 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-fireworks-red + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-fireworks-red + +# 4.0.0-beta.0 (2026-04-08) + +### Features + +- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) + +# [4.0.0-alpha.5] + +**Note:** Initial version of package @tsparticles/palette-fireworks-red diff --git a/palettes/monochromatic/monochromeYellows/LICENSE b/palettes/fireworks/red/LICENSE similarity index 100% rename from palettes/monochromatic/monochromeYellows/LICENSE rename to palettes/fireworks/red/LICENSE diff --git a/palettes/fireworks/red/README.md b/palettes/fireworks/red/README.md new file mode 100644 index 00000000000..191cdcd898e --- /dev/null +++ b/palettes/fireworks/red/README.md @@ -0,0 +1,126 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Red Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-red/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-red) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-red.svg)](https://www.npmjs.com/package/@tsparticles/palette-red) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-red) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fireworks/red/images/sample.png)](https://particles.js.org/samples/palettes/red) + +## Colors + + + + + + + + + + + + + + + + + + + + + +
+
+ #FFFFFF +
+
+ #FFDDCC +
+
+ #FF9966 +
+
+ #FF4422 +
+
+ #CC1100 +
+
+ #880000 +
+
+ #330000 +
+
+ Background
+ #110000 +
+ Blend mode: screen | Fill: true +
+ +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadRedPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadRedPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "red", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadRedPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/fireworks/fireworksRed/eslint.config.js b/palettes/fireworks/red/eslint.config.js similarity index 100% rename from palettes/fireworks/fireworksRed/eslint.config.js rename to palettes/fireworks/red/eslint.config.js diff --git a/palettes/fireworks/red/images/sample.png b/palettes/fireworks/red/images/sample.png new file mode 100644 index 00000000000..2062aa8a6c5 Binary files /dev/null and b/palettes/fireworks/red/images/sample.png differ diff --git a/palettes/fireworks/red/package.dist.json b/palettes/fireworks/red/package.dist.json new file mode 100644 index 00000000000..89e4380a7dc --- /dev/null +++ b/palettes/fireworks/red/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-fireworks-red", + "version": "4.0.0-beta.15", + "description": "tsParticles fireworks red palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fireworks/red" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/fireworks/red/package.json b/palettes/fireworks/red/package.json new file mode 100644 index 00000000000..ae1d0878471 --- /dev/null +++ b/palettes/fireworks/red/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-fireworks-red", + "version": "4.0.0-beta.15", + "description": "tsParticles fireworks red palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fireworks/red" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/fireworks/red/rollup.config.js b/palettes/fireworks/red/rollup.config.js new file mode 100644 index 00000000000..555a5c4b261 --- /dev/null +++ b/palettes/fireworks/red/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-red", + paletteName: "Red Palette", + version, +}); diff --git a/palettes/fireworks/red/src/browser.ts b/palettes/fireworks/red/src/browser.ts new file mode 100644 index 00000000000..0bc7c5f7b97 --- /dev/null +++ b/palettes/fireworks/red/src/browser.ts @@ -0,0 +1,10 @@ +import { loadFireworksRedPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadFireworksRedPalette?: typeof loadFireworksRedPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadFireworksRedPalette = loadFireworksRedPalette; + +export * from "./index.js"; diff --git a/palettes/fireworks/red/src/index.lazy.ts b/palettes/fireworks/red/src/index.lazy.ts new file mode 100644 index 00000000000..79fe8f56e06 --- /dev/null +++ b/palettes/fireworks/red/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "fireworks-red"; + +/** + * @param engine - + */ +export async function loadFireworksRedPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fireworks/red/src/index.ts b/palettes/fireworks/red/src/index.ts new file mode 100644 index 00000000000..6e1fdb1b1d7 --- /dev/null +++ b/palettes/fireworks/red/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "fireworks-red"; + +/** + * @param engine - + */ +export async function loadFireworksRedPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fireworks/fireworksRed/src/options.ts b/palettes/fireworks/red/src/options.ts similarity index 100% rename from palettes/fireworks/fireworksRed/src/options.ts rename to palettes/fireworks/red/src/options.ts diff --git a/palettes/monochromatic/monochromeGreens/tsconfig.base.json b/palettes/fireworks/red/tsconfig.base.json similarity index 100% rename from palettes/monochromatic/monochromeGreens/tsconfig.base.json rename to palettes/fireworks/red/tsconfig.base.json diff --git a/palettes/fireworks/fireworksRedStroke/tsconfig.browser.json b/palettes/fireworks/red/tsconfig.browser.json similarity index 100% rename from palettes/fireworks/fireworksRedStroke/tsconfig.browser.json rename to palettes/fireworks/red/tsconfig.browser.json diff --git a/palettes/fireworks/fireworksRedStroke/tsconfig.json b/palettes/fireworks/red/tsconfig.json similarity index 100% rename from palettes/fireworks/fireworksRedStroke/tsconfig.json rename to palettes/fireworks/red/tsconfig.json diff --git a/palettes/fireworks/fireworksRedStroke/tsconfig.module.json b/palettes/fireworks/red/tsconfig.module.json similarity index 100% rename from palettes/fireworks/fireworksRedStroke/tsconfig.module.json rename to palettes/fireworks/red/tsconfig.module.json diff --git a/palettes/fireworks/fireworksRedStroke/tsconfig.types.json b/palettes/fireworks/red/tsconfig.types.json similarity index 100% rename from palettes/fireworks/fireworksRedStroke/tsconfig.types.json rename to palettes/fireworks/red/tsconfig.types.json diff --git a/palettes/fireworks/red/typedoc.json b/palettes/fireworks/red/typedoc.json new file mode 100644 index 00000000000..6299d0f37eb --- /dev/null +++ b/palettes/fireworks/red/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Red Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/monochromatic/monochromeGold/.browserslistrc b/palettes/fireworks/redStroke/.browserslistrc similarity index 100% rename from palettes/monochromatic/monochromeGold/.browserslistrc rename to palettes/fireworks/redStroke/.browserslistrc diff --git a/palettes/fireworks/redStroke/CHANGELOG.md b/palettes/fireworks/redStroke/CHANGELOG.md new file mode 100644 index 00000000000..b232c8e398c --- /dev/null +++ b/palettes/fireworks/redStroke/CHANGELOG.md @@ -0,0 +1,22 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-fireworks-red-stroke + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-fireworks-red-stroke + +# 4.0.0-beta.0 (2026-04-08) + +### Features + +- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) + +# [4.0.0-alpha.5] + +**Note:** Initial version of package @tsparticles/palette-fireworks-red-stroke diff --git a/palettes/pastel/pastelDream/LICENSE b/palettes/fireworks/redStroke/LICENSE similarity index 100% rename from palettes/pastel/pastelDream/LICENSE rename to palettes/fireworks/redStroke/LICENSE diff --git a/palettes/fireworks/redStroke/README.md b/palettes/fireworks/redStroke/README.md new file mode 100644 index 00000000000..4782afd25c7 --- /dev/null +++ b/palettes/fireworks/redStroke/README.md @@ -0,0 +1,79 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles RedStroke Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-redStroke/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-redStroke) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-redStroke.svg)](https://www.npmjs.com/package/@tsparticles/palette-redStroke) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-redStroke) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fireworks/redStroke/images/sample.png)](https://particles.js.org/samples/palettes/redStroke) + +## Colors + +See the palette source for stroke layer details. + +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadRedStrokePalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadRedStrokePalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "redStroke", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadRedStrokePalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/fireworks/fireworksRedStroke/eslint.config.js b/palettes/fireworks/redStroke/eslint.config.js similarity index 100% rename from palettes/fireworks/fireworksRedStroke/eslint.config.js rename to palettes/fireworks/redStroke/eslint.config.js diff --git a/palettes/fireworks/redStroke/images/sample.png b/palettes/fireworks/redStroke/images/sample.png new file mode 100644 index 00000000000..b35680e13d3 Binary files /dev/null and b/palettes/fireworks/redStroke/images/sample.png differ diff --git a/palettes/fireworks/redStroke/package.dist.json b/palettes/fireworks/redStroke/package.dist.json new file mode 100644 index 00000000000..62f7936108f --- /dev/null +++ b/palettes/fireworks/redStroke/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-fireworks-red-stroke", + "version": "4.0.0-beta.15", + "description": "tsParticles fireworks red stroke palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fireworks/redStroke" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/fireworks/redStroke/package.json b/palettes/fireworks/redStroke/package.json new file mode 100644 index 00000000000..f8243f3cbaa --- /dev/null +++ b/palettes/fireworks/redStroke/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-fireworks-red-stroke", + "version": "4.0.0-beta.15", + "description": "tsParticles fireworks red stroke palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fireworks/redStroke" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/fireworks/redStroke/rollup.config.js b/palettes/fireworks/redStroke/rollup.config.js new file mode 100644 index 00000000000..e5e2fc0949b --- /dev/null +++ b/palettes/fireworks/redStroke/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-redStroke", + paletteName: "RedStroke Palette", + version, +}); diff --git a/palettes/fireworks/redStroke/src/browser.ts b/palettes/fireworks/redStroke/src/browser.ts new file mode 100644 index 00000000000..4ee341eaba4 --- /dev/null +++ b/palettes/fireworks/redStroke/src/browser.ts @@ -0,0 +1,10 @@ +import { loadFireworksRedStrokePalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadFireworksRedStrokePalette?: typeof loadFireworksRedStrokePalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadFireworksRedStrokePalette = loadFireworksRedStrokePalette; + +export * from "./index.js"; diff --git a/palettes/fireworks/redStroke/src/index.lazy.ts b/palettes/fireworks/redStroke/src/index.lazy.ts new file mode 100644 index 00000000000..ec4f314eb23 --- /dev/null +++ b/palettes/fireworks/redStroke/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "fireworks-red-stroke"; + +/** + * @param engine - + */ +export async function loadFireworksRedStrokePalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fireworks/redStroke/src/index.ts b/palettes/fireworks/redStroke/src/index.ts new file mode 100644 index 00000000000..f5be2c32560 --- /dev/null +++ b/palettes/fireworks/redStroke/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "fireworks-red-stroke"; + +/** + * @param engine - + */ +export async function loadFireworksRedStrokePalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fireworks/fireworksRedStroke/src/options.ts b/palettes/fireworks/redStroke/src/options.ts similarity index 100% rename from palettes/fireworks/fireworksRedStroke/src/options.ts rename to palettes/fireworks/redStroke/src/options.ts diff --git a/palettes/monochromatic/monochromeNoir/tsconfig.base.json b/palettes/fireworks/redStroke/tsconfig.base.json similarity index 100% rename from palettes/monochromatic/monochromeNoir/tsconfig.base.json rename to palettes/fireworks/redStroke/tsconfig.base.json diff --git a/palettes/fireworks/fireworksSilver/tsconfig.browser.json b/palettes/fireworks/redStroke/tsconfig.browser.json similarity index 100% rename from palettes/fireworks/fireworksSilver/tsconfig.browser.json rename to palettes/fireworks/redStroke/tsconfig.browser.json diff --git a/palettes/fireworks/fireworksSilver/tsconfig.json b/palettes/fireworks/redStroke/tsconfig.json similarity index 100% rename from palettes/fireworks/fireworksSilver/tsconfig.json rename to palettes/fireworks/redStroke/tsconfig.json diff --git a/palettes/fireworks/fireworksSilver/tsconfig.module.json b/palettes/fireworks/redStroke/tsconfig.module.json similarity index 100% rename from palettes/fireworks/fireworksSilver/tsconfig.module.json rename to palettes/fireworks/redStroke/tsconfig.module.json diff --git a/palettes/fireworks/fireworksSilver/tsconfig.types.json b/palettes/fireworks/redStroke/tsconfig.types.json similarity index 100% rename from palettes/fireworks/fireworksSilver/tsconfig.types.json rename to palettes/fireworks/redStroke/tsconfig.types.json diff --git a/palettes/fireworks/redStroke/typedoc.json b/palettes/fireworks/redStroke/typedoc.json new file mode 100644 index 00000000000..c68cac42717 --- /dev/null +++ b/palettes/fireworks/redStroke/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles RedStroke Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/monochromatic/monochromeGreens/.browserslistrc b/palettes/fireworks/silver/.browserslistrc similarity index 100% rename from palettes/monochromatic/monochromeGreens/.browserslistrc rename to palettes/fireworks/silver/.browserslistrc diff --git a/palettes/fireworks/silver/CHANGELOG.md b/palettes/fireworks/silver/CHANGELOG.md new file mode 100644 index 00000000000..98c26f59a10 --- /dev/null +++ b/palettes/fireworks/silver/CHANGELOG.md @@ -0,0 +1,22 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-fireworks-silver + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-fireworks-silver + +# 4.0.0-beta.0 (2026-04-08) + +### Features + +- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) + +# [4.0.0-alpha.5] + +**Note:** Initial version of package @tsparticles/palette-fireworks-silver diff --git a/palettes/vibrant/vibrant/LICENSE b/palettes/fireworks/silver/LICENSE similarity index 100% rename from palettes/vibrant/vibrant/LICENSE rename to palettes/fireworks/silver/LICENSE diff --git a/palettes/fireworks/silver/README.md b/palettes/fireworks/silver/README.md new file mode 100644 index 00000000000..01cf4bbb692 --- /dev/null +++ b/palettes/fireworks/silver/README.md @@ -0,0 +1,126 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Silver Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-silver/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-silver) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-silver.svg)](https://www.npmjs.com/package/@tsparticles/palette-silver) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-silver) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fireworks/silver/images/sample.png)](https://particles.js.org/samples/palettes/silver) + +## Colors + + + + + + + + + + + + + + + + + + + + + +
+
+ #FFFFFF +
+
+ #EEEEFF +
+
+ #CCCCDD +
+
+ #AAAACC +
+
+ #8888BB +
+
+ #555577 +
+
+ #111133 +
+
+ Background
+ #000000 +
+ Blend mode: screen | Fill: true +
+ +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadSilverPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadSilverPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "silver", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadSilverPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/fireworks/fireworksSilver/eslint.config.js b/palettes/fireworks/silver/eslint.config.js similarity index 100% rename from palettes/fireworks/fireworksSilver/eslint.config.js rename to palettes/fireworks/silver/eslint.config.js diff --git a/palettes/fireworks/silver/images/sample.png b/palettes/fireworks/silver/images/sample.png new file mode 100644 index 00000000000..54575c7d7aa Binary files /dev/null and b/palettes/fireworks/silver/images/sample.png differ diff --git a/palettes/fireworks/silver/package.dist.json b/palettes/fireworks/silver/package.dist.json new file mode 100644 index 00000000000..1a7418ffbbb --- /dev/null +++ b/palettes/fireworks/silver/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-fireworks-silver", + "version": "4.0.0-beta.15", + "description": "tsParticles fireworks silver palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fireworks/silver" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/fireworks/silver/package.json b/palettes/fireworks/silver/package.json new file mode 100644 index 00000000000..197f40effdb --- /dev/null +++ b/palettes/fireworks/silver/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-fireworks-silver", + "version": "4.0.0-beta.15", + "description": "tsParticles fireworks silver palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fireworks/silver" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/fireworks/silver/rollup.config.js b/palettes/fireworks/silver/rollup.config.js new file mode 100644 index 00000000000..f50761b7875 --- /dev/null +++ b/palettes/fireworks/silver/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-silver", + paletteName: "Silver Palette", + version, +}); diff --git a/palettes/fireworks/silver/src/browser.ts b/palettes/fireworks/silver/src/browser.ts new file mode 100644 index 00000000000..9e130253ad3 --- /dev/null +++ b/palettes/fireworks/silver/src/browser.ts @@ -0,0 +1,10 @@ +import { loadFireworksSilverPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadFireworksSilverPalette?: typeof loadFireworksSilverPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadFireworksSilverPalette = loadFireworksSilverPalette; + +export * from "./index.js"; diff --git a/palettes/fireworks/silver/src/index.lazy.ts b/palettes/fireworks/silver/src/index.lazy.ts new file mode 100644 index 00000000000..f51b6338706 --- /dev/null +++ b/palettes/fireworks/silver/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "fireworks-silver"; + +/** + * @param engine - + */ +export async function loadFireworksSilverPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fireworks/silver/src/index.ts b/palettes/fireworks/silver/src/index.ts new file mode 100644 index 00000000000..5a93ca874fa --- /dev/null +++ b/palettes/fireworks/silver/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "fireworks-silver"; + +/** + * @param engine - + */ +export async function loadFireworksSilverPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fireworks/fireworksSilver/src/options.ts b/palettes/fireworks/silver/src/options.ts similarity index 100% rename from palettes/fireworks/fireworksSilver/src/options.ts rename to palettes/fireworks/silver/src/options.ts diff --git a/palettes/monochromatic/monochromeOranges/tsconfig.base.json b/palettes/fireworks/silver/tsconfig.base.json similarity index 100% rename from palettes/monochromatic/monochromeOranges/tsconfig.base.json rename to palettes/fireworks/silver/tsconfig.base.json diff --git a/palettes/fireworks/fireworksSilverStroke/tsconfig.browser.json b/palettes/fireworks/silver/tsconfig.browser.json similarity index 100% rename from palettes/fireworks/fireworksSilverStroke/tsconfig.browser.json rename to palettes/fireworks/silver/tsconfig.browser.json diff --git a/palettes/fireworks/fireworksSilverStroke/tsconfig.json b/palettes/fireworks/silver/tsconfig.json similarity index 100% rename from palettes/fireworks/fireworksSilverStroke/tsconfig.json rename to palettes/fireworks/silver/tsconfig.json diff --git a/palettes/fireworks/fireworksSilverStroke/tsconfig.module.json b/palettes/fireworks/silver/tsconfig.module.json similarity index 100% rename from palettes/fireworks/fireworksSilverStroke/tsconfig.module.json rename to palettes/fireworks/silver/tsconfig.module.json diff --git a/palettes/fireworks/fireworksSilverStroke/tsconfig.types.json b/palettes/fireworks/silver/tsconfig.types.json similarity index 100% rename from palettes/fireworks/fireworksSilverStroke/tsconfig.types.json rename to palettes/fireworks/silver/tsconfig.types.json diff --git a/palettes/fireworks/silver/typedoc.json b/palettes/fireworks/silver/typedoc.json new file mode 100644 index 00000000000..fb9935fffa4 --- /dev/null +++ b/palettes/fireworks/silver/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Silver Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/monochromatic/monochromeNoir/.browserslistrc b/palettes/fireworks/silverStroke/.browserslistrc similarity index 100% rename from palettes/monochromatic/monochromeNoir/.browserslistrc rename to palettes/fireworks/silverStroke/.browserslistrc diff --git a/palettes/fireworks/silverStroke/CHANGELOG.md b/palettes/fireworks/silverStroke/CHANGELOG.md new file mode 100644 index 00000000000..e68013ad5d4 --- /dev/null +++ b/palettes/fireworks/silverStroke/CHANGELOG.md @@ -0,0 +1,22 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-fireworks-silver-stroke + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-fireworks-silver-stroke + +# 4.0.0-beta.0 (2026-04-08) + +### Features + +- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) + +# [4.0.0-alpha.5] + +**Note:** Initial version of package @tsparticles/palette-fireworks-silver-stroke diff --git a/palettes/water/water/LICENSE b/palettes/fireworks/silverStroke/LICENSE similarity index 100% rename from palettes/water/water/LICENSE rename to palettes/fireworks/silverStroke/LICENSE diff --git a/palettes/fireworks/silverStroke/README.md b/palettes/fireworks/silverStroke/README.md new file mode 100644 index 00000000000..80780082554 --- /dev/null +++ b/palettes/fireworks/silverStroke/README.md @@ -0,0 +1,79 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles SilverStroke Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-silverStroke/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-silverStroke) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-silverStroke.svg)](https://www.npmjs.com/package/@tsparticles/palette-silverStroke) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-silverStroke) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fireworks/silverStroke/images/sample.png)](https://particles.js.org/samples/palettes/silverStroke) + +## Colors + +See the palette source for stroke layer details. + +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadSilverStrokePalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadSilverStrokePalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "silverStroke", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadSilverStrokePalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/fireworks/fireworksSilverStroke/eslint.config.js b/palettes/fireworks/silverStroke/eslint.config.js similarity index 100% rename from palettes/fireworks/fireworksSilverStroke/eslint.config.js rename to palettes/fireworks/silverStroke/eslint.config.js diff --git a/palettes/fireworks/silverStroke/images/sample.png b/palettes/fireworks/silverStroke/images/sample.png new file mode 100644 index 00000000000..fa945b2883e Binary files /dev/null and b/palettes/fireworks/silverStroke/images/sample.png differ diff --git a/palettes/fireworks/silverStroke/package.dist.json b/palettes/fireworks/silverStroke/package.dist.json new file mode 100644 index 00000000000..c5f30ed3602 --- /dev/null +++ b/palettes/fireworks/silverStroke/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-fireworks-silver-stroke", + "version": "4.0.0-beta.15", + "description": "tsParticles fireworks silver stroke palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fireworks/silverStroke" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/fireworks/silverStroke/package.json b/palettes/fireworks/silverStroke/package.json new file mode 100644 index 00000000000..5d6663b0f8a --- /dev/null +++ b/palettes/fireworks/silverStroke/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-fireworks-silver-stroke", + "version": "4.0.0-beta.15", + "description": "tsParticles fireworks silver stroke palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/fireworks/silverStroke" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/fireworks/silverStroke/rollup.config.js b/palettes/fireworks/silverStroke/rollup.config.js new file mode 100644 index 00000000000..a6c8c580a8a --- /dev/null +++ b/palettes/fireworks/silverStroke/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-silverStroke", + paletteName: "SilverStroke Palette", + version, +}); diff --git a/palettes/fireworks/silverStroke/src/browser.ts b/palettes/fireworks/silverStroke/src/browser.ts new file mode 100644 index 00000000000..277804a92f5 --- /dev/null +++ b/palettes/fireworks/silverStroke/src/browser.ts @@ -0,0 +1,10 @@ +import { loadFireworksSilverStrokePalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadFireworksSilverStrokePalette?: typeof loadFireworksSilverStrokePalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadFireworksSilverStrokePalette = loadFireworksSilverStrokePalette; + +export * from "./index.js"; diff --git a/palettes/fireworks/silverStroke/src/index.lazy.ts b/palettes/fireworks/silverStroke/src/index.lazy.ts new file mode 100644 index 00000000000..92f1e01908e --- /dev/null +++ b/palettes/fireworks/silverStroke/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "fireworks-silver-stroke"; + +/** + * @param engine - + */ +export async function loadFireworksSilverStrokePalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fireworks/silverStroke/src/index.ts b/palettes/fireworks/silverStroke/src/index.ts new file mode 100644 index 00000000000..1c097748418 --- /dev/null +++ b/palettes/fireworks/silverStroke/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "fireworks-silver-stroke"; + +/** + * @param engine - + */ +export async function loadFireworksSilverStrokePalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/fireworks/fireworksSilverStroke/src/options.ts b/palettes/fireworks/silverStroke/src/options.ts similarity index 100% rename from palettes/fireworks/fireworksSilverStroke/src/options.ts rename to palettes/fireworks/silverStroke/src/options.ts diff --git a/palettes/monochromatic/monochromePinks/tsconfig.base.json b/palettes/fireworks/silverStroke/tsconfig.base.json similarity index 100% rename from palettes/monochromatic/monochromePinks/tsconfig.base.json rename to palettes/fireworks/silverStroke/tsconfig.base.json diff --git a/palettes/monochromatic/monochromeBlues/tsconfig.browser.json b/palettes/fireworks/silverStroke/tsconfig.browser.json similarity index 100% rename from palettes/monochromatic/monochromeBlues/tsconfig.browser.json rename to palettes/fireworks/silverStroke/tsconfig.browser.json diff --git a/palettes/monochromatic/monochromeBlues/tsconfig.json b/palettes/fireworks/silverStroke/tsconfig.json similarity index 100% rename from palettes/monochromatic/monochromeBlues/tsconfig.json rename to palettes/fireworks/silverStroke/tsconfig.json diff --git a/palettes/monochromatic/monochromeBlues/tsconfig.module.json b/palettes/fireworks/silverStroke/tsconfig.module.json similarity index 100% rename from palettes/monochromatic/monochromeBlues/tsconfig.module.json rename to palettes/fireworks/silverStroke/tsconfig.module.json diff --git a/palettes/monochromatic/monochromeBlues/tsconfig.types.json b/palettes/fireworks/silverStroke/tsconfig.types.json similarity index 100% rename from palettes/monochromatic/monochromeBlues/tsconfig.types.json rename to palettes/fireworks/silverStroke/tsconfig.types.json diff --git a/palettes/fireworks/silverStroke/typedoc.json b/palettes/fireworks/silverStroke/typedoc.json new file mode 100644 index 00000000000..c569d4caa55 --- /dev/null +++ b/palettes/fireworks/silverStroke/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles SilverStroke Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/food/apple-green/CHANGELOG.md b/palettes/food/apple-green/CHANGELOG.md new file mode 100644 index 00000000000..b10ffddbee4 --- /dev/null +++ b/palettes/food/apple-green/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-apple-green diff --git a/palettes/water/waterSplash/LICENSE b/palettes/food/apple-green/LICENSE similarity index 100% rename from palettes/water/waterSplash/LICENSE rename to palettes/food/apple-green/LICENSE diff --git a/palettes/food/apple-green/README.md b/palettes/food/apple-green/README.md new file mode 100644 index 00000000000..958012d3aa2 --- /dev/null +++ b/palettes/food/apple-green/README.md @@ -0,0 +1,169 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles AppleGreen Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-apple-green/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-apple-green) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-apple-green.svg)](https://www.npmjs.com/package/@tsparticles/palette-apple-green) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-apple-green) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/food/apple-green/images/sample.png)](https://particles.js.org/samples/palettes/apple-green) + +## Colors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ #1A1000 +
+
+ #3A2200 +
+
+ #6B3D00 +
+
+ #A65A00 +
+
+ #D98A1A +
+
+ #FFC266 +
+
+ #090500 +
+
+ #0B0F08 +
+
+ #F1F8E9 +
+
+ #DCEDC8 +
+
+ #C5E1A5 +
+
+ #AED581 +
+
+ #9CCC65 +
+
+ #7CB342 +
+
+ #558B2F +
+
+ #33691E +
+
+ #6D4C41 +
+
+ Background
+ #1A1000 +
+ Blend mode: source-over | Fill: true +
+## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadAppleGreenPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadAppleGreenPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "apple-green", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadAppleGreenPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/food/apple-green/eslint.config.js b/palettes/food/apple-green/eslint.config.js new file mode 100644 index 00000000000..b512f30670b --- /dev/null +++ b/palettes/food/apple-green/eslint.config.js @@ -0,0 +1,7 @@ +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; +import { defineConfig } from "eslint/config"; + +export default defineConfig([ + tsParticlesESLintConfig, +]); + diff --git a/palettes/food/apple-green/images/sample.png b/palettes/food/apple-green/images/sample.png new file mode 100644 index 00000000000..7fcc9c9eeb1 Binary files /dev/null and b/palettes/food/apple-green/images/sample.png differ diff --git a/palettes/food/apple-green/package.dist.json b/palettes/food/apple-green/package.dist.json new file mode 100644 index 00000000000..80ac23ce7e3 --- /dev/null +++ b/palettes/food/apple-green/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-apple-green", + "version": "4.0.0-beta.15", + "description": "tsParticles apple green palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/food/apple-green" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/food/apple-green/package.json b/palettes/food/apple-green/package.json new file mode 100644 index 00000000000..fa805e6f782 --- /dev/null +++ b/palettes/food/apple-green/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-apple-green", + "version": "4.0.0-beta.15", + "description": "tsParticles apple green palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/food/apple-green" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/food/apple-green/rollup.config.js b/palettes/food/apple-green/rollup.config.js new file mode 100644 index 00000000000..dee587853b9 --- /dev/null +++ b/palettes/food/apple-green/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-apple-green", + paletteName: "Apple Green Palette", + version, +}); diff --git a/palettes/food/apple-green/src/browser.ts b/palettes/food/apple-green/src/browser.ts new file mode 100644 index 00000000000..c2d8e69ec58 --- /dev/null +++ b/palettes/food/apple-green/src/browser.ts @@ -0,0 +1,10 @@ +import { loadAppleGreenPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadAppleGreenPalette?: typeof loadAppleGreenPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadAppleGreenPalette = loadAppleGreenPalette; + +export * from "./index.js"; diff --git a/palettes/food/apple-green/src/index.lazy.ts b/palettes/food/apple-green/src/index.lazy.ts new file mode 100644 index 00000000000..438c5666a3b --- /dev/null +++ b/palettes/food/apple-green/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "apple-green"; + +/** + * @param engine - + */ +export async function loadAppleGreenPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/food/apple-green/src/index.ts b/palettes/food/apple-green/src/index.ts new file mode 100644 index 00000000000..834087d3dbf --- /dev/null +++ b/palettes/food/apple-green/src/index.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "apple-green"; + +/** + * Register the apple-green palette + * @param engine + */ +export async function loadAppleGreenPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/food/apple-green/src/options.ts b/palettes/food/apple-green/src/options.ts new file mode 100644 index 00000000000..52643f1098d --- /dev/null +++ b/palettes/food/apple-green/src/options.ts @@ -0,0 +1,25 @@ +import { type IPalette } from "@tsparticles/engine"; + +export const options: IPalette = { + name: "Apple Green", + background: "#0b0f08", + blendMode: "multiply", + colors: { + fill: { + enable: true, + value: [ + "#F1F8E9", // light flesh + "#DCEDC8", + "#C5E1A5", + "#AED581", + "#9CCC65", // green skin + "#7CB342", + "#558B2F", + "#33691E", + "#6D4C41", // stem + ], + }, + }, +}; + +export default options; diff --git a/palettes/pastel/pastelMint/tsconfig.base.json b/palettes/food/apple-green/tsconfig.base.json similarity index 100% rename from palettes/pastel/pastelMint/tsconfig.base.json rename to palettes/food/apple-green/tsconfig.base.json diff --git a/palettes/food/apple-green/tsconfig.browser.json b/palettes/food/apple-green/tsconfig.browser.json new file mode 100644 index 00000000000..a50bcc8dcd6 --- /dev/null +++ b/palettes/food/apple-green/tsconfig.browser.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/browser" + } +} + diff --git a/palettes/food/apple-green/tsconfig.json b/palettes/food/apple-green/tsconfig.json new file mode 100644 index 00000000000..8b4d43b3835 --- /dev/null +++ b/palettes/food/apple-green/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.json"], + "compilerOptions": { + "outDir": "./dist/cjs" + } +} + diff --git a/palettes/food/apple-green/tsconfig.module.json b/palettes/food/apple-green/tsconfig.module.json new file mode 100644 index 00000000000..7542024a392 --- /dev/null +++ b/palettes/food/apple-green/tsconfig.module.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/esm" + } +} + diff --git a/palettes/food/apple-green/tsconfig.types.json b/palettes/food/apple-green/tsconfig.types.json new file mode 100644 index 00000000000..276ebbdac1d --- /dev/null +++ b/palettes/food/apple-green/tsconfig.types.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/types" + } +} + diff --git a/palettes/food/apple-green/typedoc.json b/palettes/food/apple-green/typedoc.json new file mode 100644 index 00000000000..de2b74e933c --- /dev/null +++ b/palettes/food/apple-green/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Apple Green Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/food/apple-red/CHANGELOG.md b/palettes/food/apple-red/CHANGELOG.md new file mode 100644 index 00000000000..cf91c194227 --- /dev/null +++ b/palettes/food/apple-red/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-apple-red diff --git a/palettes/food/apple-red/LICENSE b/palettes/food/apple-red/LICENSE new file mode 100644 index 00000000000..bdc05f528fa --- /dev/null +++ b/palettes/food/apple-red/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/palettes/food/apple-red/README.md b/palettes/food/apple-red/README.md new file mode 100644 index 00000000000..1259110b10c --- /dev/null +++ b/palettes/food/apple-red/README.md @@ -0,0 +1,159 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles AppleRed Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-apple-red/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-apple-red) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-apple-red.svg)](https://www.npmjs.com/package/@tsparticles/palette-apple-red) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-apple-red) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/food/apple-red/images/sample.png)](https://particles.js.org/samples/palettes/apple-red) + +## Colors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ #1A1000 +
+
+ #3A2200 +
+
+ #6B3D00 +
+
+ #A65A00 +
+
+ #D98A1A +
+
+ #FFC266 +
+
+ #090500 +
+
+ #0B0F08 +
+
+ #FFF8E1 +
+
+ #FFE0B2 +
+
+ #FFCC80 +
+
+ #E53935 +
+
+ #C62828 +
+
+ #AD2A2F +
+
+ #6D4C41 +
+
+ Background
+ #1A1000 +
+ Blend mode: source-over | Fill: true +
+## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadAppleRedPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadAppleRedPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "apple-red", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadAppleRedPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/food/apple-red/eslint.config.js b/palettes/food/apple-red/eslint.config.js new file mode 100644 index 00000000000..b512f30670b --- /dev/null +++ b/palettes/food/apple-red/eslint.config.js @@ -0,0 +1,7 @@ +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; +import { defineConfig } from "eslint/config"; + +export default defineConfig([ + tsParticlesESLintConfig, +]); + diff --git a/palettes/food/apple-red/images/sample.png b/palettes/food/apple-red/images/sample.png new file mode 100644 index 00000000000..b1059e75bec Binary files /dev/null and b/palettes/food/apple-red/images/sample.png differ diff --git a/palettes/food/apple-red/package.dist.json b/palettes/food/apple-red/package.dist.json new file mode 100644 index 00000000000..1915792dc95 --- /dev/null +++ b/palettes/food/apple-red/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-apple-red", + "version": "4.0.0-beta.15", + "description": "tsParticles apple red palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/food/apple-red" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/food/apple-red/package.json b/palettes/food/apple-red/package.json new file mode 100644 index 00000000000..048d1f29f0c --- /dev/null +++ b/palettes/food/apple-red/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-apple-red", + "version": "4.0.0-beta.15", + "description": "tsParticles apple red palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/food/apple-red" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/food/apple-red/rollup.config.js b/palettes/food/apple-red/rollup.config.js new file mode 100644 index 00000000000..c35c8564e80 --- /dev/null +++ b/palettes/food/apple-red/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-apple-red", + paletteName: "Apple Red Palette", + version, +}); diff --git a/palettes/food/apple-red/src/browser.ts b/palettes/food/apple-red/src/browser.ts new file mode 100644 index 00000000000..6ec0f7c5201 --- /dev/null +++ b/palettes/food/apple-red/src/browser.ts @@ -0,0 +1,10 @@ +import { loadAppleRedPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadAppleRedPalette?: typeof loadAppleRedPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadAppleRedPalette = loadAppleRedPalette; + +export * from "./index.js"; diff --git a/palettes/food/apple-red/src/index.lazy.ts b/palettes/food/apple-red/src/index.lazy.ts new file mode 100644 index 00000000000..d04cc4f4ba0 --- /dev/null +++ b/palettes/food/apple-red/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "apple-red"; + +/** + * @param engine - + */ +export async function loadAppleRedPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/food/apple-red/src/index.ts b/palettes/food/apple-red/src/index.ts new file mode 100644 index 00000000000..409ba80a7da --- /dev/null +++ b/palettes/food/apple-red/src/index.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "apple-red"; + +/** + * Register the apple-red palette + * @param engine + */ +export async function loadAppleRedPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/food/apple-red/src/options.ts b/palettes/food/apple-red/src/options.ts new file mode 100644 index 00000000000..4672e2ab382 --- /dev/null +++ b/palettes/food/apple-red/src/options.ts @@ -0,0 +1,23 @@ +import { type IPalette } from "@tsparticles/engine"; + +export const options: IPalette = { + name: "Apple Red", + background: "#0b0f08", + blendMode: "multiply", + colors: { + fill: { + enable: true, + value: [ + "#FFF8E1", // inner flesh light + "#FFE0B2", + "#FFCC80", + "#E53935", // red skin + "#C62828", + "#AD2A2F", + "#6D4C41", // stem + ], + }, + }, +}; + +export default options; diff --git a/palettes/pastel/pastelSunset/tsconfig.base.json b/palettes/food/apple-red/tsconfig.base.json similarity index 100% rename from palettes/pastel/pastelSunset/tsconfig.base.json rename to palettes/food/apple-red/tsconfig.base.json diff --git a/palettes/food/apple-red/tsconfig.browser.json b/palettes/food/apple-red/tsconfig.browser.json new file mode 100644 index 00000000000..a50bcc8dcd6 --- /dev/null +++ b/palettes/food/apple-red/tsconfig.browser.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/browser" + } +} + diff --git a/palettes/food/apple-red/tsconfig.json b/palettes/food/apple-red/tsconfig.json new file mode 100644 index 00000000000..8b4d43b3835 --- /dev/null +++ b/palettes/food/apple-red/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.json"], + "compilerOptions": { + "outDir": "./dist/cjs" + } +} + diff --git a/palettes/food/apple-red/tsconfig.module.json b/palettes/food/apple-red/tsconfig.module.json new file mode 100644 index 00000000000..7542024a392 --- /dev/null +++ b/palettes/food/apple-red/tsconfig.module.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/esm" + } +} + diff --git a/palettes/food/apple-red/tsconfig.types.json b/palettes/food/apple-red/tsconfig.types.json new file mode 100644 index 00000000000..276ebbdac1d --- /dev/null +++ b/palettes/food/apple-red/tsconfig.types.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/types" + } +} + diff --git a/palettes/food/apple-red/typedoc.json b/palettes/food/apple-red/typedoc.json new file mode 100644 index 00000000000..082fd472814 --- /dev/null +++ b/palettes/food/apple-red/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Apple Red Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/food/apple/CHANGELOG.md b/palettes/food/apple/CHANGELOG.md new file mode 100644 index 00000000000..631d01335eb --- /dev/null +++ b/palettes/food/apple/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-apple diff --git a/palettes/food/apple/LICENSE b/palettes/food/apple/LICENSE new file mode 100644 index 00000000000..bdc05f528fa --- /dev/null +++ b/palettes/food/apple/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/palettes/food/apple/README.md b/palettes/food/apple/README.md new file mode 100644 index 00000000000..5b556f5342d --- /dev/null +++ b/palettes/food/apple/README.md @@ -0,0 +1,217 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Apple Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-apple/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-apple) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-apple.svg)](https://www.npmjs.com/package/@tsparticles/palette-apple) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-apple) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/food/apple/images/sample.png)](https://particles.js.org/samples/palettes/apple) + +## Colors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ #1A1000 +
+
+ #3A2200 +
+
+ #6B3D00 +
+
+ #A65A00 +
+
+ #D98A1A +
+
+ #FFC266 +
+
+ #090500 +
+
+ #0B0F08 +
+
+ #FFF8E1 +
+
+ #FFE0B2 +
+
+ #E53935 +
+
+ #C62828 +
+
+ #AD2A2F +
+
+ #A5D6A7 +
+
+ #81C784 +
+
+ #66BB6A +
+
+ #6D4C41 +
+
+ #FFA500 +
+
+ #FFEFD7 +
+
+ #000000 +
+
+ #FFFFFF +
+
+ #F5F5F5 +
+
+ #1E1E1E +
+
+ #252525 +
+
+ #E0E0E0 +
+
+ #A0A0A0 +
+
+ #404040 +
+
+ #1D3557 +
+
+ Background
+ #1A1000 +
+ Blend mode: source-over | Fill: true +
+## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadApplePalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadApplePalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "apple", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadApplePalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/food/apple/eslint.config.js b/palettes/food/apple/eslint.config.js new file mode 100644 index 00000000000..248b4d3dd36 --- /dev/null +++ b/palettes/food/apple/eslint.config.js @@ -0,0 +1,6 @@ +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; +import { defineConfig } from "eslint/config"; + +export default defineConfig([ + tsParticlesESLintConfig, +]); diff --git a/palettes/food/apple/images/sample.png b/palettes/food/apple/images/sample.png new file mode 100644 index 00000000000..2d98863ee5c Binary files /dev/null and b/palettes/food/apple/images/sample.png differ diff --git a/palettes/food/apple/package.dist.json b/palettes/food/apple/package.dist.json new file mode 100644 index 00000000000..ec33f89d1fa --- /dev/null +++ b/palettes/food/apple/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-apple", + "version": "4.0.0-beta.15", + "description": "tsParticles apple palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/food/apple" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/food/apple/package.json b/palettes/food/apple/package.json new file mode 100644 index 00000000000..fe895d69485 --- /dev/null +++ b/palettes/food/apple/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-apple", + "version": "4.0.0-beta.15", + "description": "tsParticles apple palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/food/apple" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/food/apple/rollup.config.js b/palettes/food/apple/rollup.config.js new file mode 100644 index 00000000000..7cfa9d97cc1 --- /dev/null +++ b/palettes/food/apple/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-apple", + paletteName: "Apple Palette", + version, +}); diff --git a/palettes/food/apple/src/browser.ts b/palettes/food/apple/src/browser.ts new file mode 100644 index 00000000000..57d9c7362bc --- /dev/null +++ b/palettes/food/apple/src/browser.ts @@ -0,0 +1,10 @@ +import { loadApplePalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadApplePalette?: typeof loadApplePalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadApplePalette = loadApplePalette; + +export * from "./index.js"; diff --git a/palettes/food/apple/src/index.lazy.ts b/palettes/food/apple/src/index.lazy.ts new file mode 100644 index 00000000000..12d9b30835f --- /dev/null +++ b/palettes/food/apple/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "apple"; + +/** + * @param engine - + */ +export async function loadApplePalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/food/apple/src/index.ts b/palettes/food/apple/src/index.ts new file mode 100644 index 00000000000..51337f8e328 --- /dev/null +++ b/palettes/food/apple/src/index.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "apple"; + +/** + * Register the apple palette only. Red/Green variants live in their own packages. + * @param engine - + */ +export async function loadApplePalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/food/apple/src/options.ts b/palettes/food/apple/src/options.ts new file mode 100644 index 00000000000..ceff5eac647 --- /dev/null +++ b/palettes/food/apple/src/options.ts @@ -0,0 +1,25 @@ +import { type IPalette } from "@tsparticles/engine"; + +export const options: IPalette = { + name: "Apple", + background: "#0b0f08", + blendMode: "multiply", + colors: { + fill: { + enable: true, + value: [ + "#FFF8E1", + "#FFE0B2", + "#E53935", + "#C62828", + "#AD2A2F", + "#A5D6A7", + "#81C784", + "#66BB6A", + "#6D4C41", + ], + }, + }, +}; + +export default options; diff --git a/palettes/monochromatic/monochromePurples/tsconfig.base.json b/palettes/food/apple/tsconfig.base.json similarity index 100% rename from palettes/monochromatic/monochromePurples/tsconfig.base.json rename to palettes/food/apple/tsconfig.base.json diff --git a/palettes/food/apple/tsconfig.browser.json b/palettes/food/apple/tsconfig.browser.json new file mode 100644 index 00000000000..0bf2f9217a3 --- /dev/null +++ b/palettes/food/apple/tsconfig.browser.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/browser" + } +} diff --git a/palettes/food/apple/tsconfig.json b/palettes/food/apple/tsconfig.json new file mode 100644 index 00000000000..630bf828704 --- /dev/null +++ b/palettes/food/apple/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.json"], + "compilerOptions": { + "outDir": "./dist/cjs" + } +} diff --git a/palettes/food/apple/tsconfig.module.json b/palettes/food/apple/tsconfig.module.json new file mode 100644 index 00000000000..48ee30e69f5 --- /dev/null +++ b/palettes/food/apple/tsconfig.module.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/esm" + } +} diff --git a/palettes/food/apple/tsconfig.types.json b/palettes/food/apple/tsconfig.types.json new file mode 100644 index 00000000000..4f8341e69ba --- /dev/null +++ b/palettes/food/apple/tsconfig.types.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/types" + } +} diff --git a/palettes/food/apple/typedoc.json b/palettes/food/apple/typedoc.json new file mode 100644 index 00000000000..849eb41f90d --- /dev/null +++ b/palettes/food/apple/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Apple Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/food/avocado/CHANGELOG.md b/palettes/food/avocado/CHANGELOG.md new file mode 100644 index 00000000000..c8003cc3fff --- /dev/null +++ b/palettes/food/avocado/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-avocado diff --git a/palettes/food/avocado/LICENSE b/palettes/food/avocado/LICENSE new file mode 100644 index 00000000000..bdc05f528fa --- /dev/null +++ b/palettes/food/avocado/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/palettes/food/avocado/README.md b/palettes/food/avocado/README.md new file mode 100644 index 00000000000..e3a6d23025d --- /dev/null +++ b/palettes/food/avocado/README.md @@ -0,0 +1,203 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Avocado Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-avocado/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-avocado) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-avocado.svg)](https://www.npmjs.com/package/@tsparticles/palette-avocado) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-avocado) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/food/avocado/images/sample.png)](https://particles.js.org/samples/palettes/avocado) + +## Colors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ #1A1000 +
+
+ #3A2200 +
+
+ #6B3D00 +
+
+ #A65A00 +
+
+ #D98A1A +
+
+ #FFC266 +
+
+ #090500 +
+
+ #081009 +
+
+ #C5E1A5 +
+
+ #9CCC65 +
+
+ #7CB342 +
+
+ #558B2F +
+
+ #1B5E20 +
+
+ #3E2723 +
+
+ #FFA500 +
+
+ #FFEFD7 +
+
+ #000000 +
+
+ #FFFFFF +
+
+ #F5F5F5 +
+
+ #1E1E1E +
+
+ #252525 +
+
+ #E0E0E0 +
+
+ #A0A0A0 +
+
+ #404040 +
+
+ #1D3557 +
+
+ Background
+ #1A1000 +
+ Blend mode: source-over | Fill: true +
+## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadAvocadoPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadAvocadoPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "avocado", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadAvocadoPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/food/avocado/eslint.config.js b/palettes/food/avocado/eslint.config.js new file mode 100644 index 00000000000..248b4d3dd36 --- /dev/null +++ b/palettes/food/avocado/eslint.config.js @@ -0,0 +1,6 @@ +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; +import { defineConfig } from "eslint/config"; + +export default defineConfig([ + tsParticlesESLintConfig, +]); diff --git a/palettes/food/avocado/images/sample.png b/palettes/food/avocado/images/sample.png new file mode 100644 index 00000000000..de08955cfef Binary files /dev/null and b/palettes/food/avocado/images/sample.png differ diff --git a/palettes/food/avocado/package.dist.json b/palettes/food/avocado/package.dist.json new file mode 100644 index 00000000000..9c47d136c60 --- /dev/null +++ b/palettes/food/avocado/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-avocado", + "version": "4.0.0-beta.15", + "description": "tsParticles avocado palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/food/avocado" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/food/avocado/package.json b/palettes/food/avocado/package.json new file mode 100644 index 00000000000..a3a5d92b060 --- /dev/null +++ b/palettes/food/avocado/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-avocado", + "version": "4.0.0-beta.15", + "description": "tsParticles avocado palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/food/avocado" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/food/avocado/rollup.config.js b/palettes/food/avocado/rollup.config.js new file mode 100644 index 00000000000..baebd3aaeda --- /dev/null +++ b/palettes/food/avocado/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-avocado", + paletteName: "Avocado Palette", + version, +}); diff --git a/palettes/food/avocado/src/browser.ts b/palettes/food/avocado/src/browser.ts new file mode 100644 index 00000000000..e517bed6b38 --- /dev/null +++ b/palettes/food/avocado/src/browser.ts @@ -0,0 +1,10 @@ +import { loadAvocadoPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadAvocadoPalette?: typeof loadAvocadoPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadAvocadoPalette = loadAvocadoPalette; + +export * from "./index.js"; diff --git a/palettes/food/avocado/src/index.lazy.ts b/palettes/food/avocado/src/index.lazy.ts new file mode 100644 index 00000000000..9f291e8ef4a --- /dev/null +++ b/palettes/food/avocado/src/index.lazy.ts @@ -0,0 +1,15 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "avocado"; + +/** + * + * @param engine + */ +export async function loadAvocadoPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/food/avocado/src/index.ts b/palettes/food/avocado/src/index.ts new file mode 100644 index 00000000000..ace8fef6ca5 --- /dev/null +++ b/palettes/food/avocado/src/index.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "avocado"; + +/** + * + * @param engine + */ +export async function loadAvocadoPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/food/avocado/src/options.ts b/palettes/food/avocado/src/options.ts new file mode 100644 index 00000000000..c2493783660 --- /dev/null +++ b/palettes/food/avocado/src/options.ts @@ -0,0 +1,20 @@ +import { type IPalette } from "@tsparticles/engine"; + +export const options: IPalette = { + name: "Avocado", + background: "#081009", + blendMode: "multiply", + colors: { + fill: { + enable: true, + value: [ + "#C5E1A5", // light flesh + "#9CCC65", + "#7CB342", + "#558B2F", + "#1B5E20", // peel + "#3E2723", // pit + ], + }, + }, +}; diff --git a/palettes/monochromatic/monochromeReds/tsconfig.base.json b/palettes/food/avocado/tsconfig.base.json similarity index 100% rename from palettes/monochromatic/monochromeReds/tsconfig.base.json rename to palettes/food/avocado/tsconfig.base.json diff --git a/palettes/food/avocado/tsconfig.browser.json b/palettes/food/avocado/tsconfig.browser.json new file mode 100644 index 00000000000..0bf2f9217a3 --- /dev/null +++ b/palettes/food/avocado/tsconfig.browser.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/browser" + } +} diff --git a/palettes/food/avocado/tsconfig.json b/palettes/food/avocado/tsconfig.json new file mode 100644 index 00000000000..630bf828704 --- /dev/null +++ b/palettes/food/avocado/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.json"], + "compilerOptions": { + "outDir": "./dist/cjs" + } +} diff --git a/palettes/food/avocado/tsconfig.module.json b/palettes/food/avocado/tsconfig.module.json new file mode 100644 index 00000000000..48ee30e69f5 --- /dev/null +++ b/palettes/food/avocado/tsconfig.module.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/esm" + } +} diff --git a/palettes/food/avocado/tsconfig.types.json b/palettes/food/avocado/tsconfig.types.json new file mode 100644 index 00000000000..4f8341e69ba --- /dev/null +++ b/palettes/food/avocado/tsconfig.types.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/types" + } +} diff --git a/palettes/food/avocado/typedoc.json b/palettes/food/avocado/typedoc.json new file mode 100644 index 00000000000..3306b03ea39 --- /dev/null +++ b/palettes/food/avocado/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Avocado Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/food/bell-peppers/CHANGELOG.md b/palettes/food/bell-peppers/CHANGELOG.md new file mode 100644 index 00000000000..b6ce9fcac6c --- /dev/null +++ b/palettes/food/bell-peppers/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-bell-peppers diff --git a/palettes/food/bell-peppers/LICENSE b/palettes/food/bell-peppers/LICENSE new file mode 100644 index 00000000000..bdc05f528fa --- /dev/null +++ b/palettes/food/bell-peppers/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/palettes/food/bell-peppers/README.md b/palettes/food/bell-peppers/README.md new file mode 100644 index 00000000000..9ce492c4c44 --- /dev/null +++ b/palettes/food/bell-peppers/README.md @@ -0,0 +1,199 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles BellPeppers Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-bell-peppers/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-bell-peppers) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-bell-peppers.svg)](https://www.npmjs.com/package/@tsparticles/palette-bell-peppers) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-bell-peppers) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/food/bell-peppers/images/sample.png)](https://particles.js.org/samples/palettes/bell-peppers) + +## Colors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ #1A1000 +
+
+ #3A2200 +
+
+ #6B3D00 +
+
+ #A65A00 +
+
+ #D98A1A +
+
+ #FFC266 +
+
+ #090500 +
+
+ #08110A +
+
+ #E53935 +
+
+ #FB8C00 +
+
+ #FDD835 +
+
+ #43A047 +
+
+ #2E7D32 +
+
+ #FFA500 +
+
+ #FFEFD7 +
+
+ #000000 +
+
+ #FFFFFF +
+
+ #F5F5F5 +
+
+ #1E1E1E +
+
+ #252525 +
+
+ #E0E0E0 +
+
+ #A0A0A0 +
+
+ #404040 +
+
+ #1D3557 +
+
+ Background
+ #1A1000 +
+ Blend mode: source-over | Fill: true +
+## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadBellPeppersPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadBellPeppersPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "bell-peppers", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadBellPeppersPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/food/bell-peppers/eslint.config.js b/palettes/food/bell-peppers/eslint.config.js new file mode 100644 index 00000000000..248b4d3dd36 --- /dev/null +++ b/palettes/food/bell-peppers/eslint.config.js @@ -0,0 +1,6 @@ +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; +import { defineConfig } from "eslint/config"; + +export default defineConfig([ + tsParticlesESLintConfig, +]); diff --git a/palettes/food/bell-peppers/images/sample.png b/palettes/food/bell-peppers/images/sample.png new file mode 100644 index 00000000000..f2f06e6bced Binary files /dev/null and b/palettes/food/bell-peppers/images/sample.png differ diff --git a/palettes/food/bell-peppers/package.dist.json b/palettes/food/bell-peppers/package.dist.json new file mode 100644 index 00000000000..3ba694b19e9 --- /dev/null +++ b/palettes/food/bell-peppers/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-bell-peppers", + "version": "4.0.0-beta.15", + "description": "tsParticles bell peppers palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/food/bell-peppers" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/food/bell-peppers/package.json b/palettes/food/bell-peppers/package.json new file mode 100644 index 00000000000..412b988d2b9 --- /dev/null +++ b/palettes/food/bell-peppers/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-bell-peppers", + "version": "4.0.0-beta.15", + "description": "tsParticles bell peppers palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/food/bell-peppers" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/food/bell-peppers/rollup.config.js b/palettes/food/bell-peppers/rollup.config.js new file mode 100644 index 00000000000..a1b361d1233 --- /dev/null +++ b/palettes/food/bell-peppers/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-bell-peppers", + paletteName: "Bell Peppers Palette", + version, +}); diff --git a/palettes/food/bell-peppers/src/browser.ts b/palettes/food/bell-peppers/src/browser.ts new file mode 100644 index 00000000000..24676751172 --- /dev/null +++ b/palettes/food/bell-peppers/src/browser.ts @@ -0,0 +1,10 @@ +import { loadBellPeppersPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadBellPeppersPalette?: typeof loadBellPeppersPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadBellPeppersPalette = loadBellPeppersPalette; + +export * from "./index.js"; diff --git a/palettes/food/bell-peppers/src/index.lazy.ts b/palettes/food/bell-peppers/src/index.lazy.ts new file mode 100644 index 00000000000..d744aaadfd2 --- /dev/null +++ b/palettes/food/bell-peppers/src/index.lazy.ts @@ -0,0 +1,15 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "bell-peppers"; + +/** + * + * @param engine + */ +export async function loadBellPeppersPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/food/bell-peppers/src/index.ts b/palettes/food/bell-peppers/src/index.ts new file mode 100644 index 00000000000..ef7ba973a02 --- /dev/null +++ b/palettes/food/bell-peppers/src/index.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "bell-peppers"; + +/** + * + * @param engine + */ +export async function loadBellPeppersPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/food/bell-peppers/src/options.ts b/palettes/food/bell-peppers/src/options.ts new file mode 100644 index 00000000000..f7dbe1f8352 --- /dev/null +++ b/palettes/food/bell-peppers/src/options.ts @@ -0,0 +1,19 @@ +import { type IPalette } from "@tsparticles/engine"; + +export const options: IPalette = { + name: "Bell Peppers", + background: "#08110a", + blendMode: "overlay", + colors: { + fill: { + enable: true, + value: [ + "#E53935", // red + "#FB8C00", // orange + "#FDD835", // yellow + "#43A047", // green + "#2E7D32", + ], + }, + }, +}; diff --git a/palettes/monochromatic/monochromeTeal/tsconfig.base.json b/palettes/food/bell-peppers/tsconfig.base.json similarity index 100% rename from palettes/monochromatic/monochromeTeal/tsconfig.base.json rename to palettes/food/bell-peppers/tsconfig.base.json diff --git a/palettes/food/bell-peppers/tsconfig.browser.json b/palettes/food/bell-peppers/tsconfig.browser.json new file mode 100644 index 00000000000..0bf2f9217a3 --- /dev/null +++ b/palettes/food/bell-peppers/tsconfig.browser.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/browser" + } +} diff --git a/palettes/food/bell-peppers/tsconfig.json b/palettes/food/bell-peppers/tsconfig.json new file mode 100644 index 00000000000..630bf828704 --- /dev/null +++ b/palettes/food/bell-peppers/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.json"], + "compilerOptions": { + "outDir": "./dist/cjs" + } +} diff --git a/palettes/food/bell-peppers/tsconfig.module.json b/palettes/food/bell-peppers/tsconfig.module.json new file mode 100644 index 00000000000..48ee30e69f5 --- /dev/null +++ b/palettes/food/bell-peppers/tsconfig.module.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/esm" + } +} diff --git a/palettes/food/bell-peppers/tsconfig.types.json b/palettes/food/bell-peppers/tsconfig.types.json new file mode 100644 index 00000000000..4f8341e69ba --- /dev/null +++ b/palettes/food/bell-peppers/tsconfig.types.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/types" + } +} diff --git a/palettes/food/bell-peppers/typedoc.json b/palettes/food/bell-peppers/typedoc.json new file mode 100644 index 00000000000..6c4ce307d1d --- /dev/null +++ b/palettes/food/bell-peppers/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Bell Peppers Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/food/berries/CHANGELOG.md b/palettes/food/berries/CHANGELOG.md new file mode 100644 index 00000000000..4d4186b8aa2 --- /dev/null +++ b/palettes/food/berries/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-berries diff --git a/palettes/food/berries/LICENSE b/palettes/food/berries/LICENSE new file mode 100644 index 00000000000..bdc05f528fa --- /dev/null +++ b/palettes/food/berries/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/palettes/food/berries/README.md b/palettes/food/berries/README.md new file mode 100644 index 00000000000..2f2789118f4 --- /dev/null +++ b/palettes/food/berries/README.md @@ -0,0 +1,203 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Berries Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-berries/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-berries) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-berries.svg)](https://www.npmjs.com/package/@tsparticles/palette-berries) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-berries) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/food/berries/images/sample.png)](https://particles.js.org/samples/palettes/berries) + +## Colors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ #1A1000 +
+
+ #3A2200 +
+
+ #6B3D00 +
+
+ #A65A00 +
+
+ #D98A1A +
+
+ #FFC266 +
+
+ #090500 +
+
+ #0B0710 +
+
+ #D81B60 +
+
+ #AD1457 +
+
+ #8E24AA +
+
+ #6A1B9A +
+
+ #3949AB +
+
+ #303F9F +
+
+ #FFA500 +
+
+ #FFEFD7 +
+
+ #000000 +
+
+ #FFFFFF +
+
+ #F5F5F5 +
+
+ #1E1E1E +
+
+ #252525 +
+
+ #E0E0E0 +
+
+ #A0A0A0 +
+
+ #404040 +
+
+ #1D3557 +
+
+ Background
+ #1A1000 +
+ Blend mode: source-over | Fill: true +
+## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadBerriesPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadBerriesPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "berries", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadBerriesPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/food/berries/eslint.config.js b/palettes/food/berries/eslint.config.js new file mode 100644 index 00000000000..248b4d3dd36 --- /dev/null +++ b/palettes/food/berries/eslint.config.js @@ -0,0 +1,6 @@ +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; +import { defineConfig } from "eslint/config"; + +export default defineConfig([ + tsParticlesESLintConfig, +]); diff --git a/palettes/food/berries/images/sample.png b/palettes/food/berries/images/sample.png new file mode 100644 index 00000000000..28d514ecd3a Binary files /dev/null and b/palettes/food/berries/images/sample.png differ diff --git a/palettes/food/berries/package.dist.json b/palettes/food/berries/package.dist.json new file mode 100644 index 00000000000..6f38475f56f --- /dev/null +++ b/palettes/food/berries/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-berries", + "version": "4.0.0-beta.15", + "description": "tsParticles berries palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/food/berries" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/food/berries/package.json b/palettes/food/berries/package.json new file mode 100644 index 00000000000..2fc52e972db --- /dev/null +++ b/palettes/food/berries/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-berries", + "version": "4.0.0-beta.15", + "description": "tsParticles berries palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/food/berries" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/food/berries/rollup.config.js b/palettes/food/berries/rollup.config.js new file mode 100644 index 00000000000..594d9dc0ef5 --- /dev/null +++ b/palettes/food/berries/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-berries", + paletteName: "Berries Palette", + version, +}); diff --git a/palettes/food/berries/src/browser.ts b/palettes/food/berries/src/browser.ts new file mode 100644 index 00000000000..d5c5cf6ae8b --- /dev/null +++ b/palettes/food/berries/src/browser.ts @@ -0,0 +1,10 @@ +import { loadBerriesPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadBerriesPalette?: typeof loadBerriesPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadBerriesPalette = loadBerriesPalette; + +export * from "./index.js"; diff --git a/palettes/food/berries/src/index.lazy.ts b/palettes/food/berries/src/index.lazy.ts new file mode 100644 index 00000000000..83d08a8f7a8 --- /dev/null +++ b/palettes/food/berries/src/index.lazy.ts @@ -0,0 +1,15 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "berries"; + +/** + * + * @param engine + */ +export async function loadBerriesPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/food/berries/src/index.ts b/palettes/food/berries/src/index.ts new file mode 100644 index 00000000000..174dad90e31 --- /dev/null +++ b/palettes/food/berries/src/index.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "berries"; + +/** + * + * @param engine + */ +export async function loadBerriesPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/food/berries/src/options.ts b/palettes/food/berries/src/options.ts new file mode 100644 index 00000000000..b35b4108c39 --- /dev/null +++ b/palettes/food/berries/src/options.ts @@ -0,0 +1,20 @@ +import { type IPalette } from "@tsparticles/engine"; + +export const options: IPalette = { + name: "Berries", + background: "#0b0710", + blendMode: "multiply", + colors: { + fill: { + enable: true, + value: [ + "#D81B60", + "#AD1457", + "#8E24AA", + "#6A1B9A", + "#3949AB", + "#303F9F", + ], + }, + }, +}; diff --git a/palettes/monochromatic/monochromeWhite/tsconfig.base.json b/palettes/food/berries/tsconfig.base.json similarity index 100% rename from palettes/monochromatic/monochromeWhite/tsconfig.base.json rename to palettes/food/berries/tsconfig.base.json diff --git a/palettes/food/berries/tsconfig.browser.json b/palettes/food/berries/tsconfig.browser.json new file mode 100644 index 00000000000..0bf2f9217a3 --- /dev/null +++ b/palettes/food/berries/tsconfig.browser.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/browser" + } +} diff --git a/palettes/food/berries/tsconfig.json b/palettes/food/berries/tsconfig.json new file mode 100644 index 00000000000..630bf828704 --- /dev/null +++ b/palettes/food/berries/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.json"], + "compilerOptions": { + "outDir": "./dist/cjs" + } +} diff --git a/palettes/food/berries/tsconfig.module.json b/palettes/food/berries/tsconfig.module.json new file mode 100644 index 00000000000..48ee30e69f5 --- /dev/null +++ b/palettes/food/berries/tsconfig.module.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/esm" + } +} diff --git a/palettes/food/berries/tsconfig.types.json b/palettes/food/berries/tsconfig.types.json new file mode 100644 index 00000000000..4f8341e69ba --- /dev/null +++ b/palettes/food/berries/tsconfig.types.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/types" + } +} diff --git a/palettes/food/berries/typedoc.json b/palettes/food/berries/typedoc.json new file mode 100644 index 00000000000..8c8d953cb6b --- /dev/null +++ b/palettes/food/berries/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Berries Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/food/cherry/CHANGELOG.md b/palettes/food/cherry/CHANGELOG.md new file mode 100644 index 00000000000..a8c9326396e --- /dev/null +++ b/palettes/food/cherry/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-cherry diff --git a/palettes/food/cherry/LICENSE b/palettes/food/cherry/LICENSE new file mode 100644 index 00000000000..bdc05f528fa --- /dev/null +++ b/palettes/food/cherry/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/palettes/food/cherry/README.md b/palettes/food/cherry/README.md new file mode 100644 index 00000000000..dfc3859a97a --- /dev/null +++ b/palettes/food/cherry/README.md @@ -0,0 +1,199 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Cherry Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-cherry/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-cherry) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-cherry.svg)](https://www.npmjs.com/package/@tsparticles/palette-cherry) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-cherry) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/food/cherry/images/sample.png)](https://particles.js.org/samples/palettes/cherry) + +## Colors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ #1A1000 +
+
+ #3A2200 +
+
+ #6B3D00 +
+
+ #A65A00 +
+
+ #D98A1A +
+
+ #FFC266 +
+
+ #090500 +
+
+ #0B0710 +
+
+ #FDE0DC +
+
+ #EF5350 +
+
+ #D32F2F +
+
+ #B71C1C +
+
+ #880E4F +
+
+ #FFA500 +
+
+ #FFEFD7 +
+
+ #000000 +
+
+ #FFFFFF +
+
+ #F5F5F5 +
+
+ #1E1E1E +
+
+ #252525 +
+
+ #E0E0E0 +
+
+ #A0A0A0 +
+
+ #404040 +
+
+ #1D3557 +
+
+ Background
+ #1A1000 +
+ Blend mode: source-over | Fill: true +
+## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadCherryPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadCherryPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "cherry", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadCherryPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/food/cherry/eslint.config.js b/palettes/food/cherry/eslint.config.js new file mode 100644 index 00000000000..248b4d3dd36 --- /dev/null +++ b/palettes/food/cherry/eslint.config.js @@ -0,0 +1,6 @@ +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; +import { defineConfig } from "eslint/config"; + +export default defineConfig([ + tsParticlesESLintConfig, +]); diff --git a/palettes/food/cherry/images/sample.png b/palettes/food/cherry/images/sample.png new file mode 100644 index 00000000000..d7474dbcb38 Binary files /dev/null and b/palettes/food/cherry/images/sample.png differ diff --git a/palettes/food/cherry/package.dist.json b/palettes/food/cherry/package.dist.json new file mode 100644 index 00000000000..bb9bab539bd --- /dev/null +++ b/palettes/food/cherry/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-cherry", + "version": "4.0.0-beta.15", + "description": "tsParticles cherry palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/food/cherry" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/food/cherry/package.json b/palettes/food/cherry/package.json new file mode 100644 index 00000000000..f17fac85925 --- /dev/null +++ b/palettes/food/cherry/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-cherry", + "version": "4.0.0-beta.15", + "description": "tsParticles cherry palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/food/cherry" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/food/cherry/rollup.config.js b/palettes/food/cherry/rollup.config.js new file mode 100644 index 00000000000..45915119fb0 --- /dev/null +++ b/palettes/food/cherry/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-cherry", + paletteName: "Cherry Palette", + version, +}); diff --git a/palettes/food/cherry/src/browser.ts b/palettes/food/cherry/src/browser.ts new file mode 100644 index 00000000000..ad5b9f9918d --- /dev/null +++ b/palettes/food/cherry/src/browser.ts @@ -0,0 +1,10 @@ +import { loadCherryPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadCherryPalette?: typeof loadCherryPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadCherryPalette = loadCherryPalette; + +export * from "./index.js"; diff --git a/palettes/food/cherry/src/index.lazy.ts b/palettes/food/cherry/src/index.lazy.ts new file mode 100644 index 00000000000..bd6ef3f086a --- /dev/null +++ b/palettes/food/cherry/src/index.lazy.ts @@ -0,0 +1,15 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "cherry"; + +/** + * + * @param engine + */ +export async function loadCherryPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/food/cherry/src/index.ts b/palettes/food/cherry/src/index.ts new file mode 100644 index 00000000000..6cc16d90cb6 --- /dev/null +++ b/palettes/food/cherry/src/index.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "cherry"; + +/** + * + * @param engine + */ +export async function loadCherryPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/food/cherry/src/options.ts b/palettes/food/cherry/src/options.ts new file mode 100644 index 00000000000..3cb66f68d0a --- /dev/null +++ b/palettes/food/cherry/src/options.ts @@ -0,0 +1,19 @@ +import { type IPalette } from "@tsparticles/engine"; + +export const options: IPalette = { + name: "Cherry", + background: "#0b0710", + blendMode: "multiply", + colors: { + fill: { + enable: true, + value: [ + "#FDE0DC", + "#EF5350", + "#D32F2F", + "#B71C1C", + "#880E4F", + ], + }, + }, +}; diff --git a/palettes/monochromatic/monochromeYellows/tsconfig.base.json b/palettes/food/cherry/tsconfig.base.json similarity index 100% rename from palettes/monochromatic/monochromeYellows/tsconfig.base.json rename to palettes/food/cherry/tsconfig.base.json diff --git a/palettes/food/cherry/tsconfig.browser.json b/palettes/food/cherry/tsconfig.browser.json new file mode 100644 index 00000000000..0bf2f9217a3 --- /dev/null +++ b/palettes/food/cherry/tsconfig.browser.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/browser" + } +} diff --git a/palettes/food/cherry/tsconfig.json b/palettes/food/cherry/tsconfig.json new file mode 100644 index 00000000000..630bf828704 --- /dev/null +++ b/palettes/food/cherry/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.json"], + "compilerOptions": { + "outDir": "./dist/cjs" + } +} diff --git a/palettes/food/cherry/tsconfig.module.json b/palettes/food/cherry/tsconfig.module.json new file mode 100644 index 00000000000..48ee30e69f5 --- /dev/null +++ b/palettes/food/cherry/tsconfig.module.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/esm" + } +} diff --git a/palettes/food/cherry/tsconfig.types.json b/palettes/food/cherry/tsconfig.types.json new file mode 100644 index 00000000000..4f8341e69ba --- /dev/null +++ b/palettes/food/cherry/tsconfig.types.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/types" + } +} diff --git a/palettes/food/cherry/typedoc.json b/palettes/food/cherry/typedoc.json new file mode 100644 index 00000000000..9166cd76225 --- /dev/null +++ b/palettes/food/cherry/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Cherry Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/food/citrus-twist/CHANGELOG.md b/palettes/food/citrus-twist/CHANGELOG.md new file mode 100644 index 00000000000..f6defe5e1b0 --- /dev/null +++ b/palettes/food/citrus-twist/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-citrus-twist diff --git a/palettes/food/citrus-twist/LICENSE b/palettes/food/citrus-twist/LICENSE new file mode 100644 index 00000000000..bdc05f528fa --- /dev/null +++ b/palettes/food/citrus-twist/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/palettes/food/citrus-twist/README.md b/palettes/food/citrus-twist/README.md new file mode 100644 index 00000000000..1aedff19d4c --- /dev/null +++ b/palettes/food/citrus-twist/README.md @@ -0,0 +1,203 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles CitrusTwist Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-citrus-twist/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-citrus-twist) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-citrus-twist.svg)](https://www.npmjs.com/package/@tsparticles/palette-citrus-twist) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-citrus-twist) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/food/citrus-twist/images/sample.png)](https://particles.js.org/samples/palettes/citrus-twist) + +## Colors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ #1A1000 +
+
+ #3A2200 +
+
+ #6B3D00 +
+
+ #A65A00 +
+
+ #D98A1A +
+
+ #FFC266 +
+
+ #090500 +
+
+ #07110A +
+
+ #FFF176 +
+
+ #FFEE58 +
+
+ #FFCA28 +
+
+ #FFA726 +
+
+ #FF7043 +
+
+ #66BB6A +
+
+ #FFA500 +
+
+ #FFEFD7 +
+
+ #000000 +
+
+ #FFFFFF +
+
+ #F5F5F5 +
+
+ #1E1E1E +
+
+ #252525 +
+
+ #E0E0E0 +
+
+ #A0A0A0 +
+
+ #404040 +
+
+ #1D3557 +
+
+ Background
+ #1A1000 +
+ Blend mode: source-over | Fill: true +
+## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadCitrusTwistPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadCitrusTwistPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "citrus-twist", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadCitrusTwistPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/food/citrus-twist/eslint.config.js b/palettes/food/citrus-twist/eslint.config.js new file mode 100644 index 00000000000..248b4d3dd36 --- /dev/null +++ b/palettes/food/citrus-twist/eslint.config.js @@ -0,0 +1,6 @@ +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; +import { defineConfig } from "eslint/config"; + +export default defineConfig([ + tsParticlesESLintConfig, +]); diff --git a/palettes/food/citrus-twist/images/sample.png b/palettes/food/citrus-twist/images/sample.png new file mode 100644 index 00000000000..1e8053bd57e Binary files /dev/null and b/palettes/food/citrus-twist/images/sample.png differ diff --git a/palettes/food/citrus-twist/package.dist.json b/palettes/food/citrus-twist/package.dist.json new file mode 100644 index 00000000000..4b27ce9a8c0 --- /dev/null +++ b/palettes/food/citrus-twist/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-citrus-twist", + "version": "4.0.0-beta.15", + "description": "tsParticles citrus twist palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/food/citrus-twist" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/food/citrus-twist/package.json b/palettes/food/citrus-twist/package.json new file mode 100644 index 00000000000..c0247b91124 --- /dev/null +++ b/palettes/food/citrus-twist/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-citrus-twist", + "version": "4.0.0-beta.15", + "description": "tsParticles citrus twist palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/food/citrus-twist" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/food/citrus-twist/rollup.config.js b/palettes/food/citrus-twist/rollup.config.js new file mode 100644 index 00000000000..63cd3b88b7f --- /dev/null +++ b/palettes/food/citrus-twist/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-citrus-twist", + paletteName: "Citrus Twist Palette", + version, +}); diff --git a/palettes/food/citrus-twist/src/browser.ts b/palettes/food/citrus-twist/src/browser.ts new file mode 100644 index 00000000000..6943fd4a2b4 --- /dev/null +++ b/palettes/food/citrus-twist/src/browser.ts @@ -0,0 +1,10 @@ +import { loadCitrusTwistPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadCitrusTwistPalette?: typeof loadCitrusTwistPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadCitrusTwistPalette = loadCitrusTwistPalette; + +export * from "./index.js"; diff --git a/palettes/food/citrus-twist/src/index.lazy.ts b/palettes/food/citrus-twist/src/index.lazy.ts new file mode 100644 index 00000000000..8c485741132 --- /dev/null +++ b/palettes/food/citrus-twist/src/index.lazy.ts @@ -0,0 +1,15 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "citrus-twist"; + +/** + * + * @param engine + */ +export async function loadCitrusTwistPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/food/citrus-twist/src/index.ts b/palettes/food/citrus-twist/src/index.ts new file mode 100644 index 00000000000..5324a53d42b --- /dev/null +++ b/palettes/food/citrus-twist/src/index.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "citrus-twist"; + +/** + * + * @param engine + */ +export async function loadCitrusTwistPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/food/citrus-twist/src/options.ts b/palettes/food/citrus-twist/src/options.ts new file mode 100644 index 00000000000..492594a2d3b --- /dev/null +++ b/palettes/food/citrus-twist/src/options.ts @@ -0,0 +1,20 @@ +import { type IPalette } from "@tsparticles/engine"; + +export const options: IPalette = { + name: "Citrus Twist", + background: "#07110a", + blendMode: "screen", + colors: { + fill: { + enable: true, + value: [ + "#FFF176", + "#FFEE58", + "#FFCA28", + "#FFA726", + "#FF7043", + "#66BB6A", // lime accent + ], + }, + }, +}; diff --git a/palettes/pastel/pastelDream/tsconfig.base.json b/palettes/food/citrus-twist/tsconfig.base.json similarity index 100% rename from palettes/pastel/pastelDream/tsconfig.base.json rename to palettes/food/citrus-twist/tsconfig.base.json diff --git a/palettes/food/citrus-twist/tsconfig.browser.json b/palettes/food/citrus-twist/tsconfig.browser.json new file mode 100644 index 00000000000..0bf2f9217a3 --- /dev/null +++ b/palettes/food/citrus-twist/tsconfig.browser.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/browser" + } +} diff --git a/palettes/food/citrus-twist/tsconfig.json b/palettes/food/citrus-twist/tsconfig.json new file mode 100644 index 00000000000..630bf828704 --- /dev/null +++ b/palettes/food/citrus-twist/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.json"], + "compilerOptions": { + "outDir": "./dist/cjs" + } +} diff --git a/palettes/food/citrus-twist/tsconfig.module.json b/palettes/food/citrus-twist/tsconfig.module.json new file mode 100644 index 00000000000..48ee30e69f5 --- /dev/null +++ b/palettes/food/citrus-twist/tsconfig.module.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/esm" + } +} diff --git a/palettes/food/citrus-twist/tsconfig.types.json b/palettes/food/citrus-twist/tsconfig.types.json new file mode 100644 index 00000000000..4f8341e69ba --- /dev/null +++ b/palettes/food/citrus-twist/tsconfig.types.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/types" + } +} diff --git a/palettes/food/citrus-twist/typedoc.json b/palettes/food/citrus-twist/typedoc.json new file mode 100644 index 00000000000..7ad8cbc0729 --- /dev/null +++ b/palettes/food/citrus-twist/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Citrus Twist Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/food/gingerbread-house/CHANGELOG.md b/palettes/food/gingerbread-house/CHANGELOG.md new file mode 100644 index 00000000000..cb1a6ac5f33 --- /dev/null +++ b/palettes/food/gingerbread-house/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-gingerbread-house diff --git a/palettes/food/gingerbread-house/LICENSE b/palettes/food/gingerbread-house/LICENSE new file mode 100644 index 00000000000..bdc05f528fa --- /dev/null +++ b/palettes/food/gingerbread-house/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/palettes/food/gingerbread-house/README.md b/palettes/food/gingerbread-house/README.md new file mode 100644 index 00000000000..cb1fae369cd --- /dev/null +++ b/palettes/food/gingerbread-house/README.md @@ -0,0 +1,199 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles GingerbreadHouse Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-gingerbread-house/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-gingerbread-house) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-gingerbread-house.svg)](https://www.npmjs.com/package/@tsparticles/palette-gingerbread-house) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-gingerbread-house) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/food/gingerbread-house/images/sample.png)](https://particles.js.org/samples/palettes/gingerbread-house) + +## Colors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ #1A1000 +
+
+ #3A2200 +
+
+ #6B3D00 +
+
+ #A65A00 +
+
+ #D98A1A +
+
+ #FFC266 +
+
+ #090500 +
+
+ #1A0F07 +
+
+ #A9744F +
+
+ #BF6E3E +
+
+ #8D6E63 +
+
+ #6D4C41 +
+
+ #D7CCC8 +
+
+ #FFA500 +
+
+ #FFEFD7 +
+
+ #000000 +
+
+ #FFFFFF +
+
+ #F5F5F5 +
+
+ #1E1E1E +
+
+ #252525 +
+
+ #E0E0E0 +
+
+ #A0A0A0 +
+
+ #404040 +
+
+ #1D3557 +
+
+ Background
+ #1A1000 +
+ Blend mode: source-over | Fill: true +
+## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadGingerbreadHousePalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadGingerbreadHousePalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "gingerbread-house", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadGingerbreadHousePalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/food/gingerbread-house/eslint.config.js b/palettes/food/gingerbread-house/eslint.config.js new file mode 100644 index 00000000000..248b4d3dd36 --- /dev/null +++ b/palettes/food/gingerbread-house/eslint.config.js @@ -0,0 +1,6 @@ +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; +import { defineConfig } from "eslint/config"; + +export default defineConfig([ + tsParticlesESLintConfig, +]); diff --git a/palettes/food/gingerbread-house/images/sample.png b/palettes/food/gingerbread-house/images/sample.png new file mode 100644 index 00000000000..64181137a6c Binary files /dev/null and b/palettes/food/gingerbread-house/images/sample.png differ diff --git a/palettes/food/gingerbread-house/package.dist.json b/palettes/food/gingerbread-house/package.dist.json new file mode 100644 index 00000000000..048c3c66958 --- /dev/null +++ b/palettes/food/gingerbread-house/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-gingerbread-house", + "version": "4.0.0-beta.15", + "description": "tsParticles gingerbread house palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/food/gingerbread-house" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/food/gingerbread-house/package.json b/palettes/food/gingerbread-house/package.json new file mode 100644 index 00000000000..589e8a5d064 --- /dev/null +++ b/palettes/food/gingerbread-house/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-gingerbread-house", + "version": "4.0.0-beta.15", + "description": "tsParticles gingerbread house palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/food/gingerbread-house" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/food/gingerbread-house/rollup.config.js b/palettes/food/gingerbread-house/rollup.config.js new file mode 100644 index 00000000000..ca149260102 --- /dev/null +++ b/palettes/food/gingerbread-house/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-gingerbread-house", + paletteName: "Gingerbread House Palette", + version, +}); diff --git a/palettes/food/gingerbread-house/src/browser.ts b/palettes/food/gingerbread-house/src/browser.ts new file mode 100644 index 00000000000..d4f1bad4b61 --- /dev/null +++ b/palettes/food/gingerbread-house/src/browser.ts @@ -0,0 +1,10 @@ +import { loadGingerbreadHousePalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadGingerbreadHousePalette?: typeof loadGingerbreadHousePalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadGingerbreadHousePalette = loadGingerbreadHousePalette; + +export * from "./index.js"; diff --git a/palettes/food/gingerbread-house/src/index.lazy.ts b/palettes/food/gingerbread-house/src/index.lazy.ts new file mode 100644 index 00000000000..dce90f36ea4 --- /dev/null +++ b/palettes/food/gingerbread-house/src/index.lazy.ts @@ -0,0 +1,15 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "gingerbread-house"; + +/** + * + * @param engine + */ +export async function loadGingerbreadHousePalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/food/gingerbread-house/src/index.ts b/palettes/food/gingerbread-house/src/index.ts new file mode 100644 index 00000000000..fdaff525fe1 --- /dev/null +++ b/palettes/food/gingerbread-house/src/index.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "gingerbread-house"; + +/** + * + * @param engine + */ +export async function loadGingerbreadHousePalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/food/gingerbread-house/src/options.ts b/palettes/food/gingerbread-house/src/options.ts new file mode 100644 index 00000000000..0f193903a4e --- /dev/null +++ b/palettes/food/gingerbread-house/src/options.ts @@ -0,0 +1,19 @@ +import { type IPalette } from "@tsparticles/engine"; + +export const options: IPalette = { + name: "Gingerbread House", + background: "#1a0f07", + blendMode: "multiply", + colors: { + fill: { + enable: true, + value: [ + "#A9744F", + "#BF6E3E", + "#8D6E63", + "#6D4C41", + "#D7CCC8", // icing + ], + }, + }, +}; diff --git a/palettes/vibrant/vibrant/tsconfig.base.json b/palettes/food/gingerbread-house/tsconfig.base.json similarity index 100% rename from palettes/vibrant/vibrant/tsconfig.base.json rename to palettes/food/gingerbread-house/tsconfig.base.json diff --git a/palettes/food/gingerbread-house/tsconfig.browser.json b/palettes/food/gingerbread-house/tsconfig.browser.json new file mode 100644 index 00000000000..0bf2f9217a3 --- /dev/null +++ b/palettes/food/gingerbread-house/tsconfig.browser.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/browser" + } +} diff --git a/palettes/food/gingerbread-house/tsconfig.json b/palettes/food/gingerbread-house/tsconfig.json new file mode 100644 index 00000000000..630bf828704 --- /dev/null +++ b/palettes/food/gingerbread-house/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.json"], + "compilerOptions": { + "outDir": "./dist/cjs" + } +} diff --git a/palettes/food/gingerbread-house/tsconfig.module.json b/palettes/food/gingerbread-house/tsconfig.module.json new file mode 100644 index 00000000000..48ee30e69f5 --- /dev/null +++ b/palettes/food/gingerbread-house/tsconfig.module.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/esm" + } +} diff --git a/palettes/food/gingerbread-house/tsconfig.types.json b/palettes/food/gingerbread-house/tsconfig.types.json new file mode 100644 index 00000000000..4f8341e69ba --- /dev/null +++ b/palettes/food/gingerbread-house/tsconfig.types.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/types" + } +} diff --git a/palettes/food/gingerbread-house/typedoc.json b/palettes/food/gingerbread-house/typedoc.json new file mode 100644 index 00000000000..ec8a190b3a5 --- /dev/null +++ b/palettes/food/gingerbread-house/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Gingerbread House Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/food/grapes/CHANGELOG.md b/palettes/food/grapes/CHANGELOG.md new file mode 100644 index 00000000000..0c5ad2bef65 --- /dev/null +++ b/palettes/food/grapes/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-grapes diff --git a/palettes/food/grapes/LICENSE b/palettes/food/grapes/LICENSE new file mode 100644 index 00000000000..bdc05f528fa --- /dev/null +++ b/palettes/food/grapes/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/palettes/food/grapes/README.md b/palettes/food/grapes/README.md new file mode 100644 index 00000000000..23e3af3cfc1 --- /dev/null +++ b/palettes/food/grapes/README.md @@ -0,0 +1,203 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Grapes Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-grapes/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-grapes) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-grapes.svg)](https://www.npmjs.com/package/@tsparticles/palette-grapes) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-grapes) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/food/grapes/images/sample.png)](https://particles.js.org/samples/palettes/grapes) + +## Colors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ #1A1000 +
+
+ #3A2200 +
+
+ #6B3D00 +
+
+ #A65A00 +
+
+ #D98A1A +
+
+ #FFC266 +
+
+ #090500 +
+
+ #070711 +
+
+ #8E24AA +
+
+ #6A1B9A +
+
+ #4A148C +
+
+ #9CCC65 +
+
+ #7CB342 +
+
+ #33691E +
+
+ #FFA500 +
+
+ #FFEFD7 +
+
+ #000000 +
+
+ #FFFFFF +
+
+ #F5F5F5 +
+
+ #1E1E1E +
+
+ #252525 +
+
+ #E0E0E0 +
+
+ #A0A0A0 +
+
+ #404040 +
+
+ #1D3557 +
+
+ Background
+ #1A1000 +
+ Blend mode: source-over | Fill: true +
+## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadGrapesPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadGrapesPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "grapes", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadGrapesPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/food/grapes/eslint.config.js b/palettes/food/grapes/eslint.config.js new file mode 100644 index 00000000000..248b4d3dd36 --- /dev/null +++ b/palettes/food/grapes/eslint.config.js @@ -0,0 +1,6 @@ +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; +import { defineConfig } from "eslint/config"; + +export default defineConfig([ + tsParticlesESLintConfig, +]); diff --git a/palettes/food/grapes/images/sample.png b/palettes/food/grapes/images/sample.png new file mode 100644 index 00000000000..e41b9bc242e Binary files /dev/null and b/palettes/food/grapes/images/sample.png differ diff --git a/palettes/food/grapes/package.dist.json b/palettes/food/grapes/package.dist.json new file mode 100644 index 00000000000..9a986a3f0de --- /dev/null +++ b/palettes/food/grapes/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-grapes", + "version": "4.0.0-beta.15", + "description": "tsParticles grapes palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/food/grapes" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/food/grapes/package.json b/palettes/food/grapes/package.json new file mode 100644 index 00000000000..8f88ab8f1ff --- /dev/null +++ b/palettes/food/grapes/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-grapes", + "version": "4.0.0-beta.15", + "description": "tsParticles grapes palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/food/grapes" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/food/grapes/rollup.config.js b/palettes/food/grapes/rollup.config.js new file mode 100644 index 00000000000..6255506799c --- /dev/null +++ b/palettes/food/grapes/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-grapes", + paletteName: "Grapes Palette", + version, +}); diff --git a/palettes/food/grapes/src/browser.ts b/palettes/food/grapes/src/browser.ts new file mode 100644 index 00000000000..75fce2b2338 --- /dev/null +++ b/palettes/food/grapes/src/browser.ts @@ -0,0 +1,10 @@ +import { loadGrapesPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadGrapesPalette?: typeof loadGrapesPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadGrapesPalette = loadGrapesPalette; + +export * from "./index.js"; diff --git a/palettes/food/grapes/src/index.lazy.ts b/palettes/food/grapes/src/index.lazy.ts new file mode 100644 index 00000000000..1c09b0be1cf --- /dev/null +++ b/palettes/food/grapes/src/index.lazy.ts @@ -0,0 +1,15 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "grapes"; + +/** + * + * @param engine + */ +export async function loadGrapesPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/food/grapes/src/index.ts b/palettes/food/grapes/src/index.ts new file mode 100644 index 00000000000..a348a300bff --- /dev/null +++ b/palettes/food/grapes/src/index.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "grapes"; + +/** + * + * @param engine + */ +export async function loadGrapesPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/food/grapes/src/options.ts b/palettes/food/grapes/src/options.ts new file mode 100644 index 00000000000..bfa5730c225 --- /dev/null +++ b/palettes/food/grapes/src/options.ts @@ -0,0 +1,20 @@ +import { type IPalette } from "@tsparticles/engine"; + +export const options: IPalette = { + name: "Grapes", + background: "#070711", + blendMode: "multiply", + colors: { + fill: { + enable: true, + value: [ + "#8E24AA", + "#6A1B9A", + "#4A148C", + "#9CCC65", + "#7CB342", + "#33691E", + ], + }, + }, +}; diff --git a/palettes/water/water/tsconfig.base.json b/palettes/food/grapes/tsconfig.base.json similarity index 100% rename from palettes/water/water/tsconfig.base.json rename to palettes/food/grapes/tsconfig.base.json diff --git a/palettes/food/grapes/tsconfig.browser.json b/palettes/food/grapes/tsconfig.browser.json new file mode 100644 index 00000000000..0bf2f9217a3 --- /dev/null +++ b/palettes/food/grapes/tsconfig.browser.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/browser" + } +} diff --git a/palettes/food/grapes/tsconfig.json b/palettes/food/grapes/tsconfig.json new file mode 100644 index 00000000000..630bf828704 --- /dev/null +++ b/palettes/food/grapes/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.json"], + "compilerOptions": { + "outDir": "./dist/cjs" + } +} diff --git a/palettes/food/grapes/tsconfig.module.json b/palettes/food/grapes/tsconfig.module.json new file mode 100644 index 00000000000..48ee30e69f5 --- /dev/null +++ b/palettes/food/grapes/tsconfig.module.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/esm" + } +} diff --git a/palettes/food/grapes/tsconfig.types.json b/palettes/food/grapes/tsconfig.types.json new file mode 100644 index 00000000000..4f8341e69ba --- /dev/null +++ b/palettes/food/grapes/tsconfig.types.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/types" + } +} diff --git a/palettes/food/grapes/typedoc.json b/palettes/food/grapes/typedoc.json new file mode 100644 index 00000000000..5c69228fd29 --- /dev/null +++ b/palettes/food/grapes/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Grapes Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/food/macaron/CHANGELOG.md b/palettes/food/macaron/CHANGELOG.md new file mode 100644 index 00000000000..e2adcc20f01 --- /dev/null +++ b/palettes/food/macaron/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-macaron diff --git a/palettes/food/macaron/LICENSE b/palettes/food/macaron/LICENSE new file mode 100644 index 00000000000..bdc05f528fa --- /dev/null +++ b/palettes/food/macaron/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/palettes/food/macaron/README.md b/palettes/food/macaron/README.md new file mode 100644 index 00000000000..e6f0d50e70d --- /dev/null +++ b/palettes/food/macaron/README.md @@ -0,0 +1,203 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Macaron Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-macaron/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-macaron) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-macaron.svg)](https://www.npmjs.com/package/@tsparticles/palette-macaron) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-macaron) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/food/macaron/images/sample.png)](https://particles.js.org/samples/palettes/macaron) + +## Colors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ #1A1000 +
+
+ #3A2200 +
+
+ #6B3D00 +
+
+ #A65A00 +
+
+ #D98A1A +
+
+ #FFC266 +
+
+ #090500 +
+
+ #FFF6F9 +
+
+ #F8BBD0 +
+
+ #F48FB1 +
+
+ #CE93D8 +
+
+ #B39DDB +
+
+ #81D4FA +
+
+ #A5D6A7 +
+
+ #FFA500 +
+
+ #FFEFD7 +
+
+ #000000 +
+
+ #FFFFFF +
+
+ #F5F5F5 +
+
+ #1E1E1E +
+
+ #252525 +
+
+ #E0E0E0 +
+
+ #A0A0A0 +
+
+ #404040 +
+
+ #1D3557 +
+
+ Background
+ #1A1000 +
+ Blend mode: source-over | Fill: true +
+## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadMacaronPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadMacaronPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "macaron", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadMacaronPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/food/macaron/eslint.config.js b/palettes/food/macaron/eslint.config.js new file mode 100644 index 00000000000..248b4d3dd36 --- /dev/null +++ b/palettes/food/macaron/eslint.config.js @@ -0,0 +1,6 @@ +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; +import { defineConfig } from "eslint/config"; + +export default defineConfig([ + tsParticlesESLintConfig, +]); diff --git a/palettes/food/macaron/images/sample.png b/palettes/food/macaron/images/sample.png new file mode 100644 index 00000000000..423034c0d86 Binary files /dev/null and b/palettes/food/macaron/images/sample.png differ diff --git a/palettes/food/macaron/package.dist.json b/palettes/food/macaron/package.dist.json new file mode 100644 index 00000000000..43ca01dcb0d --- /dev/null +++ b/palettes/food/macaron/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-macaron", + "version": "4.0.0-beta.15", + "description": "tsParticles macaron palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/food/macaron" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/food/macaron/package.json b/palettes/food/macaron/package.json new file mode 100644 index 00000000000..82bf29284df --- /dev/null +++ b/palettes/food/macaron/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-macaron", + "version": "4.0.0-beta.15", + "description": "tsParticles macaron palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/food/macaron" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/food/macaron/rollup.config.js b/palettes/food/macaron/rollup.config.js new file mode 100644 index 00000000000..abd8a9a03f7 --- /dev/null +++ b/palettes/food/macaron/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-macaron", + paletteName: "Macaron Palette", + version, +}); diff --git a/palettes/food/macaron/src/browser.ts b/palettes/food/macaron/src/browser.ts new file mode 100644 index 00000000000..c2561480912 --- /dev/null +++ b/palettes/food/macaron/src/browser.ts @@ -0,0 +1,10 @@ +import { loadMacaronPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadMacaronPalette?: typeof loadMacaronPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadMacaronPalette = loadMacaronPalette; + +export * from "./index.js"; diff --git a/palettes/food/macaron/src/index.lazy.ts b/palettes/food/macaron/src/index.lazy.ts new file mode 100644 index 00000000000..011f617230d --- /dev/null +++ b/palettes/food/macaron/src/index.lazy.ts @@ -0,0 +1,15 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "macaron"; + +/** + * + * @param engine + */ +export async function loadMacaronPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/food/macaron/src/index.ts b/palettes/food/macaron/src/index.ts new file mode 100644 index 00000000000..af6c1aaa935 --- /dev/null +++ b/palettes/food/macaron/src/index.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "macaron"; + +/** + * + * @param engine + */ +export async function loadMacaronPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/food/macaron/src/options.ts b/palettes/food/macaron/src/options.ts new file mode 100644 index 00000000000..dd213b39380 --- /dev/null +++ b/palettes/food/macaron/src/options.ts @@ -0,0 +1,20 @@ +import { type IPalette } from "@tsparticles/engine"; + +export const options: IPalette = { + name: "Macaron", + background: "#FFF6F9", + blendMode: "source-over", + colors: { + fill: { + enable: true, + value: [ + "#F8BBD0", + "#F48FB1", + "#CE93D8", + "#B39DDB", + "#81D4FA", + "#A5D6A7", + ], + }, + }, +}; diff --git a/palettes/water/waterSplash/tsconfig.base.json b/palettes/food/macaron/tsconfig.base.json similarity index 100% rename from palettes/water/waterSplash/tsconfig.base.json rename to palettes/food/macaron/tsconfig.base.json diff --git a/palettes/food/macaron/tsconfig.browser.json b/palettes/food/macaron/tsconfig.browser.json new file mode 100644 index 00000000000..0bf2f9217a3 --- /dev/null +++ b/palettes/food/macaron/tsconfig.browser.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/browser" + } +} diff --git a/palettes/food/macaron/tsconfig.json b/palettes/food/macaron/tsconfig.json new file mode 100644 index 00000000000..630bf828704 --- /dev/null +++ b/palettes/food/macaron/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.json"], + "compilerOptions": { + "outDir": "./dist/cjs" + } +} diff --git a/palettes/food/macaron/tsconfig.module.json b/palettes/food/macaron/tsconfig.module.json new file mode 100644 index 00000000000..48ee30e69f5 --- /dev/null +++ b/palettes/food/macaron/tsconfig.module.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/esm" + } +} diff --git a/palettes/food/macaron/tsconfig.types.json b/palettes/food/macaron/tsconfig.types.json new file mode 100644 index 00000000000..4f8341e69ba --- /dev/null +++ b/palettes/food/macaron/tsconfig.types.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/types" + } +} diff --git a/palettes/food/macaron/typedoc.json b/palettes/food/macaron/typedoc.json new file mode 100644 index 00000000000..4c107e96d08 --- /dev/null +++ b/palettes/food/macaron/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Macaron Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/food/melon/CHANGELOG.md b/palettes/food/melon/CHANGELOG.md new file mode 100644 index 00000000000..b9da798533c --- /dev/null +++ b/palettes/food/melon/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-melon diff --git a/palettes/food/melon/LICENSE b/palettes/food/melon/LICENSE new file mode 100644 index 00000000000..bdc05f528fa --- /dev/null +++ b/palettes/food/melon/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/palettes/food/melon/README.md b/palettes/food/melon/README.md new file mode 100644 index 00000000000..86ed5926667 --- /dev/null +++ b/palettes/food/melon/README.md @@ -0,0 +1,199 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Melon Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-melon/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-melon) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-melon.svg)](https://www.npmjs.com/package/@tsparticles/palette-melon) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-melon) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/food/melon/images/sample.png)](https://particles.js.org/samples/palettes/melon) + +## Colors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ #1A1000 +
+
+ #3A2200 +
+
+ #6B3D00 +
+
+ #A65A00 +
+
+ #D98A1A +
+
+ #FFC266 +
+
+ #090500 +
+
+ #08120E +
+
+ #FFDDA0 +
+
+ #FFC473 +
+
+ #FFB74D +
+
+ #A5D6A7 +
+
+ #7CB342 +
+
+ #FFA500 +
+
+ #FFEFD7 +
+
+ #000000 +
+
+ #FFFFFF +
+
+ #F5F5F5 +
+
+ #1E1E1E +
+
+ #252525 +
+
+ #E0E0E0 +
+
+ #A0A0A0 +
+
+ #404040 +
+
+ #1D3557 +
+
+ Background
+ #1A1000 +
+ Blend mode: source-over | Fill: true +
+## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadMelonPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadMelonPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "melon", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadMelonPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/food/melon/eslint.config.js b/palettes/food/melon/eslint.config.js new file mode 100644 index 00000000000..248b4d3dd36 --- /dev/null +++ b/palettes/food/melon/eslint.config.js @@ -0,0 +1,6 @@ +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; +import { defineConfig } from "eslint/config"; + +export default defineConfig([ + tsParticlesESLintConfig, +]); diff --git a/palettes/food/melon/images/sample.png b/palettes/food/melon/images/sample.png new file mode 100644 index 00000000000..a551a30e5cc Binary files /dev/null and b/palettes/food/melon/images/sample.png differ diff --git a/palettes/food/melon/package.dist.json b/palettes/food/melon/package.dist.json new file mode 100644 index 00000000000..ce5f5a9eaf6 --- /dev/null +++ b/palettes/food/melon/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-melon", + "version": "4.0.0-beta.15", + "description": "tsParticles melon palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/food/melon" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/food/melon/package.json b/palettes/food/melon/package.json new file mode 100644 index 00000000000..2c888af5f3c --- /dev/null +++ b/palettes/food/melon/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-melon", + "version": "4.0.0-beta.15", + "description": "tsParticles melon palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/food/melon" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/food/melon/rollup.config.js b/palettes/food/melon/rollup.config.js new file mode 100644 index 00000000000..e414f0db8ff --- /dev/null +++ b/palettes/food/melon/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-melon", + paletteName: "Melon Palette", + version, +}); diff --git a/palettes/food/melon/src/browser.ts b/palettes/food/melon/src/browser.ts new file mode 100644 index 00000000000..f3dd1b481ac --- /dev/null +++ b/palettes/food/melon/src/browser.ts @@ -0,0 +1,10 @@ +import { loadMelonPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadMelonPalette?: typeof loadMelonPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadMelonPalette = loadMelonPalette; + +export * from "./index.js"; diff --git a/palettes/food/melon/src/index.lazy.ts b/palettes/food/melon/src/index.lazy.ts new file mode 100644 index 00000000000..23bc11da8a0 --- /dev/null +++ b/palettes/food/melon/src/index.lazy.ts @@ -0,0 +1,15 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "melon"; + +/** + * + * @param engine + */ +export async function loadMelonPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/food/melon/src/index.ts b/palettes/food/melon/src/index.ts new file mode 100644 index 00000000000..9062b21d202 --- /dev/null +++ b/palettes/food/melon/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "melon"; + +/** + * @param engine - + */ +export async function loadMelonPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/food/melon/src/options.ts b/palettes/food/melon/src/options.ts new file mode 100644 index 00000000000..93bf51af3f2 --- /dev/null +++ b/palettes/food/melon/src/options.ts @@ -0,0 +1,19 @@ +import { type IPalette } from "@tsparticles/engine"; + +export const options: IPalette = { + name: "Melon", + background: "#08120e", + blendMode: "overlay", + colors: { + fill: { + enable: true, + value: [ + "#FFDDA0", + "#FFC473", + "#FFB74D", + "#A5D6A7", + "#7CB342", + ], + }, + }, +}; diff --git a/palettes/food/melon/tsconfig.base.json b/palettes/food/melon/tsconfig.base.json new file mode 100644 index 00000000000..2b489b6aa1c --- /dev/null +++ b/palettes/food/melon/tsconfig.base.json @@ -0,0 +1,9 @@ +{ + "extends": "@tsparticles/tsconfig/dist/tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src" + }, + "include": [ + "./src" + ] +} diff --git a/palettes/food/melon/tsconfig.browser.json b/palettes/food/melon/tsconfig.browser.json new file mode 100644 index 00000000000..0bf2f9217a3 --- /dev/null +++ b/palettes/food/melon/tsconfig.browser.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/browser" + } +} diff --git a/palettes/food/melon/tsconfig.json b/palettes/food/melon/tsconfig.json new file mode 100644 index 00000000000..630bf828704 --- /dev/null +++ b/palettes/food/melon/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.json"], + "compilerOptions": { + "outDir": "./dist/cjs" + } +} diff --git a/palettes/food/melon/tsconfig.module.json b/palettes/food/melon/tsconfig.module.json new file mode 100644 index 00000000000..48ee30e69f5 --- /dev/null +++ b/palettes/food/melon/tsconfig.module.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/esm" + } +} diff --git a/palettes/food/melon/tsconfig.types.json b/palettes/food/melon/tsconfig.types.json new file mode 100644 index 00000000000..4f8341e69ba --- /dev/null +++ b/palettes/food/melon/tsconfig.types.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/types" + } +} diff --git a/palettes/food/melon/typedoc.json b/palettes/food/melon/typedoc.json new file mode 100644 index 00000000000..6d2fa51ca0f --- /dev/null +++ b/palettes/food/melon/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Melon Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/food/pineapple/CHANGELOG.md b/palettes/food/pineapple/CHANGELOG.md new file mode 100644 index 00000000000..3d317786eef --- /dev/null +++ b/palettes/food/pineapple/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-pineapple diff --git a/palettes/food/pineapple/LICENSE b/palettes/food/pineapple/LICENSE new file mode 100644 index 00000000000..bdc05f528fa --- /dev/null +++ b/palettes/food/pineapple/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/palettes/food/pineapple/README.md b/palettes/food/pineapple/README.md new file mode 100644 index 00000000000..90baf86a805 --- /dev/null +++ b/palettes/food/pineapple/README.md @@ -0,0 +1,203 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Pineapple Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-pineapple/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-pineapple) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-pineapple.svg)](https://www.npmjs.com/package/@tsparticles/palette-pineapple) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-pineapple) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/food/pineapple/images/sample.png)](https://particles.js.org/samples/palettes/pineapple) + +## Colors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ #1A1000 +
+
+ #3A2200 +
+
+ #6B3D00 +
+
+ #A65A00 +
+
+ #D98A1A +
+
+ #FFC266 +
+
+ #090500 +
+
+ #0B1007 +
+
+ #FBC02D +
+
+ #FFD54F +
+
+ #FFEE58 +
+
+ #8BC34A +
+
+ #689F38 +
+
+ #5D4037 +
+
+ #FFA500 +
+
+ #FFEFD7 +
+
+ #000000 +
+
+ #FFFFFF +
+
+ #F5F5F5 +
+
+ #1E1E1E +
+
+ #252525 +
+
+ #E0E0E0 +
+
+ #A0A0A0 +
+
+ #404040 +
+
+ #1D3557 +
+
+ Background
+ #1A1000 +
+ Blend mode: source-over | Fill: true +
+## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadPineapplePalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadPineapplePalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "pineapple", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadPineapplePalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/food/pineapple/eslint.config.js b/palettes/food/pineapple/eslint.config.js new file mode 100644 index 00000000000..248b4d3dd36 --- /dev/null +++ b/palettes/food/pineapple/eslint.config.js @@ -0,0 +1,6 @@ +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; +import { defineConfig } from "eslint/config"; + +export default defineConfig([ + tsParticlesESLintConfig, +]); diff --git a/palettes/food/pineapple/images/sample.png b/palettes/food/pineapple/images/sample.png new file mode 100644 index 00000000000..3e0558de355 Binary files /dev/null and b/palettes/food/pineapple/images/sample.png differ diff --git a/palettes/food/pineapple/package.dist.json b/palettes/food/pineapple/package.dist.json new file mode 100644 index 00000000000..9dffd3619b1 --- /dev/null +++ b/palettes/food/pineapple/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-pineapple", + "version": "4.0.0-beta.15", + "description": "tsParticles pineapple palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/food/pineapple" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/food/pineapple/package.json b/palettes/food/pineapple/package.json new file mode 100644 index 00000000000..8c706037ce1 --- /dev/null +++ b/palettes/food/pineapple/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-pineapple", + "version": "4.0.0-beta.15", + "description": "tsParticles pineapple palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/food/pineapple" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/food/pineapple/rollup.config.js b/palettes/food/pineapple/rollup.config.js new file mode 100644 index 00000000000..797263ed83e --- /dev/null +++ b/palettes/food/pineapple/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-pineapple", + paletteName: "Pineapple Palette", + version, +}); diff --git a/palettes/food/pineapple/src/browser.ts b/palettes/food/pineapple/src/browser.ts new file mode 100644 index 00000000000..8b27a9fb5de --- /dev/null +++ b/palettes/food/pineapple/src/browser.ts @@ -0,0 +1,10 @@ +import { loadPineapplePalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadPineapplePalette?: typeof loadPineapplePalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadPineapplePalette = loadPineapplePalette; + +export * from "./index.js"; diff --git a/palettes/food/pineapple/src/index.lazy.ts b/palettes/food/pineapple/src/index.lazy.ts new file mode 100644 index 00000000000..3abb043cda2 --- /dev/null +++ b/palettes/food/pineapple/src/index.lazy.ts @@ -0,0 +1,15 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "pineapple"; + +/** + * + * @param engine + */ +export async function loadPineapplePalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/food/pineapple/src/index.ts b/palettes/food/pineapple/src/index.ts new file mode 100644 index 00000000000..8799acafc44 --- /dev/null +++ b/palettes/food/pineapple/src/index.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "pineapple"; + +/** + * + * @param engine + */ +export async function loadPineapplePalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/food/pineapple/src/options.ts b/palettes/food/pineapple/src/options.ts new file mode 100644 index 00000000000..7ba266b84fd --- /dev/null +++ b/palettes/food/pineapple/src/options.ts @@ -0,0 +1,20 @@ +import { type IPalette } from "@tsparticles/engine"; + +export const options: IPalette = { + name: "Pineapple", + background: "#0b1007", + blendMode: "overlay", + colors: { + fill: { + enable: true, + value: [ + "#FBC02D", + "#FFD54F", + "#FFEE58", + "#8BC34A", + "#689F38", + "#5D4037", + ], + }, + }, +}; diff --git a/palettes/food/pineapple/tsconfig.base.json b/palettes/food/pineapple/tsconfig.base.json new file mode 100644 index 00000000000..2b489b6aa1c --- /dev/null +++ b/palettes/food/pineapple/tsconfig.base.json @@ -0,0 +1,9 @@ +{ + "extends": "@tsparticles/tsconfig/dist/tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src" + }, + "include": [ + "./src" + ] +} diff --git a/palettes/food/pineapple/tsconfig.browser.json b/palettes/food/pineapple/tsconfig.browser.json new file mode 100644 index 00000000000..0bf2f9217a3 --- /dev/null +++ b/palettes/food/pineapple/tsconfig.browser.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/browser" + } +} diff --git a/palettes/food/pineapple/tsconfig.json b/palettes/food/pineapple/tsconfig.json new file mode 100644 index 00000000000..630bf828704 --- /dev/null +++ b/palettes/food/pineapple/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.json"], + "compilerOptions": { + "outDir": "./dist/cjs" + } +} diff --git a/palettes/food/pineapple/tsconfig.module.json b/palettes/food/pineapple/tsconfig.module.json new file mode 100644 index 00000000000..48ee30e69f5 --- /dev/null +++ b/palettes/food/pineapple/tsconfig.module.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/esm" + } +} diff --git a/palettes/food/pineapple/tsconfig.types.json b/palettes/food/pineapple/tsconfig.types.json new file mode 100644 index 00000000000..4f8341e69ba --- /dev/null +++ b/palettes/food/pineapple/tsconfig.types.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/types" + } +} diff --git a/palettes/food/pineapple/typedoc.json b/palettes/food/pineapple/typedoc.json new file mode 100644 index 00000000000..b4c90be2bf1 --- /dev/null +++ b/palettes/food/pineapple/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Pineapple Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/food/pizza/CHANGELOG.md b/palettes/food/pizza/CHANGELOG.md new file mode 100644 index 00000000000..bb2a3ce867b --- /dev/null +++ b/palettes/food/pizza/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-pizza diff --git a/palettes/food/pizza/LICENSE b/palettes/food/pizza/LICENSE new file mode 100644 index 00000000000..bdc05f528fa --- /dev/null +++ b/palettes/food/pizza/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/palettes/food/pizza/README.md b/palettes/food/pizza/README.md new file mode 100644 index 00000000000..b64c8f79d03 --- /dev/null +++ b/palettes/food/pizza/README.md @@ -0,0 +1,213 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Pizza Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-pizza/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-pizza) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-pizza.svg)](https://www.npmjs.com/package/@tsparticles/palette-pizza) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-pizza) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/food/pizza/images/sample.png)](https://particles.js.org/samples/palettes/pizza) + +## Colors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ #1A1000 +
+
+ #3A2200 +
+
+ #6B3D00 +
+
+ #A65A00 +
+
+ #D98A1A +
+
+ #FFC266 +
+
+ #090500 +
+
+ #1B1207 +
+
+ #F4D6A0 +
+
+ #E0B06F +
+
+ #C6863D +
+
+ #D84315 +
+
+ #B71C1C +
+
+ #FFD54F +
+
+ #3A3A3A +
+
+ #2E7D32 +
+
+ #FFA500 +
+
+ #FFEFD7 +
+
+ #000000 +
+
+ #FFFFFF +
+
+ #F5F5F5 +
+
+ #1E1E1E +
+
+ #252525 +
+
+ #E0E0E0 +
+
+ #A0A0A0 +
+
+ #404040 +
+
+ #1D3557 +
+
+ Background
+ #1A1000 +
+ Blend mode: source-over | Fill: true +
+## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadPizzaPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadPizzaPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "pizza", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadPizzaPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/food/pizza/eslint.config.js b/palettes/food/pizza/eslint.config.js new file mode 100644 index 00000000000..248b4d3dd36 --- /dev/null +++ b/palettes/food/pizza/eslint.config.js @@ -0,0 +1,6 @@ +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; +import { defineConfig } from "eslint/config"; + +export default defineConfig([ + tsParticlesESLintConfig, +]); diff --git a/palettes/food/pizza/images/sample.png b/palettes/food/pizza/images/sample.png new file mode 100644 index 00000000000..4f28235964c Binary files /dev/null and b/palettes/food/pizza/images/sample.png differ diff --git a/palettes/food/pizza/package.dist.json b/palettes/food/pizza/package.dist.json new file mode 100644 index 00000000000..aae353b7d35 --- /dev/null +++ b/palettes/food/pizza/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-pizza", + "version": "4.0.0-beta.15", + "description": "tsParticles pizza palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/food/pizza" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/food/pizza/package.json b/palettes/food/pizza/package.json new file mode 100644 index 00000000000..69b77c13f55 --- /dev/null +++ b/palettes/food/pizza/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-pizza", + "version": "4.0.0-beta.15", + "description": "tsParticles pizza palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/food/pizza" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/food/pizza/rollup.config.js b/palettes/food/pizza/rollup.config.js new file mode 100644 index 00000000000..4b991c09e39 --- /dev/null +++ b/palettes/food/pizza/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-pizza", + paletteName: "Pizza Palette", + version, +}); diff --git a/palettes/food/pizza/src/browser.ts b/palettes/food/pizza/src/browser.ts new file mode 100644 index 00000000000..57523ef9342 --- /dev/null +++ b/palettes/food/pizza/src/browser.ts @@ -0,0 +1,10 @@ +import { loadPizzaPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadPizzaPalette?: typeof loadPizzaPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadPizzaPalette = loadPizzaPalette; + +export * from "./index.js"; diff --git a/palettes/food/pizza/src/index.lazy.ts b/palettes/food/pizza/src/index.lazy.ts new file mode 100644 index 00000000000..66c095e550a --- /dev/null +++ b/palettes/food/pizza/src/index.lazy.ts @@ -0,0 +1,15 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "pizza"; + +/** + * + * @param engine + */ +export async function loadPizzaPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/food/pizza/src/index.ts b/palettes/food/pizza/src/index.ts new file mode 100644 index 00000000000..f49128fffc3 --- /dev/null +++ b/palettes/food/pizza/src/index.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "pizza"; + +/** + * + * @param engine + */ +export async function loadPizzaPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/food/pizza/src/options.ts b/palettes/food/pizza/src/options.ts new file mode 100644 index 00000000000..b61073baf1f --- /dev/null +++ b/palettes/food/pizza/src/options.ts @@ -0,0 +1,22 @@ +import { type IPalette } from "@tsparticles/engine"; + +export const options: IPalette = { + name: "Pizza", + background: "#1b1207", + blendMode: "multiply", + colors: { + fill: { + enable: true, + value: [ + "#F4D6A0", + "#E0B06F", + "#C6863D", + "#D84315", + "#B71C1C", + "#FFD54F", + "#3A3A3A", + "#2E7D32", + ], + }, + }, +}; diff --git a/palettes/food/pizza/tsconfig.base.json b/palettes/food/pizza/tsconfig.base.json new file mode 100644 index 00000000000..2b489b6aa1c --- /dev/null +++ b/palettes/food/pizza/tsconfig.base.json @@ -0,0 +1,9 @@ +{ + "extends": "@tsparticles/tsconfig/dist/tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src" + }, + "include": [ + "./src" + ] +} diff --git a/palettes/food/pizza/tsconfig.browser.json b/palettes/food/pizza/tsconfig.browser.json new file mode 100644 index 00000000000..0bf2f9217a3 --- /dev/null +++ b/palettes/food/pizza/tsconfig.browser.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/browser" + } +} diff --git a/palettes/food/pizza/tsconfig.json b/palettes/food/pizza/tsconfig.json new file mode 100644 index 00000000000..630bf828704 --- /dev/null +++ b/palettes/food/pizza/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.json"], + "compilerOptions": { + "outDir": "./dist/cjs" + } +} diff --git a/palettes/food/pizza/tsconfig.module.json b/palettes/food/pizza/tsconfig.module.json new file mode 100644 index 00000000000..48ee30e69f5 --- /dev/null +++ b/palettes/food/pizza/tsconfig.module.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/esm" + } +} diff --git a/palettes/food/pizza/tsconfig.types.json b/palettes/food/pizza/tsconfig.types.json new file mode 100644 index 00000000000..4f8341e69ba --- /dev/null +++ b/palettes/food/pizza/tsconfig.types.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/types" + } +} diff --git a/palettes/food/pizza/typedoc.json b/palettes/food/pizza/typedoc.json new file mode 100644 index 00000000000..324281013f0 --- /dev/null +++ b/palettes/food/pizza/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Pizza Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/food/sakura/CHANGELOG.md b/palettes/food/sakura/CHANGELOG.md new file mode 100644 index 00000000000..e8f596f24a9 --- /dev/null +++ b/palettes/food/sakura/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-sakura diff --git a/palettes/food/sakura/LICENSE b/palettes/food/sakura/LICENSE new file mode 100644 index 00000000000..bdc05f528fa --- /dev/null +++ b/palettes/food/sakura/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/palettes/food/sakura/README.md b/palettes/food/sakura/README.md new file mode 100644 index 00000000000..ad9567680c1 --- /dev/null +++ b/palettes/food/sakura/README.md @@ -0,0 +1,199 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Sakura Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-sakura/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-sakura) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-sakura.svg)](https://www.npmjs.com/package/@tsparticles/palette-sakura) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-sakura) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/food/sakura/images/sample.png)](https://particles.js.org/samples/palettes/sakura) + +## Colors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ #1A1000 +
+
+ #3A2200 +
+
+ #6B3D00 +
+
+ #A65A00 +
+
+ #D98A1A +
+
+ #FFC266 +
+
+ #090500 +
+
+ #100810 +
+
+ #FFF8F9 +
+
+ #FFEBEE +
+
+ #FFE0E6 +
+
+ #FFCDD2 +
+
+ #E91E63 +
+
+ #FFA500 +
+
+ #FFEFD7 +
+
+ #000000 +
+
+ #FFFFFF +
+
+ #F5F5F5 +
+
+ #1E1E1E +
+
+ #252525 +
+
+ #E0E0E0 +
+
+ #A0A0A0 +
+
+ #404040 +
+
+ #1D3557 +
+
+ Background
+ #1A1000 +
+ Blend mode: source-over | Fill: true +
+## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadSakuraPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadSakuraPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "sakura", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadSakuraPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/food/sakura/eslint.config.js b/palettes/food/sakura/eslint.config.js new file mode 100644 index 00000000000..248b4d3dd36 --- /dev/null +++ b/palettes/food/sakura/eslint.config.js @@ -0,0 +1,6 @@ +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; +import { defineConfig } from "eslint/config"; + +export default defineConfig([ + tsParticlesESLintConfig, +]); diff --git a/palettes/food/sakura/images/sample.png b/palettes/food/sakura/images/sample.png new file mode 100644 index 00000000000..7f188518dea Binary files /dev/null and b/palettes/food/sakura/images/sample.png differ diff --git a/palettes/food/sakura/package.dist.json b/palettes/food/sakura/package.dist.json new file mode 100644 index 00000000000..6f2e8336478 --- /dev/null +++ b/palettes/food/sakura/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-sakura", + "version": "4.0.0-beta.15", + "description": "tsParticles sakura palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/food/sakura" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/food/sakura/package.json b/palettes/food/sakura/package.json new file mode 100644 index 00000000000..bfba039fd50 --- /dev/null +++ b/palettes/food/sakura/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-sakura", + "version": "4.0.0-beta.15", + "description": "tsParticles sakura palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/food/sakura" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/food/sakura/rollup.config.js b/palettes/food/sakura/rollup.config.js new file mode 100644 index 00000000000..25576a5cb1d --- /dev/null +++ b/palettes/food/sakura/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-sakura", + paletteName: "Sakura Palette", + version, +}); diff --git a/palettes/food/sakura/src/browser.ts b/palettes/food/sakura/src/browser.ts new file mode 100644 index 00000000000..8cacfeb41ed --- /dev/null +++ b/palettes/food/sakura/src/browser.ts @@ -0,0 +1,10 @@ +import { loadSakuraPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadSakuraPalette?: typeof loadSakuraPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadSakuraPalette = loadSakuraPalette; + +export * from "./index.js"; diff --git a/palettes/food/sakura/src/index.lazy.ts b/palettes/food/sakura/src/index.lazy.ts new file mode 100644 index 00000000000..55d24750c7e --- /dev/null +++ b/palettes/food/sakura/src/index.lazy.ts @@ -0,0 +1,15 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "sakura"; + +/** + * + * @param engine + */ +export async function loadSakuraPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/food/sakura/src/index.ts b/palettes/food/sakura/src/index.ts new file mode 100644 index 00000000000..510806f1d3f --- /dev/null +++ b/palettes/food/sakura/src/index.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "sakura"; + +/** + * + * @param engine + */ +export async function loadSakuraPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/food/sakura/src/options.ts b/palettes/food/sakura/src/options.ts new file mode 100644 index 00000000000..9ef990d9dc7 --- /dev/null +++ b/palettes/food/sakura/src/options.ts @@ -0,0 +1,19 @@ +import { type IPalette } from "@tsparticles/engine"; + +export const options: IPalette = { + name: "Sakura", + background: "#100810", + blendMode: "source-over", + colors: { + fill: { + enable: true, + value: [ + "#FFF8F9", + "#FFEBEE", + "#FFE0E6", + "#FFCDD2", + "#E91E63", + ], + }, + }, +}; diff --git a/palettes/food/sakura/tsconfig.base.json b/palettes/food/sakura/tsconfig.base.json new file mode 100644 index 00000000000..2b489b6aa1c --- /dev/null +++ b/palettes/food/sakura/tsconfig.base.json @@ -0,0 +1,9 @@ +{ + "extends": "@tsparticles/tsconfig/dist/tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src" + }, + "include": [ + "./src" + ] +} diff --git a/palettes/food/sakura/tsconfig.browser.json b/palettes/food/sakura/tsconfig.browser.json new file mode 100644 index 00000000000..0bf2f9217a3 --- /dev/null +++ b/palettes/food/sakura/tsconfig.browser.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/browser" + } +} diff --git a/palettes/food/sakura/tsconfig.json b/palettes/food/sakura/tsconfig.json new file mode 100644 index 00000000000..630bf828704 --- /dev/null +++ b/palettes/food/sakura/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.json"], + "compilerOptions": { + "outDir": "./dist/cjs" + } +} diff --git a/palettes/food/sakura/tsconfig.module.json b/palettes/food/sakura/tsconfig.module.json new file mode 100644 index 00000000000..48ee30e69f5 --- /dev/null +++ b/palettes/food/sakura/tsconfig.module.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/esm" + } +} diff --git a/palettes/food/sakura/tsconfig.types.json b/palettes/food/sakura/tsconfig.types.json new file mode 100644 index 00000000000..4f8341e69ba --- /dev/null +++ b/palettes/food/sakura/tsconfig.types.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/types" + } +} diff --git a/palettes/food/sakura/typedoc.json b/palettes/food/sakura/typedoc.json new file mode 100644 index 00000000000..df51096252e --- /dev/null +++ b/palettes/food/sakura/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Sakura Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/food/salad/CHANGELOG.md b/palettes/food/salad/CHANGELOG.md new file mode 100644 index 00000000000..b6e3f20c5a5 --- /dev/null +++ b/palettes/food/salad/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-salad diff --git a/palettes/food/salad/LICENSE b/palettes/food/salad/LICENSE new file mode 100644 index 00000000000..bdc05f528fa --- /dev/null +++ b/palettes/food/salad/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/palettes/food/salad/README.md b/palettes/food/salad/README.md new file mode 100644 index 00000000000..385a2c081cd --- /dev/null +++ b/palettes/food/salad/README.md @@ -0,0 +1,203 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Salad Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-salad/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-salad) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-salad.svg)](https://www.npmjs.com/package/@tsparticles/palette-salad) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-salad) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/food/salad/images/sample.png)](https://particles.js.org/samples/palettes/salad) + +## Colors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ #1A1000 +
+
+ #3A2200 +
+
+ #6B3D00 +
+
+ #A65A00 +
+
+ #D98A1A +
+
+ #FFC266 +
+
+ #090500 +
+
+ #0B1208 +
+
+ #E8F5E9 +
+
+ #C8E6C9 +
+
+ #81C784 +
+
+ #4CAF50 +
+
+ #2E7D32 +
+
+ #FDD835 +
+
+ #FFA500 +
+
+ #FFEFD7 +
+
+ #000000 +
+
+ #FFFFFF +
+
+ #F5F5F5 +
+
+ #1E1E1E +
+
+ #252525 +
+
+ #E0E0E0 +
+
+ #A0A0A0 +
+
+ #404040 +
+
+ #1D3557 +
+
+ Background
+ #1A1000 +
+ Blend mode: source-over | Fill: true +
+## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadSaladPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadSaladPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "salad", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadSaladPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/food/salad/eslint.config.js b/palettes/food/salad/eslint.config.js new file mode 100644 index 00000000000..248b4d3dd36 --- /dev/null +++ b/palettes/food/salad/eslint.config.js @@ -0,0 +1,6 @@ +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; +import { defineConfig } from "eslint/config"; + +export default defineConfig([ + tsParticlesESLintConfig, +]); diff --git a/palettes/food/salad/images/sample.png b/palettes/food/salad/images/sample.png new file mode 100644 index 00000000000..aa7af9b66f6 Binary files /dev/null and b/palettes/food/salad/images/sample.png differ diff --git a/palettes/food/salad/package.dist.json b/palettes/food/salad/package.dist.json new file mode 100644 index 00000000000..4de438ff593 --- /dev/null +++ b/palettes/food/salad/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-salad", + "version": "4.0.0-beta.15", + "description": "tsParticles salad palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/food/salad" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/food/salad/package.json b/palettes/food/salad/package.json new file mode 100644 index 00000000000..b0340acb8d2 --- /dev/null +++ b/palettes/food/salad/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-salad", + "version": "4.0.0-beta.15", + "description": "tsParticles salad palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/food/salad" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/food/salad/rollup.config.js b/palettes/food/salad/rollup.config.js new file mode 100644 index 00000000000..94726678402 --- /dev/null +++ b/palettes/food/salad/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-salad", + paletteName: "Salad Palette", + version, +}); diff --git a/palettes/food/salad/src/browser.ts b/palettes/food/salad/src/browser.ts new file mode 100644 index 00000000000..577b94d0c5e --- /dev/null +++ b/palettes/food/salad/src/browser.ts @@ -0,0 +1,10 @@ +import { loadSaladPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadSaladPalette?: typeof loadSaladPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadSaladPalette = loadSaladPalette; + +export * from "./index.js"; diff --git a/palettes/food/salad/src/index.lazy.ts b/palettes/food/salad/src/index.lazy.ts new file mode 100644 index 00000000000..3b5a59d2edb --- /dev/null +++ b/palettes/food/salad/src/index.lazy.ts @@ -0,0 +1,15 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "salad"; + +/** + * + * @param engine + */ +export async function loadSaladPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/food/salad/src/index.ts b/palettes/food/salad/src/index.ts new file mode 100644 index 00000000000..a1e8413d414 --- /dev/null +++ b/palettes/food/salad/src/index.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "salad"; + +/** + * + * @param engine + */ +export async function loadSaladPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/food/salad/src/options.ts b/palettes/food/salad/src/options.ts new file mode 100644 index 00000000000..4245a53f8fa --- /dev/null +++ b/palettes/food/salad/src/options.ts @@ -0,0 +1,20 @@ +import { type IPalette } from "@tsparticles/engine"; + +export const options: IPalette = { + name: "Salad", + background: "#0b1208", + blendMode: "multiply", + colors: { + fill: { + enable: true, + value: [ + "#E8F5E9", + "#C8E6C9", + "#81C784", + "#4CAF50", + "#2E7D32", + "#FDD835", + ], + }, + }, +}; diff --git a/palettes/food/salad/tsconfig.base.json b/palettes/food/salad/tsconfig.base.json new file mode 100644 index 00000000000..2b489b6aa1c --- /dev/null +++ b/palettes/food/salad/tsconfig.base.json @@ -0,0 +1,9 @@ +{ + "extends": "@tsparticles/tsconfig/dist/tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src" + }, + "include": [ + "./src" + ] +} diff --git a/palettes/food/salad/tsconfig.browser.json b/palettes/food/salad/tsconfig.browser.json new file mode 100644 index 00000000000..0bf2f9217a3 --- /dev/null +++ b/palettes/food/salad/tsconfig.browser.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/browser" + } +} diff --git a/palettes/food/salad/tsconfig.json b/palettes/food/salad/tsconfig.json new file mode 100644 index 00000000000..630bf828704 --- /dev/null +++ b/palettes/food/salad/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.json"], + "compilerOptions": { + "outDir": "./dist/cjs" + } +} diff --git a/palettes/food/salad/tsconfig.module.json b/palettes/food/salad/tsconfig.module.json new file mode 100644 index 00000000000..48ee30e69f5 --- /dev/null +++ b/palettes/food/salad/tsconfig.module.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/esm" + } +} diff --git a/palettes/food/salad/tsconfig.types.json b/palettes/food/salad/tsconfig.types.json new file mode 100644 index 00000000000..4f8341e69ba --- /dev/null +++ b/palettes/food/salad/tsconfig.types.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/types" + } +} diff --git a/palettes/food/salad/typedoc.json b/palettes/food/salad/typedoc.json new file mode 100644 index 00000000000..0a8db50f7bb --- /dev/null +++ b/palettes/food/salad/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Salad Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/food/spice-rack/CHANGELOG.md b/palettes/food/spice-rack/CHANGELOG.md new file mode 100644 index 00000000000..efe39d69316 --- /dev/null +++ b/palettes/food/spice-rack/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-spice-rack diff --git a/palettes/food/spice-rack/LICENSE b/palettes/food/spice-rack/LICENSE new file mode 100644 index 00000000000..bdc05f528fa --- /dev/null +++ b/palettes/food/spice-rack/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/palettes/food/spice-rack/README.md b/palettes/food/spice-rack/README.md new file mode 100644 index 00000000000..1b21d096c4a --- /dev/null +++ b/palettes/food/spice-rack/README.md @@ -0,0 +1,199 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles SpiceRack Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-spice-rack/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-spice-rack) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-spice-rack.svg)](https://www.npmjs.com/package/@tsparticles/palette-spice-rack) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-spice-rack) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/food/spice-rack/images/sample.png)](https://particles.js.org/samples/palettes/spice-rack) + +## Colors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ #1A1000 +
+
+ #3A2200 +
+
+ #6B3D00 +
+
+ #A65A00 +
+
+ #D98A1A +
+
+ #FFC266 +
+
+ #090500 +
+
+ #120B07 +
+
+ #F57C00 +
+
+ #FFEB3B +
+
+ #8D6E63 +
+
+ #D84315 +
+
+ #6D4C41 +
+
+ #FFA500 +
+
+ #FFEFD7 +
+
+ #000000 +
+
+ #FFFFFF +
+
+ #F5F5F5 +
+
+ #1E1E1E +
+
+ #252525 +
+
+ #E0E0E0 +
+
+ #A0A0A0 +
+
+ #404040 +
+
+ #1D3557 +
+
+ Background
+ #1A1000 +
+ Blend mode: source-over | Fill: true +
+## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadSpiceRackPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadSpiceRackPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "spice-rack", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadSpiceRackPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/food/spice-rack/eslint.config.js b/palettes/food/spice-rack/eslint.config.js new file mode 100644 index 00000000000..248b4d3dd36 --- /dev/null +++ b/palettes/food/spice-rack/eslint.config.js @@ -0,0 +1,6 @@ +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; +import { defineConfig } from "eslint/config"; + +export default defineConfig([ + tsParticlesESLintConfig, +]); diff --git a/palettes/food/spice-rack/images/sample.png b/palettes/food/spice-rack/images/sample.png new file mode 100644 index 00000000000..4491a2493e4 Binary files /dev/null and b/palettes/food/spice-rack/images/sample.png differ diff --git a/palettes/food/spice-rack/package.dist.json b/palettes/food/spice-rack/package.dist.json new file mode 100644 index 00000000000..2a7027ffb4a --- /dev/null +++ b/palettes/food/spice-rack/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-spice-rack", + "version": "4.0.0-beta.15", + "description": "tsParticles spice rack palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/food/spice-rack" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/food/spice-rack/package.json b/palettes/food/spice-rack/package.json new file mode 100644 index 00000000000..f9fda18d569 --- /dev/null +++ b/palettes/food/spice-rack/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-spice-rack", + "version": "4.0.0-beta.15", + "description": "tsParticles spice rack palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/food/spice-rack" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/food/spice-rack/rollup.config.js b/palettes/food/spice-rack/rollup.config.js new file mode 100644 index 00000000000..9feaa74763f --- /dev/null +++ b/palettes/food/spice-rack/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-spice-rack", + paletteName: "Spice Rack Palette", + version, +}); diff --git a/palettes/food/spice-rack/src/browser.ts b/palettes/food/spice-rack/src/browser.ts new file mode 100644 index 00000000000..17f63d1a69c --- /dev/null +++ b/palettes/food/spice-rack/src/browser.ts @@ -0,0 +1,10 @@ +import { loadSpiceRackPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadSpiceRackPalette?: typeof loadSpiceRackPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadSpiceRackPalette = loadSpiceRackPalette; + +export * from "./index.js"; diff --git a/palettes/food/spice-rack/src/index.lazy.ts b/palettes/food/spice-rack/src/index.lazy.ts new file mode 100644 index 00000000000..e6e4bc3a640 --- /dev/null +++ b/palettes/food/spice-rack/src/index.lazy.ts @@ -0,0 +1,15 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "spice-rack"; + +/** + * + * @param engine + */ +export async function loadSpiceRackPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/food/spice-rack/src/index.ts b/palettes/food/spice-rack/src/index.ts new file mode 100644 index 00000000000..5538bdbae4e --- /dev/null +++ b/palettes/food/spice-rack/src/index.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "spice-rack"; + +/** + * + * @param engine + */ +export async function loadSpiceRackPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/food/spice-rack/src/options.ts b/palettes/food/spice-rack/src/options.ts new file mode 100644 index 00000000000..b1fe247b394 --- /dev/null +++ b/palettes/food/spice-rack/src/options.ts @@ -0,0 +1,19 @@ +import { type IPalette } from "@tsparticles/engine"; + +export const options: IPalette = { + name: "Spice Rack", + background: "#120b07", + blendMode: "source-over", + colors: { + fill: { + enable: true, + value: [ + "#F57C00", // paprika + "#FFEB3B", // turmeric + "#8D6E63", // cinnamon + "#D84315", // chili + "#6D4C41", + ], + }, + }, +}; diff --git a/palettes/food/spice-rack/tsconfig.base.json b/palettes/food/spice-rack/tsconfig.base.json new file mode 100644 index 00000000000..2b489b6aa1c --- /dev/null +++ b/palettes/food/spice-rack/tsconfig.base.json @@ -0,0 +1,9 @@ +{ + "extends": "@tsparticles/tsconfig/dist/tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src" + }, + "include": [ + "./src" + ] +} diff --git a/palettes/food/spice-rack/tsconfig.browser.json b/palettes/food/spice-rack/tsconfig.browser.json new file mode 100644 index 00000000000..0bf2f9217a3 --- /dev/null +++ b/palettes/food/spice-rack/tsconfig.browser.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/browser" + } +} diff --git a/palettes/food/spice-rack/tsconfig.json b/palettes/food/spice-rack/tsconfig.json new file mode 100644 index 00000000000..630bf828704 --- /dev/null +++ b/palettes/food/spice-rack/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.json"], + "compilerOptions": { + "outDir": "./dist/cjs" + } +} diff --git a/palettes/food/spice-rack/tsconfig.module.json b/palettes/food/spice-rack/tsconfig.module.json new file mode 100644 index 00000000000..48ee30e69f5 --- /dev/null +++ b/palettes/food/spice-rack/tsconfig.module.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/esm" + } +} diff --git a/palettes/food/spice-rack/tsconfig.types.json b/palettes/food/spice-rack/tsconfig.types.json new file mode 100644 index 00000000000..4f8341e69ba --- /dev/null +++ b/palettes/food/spice-rack/tsconfig.types.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/types" + } +} diff --git a/palettes/food/spice-rack/typedoc.json b/palettes/food/spice-rack/typedoc.json new file mode 100644 index 00000000000..413546c3bfe --- /dev/null +++ b/palettes/food/spice-rack/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Spice Rack Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/food/steak/CHANGELOG.md b/palettes/food/steak/CHANGELOG.md new file mode 100644 index 00000000000..ef021a1f4f5 --- /dev/null +++ b/palettes/food/steak/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-steak diff --git a/palettes/food/steak/LICENSE b/palettes/food/steak/LICENSE new file mode 100644 index 00000000000..bdc05f528fa --- /dev/null +++ b/palettes/food/steak/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/palettes/food/steak/README.md b/palettes/food/steak/README.md new file mode 100644 index 00000000000..470dcb40f2f --- /dev/null +++ b/palettes/food/steak/README.md @@ -0,0 +1,203 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Steak Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-steak/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-steak) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-steak.svg)](https://www.npmjs.com/package/@tsparticles/palette-steak) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-steak) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/food/steak/images/sample.png)](https://particles.js.org/samples/palettes/steak) + +## Colors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ #1A1000 +
+
+ #3A2200 +
+
+ #6B3D00 +
+
+ #A65A00 +
+
+ #D98A1A +
+
+ #FFC266 +
+
+ #090500 +
+
+ #120A07 +
+
+ #4E342E +
+
+ #C62828 +
+
+ #8E240F +
+
+ #EF5350 +
+
+ #3E2723 +
+
+ #FFD54F +
+
+ #FFA500 +
+
+ #FFEFD7 +
+
+ #000000 +
+
+ #FFFFFF +
+
+ #F5F5F5 +
+
+ #1E1E1E +
+
+ #252525 +
+
+ #E0E0E0 +
+
+ #A0A0A0 +
+
+ #404040 +
+
+ #1D3557 +
+
+ Background
+ #1A1000 +
+ Blend mode: source-over | Fill: true +
+## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadSteakPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadSteakPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "steak", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadSteakPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/food/steak/eslint.config.js b/palettes/food/steak/eslint.config.js new file mode 100644 index 00000000000..248b4d3dd36 --- /dev/null +++ b/palettes/food/steak/eslint.config.js @@ -0,0 +1,6 @@ +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; +import { defineConfig } from "eslint/config"; + +export default defineConfig([ + tsParticlesESLintConfig, +]); diff --git a/palettes/food/steak/images/sample.png b/palettes/food/steak/images/sample.png new file mode 100644 index 00000000000..99a8aa91d2c Binary files /dev/null and b/palettes/food/steak/images/sample.png differ diff --git a/palettes/food/steak/package.dist.json b/palettes/food/steak/package.dist.json new file mode 100644 index 00000000000..ffae81996d5 --- /dev/null +++ b/palettes/food/steak/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-steak", + "version": "4.0.0-beta.15", + "description": "tsParticles steak palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/food/steak" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/food/steak/package.json b/palettes/food/steak/package.json new file mode 100644 index 00000000000..8b0d30c299f --- /dev/null +++ b/palettes/food/steak/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-steak", + "version": "4.0.0-beta.15", + "description": "tsParticles steak palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/food/steak" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/food/steak/rollup.config.js b/palettes/food/steak/rollup.config.js new file mode 100644 index 00000000000..a1286a52ceb --- /dev/null +++ b/palettes/food/steak/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-steak", + paletteName: "Steak Palette", + version, +}); diff --git a/palettes/food/steak/src/browser.ts b/palettes/food/steak/src/browser.ts new file mode 100644 index 00000000000..2f5cff42d47 --- /dev/null +++ b/palettes/food/steak/src/browser.ts @@ -0,0 +1,10 @@ +import { loadSteakPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadSteakPalette?: typeof loadSteakPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadSteakPalette = loadSteakPalette; + +export * from "./index.js"; diff --git a/palettes/food/steak/src/index.lazy.ts b/palettes/food/steak/src/index.lazy.ts new file mode 100644 index 00000000000..b019e900a1e --- /dev/null +++ b/palettes/food/steak/src/index.lazy.ts @@ -0,0 +1,15 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "steak"; + +/** + * + * @param engine + */ +export async function loadSteakPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/food/steak/src/index.ts b/palettes/food/steak/src/index.ts new file mode 100644 index 00000000000..a689c823ef6 --- /dev/null +++ b/palettes/food/steak/src/index.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "steak"; + +/** + * + * @param engine + */ +export async function loadSteakPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/food/steak/src/options.ts b/palettes/food/steak/src/options.ts new file mode 100644 index 00000000000..3b96f3dd832 --- /dev/null +++ b/palettes/food/steak/src/options.ts @@ -0,0 +1,20 @@ +import { type IPalette } from "@tsparticles/engine"; + +export const options: IPalette = { + name: "Steak", + background: "#120a07", + blendMode: "multiply", + colors: { + fill: { + enable: true, + value: [ + "#4E342E", + "#C62828", + "#8E240F", + "#EF5350", + "#3E2723", + "#FFD54F", + ], + }, + }, +}; diff --git a/palettes/food/steak/tsconfig.base.json b/palettes/food/steak/tsconfig.base.json new file mode 100644 index 00000000000..2b489b6aa1c --- /dev/null +++ b/palettes/food/steak/tsconfig.base.json @@ -0,0 +1,9 @@ +{ + "extends": "@tsparticles/tsconfig/dist/tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src" + }, + "include": [ + "./src" + ] +} diff --git a/palettes/food/steak/tsconfig.browser.json b/palettes/food/steak/tsconfig.browser.json new file mode 100644 index 00000000000..0bf2f9217a3 --- /dev/null +++ b/palettes/food/steak/tsconfig.browser.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/browser" + } +} diff --git a/palettes/food/steak/tsconfig.json b/palettes/food/steak/tsconfig.json new file mode 100644 index 00000000000..630bf828704 --- /dev/null +++ b/palettes/food/steak/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.json"], + "compilerOptions": { + "outDir": "./dist/cjs" + } +} diff --git a/palettes/food/steak/tsconfig.module.json b/palettes/food/steak/tsconfig.module.json new file mode 100644 index 00000000000..48ee30e69f5 --- /dev/null +++ b/palettes/food/steak/tsconfig.module.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/esm" + } +} diff --git a/palettes/food/steak/tsconfig.types.json b/palettes/food/steak/tsconfig.types.json new file mode 100644 index 00000000000..4f8341e69ba --- /dev/null +++ b/palettes/food/steak/tsconfig.types.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/types" + } +} diff --git a/palettes/food/steak/typedoc.json b/palettes/food/steak/typedoc.json new file mode 100644 index 00000000000..279a88dfb65 --- /dev/null +++ b/palettes/food/steak/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Steak Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/food/sushi/CHANGELOG.md b/palettes/food/sushi/CHANGELOG.md new file mode 100644 index 00000000000..77038de7983 --- /dev/null +++ b/palettes/food/sushi/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-sushi diff --git a/palettes/food/sushi/LICENSE b/palettes/food/sushi/LICENSE new file mode 100644 index 00000000000..bdc05f528fa --- /dev/null +++ b/palettes/food/sushi/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/palettes/food/sushi/README.md b/palettes/food/sushi/README.md new file mode 100644 index 00000000000..3467c7142f7 --- /dev/null +++ b/palettes/food/sushi/README.md @@ -0,0 +1,203 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Sushi Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-sushi/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-sushi) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-sushi.svg)](https://www.npmjs.com/package/@tsparticles/palette-sushi) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-sushi) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/food/sushi/images/sample.png)](https://particles.js.org/samples/palettes/sushi) + +## Colors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ #1A1000 +
+
+ #3A2200 +
+
+ #6B3D00 +
+
+ #A65A00 +
+
+ #D98A1A +
+
+ #FFC266 +
+
+ #090500 +
+
+ #0B1B16 +
+
+ #FFFFFF +
+
+ #F0F0F0 +
+
+ #FF7043 +
+
+ #D84315 +
+
+ #1B5E20 +
+
+ #2E7D32 +
+
+ #263238 +
+
+ #FFA500 +
+
+ #FFEFD7 +
+
+ #000000 +
+
+ #F5F5F5 +
+
+ #1E1E1E +
+
+ #252525 +
+
+ #E0E0E0 +
+
+ #A0A0A0 +
+
+ #404040 +
+
+ #1D3557 +
+
+ Background
+ #1A1000 +
+ Blend mode: source-over | Fill: true +
+## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadSushiPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadSushiPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "sushi", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadSushiPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/food/sushi/eslint.config.js b/palettes/food/sushi/eslint.config.js new file mode 100644 index 00000000000..248b4d3dd36 --- /dev/null +++ b/palettes/food/sushi/eslint.config.js @@ -0,0 +1,6 @@ +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; +import { defineConfig } from "eslint/config"; + +export default defineConfig([ + tsParticlesESLintConfig, +]); diff --git a/palettes/food/sushi/images/sample.png b/palettes/food/sushi/images/sample.png new file mode 100644 index 00000000000..6898899b135 Binary files /dev/null and b/palettes/food/sushi/images/sample.png differ diff --git a/palettes/food/sushi/package.dist.json b/palettes/food/sushi/package.dist.json new file mode 100644 index 00000000000..52b21078e95 --- /dev/null +++ b/palettes/food/sushi/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-sushi", + "version": "4.0.0-beta.15", + "description": "tsParticles sushi palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/food/sushi" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/food/sushi/package.json b/palettes/food/sushi/package.json new file mode 100644 index 00000000000..c7c38e257f1 --- /dev/null +++ b/palettes/food/sushi/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-sushi", + "version": "4.0.0-beta.15", + "description": "tsParticles sushi palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/food/sushi" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/food/sushi/rollup.config.js b/palettes/food/sushi/rollup.config.js new file mode 100644 index 00000000000..a0c053f327a --- /dev/null +++ b/palettes/food/sushi/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-sushi", + paletteName: "Sushi Palette", + version, +}); diff --git a/palettes/food/sushi/src/browser.ts b/palettes/food/sushi/src/browser.ts new file mode 100644 index 00000000000..2de914fba4d --- /dev/null +++ b/palettes/food/sushi/src/browser.ts @@ -0,0 +1,10 @@ +import { loadSushiPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadSushiPalette?: typeof loadSushiPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadSushiPalette = loadSushiPalette; + +export * from "./index.js"; diff --git a/palettes/food/sushi/src/index.lazy.ts b/palettes/food/sushi/src/index.lazy.ts new file mode 100644 index 00000000000..419b76b9db5 --- /dev/null +++ b/palettes/food/sushi/src/index.lazy.ts @@ -0,0 +1,15 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "sushi"; + +/** + * + * @param engine + */ +export async function loadSushiPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/food/sushi/src/index.ts b/palettes/food/sushi/src/index.ts new file mode 100644 index 00000000000..63394bc9df6 --- /dev/null +++ b/palettes/food/sushi/src/index.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "sushi"; + +/** + * + * @param engine + */ +export async function loadSushiPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/food/sushi/src/options.ts b/palettes/food/sushi/src/options.ts new file mode 100644 index 00000000000..9f499554a59 --- /dev/null +++ b/palettes/food/sushi/src/options.ts @@ -0,0 +1,21 @@ +import { type IPalette } from "@tsparticles/engine"; + +export const options: IPalette = { + name: "Sushi", + background: "#0b1b16", + blendMode: "overlay", + colors: { + fill: { + enable: true, + value: [ + "#FFFFFF", + "#F0F0F0", + "#FF7043", + "#D84315", + "#1B5E20", + "#2E7D32", + "#263238", + ], + }, + }, +}; diff --git a/palettes/food/sushi/tsconfig.base.json b/palettes/food/sushi/tsconfig.base.json new file mode 100644 index 00000000000..2b489b6aa1c --- /dev/null +++ b/palettes/food/sushi/tsconfig.base.json @@ -0,0 +1,9 @@ +{ + "extends": "@tsparticles/tsconfig/dist/tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src" + }, + "include": [ + "./src" + ] +} diff --git a/palettes/food/sushi/tsconfig.browser.json b/palettes/food/sushi/tsconfig.browser.json new file mode 100644 index 00000000000..0bf2f9217a3 --- /dev/null +++ b/palettes/food/sushi/tsconfig.browser.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/browser" + } +} diff --git a/palettes/food/sushi/tsconfig.json b/palettes/food/sushi/tsconfig.json new file mode 100644 index 00000000000..630bf828704 --- /dev/null +++ b/palettes/food/sushi/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.json"], + "compilerOptions": { + "outDir": "./dist/cjs" + } +} diff --git a/palettes/food/sushi/tsconfig.module.json b/palettes/food/sushi/tsconfig.module.json new file mode 100644 index 00000000000..48ee30e69f5 --- /dev/null +++ b/palettes/food/sushi/tsconfig.module.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/esm" + } +} diff --git a/palettes/food/sushi/tsconfig.types.json b/palettes/food/sushi/tsconfig.types.json new file mode 100644 index 00000000000..4f8341e69ba --- /dev/null +++ b/palettes/food/sushi/tsconfig.types.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/types" + } +} diff --git a/palettes/food/sushi/typedoc.json b/palettes/food/sushi/typedoc.json new file mode 100644 index 00000000000..b614660c2c8 --- /dev/null +++ b/palettes/food/sushi/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Sushi Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/food/tropical-fruits/CHANGELOG.md b/palettes/food/tropical-fruits/CHANGELOG.md new file mode 100644 index 00000000000..d429d0b92be --- /dev/null +++ b/palettes/food/tropical-fruits/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-tropical-fruits diff --git a/palettes/food/tropical-fruits/LICENSE b/palettes/food/tropical-fruits/LICENSE new file mode 100644 index 00000000000..bdc05f528fa --- /dev/null +++ b/palettes/food/tropical-fruits/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/palettes/food/tropical-fruits/README.md b/palettes/food/tropical-fruits/README.md new file mode 100644 index 00000000000..a7bb970d64d --- /dev/null +++ b/palettes/food/tropical-fruits/README.md @@ -0,0 +1,203 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles TropicalFruits Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-tropical-fruits/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-tropical-fruits) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-tropical-fruits.svg)](https://www.npmjs.com/package/@tsparticles/palette-tropical-fruits) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-tropical-fruits) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/food/tropical-fruits/images/sample.png)](https://particles.js.org/samples/palettes/tropical-fruits) + +## Colors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ #1A1000 +
+
+ #3A2200 +
+
+ #6B3D00 +
+
+ #A65A00 +
+
+ #D98A1A +
+
+ #FFC266 +
+
+ #090500 +
+
+ #0B1208 +
+
+ #FF7043 +
+
+ #FFD54F +
+
+ #FFEB3B +
+
+ #4CAF50 +
+
+ #8BC34A +
+
+ #E91E63 +
+
+ #FFA500 +
+
+ #FFEFD7 +
+
+ #000000 +
+
+ #FFFFFF +
+
+ #F5F5F5 +
+
+ #1E1E1E +
+
+ #252525 +
+
+ #E0E0E0 +
+
+ #A0A0A0 +
+
+ #404040 +
+
+ #1D3557 +
+
+ Background
+ #1A1000 +
+ Blend mode: source-over | Fill: true +
+## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadTropicalFruitsPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadTropicalFruitsPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "tropical-fruits", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadTropicalFruitsPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/food/tropical-fruits/eslint.config.js b/palettes/food/tropical-fruits/eslint.config.js new file mode 100644 index 00000000000..248b4d3dd36 --- /dev/null +++ b/palettes/food/tropical-fruits/eslint.config.js @@ -0,0 +1,6 @@ +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; +import { defineConfig } from "eslint/config"; + +export default defineConfig([ + tsParticlesESLintConfig, +]); diff --git a/palettes/food/tropical-fruits/images/sample.png b/palettes/food/tropical-fruits/images/sample.png new file mode 100644 index 00000000000..d219b3a954a Binary files /dev/null and b/palettes/food/tropical-fruits/images/sample.png differ diff --git a/palettes/food/tropical-fruits/package.dist.json b/palettes/food/tropical-fruits/package.dist.json new file mode 100644 index 00000000000..b1931800bad --- /dev/null +++ b/palettes/food/tropical-fruits/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-tropical-fruits", + "version": "4.0.0-beta.15", + "description": "tsParticles tropical fruits palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/food/tropical-fruits" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/food/tropical-fruits/package.json b/palettes/food/tropical-fruits/package.json new file mode 100644 index 00000000000..01ee06be2ea --- /dev/null +++ b/palettes/food/tropical-fruits/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-tropical-fruits", + "version": "4.0.0-beta.15", + "description": "tsParticles tropical fruits palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/food/tropical-fruits" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/food/tropical-fruits/rollup.config.js b/palettes/food/tropical-fruits/rollup.config.js new file mode 100644 index 00000000000..16f881d94ab --- /dev/null +++ b/palettes/food/tropical-fruits/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-tropical-fruits", + paletteName: "Tropical Fruits Palette", + version, +}); diff --git a/palettes/food/tropical-fruits/src/browser.ts b/palettes/food/tropical-fruits/src/browser.ts new file mode 100644 index 00000000000..a689db1bc12 --- /dev/null +++ b/palettes/food/tropical-fruits/src/browser.ts @@ -0,0 +1,10 @@ +import { loadTropicalFruitsPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadTropicalFruitsPalette?: typeof loadTropicalFruitsPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadTropicalFruitsPalette = loadTropicalFruitsPalette; + +export * from "./index.js"; diff --git a/palettes/food/tropical-fruits/src/index.lazy.ts b/palettes/food/tropical-fruits/src/index.lazy.ts new file mode 100644 index 00000000000..500ee181f7f --- /dev/null +++ b/palettes/food/tropical-fruits/src/index.lazy.ts @@ -0,0 +1,15 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "tropical-fruits"; + +/** + * + * @param engine + */ +export async function loadTropicalFruitsPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/food/tropical-fruits/src/index.ts b/palettes/food/tropical-fruits/src/index.ts new file mode 100644 index 00000000000..d6b53c5b8a7 --- /dev/null +++ b/palettes/food/tropical-fruits/src/index.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "tropical-fruits"; + +/** + * + * @param engine + */ +export async function loadTropicalFruitsPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/food/tropical-fruits/src/options.ts b/palettes/food/tropical-fruits/src/options.ts new file mode 100644 index 00000000000..def4c5c22f5 --- /dev/null +++ b/palettes/food/tropical-fruits/src/options.ts @@ -0,0 +1,20 @@ +import { type IPalette } from "@tsparticles/engine"; + +export const options: IPalette = { + name: "Tropical Fruits", + background: "#0b1208", + blendMode: "screen", + colors: { + fill: { + enable: true, + value: [ + "#FF7043", + "#FFD54F", + "#FFEB3B", + "#4CAF50", + "#8BC34A", + "#E91E63", + ], + }, + }, +}; diff --git a/palettes/food/tropical-fruits/tsconfig.base.json b/palettes/food/tropical-fruits/tsconfig.base.json new file mode 100644 index 00000000000..2b489b6aa1c --- /dev/null +++ b/palettes/food/tropical-fruits/tsconfig.base.json @@ -0,0 +1,9 @@ +{ + "extends": "@tsparticles/tsconfig/dist/tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src" + }, + "include": [ + "./src" + ] +} diff --git a/palettes/food/tropical-fruits/tsconfig.browser.json b/palettes/food/tropical-fruits/tsconfig.browser.json new file mode 100644 index 00000000000..0bf2f9217a3 --- /dev/null +++ b/palettes/food/tropical-fruits/tsconfig.browser.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/browser" + } +} diff --git a/palettes/food/tropical-fruits/tsconfig.json b/palettes/food/tropical-fruits/tsconfig.json new file mode 100644 index 00000000000..630bf828704 --- /dev/null +++ b/palettes/food/tropical-fruits/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.json"], + "compilerOptions": { + "outDir": "./dist/cjs" + } +} diff --git a/palettes/food/tropical-fruits/tsconfig.module.json b/palettes/food/tropical-fruits/tsconfig.module.json new file mode 100644 index 00000000000..48ee30e69f5 --- /dev/null +++ b/palettes/food/tropical-fruits/tsconfig.module.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/esm" + } +} diff --git a/palettes/food/tropical-fruits/tsconfig.types.json b/palettes/food/tropical-fruits/tsconfig.types.json new file mode 100644 index 00000000000..4f8341e69ba --- /dev/null +++ b/palettes/food/tropical-fruits/tsconfig.types.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/types" + } +} diff --git a/palettes/food/tropical-fruits/typedoc.json b/palettes/food/tropical-fruits/typedoc.json new file mode 100644 index 00000000000..5583bea4c47 --- /dev/null +++ b/palettes/food/tropical-fruits/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Tropical Fruits Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/food/watermelon/CHANGELOG.md b/palettes/food/watermelon/CHANGELOG.md new file mode 100644 index 00000000000..556fd44bd21 --- /dev/null +++ b/palettes/food/watermelon/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-watermelon diff --git a/palettes/food/watermelon/LICENSE b/palettes/food/watermelon/LICENSE new file mode 100644 index 00000000000..bdc05f528fa --- /dev/null +++ b/palettes/food/watermelon/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/palettes/food/watermelon/README.md b/palettes/food/watermelon/README.md new file mode 100644 index 00000000000..7fe401007ba --- /dev/null +++ b/palettes/food/watermelon/README.md @@ -0,0 +1,217 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Watermelon Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-watermelon/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-watermelon) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-watermelon.svg)](https://www.npmjs.com/package/@tsparticles/palette-watermelon) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-watermelon) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/food/watermelon/images/sample.png)](https://particles.js.org/samples/palettes/watermelon) + +## Colors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ #1A1000 +
+
+ #3A2200 +
+
+ #6B3D00 +
+
+ #A65A00 +
+
+ #D98A1A +
+
+ #FFC266 +
+
+ #090500 +
+
+ #FFF9F9 +
+
+ #FFEDEE +
+
+ #FFD6D9 +
+
+ #FF6B6B +
+
+ #FF2A2A +
+
+ #C62828 +
+
+ #212121 +
+
+ #66BB6A +
+
+ #2E7D32 +
+
+ #1B5E20 +
+
+ #FFA500 +
+
+ #FFEFD7 +
+
+ #000000 +
+
+ #FFFFFF +
+
+ #F5F5F5 +
+
+ #1E1E1E +
+
+ #252525 +
+
+ #E0E0E0 +
+
+ #A0A0A0 +
+
+ #404040 +
+
+ #1D3557 +
+
+ Background
+ #1A1000 +
+ Blend mode: source-over | Fill: true +
+## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadWatermelonPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadWatermelonPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "watermelon", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadWatermelonPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/food/watermelon/eslint.config.js b/palettes/food/watermelon/eslint.config.js new file mode 100644 index 00000000000..248b4d3dd36 --- /dev/null +++ b/palettes/food/watermelon/eslint.config.js @@ -0,0 +1,6 @@ +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; +import { defineConfig } from "eslint/config"; + +export default defineConfig([ + tsParticlesESLintConfig, +]); diff --git a/palettes/food/watermelon/images/sample.png b/palettes/food/watermelon/images/sample.png new file mode 100644 index 00000000000..459870771b2 Binary files /dev/null and b/palettes/food/watermelon/images/sample.png differ diff --git a/palettes/food/watermelon/package.dist.json b/palettes/food/watermelon/package.dist.json new file mode 100644 index 00000000000..3b49a34543c --- /dev/null +++ b/palettes/food/watermelon/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-watermelon", + "version": "4.0.0-beta.15", + "description": "tsParticles watermelon palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/food/watermelon" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/food/watermelon/package.json b/palettes/food/watermelon/package.json new file mode 100644 index 00000000000..4ef778832be --- /dev/null +++ b/palettes/food/watermelon/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-watermelon", + "version": "4.0.0-beta.15", + "description": "tsParticles watermelon palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/food/watermelon" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/food/watermelon/rollup.config.js b/palettes/food/watermelon/rollup.config.js new file mode 100644 index 00000000000..cacd8767c28 --- /dev/null +++ b/palettes/food/watermelon/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-watermelon", + paletteName: "Watermelon Palette", + version, +}); diff --git a/palettes/food/watermelon/src/browser.ts b/palettes/food/watermelon/src/browser.ts new file mode 100644 index 00000000000..f46bdc8fefc --- /dev/null +++ b/palettes/food/watermelon/src/browser.ts @@ -0,0 +1,10 @@ +import { loadWatermelonPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadWatermelonPalette?: typeof loadWatermelonPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadWatermelonPalette = loadWatermelonPalette; + +export * from "./index.js"; diff --git a/palettes/food/watermelon/src/index.lazy.ts b/palettes/food/watermelon/src/index.lazy.ts new file mode 100644 index 00000000000..37090a8a4e6 --- /dev/null +++ b/palettes/food/watermelon/src/index.lazy.ts @@ -0,0 +1,15 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "watermelon"; + +/** + * + * @param engine + */ +export async function loadWatermelonPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/food/watermelon/src/index.ts b/palettes/food/watermelon/src/index.ts new file mode 100644 index 00000000000..8df8c92d139 --- /dev/null +++ b/palettes/food/watermelon/src/index.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "watermelon"; + +/** + * + * @param engine + */ +export async function loadWatermelonPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/food/watermelon/src/options.ts b/palettes/food/watermelon/src/options.ts new file mode 100644 index 00000000000..c4d18a1adb8 --- /dev/null +++ b/palettes/food/watermelon/src/options.ts @@ -0,0 +1,23 @@ +import { type IPalette } from "@tsparticles/engine"; + +export const options: IPalette = { + name: "Watermelon", + background: "#FFF9F9", + blendMode: "overlay", + colors: { + fill: { + enable: true, + value: [ + "#FFEDEE", // inner highlight (no pure white) + "#FFD6D9", + "#FF6B6B", + "#FF2A2A", + "#C62828", + "#212121", // seeds + "#66BB6A", + "#2E7D32", + "#1B5E20", + ], + }, + }, +}; diff --git a/palettes/food/watermelon/tsconfig.base.json b/palettes/food/watermelon/tsconfig.base.json new file mode 100644 index 00000000000..2b489b6aa1c --- /dev/null +++ b/palettes/food/watermelon/tsconfig.base.json @@ -0,0 +1,9 @@ +{ + "extends": "@tsparticles/tsconfig/dist/tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src" + }, + "include": [ + "./src" + ] +} diff --git a/palettes/food/watermelon/tsconfig.browser.json b/palettes/food/watermelon/tsconfig.browser.json new file mode 100644 index 00000000000..0bf2f9217a3 --- /dev/null +++ b/palettes/food/watermelon/tsconfig.browser.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/browser" + } +} diff --git a/palettes/food/watermelon/tsconfig.json b/palettes/food/watermelon/tsconfig.json new file mode 100644 index 00000000000..630bf828704 --- /dev/null +++ b/palettes/food/watermelon/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.json"], + "compilerOptions": { + "outDir": "./dist/cjs" + } +} diff --git a/palettes/food/watermelon/tsconfig.module.json b/palettes/food/watermelon/tsconfig.module.json new file mode 100644 index 00000000000..48ee30e69f5 --- /dev/null +++ b/palettes/food/watermelon/tsconfig.module.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/esm" + } +} diff --git a/palettes/food/watermelon/tsconfig.types.json b/palettes/food/watermelon/tsconfig.types.json new file mode 100644 index 00000000000..4f8341e69ba --- /dev/null +++ b/palettes/food/watermelon/tsconfig.types.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist/types" + } +} diff --git a/palettes/food/watermelon/typedoc.json b/palettes/food/watermelon/typedoc.json new file mode 100644 index 00000000000..cd7c1f8b5cb --- /dev/null +++ b/palettes/food/watermelon/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Watermelon Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/impact/bulletHit/CHANGELOG.md b/palettes/impact/bulletHit/CHANGELOG.md index fbe6dcbf62a..893cbca6bbe 100644 --- a/palettes/impact/bulletHit/CHANGELOG.md +++ b/palettes/impact/bulletHit/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-bullet-hit + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-bullet-hit diff --git a/palettes/impact/bulletHit/README.md b/palettes/impact/bulletHit/README.md index 08be741e5bc..f8eed94c85f 100644 --- a/palettes/impact/bulletHit/README.md +++ b/palettes/impact/bulletHit/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Bullet Hit Palette +# tsParticles BulletHit Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-bullet-hit/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-bullet-hit) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-bullet-hit.svg)](https://www.npmjs.com/package/@tsparticles/palette-bullet-hit) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-bullet-hit)](https://www.npmjs.com/package/@tsparticles/palette-bullet-hit) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-bulletHit/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-bulletHit) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-bulletHit.svg)](https://www.npmjs.com/package/@tsparticles/palette-bulletHit) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-bulletHit) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for bullet hit impact. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/impact/bulletHit/images/sample.png)](https://particles.js.org/samples/palettes/bullet-hit) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/impact/bulletHit/images/sample.png)](https://particles.js.org/samples/palettes/bulletHit) ## Colors @@ -79,7 +79,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -101,7 +101,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "bullet-hit", + palette: "bulletHit", }; await engine.load({ diff --git a/palettes/impact/bulletHit/images/sample.png b/palettes/impact/bulletHit/images/sample.png index 2647fb41583..8a5b43afc4f 100644 Binary files a/palettes/impact/bulletHit/images/sample.png and b/palettes/impact/bulletHit/images/sample.png differ diff --git a/palettes/impact/bulletHit/package.dist.json b/palettes/impact/bulletHit/package.dist.json index b5b470726b6..7b20291c89b 100644 --- a/palettes/impact/bulletHit/package.dist.json +++ b/palettes/impact/bulletHit/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-bullet-hit", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles bullet hit impact palette", "homepage": "https://particles.js.org", "repository": { @@ -95,14 +95,22 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "type": "module", - "jsdelivr": "tsparticles.palette-bullet-hit.min.js", - "unpkg": "tsparticles.palette-bullet-hit.min.js", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" } diff --git a/palettes/impact/bulletHit/package.json b/palettes/impact/bulletHit/package.json index b01d1e50e76..086285070d5 100644 --- a/palettes/impact/bulletHit/package.json +++ b/palettes/impact/bulletHit/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-bullet-hit", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles bullet hit impact palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/impact/bulletHit/rollup.config.js b/palettes/impact/bulletHit/rollup.config.js new file mode 100644 index 00000000000..5e437fab32b --- /dev/null +++ b/palettes/impact/bulletHit/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-bulletHit", + paletteName: "BulletHit Palette", + version, +}); diff --git a/palettes/impact/bulletHit/src/browser.ts b/palettes/impact/bulletHit/src/browser.ts new file mode 100644 index 00000000000..68471b1bd2b --- /dev/null +++ b/palettes/impact/bulletHit/src/browser.ts @@ -0,0 +1,10 @@ +import { loadBulletHitPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadBulletHitPalette?: typeof loadBulletHitPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadBulletHitPalette = loadBulletHitPalette; + +export * from "./index.js"; diff --git a/palettes/impact/bulletHit/src/index.lazy.ts b/palettes/impact/bulletHit/src/index.lazy.ts new file mode 100644 index 00000000000..c8e428c28fa --- /dev/null +++ b/palettes/impact/bulletHit/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "bullet-hit"; + +/** + * @param engine - + */ +export async function loadBulletHitPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/impact/bulletHit/src/index.ts b/palettes/impact/bulletHit/src/index.ts index 684ae11cf24..b52238502b1 100644 --- a/palettes/impact/bulletHit/src/index.ts +++ b/palettes/impact/bulletHit/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "bullet-hit"; @@ -6,9 +7,7 @@ const paletteName = "bullet-hit"; * @param engine - */ export async function loadBulletHitPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/impact/bulletHit/typedoc.json b/palettes/impact/bulletHit/typedoc.json index 0894d986adb..18dc984ec10 100644 --- a/palettes/impact/bulletHit/typedoc.json +++ b/palettes/impact/bulletHit/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Bullet Hit Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles BulletHit Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/impact/bulletHit/webpack.config.js b/palettes/impact/bulletHit/webpack.config.js deleted file mode 100644 index 09bae6afc47..00000000000 --- a/palettes/impact/bulletHit/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-bullet-hit", - paletteName: "Bullet Hit Palette", - version, -}); diff --git a/palettes/impact/explosionDebris/CHANGELOG.md b/palettes/impact/explosionDebris/CHANGELOG.md index 1a5e571dae4..0b470676c56 100644 --- a/palettes/impact/explosionDebris/CHANGELOG.md +++ b/palettes/impact/explosionDebris/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-explosion-debris + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-explosion-debris diff --git a/palettes/impact/explosionDebris/README.md b/palettes/impact/explosionDebris/README.md index 213277fb3fd..27e46f7854c 100644 --- a/palettes/impact/explosionDebris/README.md +++ b/palettes/impact/explosionDebris/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Explosion Debris Palette +# tsParticles ExplosionDebris Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-explosion-debris/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-explosion-debris) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-explosion-debris.svg)](https://www.npmjs.com/package/@tsparticles/palette-explosion-debris) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-explosion-debris)](https://www.npmjs.com/package/@tsparticles/palette-explosion-debris) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-explosionDebris/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-explosionDebris) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-explosionDebris.svg)](https://www.npmjs.com/package/@tsparticles/palette-explosionDebris) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-explosionDebris) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for explosion - debris. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/explosionDebris/images/sample.png)](https://particles.js.org/samples/palettes/explosion-debris) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/impact/explosionDebris/images/sample.png)](https://particles.js.org/samples/palettes/explosionDebris) ## Colors @@ -79,7 +79,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -101,7 +101,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "explosion-debris", + palette: "explosionDebris", }; await engine.load({ @@ -116,47 +116,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "explosion-debris", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadExplosionDebrisPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadExplosionDebrisPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadExplosionDebrisPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -paexplosionDebris[Explosion Debris] -end - -e[tsParticles Engine] --> paexplosionDebris -``` diff --git a/palettes/impact/explosionDebris/package.dist.json b/palettes/impact/explosionDebris/package.dist.json index 1012b458127..8584c439dbe 100644 --- a/palettes/impact/explosionDebris/package.dist.json +++ b/palettes/impact/explosionDebris/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-explosion-debris", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles explosion - debris palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.explosion-debris.min.js", - "unpkg": "tsparticles.palette.explosion-debris.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/impact/explosionDebris/package.json b/palettes/impact/explosionDebris/package.json index 39805e586ec..5b0e8138b1c 100644 --- a/palettes/impact/explosionDebris/package.json +++ b/palettes/impact/explosionDebris/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-explosion-debris", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles explosion - debris palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/impact/explosionDebris/rollup.config.js b/palettes/impact/explosionDebris/rollup.config.js new file mode 100644 index 00000000000..dfa773dabc8 --- /dev/null +++ b/palettes/impact/explosionDebris/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-explosionDebris", + paletteName: "ExplosionDebris Palette", + version, +}); diff --git a/palettes/impact/explosionDebris/src/browser.ts b/palettes/impact/explosionDebris/src/browser.ts new file mode 100644 index 00000000000..96584f0a579 --- /dev/null +++ b/palettes/impact/explosionDebris/src/browser.ts @@ -0,0 +1,10 @@ +import { loadExplosionDebrisPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadExplosionDebrisPalette?: typeof loadExplosionDebrisPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadExplosionDebrisPalette = loadExplosionDebrisPalette; + +export * from "./index.js"; diff --git a/palettes/impact/explosionDebris/src/index.lazy.ts b/palettes/impact/explosionDebris/src/index.lazy.ts new file mode 100644 index 00000000000..2df205f905a --- /dev/null +++ b/palettes/impact/explosionDebris/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "explosion-debris"; + +/** + * @param engine - + */ +export async function loadExplosionDebrisPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/impact/explosionDebris/src/index.ts b/palettes/impact/explosionDebris/src/index.ts index bbba22ea84c..51273f9136b 100644 --- a/palettes/impact/explosionDebris/src/index.ts +++ b/palettes/impact/explosionDebris/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "explosion-debris"; @@ -6,9 +7,7 @@ const paletteName = "explosion-debris"; * @param engine - */ export async function loadExplosionDebrisPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/impact/explosionDebris/typedoc.json b/palettes/impact/explosionDebris/typedoc.json index a3b20ddb838..ee9a16c6782 100644 --- a/palettes/impact/explosionDebris/typedoc.json +++ b/palettes/impact/explosionDebris/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Explosion Debris Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles ExplosionDebris Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/impact/explosionDebris/webpack.config.js b/palettes/impact/explosionDebris/webpack.config.js deleted file mode 100644 index fe78446e332..00000000000 --- a/palettes/impact/explosionDebris/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-explosion-debris", - paletteName: "Explosion Debris Palette", - version, -}); diff --git a/palettes/impact/glassBurst/CHANGELOG.md b/palettes/impact/glassBurst/CHANGELOG.md index ee247d8585e..6b575fbd158 100644 --- a/palettes/impact/glassBurst/CHANGELOG.md +++ b/palettes/impact/glassBurst/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-glass-burst + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-glass-burst diff --git a/palettes/impact/glassBurst/README.md b/palettes/impact/glassBurst/README.md index 20c27523f37..f9a00a566ed 100644 --- a/palettes/impact/glassBurst/README.md +++ b/palettes/impact/glassBurst/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Glass Burst Palette +# tsParticles GlassBurst Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-glass-burst/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-glass-burst) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-glass-burst.svg)](https://www.npmjs.com/package/@tsparticles/palette-glass-burst) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-glass-burst)](https://www.npmjs.com/package/@tsparticles/palette-glass-burst) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-glassBurst/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-glassBurst) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-glassBurst.svg)](https://www.npmjs.com/package/@tsparticles/palette-glassBurst) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-glassBurst) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for glass burst impact. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/impact/glassBurst/images/sample.png)](https://particles.js.org/samples/palettes/glass-burst) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/impact/glassBurst/images/sample.png)](https://particles.js.org/samples/palettes/glassBurst) ## Colors @@ -79,7 +79,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -101,7 +101,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "glass-burst", + palette: "glassBurst", }; await engine.load({ diff --git a/palettes/impact/glassBurst/images/sample.png b/palettes/impact/glassBurst/images/sample.png index dd26978bd75..045f2e1df53 100644 Binary files a/palettes/impact/glassBurst/images/sample.png and b/palettes/impact/glassBurst/images/sample.png differ diff --git a/palettes/impact/glassBurst/package.dist.json b/palettes/impact/glassBurst/package.dist.json index 116d0c2a8f1..796d087dbe8 100644 --- a/palettes/impact/glassBurst/package.dist.json +++ b/palettes/impact/glassBurst/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-glass-burst", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles glass burst impact palette", "homepage": "https://particles.js.org", "repository": { @@ -95,14 +95,22 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "type": "module", - "jsdelivr": "tsparticles.palette-glass-burst.min.js", - "unpkg": "tsparticles.palette-glass-burst.min.js", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" } diff --git a/palettes/impact/glassBurst/package.json b/palettes/impact/glassBurst/package.json index e702212a38c..51d11a9f227 100644 --- a/palettes/impact/glassBurst/package.json +++ b/palettes/impact/glassBurst/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-glass-burst", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles glass burst impact palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/impact/glassBurst/rollup.config.js b/palettes/impact/glassBurst/rollup.config.js new file mode 100644 index 00000000000..2a65c58c578 --- /dev/null +++ b/palettes/impact/glassBurst/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-glassBurst", + paletteName: "GlassBurst Palette", + version, +}); diff --git a/palettes/impact/glassBurst/src/browser.ts b/palettes/impact/glassBurst/src/browser.ts new file mode 100644 index 00000000000..1070fa92c35 --- /dev/null +++ b/palettes/impact/glassBurst/src/browser.ts @@ -0,0 +1,10 @@ +import { loadGlassBurstPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadGlassBurstPalette?: typeof loadGlassBurstPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadGlassBurstPalette = loadGlassBurstPalette; + +export * from "./index.js"; diff --git a/palettes/impact/glassBurst/src/index.lazy.ts b/palettes/impact/glassBurst/src/index.lazy.ts new file mode 100644 index 00000000000..1c934d2888f --- /dev/null +++ b/palettes/impact/glassBurst/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "glass-burst"; + +/** + * @param engine - + */ +export async function loadGlassBurstPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/impact/glassBurst/src/index.ts b/palettes/impact/glassBurst/src/index.ts index 868589cfcd8..ec988e86ef9 100644 --- a/palettes/impact/glassBurst/src/index.ts +++ b/palettes/impact/glassBurst/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "glass-burst"; @@ -6,9 +7,7 @@ const paletteName = "glass-burst"; * @param engine - */ export async function loadGlassBurstPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/impact/glassBurst/typedoc.json b/palettes/impact/glassBurst/typedoc.json index e0363037fb7..09028909cde 100644 --- a/palettes/impact/glassBurst/typedoc.json +++ b/palettes/impact/glassBurst/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Glass Burst Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles GlassBurst Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/impact/glassBurst/webpack.config.js b/palettes/impact/glassBurst/webpack.config.js deleted file mode 100644 index 500ba9bcc3a..00000000000 --- a/palettes/impact/glassBurst/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-glass-burst", - paletteName: "Glass Burst Palette", - version, -}); diff --git a/palettes/impact/meteorImpact/CHANGELOG.md b/palettes/impact/meteorImpact/CHANGELOG.md index 568616be35b..7f2403698c9 100644 --- a/palettes/impact/meteorImpact/CHANGELOG.md +++ b/palettes/impact/meteorImpact/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-meteor-impact + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-meteor-impact diff --git a/palettes/impact/meteorImpact/README.md b/palettes/impact/meteorImpact/README.md index 22c036e060e..5f9139a184f 100644 --- a/palettes/impact/meteorImpact/README.md +++ b/palettes/impact/meteorImpact/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Meteor Impact Palette +# tsParticles MeteorImpact Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-meteor-impact/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-meteor-impact) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-meteor-impact.svg)](https://www.npmjs.com/package/@tsparticles/palette-meteor-impact) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-meteor-impact)](https://www.npmjs.com/package/@tsparticles/palette-meteor-impact) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-meteorImpact/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-meteorImpact) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-meteorImpact.svg)](https://www.npmjs.com/package/@tsparticles/palette-meteorImpact) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-meteorImpact) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for meteor impact. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/impact/meteorImpact/images/sample.png)](https://particles.js.org/samples/palettes/meteor-impact) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/impact/meteorImpact/images/sample.png)](https://particles.js.org/samples/palettes/meteorImpact) ## Colors @@ -79,7 +79,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -101,7 +101,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "meteor-impact", + palette: "meteorImpact", }; await engine.load({ diff --git a/palettes/impact/meteorImpact/images/sample.png b/palettes/impact/meteorImpact/images/sample.png index 40ab1f2702b..04d18e105ed 100644 Binary files a/palettes/impact/meteorImpact/images/sample.png and b/palettes/impact/meteorImpact/images/sample.png differ diff --git a/palettes/impact/meteorImpact/package.dist.json b/palettes/impact/meteorImpact/package.dist.json index 7daf0a8f3d3..827b28aec65 100644 --- a/palettes/impact/meteorImpact/package.dist.json +++ b/palettes/impact/meteorImpact/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-meteor-impact", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles meteor impact palette", "homepage": "https://particles.js.org", "repository": { @@ -95,14 +95,22 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "type": "module", - "jsdelivr": "tsparticles.palette-meteor-impact.min.js", - "unpkg": "tsparticles.palette-meteor-impact.min.js", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" } diff --git a/palettes/impact/meteorImpact/package.json b/palettes/impact/meteorImpact/package.json index eba89da9aaf..876dc5d5de6 100644 --- a/palettes/impact/meteorImpact/package.json +++ b/palettes/impact/meteorImpact/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-meteor-impact", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles meteor impact palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/impact/meteorImpact/rollup.config.js b/palettes/impact/meteorImpact/rollup.config.js new file mode 100644 index 00000000000..f9648218b0e --- /dev/null +++ b/palettes/impact/meteorImpact/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-meteorImpact", + paletteName: "MeteorImpact Palette", + version, +}); diff --git a/palettes/impact/meteorImpact/src/browser.ts b/palettes/impact/meteorImpact/src/browser.ts new file mode 100644 index 00000000000..a425ff84065 --- /dev/null +++ b/palettes/impact/meteorImpact/src/browser.ts @@ -0,0 +1,10 @@ +import { loadMeteorImpactPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadMeteorImpactPalette?: typeof loadMeteorImpactPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadMeteorImpactPalette = loadMeteorImpactPalette; + +export * from "./index.js"; diff --git a/palettes/impact/meteorImpact/src/index.lazy.ts b/palettes/impact/meteorImpact/src/index.lazy.ts new file mode 100644 index 00000000000..f7b5544114d --- /dev/null +++ b/palettes/impact/meteorImpact/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "meteor-impact"; + +/** + * @param engine - + */ +export async function loadMeteorImpactPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/impact/meteorImpact/src/index.ts b/palettes/impact/meteorImpact/src/index.ts index c305bba42fa..ba0f279e695 100644 --- a/palettes/impact/meteorImpact/src/index.ts +++ b/palettes/impact/meteorImpact/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "meteor-impact"; @@ -6,9 +7,7 @@ const paletteName = "meteor-impact"; * @param engine - */ export async function loadMeteorImpactPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/impact/meteorImpact/typedoc.json b/palettes/impact/meteorImpact/typedoc.json index 799d332380c..53190e957fe 100644 --- a/palettes/impact/meteorImpact/typedoc.json +++ b/palettes/impact/meteorImpact/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Meteor Impact Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles MeteorImpact Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/impact/meteorImpact/webpack.config.js b/palettes/impact/meteorImpact/webpack.config.js deleted file mode 100644 index a3b6a25820b..00000000000 --- a/palettes/impact/meteorImpact/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-meteor-impact", - paletteName: "Meteor Impact Palette", - version, -}); diff --git a/palettes/impact/nuclearGlow/CHANGELOG.md b/palettes/impact/nuclearGlow/CHANGELOG.md index ec75109585a..7d2f441abe9 100644 --- a/palettes/impact/nuclearGlow/CHANGELOG.md +++ b/palettes/impact/nuclearGlow/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-nuclear-glow + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-nuclear-glow diff --git a/palettes/impact/nuclearGlow/README.md b/palettes/impact/nuclearGlow/README.md index 8e9d0d84c5e..29ac910d6b7 100644 --- a/palettes/impact/nuclearGlow/README.md +++ b/palettes/impact/nuclearGlow/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Nuclear Glow Palette +# tsParticles NuclearGlow Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-nuclear-glow/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-nuclear-glow) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-nuclear-glow.svg)](https://www.npmjs.com/package/@tsparticles/palette-nuclear-glow) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-nuclear-glow)](https://www.npmjs.com/package/@tsparticles/palette-nuclear-glow) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-nuclearGlow/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-nuclearGlow) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-nuclearGlow.svg)](https://www.npmjs.com/package/@tsparticles/palette-nuclearGlow) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-nuclearGlow) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for nuclear glow impact. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/impact/nuclearGlow/images/sample.png)](https://particles.js.org/samples/palettes/nuclear-glow) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/impact/nuclearGlow/images/sample.png)](https://particles.js.org/samples/palettes/nuclearGlow) ## Colors @@ -79,7 +79,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -101,7 +101,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "nuclear-glow", + palette: "nuclearGlow", }; await engine.load({ diff --git a/palettes/impact/nuclearGlow/images/sample.png b/palettes/impact/nuclearGlow/images/sample.png index 96f3dc841d5..eb2519c14a8 100644 Binary files a/palettes/impact/nuclearGlow/images/sample.png and b/palettes/impact/nuclearGlow/images/sample.png differ diff --git a/palettes/impact/nuclearGlow/package.dist.json b/palettes/impact/nuclearGlow/package.dist.json index 30276af0b99..38ef233234f 100644 --- a/palettes/impact/nuclearGlow/package.dist.json +++ b/palettes/impact/nuclearGlow/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-nuclear-glow", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles nuclear glow impact palette", "homepage": "https://particles.js.org", "repository": { @@ -95,14 +95,22 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "type": "module", - "jsdelivr": "tsparticles.palette-nuclear-glow.min.js", - "unpkg": "tsparticles.palette-nuclear-glow.min.js", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" } diff --git a/palettes/impact/nuclearGlow/package.json b/palettes/impact/nuclearGlow/package.json index c1150b2458e..6b9708ca260 100644 --- a/palettes/impact/nuclearGlow/package.json +++ b/palettes/impact/nuclearGlow/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-nuclear-glow", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles nuclear glow impact palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/impact/nuclearGlow/rollup.config.js b/palettes/impact/nuclearGlow/rollup.config.js new file mode 100644 index 00000000000..dce3415d080 --- /dev/null +++ b/palettes/impact/nuclearGlow/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-nuclearGlow", + paletteName: "NuclearGlow Palette", + version, +}); diff --git a/palettes/impact/nuclearGlow/src/browser.ts b/palettes/impact/nuclearGlow/src/browser.ts new file mode 100644 index 00000000000..ec3eb9ce8d6 --- /dev/null +++ b/palettes/impact/nuclearGlow/src/browser.ts @@ -0,0 +1,10 @@ +import { loadNuclearGlowPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadNuclearGlowPalette?: typeof loadNuclearGlowPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadNuclearGlowPalette = loadNuclearGlowPalette; + +export * from "./index.js"; diff --git a/palettes/impact/nuclearGlow/src/index.lazy.ts b/palettes/impact/nuclearGlow/src/index.lazy.ts new file mode 100644 index 00000000000..52c2b81551f --- /dev/null +++ b/palettes/impact/nuclearGlow/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "nuclear-glow"; + +/** + * @param engine - + */ +export async function loadNuclearGlowPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/impact/nuclearGlow/src/index.ts b/palettes/impact/nuclearGlow/src/index.ts index 03a09456237..b688294cc1e 100644 --- a/palettes/impact/nuclearGlow/src/index.ts +++ b/palettes/impact/nuclearGlow/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "nuclear-glow"; @@ -6,9 +7,7 @@ const paletteName = "nuclear-glow"; * @param engine - */ export async function loadNuclearGlowPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/impact/nuclearGlow/typedoc.json b/palettes/impact/nuclearGlow/typedoc.json index d3d480c809f..5fb31599b07 100644 --- a/palettes/impact/nuclearGlow/typedoc.json +++ b/palettes/impact/nuclearGlow/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Nuclear Glow Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles NuclearGlow Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/impact/nuclearGlow/webpack.config.js b/palettes/impact/nuclearGlow/webpack.config.js deleted file mode 100644 index a8a7e2943b1..00000000000 --- a/palettes/impact/nuclearGlow/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-nuclear-glow", - paletteName: "Nuclear Glow Palette", - version, -}); diff --git a/palettes/impact/shockwaveBlast/CHANGELOG.md b/palettes/impact/shockwaveBlast/CHANGELOG.md index 6a793d3c156..88c18a09e76 100644 --- a/palettes/impact/shockwaveBlast/CHANGELOG.md +++ b/palettes/impact/shockwaveBlast/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-shockwave-blast + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-shockwave-blast diff --git a/palettes/impact/shockwaveBlast/README.md b/palettes/impact/shockwaveBlast/README.md index a120d9afcf9..663fc11d4bf 100644 --- a/palettes/impact/shockwaveBlast/README.md +++ b/palettes/impact/shockwaveBlast/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Shockwave Blast Palette +# tsParticles ShockwaveBlast Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-shockwave-blast/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-shockwave-blast) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-shockwave-blast.svg)](https://www.npmjs.com/package/@tsparticles/palette-shockwave-blast) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-shockwave-blast)](https://www.npmjs.com/package/@tsparticles/palette-shockwave-blast) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-shockwaveBlast/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-shockwaveBlast) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-shockwaveBlast.svg)](https://www.npmjs.com/package/@tsparticles/palette-shockwaveBlast) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-shockwaveBlast) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for shockwave blast impact. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/impact/shockwaveBlast/images/sample.png)](https://particles.js.org/samples/palettes/shockwave-blast) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/impact/shockwaveBlast/images/sample.png)](https://particles.js.org/samples/palettes/shockwaveBlast) ## Colors @@ -79,7 +79,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -101,7 +101,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "shockwave-blast", + palette: "shockwaveBlast", }; await engine.load({ diff --git a/palettes/impact/shockwaveBlast/images/sample.png b/palettes/impact/shockwaveBlast/images/sample.png index 240fe245072..494338e754d 100644 Binary files a/palettes/impact/shockwaveBlast/images/sample.png and b/palettes/impact/shockwaveBlast/images/sample.png differ diff --git a/palettes/impact/shockwaveBlast/package.dist.json b/palettes/impact/shockwaveBlast/package.dist.json index 97b1b714ca4..1236e50f1e2 100644 --- a/palettes/impact/shockwaveBlast/package.dist.json +++ b/palettes/impact/shockwaveBlast/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-shockwave-blast", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles shockwave blast impact palette", "homepage": "https://particles.js.org", "repository": { @@ -95,14 +95,22 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "type": "module", - "jsdelivr": "tsparticles.palette-shockwave-blast.min.js", - "unpkg": "tsparticles.palette-shockwave-blast.min.js", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" } diff --git a/palettes/impact/shockwaveBlast/package.json b/palettes/impact/shockwaveBlast/package.json index 87b23fd0217..db494ecb65d 100644 --- a/palettes/impact/shockwaveBlast/package.json +++ b/palettes/impact/shockwaveBlast/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-shockwave-blast", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles shockwave blast impact palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/impact/shockwaveBlast/rollup.config.js b/palettes/impact/shockwaveBlast/rollup.config.js new file mode 100644 index 00000000000..e6bc2547af3 --- /dev/null +++ b/palettes/impact/shockwaveBlast/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-shockwaveBlast", + paletteName: "ShockwaveBlast Palette", + version, +}); diff --git a/palettes/impact/shockwaveBlast/src/browser.ts b/palettes/impact/shockwaveBlast/src/browser.ts new file mode 100644 index 00000000000..bfbc7cf7c24 --- /dev/null +++ b/palettes/impact/shockwaveBlast/src/browser.ts @@ -0,0 +1,10 @@ +import { loadShockwaveBlastPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadShockwaveBlastPalette?: typeof loadShockwaveBlastPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadShockwaveBlastPalette = loadShockwaveBlastPalette; + +export * from "./index.js"; diff --git a/palettes/impact/shockwaveBlast/src/index.lazy.ts b/palettes/impact/shockwaveBlast/src/index.lazy.ts new file mode 100644 index 00000000000..e71477eeaf5 --- /dev/null +++ b/palettes/impact/shockwaveBlast/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "shockwave-blast"; + +/** + * @param engine - + */ +export async function loadShockwaveBlastPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/impact/shockwaveBlast/src/index.ts b/palettes/impact/shockwaveBlast/src/index.ts index 17cb0b40b89..0bb70cc8826 100644 --- a/palettes/impact/shockwaveBlast/src/index.ts +++ b/palettes/impact/shockwaveBlast/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "shockwave-blast"; @@ -6,9 +7,7 @@ const paletteName = "shockwave-blast"; * @param engine - */ export async function loadShockwaveBlastPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/impact/shockwaveBlast/typedoc.json b/palettes/impact/shockwaveBlast/typedoc.json index 9f39746e136..1021c972f5a 100644 --- a/palettes/impact/shockwaveBlast/typedoc.json +++ b/palettes/impact/shockwaveBlast/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Shockwave Blast Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles ShockwaveBlast Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/impact/shockwaveBlast/webpack.config.js b/palettes/impact/shockwaveBlast/webpack.config.js deleted file mode 100644 index d9055096588..00000000000 --- a/palettes/impact/shockwaveBlast/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-shockwave-blast", - paletteName: "Shockwave Blast Palette", - version, -}); diff --git a/palettes/impact/splatterDark/CHANGELOG.md b/palettes/impact/splatterDark/CHANGELOG.md index a25c09651ac..f7be6dfca3f 100644 --- a/palettes/impact/splatterDark/CHANGELOG.md +++ b/palettes/impact/splatterDark/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-splatter-dark + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-splatter-dark diff --git a/palettes/impact/splatterDark/README.md b/palettes/impact/splatterDark/README.md index d9abb8de07e..de46b4ccee3 100644 --- a/palettes/impact/splatterDark/README.md +++ b/palettes/impact/splatterDark/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Dark Splatter Palette +# tsParticles SplatterDark Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-splatter-dark/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-splatter-dark) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-splatter-dark.svg)](https://www.npmjs.com/package/@tsparticles/palette-splatter-dark) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-splatter-dark)](https://www.npmjs.com/package/@tsparticles/palette-splatter-dark) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-splatterDark/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-splatterDark) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-splatterDark.svg)](https://www.npmjs.com/package/@tsparticles/palette-splatterDark) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-splatterDark) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for dark splatter impact. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/impact/splatterDark/images/sample.png)](https://particles.js.org/samples/palettes/splatter-dark) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/impact/splatterDark/images/sample.png)](https://particles.js.org/samples/palettes/splatterDark) ## Colors @@ -79,7 +79,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -101,7 +101,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "splatter-dark", + palette: "splatterDark", }; await engine.load({ diff --git a/palettes/impact/splatterDark/images/sample.png b/palettes/impact/splatterDark/images/sample.png index aa0151309ee..951cb624b21 100644 Binary files a/palettes/impact/splatterDark/images/sample.png and b/palettes/impact/splatterDark/images/sample.png differ diff --git a/palettes/impact/splatterDark/package.dist.json b/palettes/impact/splatterDark/package.dist.json index 33f23071425..f5bab90ef01 100644 --- a/palettes/impact/splatterDark/package.dist.json +++ b/palettes/impact/splatterDark/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-splatter-dark", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles dark splatter impact palette", "homepage": "https://particles.js.org", "repository": { @@ -95,14 +95,22 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "type": "module", - "jsdelivr": "tsparticles.palette-splatter-dark.min.js", - "unpkg": "tsparticles.palette-splatter-dark.min.js", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" } diff --git a/palettes/impact/splatterDark/package.json b/palettes/impact/splatterDark/package.json index dadad1e8708..c23c04b7315 100644 --- a/palettes/impact/splatterDark/package.json +++ b/palettes/impact/splatterDark/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-splatter-dark", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles dark splatter impact palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/impact/splatterDark/rollup.config.js b/palettes/impact/splatterDark/rollup.config.js new file mode 100644 index 00000000000..32f1641a379 --- /dev/null +++ b/palettes/impact/splatterDark/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-splatterDark", + paletteName: "SplatterDark Palette", + version, +}); diff --git a/palettes/impact/splatterDark/src/browser.ts b/palettes/impact/splatterDark/src/browser.ts new file mode 100644 index 00000000000..f2a02363cb9 --- /dev/null +++ b/palettes/impact/splatterDark/src/browser.ts @@ -0,0 +1,10 @@ +import { loadSplatterDarkPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadSplatterDarkPalette?: typeof loadSplatterDarkPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadSplatterDarkPalette = loadSplatterDarkPalette; + +export * from "./index.js"; diff --git a/palettes/impact/splatterDark/src/index.lazy.ts b/palettes/impact/splatterDark/src/index.lazy.ts new file mode 100644 index 00000000000..e3947d2d51f --- /dev/null +++ b/palettes/impact/splatterDark/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "splatter-dark"; + +/** + * @param engine - + */ +export async function loadSplatterDarkPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/impact/splatterDark/src/index.ts b/palettes/impact/splatterDark/src/index.ts index c1e26b00c05..40436e727f2 100644 --- a/palettes/impact/splatterDark/src/index.ts +++ b/palettes/impact/splatterDark/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "splatter-dark"; @@ -6,9 +7,7 @@ const paletteName = "splatter-dark"; * @param engine - */ export async function loadSplatterDarkPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/impact/splatterDark/typedoc.json b/palettes/impact/splatterDark/typedoc.json index 433eea8bd1d..929e86fa745 100644 --- a/palettes/impact/splatterDark/typedoc.json +++ b/palettes/impact/splatterDark/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Dark Splatter Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles SplatterDark Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/impact/splatterDark/webpack.config.js b/palettes/impact/splatterDark/webpack.config.js deleted file mode 100644 index 8b828cc8d86..00000000000 --- a/palettes/impact/splatterDark/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-splatter-dark", - paletteName: "Dark Splatter Palette", - version, -}); diff --git a/palettes/monochromatic/monochromeOranges/.browserslistrc b/palettes/monochromatic/blues/.browserslistrc similarity index 100% rename from palettes/monochromatic/monochromeOranges/.browserslistrc rename to palettes/monochromatic/blues/.browserslistrc diff --git a/palettes/monochromatic/blues/CHANGELOG.md b/palettes/monochromatic/blues/CHANGELOG.md new file mode 100644 index 00000000000..8ea1f31adfc --- /dev/null +++ b/palettes/monochromatic/blues/CHANGELOG.md @@ -0,0 +1,16 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-monochrome-blues + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-monochrome-blues + +# 4.0.0-beta.0 (2026-04-08) + +**Note:** Version bump only for package @tsparticles/palette-monochrome-blues diff --git a/palettes/monochromatic/blues/LICENSE b/palettes/monochromatic/blues/LICENSE new file mode 100644 index 00000000000..bdc05f528fa --- /dev/null +++ b/palettes/monochromatic/blues/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/palettes/monochromatic/blues/README.md b/palettes/monochromatic/blues/README.md new file mode 100644 index 00000000000..30c54eb67d4 --- /dev/null +++ b/palettes/monochromatic/blues/README.md @@ -0,0 +1,203 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Blues Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-blues/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-blues) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-blues.svg)](https://www.npmjs.com/package/@tsparticles/palette-blues) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-blues) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/monochromatic/blues/images/sample.png)](https://particles.js.org/samples/palettes/blues) + +## Colors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ #1A1000 +
+
+ #3A2200 +
+
+ #6B3D00 +
+
+ #A65A00 +
+
+ #D98A1A +
+
+ #FFC266 +
+
+ #090500 +
+
+ #000B1E +
+
+ #001F3F +
+
+ #003B73 +
+
+ #0064B4 +
+
+ #1A8FE3 +
+
+ #5BB8FF +
+
+ #A8D8FF +
+
+ #FFA500 +
+
+ #FFEFD7 +
+
+ #000000 +
+
+ #FFFFFF +
+
+ #F5F5F5 +
+
+ #1E1E1E +
+
+ #252525 +
+
+ #E0E0E0 +
+
+ #A0A0A0 +
+
+ #404040 +
+
+ #1D3557 +
+
+ Background
+ #1A1000 +
+ Blend mode: source-over | Fill: true +
+## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadBluesPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadBluesPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "blues", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadBluesPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/monochromatic/monochromeBlues/eslint.config.js b/palettes/monochromatic/blues/eslint.config.js similarity index 100% rename from palettes/monochromatic/monochromeBlues/eslint.config.js rename to palettes/monochromatic/blues/eslint.config.js diff --git a/palettes/monochromatic/monochromeBlues/images/sample.png b/palettes/monochromatic/blues/images/sample.png similarity index 100% rename from palettes/monochromatic/monochromeBlues/images/sample.png rename to palettes/monochromatic/blues/images/sample.png diff --git a/palettes/monochromatic/blues/package.dist.json b/palettes/monochromatic/blues/package.dist.json new file mode 100644 index 00000000000..1bc8eb63f2f --- /dev/null +++ b/palettes/monochromatic/blues/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-monochrome-blues", + "version": "4.0.0-beta.15", + "description": "tsParticles monochrome blues palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/monochromatic/blues" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/monochromatic/blues/package.json b/palettes/monochromatic/blues/package.json new file mode 100644 index 00000000000..00d70564cf9 --- /dev/null +++ b/palettes/monochromatic/blues/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-monochrome-blues", + "version": "4.0.0-beta.15", + "description": "tsParticles monochrome blues palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/monochromatic/blues" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/monochromatic/blues/rollup.config.js b/palettes/monochromatic/blues/rollup.config.js new file mode 100644 index 00000000000..0597eecdcf4 --- /dev/null +++ b/palettes/monochromatic/blues/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-blues", + paletteName: "Blues Palette", + version, +}); diff --git a/palettes/monochromatic/blues/src/browser.ts b/palettes/monochromatic/blues/src/browser.ts new file mode 100644 index 00000000000..cec86533429 --- /dev/null +++ b/palettes/monochromatic/blues/src/browser.ts @@ -0,0 +1,10 @@ +import { loadMonochromeBluesPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadMonochromeBluesPalette?: typeof loadMonochromeBluesPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadMonochromeBluesPalette = loadMonochromeBluesPalette; + +export * from "./index.js"; diff --git a/palettes/monochromatic/blues/src/index.lazy.ts b/palettes/monochromatic/blues/src/index.lazy.ts new file mode 100644 index 00000000000..4e2d1fe92bb --- /dev/null +++ b/palettes/monochromatic/blues/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "blues"; + +/** + * @param engine - + */ +export async function loadBluesPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/monochromatic/blues/src/index.ts b/palettes/monochromatic/blues/src/index.ts new file mode 100644 index 00000000000..3eed8a9c4e5 --- /dev/null +++ b/palettes/monochromatic/blues/src/index.ts @@ -0,0 +1,11 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; +const paletteName = "monochrome-blues"; +/** + * @param engine - + */ +export async function loadMonochromeBluesPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/monochromatic/monochromeBlues/src/options.ts b/palettes/monochromatic/blues/src/options.ts similarity index 100% rename from palettes/monochromatic/monochromeBlues/src/options.ts rename to palettes/monochromatic/blues/src/options.ts diff --git a/palettes/monochromatic/blues/tsconfig.base.json b/palettes/monochromatic/blues/tsconfig.base.json new file mode 100644 index 00000000000..2b489b6aa1c --- /dev/null +++ b/palettes/monochromatic/blues/tsconfig.base.json @@ -0,0 +1,9 @@ +{ + "extends": "@tsparticles/tsconfig/dist/tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src" + }, + "include": [ + "./src" + ] +} diff --git a/palettes/monochromatic/monochromeBrown/tsconfig.browser.json b/palettes/monochromatic/blues/tsconfig.browser.json similarity index 100% rename from palettes/monochromatic/monochromeBrown/tsconfig.browser.json rename to palettes/monochromatic/blues/tsconfig.browser.json diff --git a/palettes/monochromatic/monochromeBrown/tsconfig.json b/palettes/monochromatic/blues/tsconfig.json similarity index 100% rename from palettes/monochromatic/monochromeBrown/tsconfig.json rename to palettes/monochromatic/blues/tsconfig.json diff --git a/palettes/monochromatic/monochromeBrown/tsconfig.module.json b/palettes/monochromatic/blues/tsconfig.module.json similarity index 100% rename from palettes/monochromatic/monochromeBrown/tsconfig.module.json rename to palettes/monochromatic/blues/tsconfig.module.json diff --git a/palettes/monochromatic/monochromeBrown/tsconfig.types.json b/palettes/monochromatic/blues/tsconfig.types.json similarity index 100% rename from palettes/monochromatic/monochromeBrown/tsconfig.types.json rename to palettes/monochromatic/blues/tsconfig.types.json diff --git a/palettes/monochromatic/blues/typedoc.json b/palettes/monochromatic/blues/typedoc.json new file mode 100644 index 00000000000..eeb4621911e --- /dev/null +++ b/palettes/monochromatic/blues/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Blues Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/monochromatic/monochromePinks/.browserslistrc b/palettes/monochromatic/brown/.browserslistrc similarity index 100% rename from palettes/monochromatic/monochromePinks/.browserslistrc rename to palettes/monochromatic/brown/.browserslistrc diff --git a/palettes/monochromatic/brown/CHANGELOG.md b/palettes/monochromatic/brown/CHANGELOG.md new file mode 100644 index 00000000000..d2f2cfd4ceb --- /dev/null +++ b/palettes/monochromatic/brown/CHANGELOG.md @@ -0,0 +1,22 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-monochrome-brown + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-monochrome-brown + +# 4.0.0-beta.0 (2026-04-08) + +### Features + +- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) + +# [4.0.0-alpha.5] + +**Note:** Initial version of package @tsparticles/palette-monochrome-brown diff --git a/palettes/monochromatic/brown/LICENSE b/palettes/monochromatic/brown/LICENSE new file mode 100644 index 00000000000..bdc05f528fa --- /dev/null +++ b/palettes/monochromatic/brown/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/palettes/monochromatic/brown/README.md b/palettes/monochromatic/brown/README.md new file mode 100644 index 00000000000..da09c85733a --- /dev/null +++ b/palettes/monochromatic/brown/README.md @@ -0,0 +1,122 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Brown Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-brown/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-brown) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-brown.svg)](https://www.npmjs.com/package/@tsparticles/palette-brown) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-brown) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/monochromatic/brown/images/sample.png)](https://particles.js.org/samples/palettes/brown) + +## Colors + + + + + + + + + + + + + + + + + + + + +
+
+ #F5DEB3 +
+
+ #DEB887 +
+
+ #CD853F +
+
+ #8B4513 +
+
+ #5C3317 +
+
+ #2F1B0A +
+
+ Background
+ #0a0600 +
+ Blend mode: source-over | Fill: true +
+ +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadBrownPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadBrownPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "brown", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadBrownPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/monochromatic/monochromeBrown/eslint.config.js b/palettes/monochromatic/brown/eslint.config.js similarity index 100% rename from palettes/monochromatic/monochromeBrown/eslint.config.js rename to palettes/monochromatic/brown/eslint.config.js diff --git a/palettes/monochromatic/brown/images/sample.png b/palettes/monochromatic/brown/images/sample.png new file mode 100644 index 00000000000..9d7b275dd8d Binary files /dev/null and b/palettes/monochromatic/brown/images/sample.png differ diff --git a/palettes/monochromatic/brown/package.dist.json b/palettes/monochromatic/brown/package.dist.json new file mode 100644 index 00000000000..750c09e5cff --- /dev/null +++ b/palettes/monochromatic/brown/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-monochrome-brown", + "version": "4.0.0-beta.15", + "description": "tsParticles monochrome brown palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/monochromatic/brown" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/monochromatic/brown/package.json b/palettes/monochromatic/brown/package.json new file mode 100644 index 00000000000..f8dac4e4882 --- /dev/null +++ b/palettes/monochromatic/brown/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-monochrome-brown", + "version": "4.0.0-beta.15", + "description": "tsParticles monochrome brown palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/monochromatic/brown" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/monochromatic/brown/rollup.config.js b/palettes/monochromatic/brown/rollup.config.js new file mode 100644 index 00000000000..0738659674e --- /dev/null +++ b/palettes/monochromatic/brown/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-brown", + paletteName: "Brown Palette", + version, +}); diff --git a/palettes/monochromatic/brown/src/browser.ts b/palettes/monochromatic/brown/src/browser.ts new file mode 100644 index 00000000000..3bfdb44df85 --- /dev/null +++ b/palettes/monochromatic/brown/src/browser.ts @@ -0,0 +1,10 @@ +import { loadMonochromeBrownPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadMonochromeBrownPalette?: typeof loadMonochromeBrownPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadMonochromeBrownPalette = loadMonochromeBrownPalette; + +export * from "./index.js"; diff --git a/palettes/monochromatic/brown/src/index.lazy.ts b/palettes/monochromatic/brown/src/index.lazy.ts new file mode 100644 index 00000000000..16f2bc467d9 --- /dev/null +++ b/palettes/monochromatic/brown/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "brown"; + +/** + * @param engine - + */ +export async function loadBrownPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/monochromatic/brown/src/index.ts b/palettes/monochromatic/brown/src/index.ts new file mode 100644 index 00000000000..ec8fd1ebf94 --- /dev/null +++ b/palettes/monochromatic/brown/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "monochrome-brown"; + +/** + * @param engine - + */ +export async function loadMonochromeBrownPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/monochromatic/monochromeBrown/src/options.ts b/palettes/monochromatic/brown/src/options.ts similarity index 100% rename from palettes/monochromatic/monochromeBrown/src/options.ts rename to palettes/monochromatic/brown/src/options.ts diff --git a/palettes/monochromatic/brown/tsconfig.base.json b/palettes/monochromatic/brown/tsconfig.base.json new file mode 100644 index 00000000000..2b489b6aa1c --- /dev/null +++ b/palettes/monochromatic/brown/tsconfig.base.json @@ -0,0 +1,9 @@ +{ + "extends": "@tsparticles/tsconfig/dist/tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src" + }, + "include": [ + "./src" + ] +} diff --git a/palettes/monochromatic/monochromeCyan/tsconfig.browser.json b/palettes/monochromatic/brown/tsconfig.browser.json similarity index 100% rename from palettes/monochromatic/monochromeCyan/tsconfig.browser.json rename to palettes/monochromatic/brown/tsconfig.browser.json diff --git a/palettes/monochromatic/monochromeCyan/tsconfig.json b/palettes/monochromatic/brown/tsconfig.json similarity index 100% rename from palettes/monochromatic/monochromeCyan/tsconfig.json rename to palettes/monochromatic/brown/tsconfig.json diff --git a/palettes/monochromatic/monochromeCyan/tsconfig.module.json b/palettes/monochromatic/brown/tsconfig.module.json similarity index 100% rename from palettes/monochromatic/monochromeCyan/tsconfig.module.json rename to palettes/monochromatic/brown/tsconfig.module.json diff --git a/palettes/monochromatic/monochromeCyan/tsconfig.types.json b/palettes/monochromatic/brown/tsconfig.types.json similarity index 100% rename from palettes/monochromatic/monochromeCyan/tsconfig.types.json rename to palettes/monochromatic/brown/tsconfig.types.json diff --git a/palettes/monochromatic/brown/typedoc.json b/palettes/monochromatic/brown/typedoc.json new file mode 100644 index 00000000000..fee69f25363 --- /dev/null +++ b/palettes/monochromatic/brown/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Brown Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/monochromatic/monochromePurples/.browserslistrc b/palettes/monochromatic/cyan/.browserslistrc similarity index 100% rename from palettes/monochromatic/monochromePurples/.browserslistrc rename to palettes/monochromatic/cyan/.browserslistrc diff --git a/palettes/monochromatic/cyan/CHANGELOG.md b/palettes/monochromatic/cyan/CHANGELOG.md new file mode 100644 index 00000000000..5f80cceab02 --- /dev/null +++ b/palettes/monochromatic/cyan/CHANGELOG.md @@ -0,0 +1,22 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-monochrome-cyan + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-monochrome-cyan + +# 4.0.0-beta.0 (2026-04-08) + +### Features + +- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) + +# [4.0.0-alpha.5] + +**Note:** Initial version of package @tsparticles/palette-monochrome-cyan diff --git a/palettes/monochromatic/cyan/LICENSE b/palettes/monochromatic/cyan/LICENSE new file mode 100644 index 00000000000..bdc05f528fa --- /dev/null +++ b/palettes/monochromatic/cyan/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/palettes/monochromatic/cyan/README.md b/palettes/monochromatic/cyan/README.md new file mode 100644 index 00000000000..d87f9fd9d6a --- /dev/null +++ b/palettes/monochromatic/cyan/README.md @@ -0,0 +1,122 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Cyan Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-cyan/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-cyan) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-cyan.svg)](https://www.npmjs.com/package/@tsparticles/palette-cyan) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-cyan) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/monochromatic/cyan/images/sample.png)](https://particles.js.org/samples/palettes/cyan) + +## Colors + + + + + + + + + + + + + + + + + + + + +
+
+ #DFFFFF +
+
+ #88FFFF +
+
+ #33EEEE +
+
+ #00AACC +
+
+ #006688 +
+
+ #003344 +
+
+ Background
+ #000d0d +
+ Blend mode: source-over | Fill: true +
+ +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadCyanPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadCyanPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "cyan", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadCyanPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/monochromatic/monochromeCyan/eslint.config.js b/palettes/monochromatic/cyan/eslint.config.js similarity index 100% rename from palettes/monochromatic/monochromeCyan/eslint.config.js rename to palettes/monochromatic/cyan/eslint.config.js diff --git a/palettes/monochromatic/cyan/images/sample.png b/palettes/monochromatic/cyan/images/sample.png new file mode 100644 index 00000000000..414165ade09 Binary files /dev/null and b/palettes/monochromatic/cyan/images/sample.png differ diff --git a/palettes/monochromatic/cyan/package.dist.json b/palettes/monochromatic/cyan/package.dist.json new file mode 100644 index 00000000000..37cca96cda3 --- /dev/null +++ b/palettes/monochromatic/cyan/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-monochrome-cyan", + "version": "4.0.0-beta.15", + "description": "tsParticles monochrome cyan palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/monochromatic/cyan" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/monochromatic/cyan/package.json b/palettes/monochromatic/cyan/package.json new file mode 100644 index 00000000000..8497e1c8a1a --- /dev/null +++ b/palettes/monochromatic/cyan/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-monochrome-cyan", + "version": "4.0.0-beta.15", + "description": "tsParticles monochrome cyan palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/monochromatic/cyan" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/monochromatic/cyan/rollup.config.js b/palettes/monochromatic/cyan/rollup.config.js new file mode 100644 index 00000000000..172423928d2 --- /dev/null +++ b/palettes/monochromatic/cyan/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-cyan", + paletteName: "Cyan Palette", + version, +}); diff --git a/palettes/monochromatic/cyan/src/browser.ts b/palettes/monochromatic/cyan/src/browser.ts new file mode 100644 index 00000000000..c9b3f4e0a5e --- /dev/null +++ b/palettes/monochromatic/cyan/src/browser.ts @@ -0,0 +1,10 @@ +import { loadMonochromeCyanPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadMonochromeCyanPalette?: typeof loadMonochromeCyanPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadMonochromeCyanPalette = loadMonochromeCyanPalette; + +export * from "./index.js"; diff --git a/palettes/monochromatic/cyan/src/index.lazy.ts b/palettes/monochromatic/cyan/src/index.lazy.ts new file mode 100644 index 00000000000..e10f9e954d9 --- /dev/null +++ b/palettes/monochromatic/cyan/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "cyan"; + +/** + * @param engine - + */ +export async function loadCyanPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/monochromatic/cyan/src/index.ts b/palettes/monochromatic/cyan/src/index.ts new file mode 100644 index 00000000000..fc220cf3680 --- /dev/null +++ b/palettes/monochromatic/cyan/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "monochrome-cyan"; + +/** + * @param engine - + */ +export async function loadMonochromeCyanPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/monochromatic/monochromeCyan/src/options.ts b/palettes/monochromatic/cyan/src/options.ts similarity index 100% rename from palettes/monochromatic/monochromeCyan/src/options.ts rename to palettes/monochromatic/cyan/src/options.ts diff --git a/palettes/monochromatic/cyan/tsconfig.base.json b/palettes/monochromatic/cyan/tsconfig.base.json new file mode 100644 index 00000000000..2b489b6aa1c --- /dev/null +++ b/palettes/monochromatic/cyan/tsconfig.base.json @@ -0,0 +1,9 @@ +{ + "extends": "@tsparticles/tsconfig/dist/tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src" + }, + "include": [ + "./src" + ] +} diff --git a/palettes/monochromatic/monochromeGold/tsconfig.browser.json b/palettes/monochromatic/cyan/tsconfig.browser.json similarity index 100% rename from palettes/monochromatic/monochromeGold/tsconfig.browser.json rename to palettes/monochromatic/cyan/tsconfig.browser.json diff --git a/palettes/monochromatic/monochromeGold/tsconfig.json b/palettes/monochromatic/cyan/tsconfig.json similarity index 100% rename from palettes/monochromatic/monochromeGold/tsconfig.json rename to palettes/monochromatic/cyan/tsconfig.json diff --git a/palettes/monochromatic/monochromeGold/tsconfig.module.json b/palettes/monochromatic/cyan/tsconfig.module.json similarity index 100% rename from palettes/monochromatic/monochromeGold/tsconfig.module.json rename to palettes/monochromatic/cyan/tsconfig.module.json diff --git a/palettes/monochromatic/monochromeGold/tsconfig.types.json b/palettes/monochromatic/cyan/tsconfig.types.json similarity index 100% rename from palettes/monochromatic/monochromeGold/tsconfig.types.json rename to palettes/monochromatic/cyan/tsconfig.types.json diff --git a/palettes/monochromatic/cyan/typedoc.json b/palettes/monochromatic/cyan/typedoc.json new file mode 100644 index 00000000000..4566fee8e44 --- /dev/null +++ b/palettes/monochromatic/cyan/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Cyan Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/monochromatic/monochromeReds/.browserslistrc b/palettes/monochromatic/gold/.browserslistrc similarity index 100% rename from palettes/monochromatic/monochromeReds/.browserslistrc rename to palettes/monochromatic/gold/.browserslistrc diff --git a/palettes/monochromatic/gold/CHANGELOG.md b/palettes/monochromatic/gold/CHANGELOG.md new file mode 100644 index 00000000000..2a8b1317681 --- /dev/null +++ b/palettes/monochromatic/gold/CHANGELOG.md @@ -0,0 +1,22 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-monochrome-gold + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-monochrome-gold + +# 4.0.0-beta.0 (2026-04-08) + +### Features + +- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) + +# [4.0.0-alpha.5] + +**Note:** Initial version of package @tsparticles/palette-monochrome-gold diff --git a/palettes/monochromatic/gold/LICENSE b/palettes/monochromatic/gold/LICENSE new file mode 100644 index 00000000000..bdc05f528fa --- /dev/null +++ b/palettes/monochromatic/gold/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/palettes/monochromatic/gold/README.md b/palettes/monochromatic/gold/README.md new file mode 100644 index 00000000000..bc9cb8e2ee5 --- /dev/null +++ b/palettes/monochromatic/gold/README.md @@ -0,0 +1,122 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Gold Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-gold/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-gold) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-gold.svg)](https://www.npmjs.com/package/@tsparticles/palette-gold) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-gold) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/monochromatic/gold/images/sample.png)](https://particles.js.org/samples/palettes/gold) + +## Colors + + + + + + + + + + + + + + + + + + + + +
+
+ #FFF8E1 +
+
+ #FFE082 +
+
+ #FFD54F +
+
+ #FFCA28 +
+
+ #FFB300 +
+
+ #FF8F00 +
+
+ Background
+ #0a0700 +
+ Blend mode: source-over | Fill: true +
+ +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadGoldPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadGoldPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "gold", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadGoldPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/monochromatic/monochromeGold/eslint.config.js b/palettes/monochromatic/gold/eslint.config.js similarity index 100% rename from palettes/monochromatic/monochromeGold/eslint.config.js rename to palettes/monochromatic/gold/eslint.config.js diff --git a/palettes/monochromatic/gold/images/sample.png b/palettes/monochromatic/gold/images/sample.png new file mode 100644 index 00000000000..886db81ec5c Binary files /dev/null and b/palettes/monochromatic/gold/images/sample.png differ diff --git a/palettes/monochromatic/gold/package.dist.json b/palettes/monochromatic/gold/package.dist.json new file mode 100644 index 00000000000..c49b7837532 --- /dev/null +++ b/palettes/monochromatic/gold/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-monochrome-gold", + "version": "4.0.0-beta.15", + "description": "tsParticles monochrome gold palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/monochromatic/gold" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/monochromatic/gold/package.json b/palettes/monochromatic/gold/package.json new file mode 100644 index 00000000000..a523d382cb8 --- /dev/null +++ b/palettes/monochromatic/gold/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-monochrome-gold", + "version": "4.0.0-beta.15", + "description": "tsParticles monochrome gold palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/monochromatic/gold" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/monochromatic/gold/rollup.config.js b/palettes/monochromatic/gold/rollup.config.js new file mode 100644 index 00000000000..b9badc6be85 --- /dev/null +++ b/palettes/monochromatic/gold/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-gold", + paletteName: "Gold Palette", + version, +}); diff --git a/palettes/monochromatic/gold/src/browser.ts b/palettes/monochromatic/gold/src/browser.ts new file mode 100644 index 00000000000..45466d2d4b2 --- /dev/null +++ b/palettes/monochromatic/gold/src/browser.ts @@ -0,0 +1,10 @@ +import { loadMonochromeGoldPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadMonochromeGoldPalette?: typeof loadMonochromeGoldPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadMonochromeGoldPalette = loadMonochromeGoldPalette; + +export * from "./index.js"; diff --git a/palettes/monochromatic/gold/src/index.lazy.ts b/palettes/monochromatic/gold/src/index.lazy.ts new file mode 100644 index 00000000000..04ff30871c1 --- /dev/null +++ b/palettes/monochromatic/gold/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "gold"; + +/** + * @param engine - + */ +export async function loadGoldPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/monochromatic/gold/src/index.ts b/palettes/monochromatic/gold/src/index.ts new file mode 100644 index 00000000000..a3ead09a884 --- /dev/null +++ b/palettes/monochromatic/gold/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "monochrome-gold"; + +/** + * @param engine - + */ +export async function loadMonochromeGoldPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/monochromatic/monochromeGold/src/options.ts b/palettes/monochromatic/gold/src/options.ts similarity index 100% rename from palettes/monochromatic/monochromeGold/src/options.ts rename to palettes/monochromatic/gold/src/options.ts diff --git a/palettes/monochromatic/gold/tsconfig.base.json b/palettes/monochromatic/gold/tsconfig.base.json new file mode 100644 index 00000000000..2b489b6aa1c --- /dev/null +++ b/palettes/monochromatic/gold/tsconfig.base.json @@ -0,0 +1,9 @@ +{ + "extends": "@tsparticles/tsconfig/dist/tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src" + }, + "include": [ + "./src" + ] +} diff --git a/palettes/monochromatic/monochromeGreens/tsconfig.browser.json b/palettes/monochromatic/gold/tsconfig.browser.json similarity index 100% rename from palettes/monochromatic/monochromeGreens/tsconfig.browser.json rename to palettes/monochromatic/gold/tsconfig.browser.json diff --git a/palettes/monochromatic/monochromeGreens/tsconfig.json b/palettes/monochromatic/gold/tsconfig.json similarity index 100% rename from palettes/monochromatic/monochromeGreens/tsconfig.json rename to palettes/monochromatic/gold/tsconfig.json diff --git a/palettes/monochromatic/monochromeGreens/tsconfig.module.json b/palettes/monochromatic/gold/tsconfig.module.json similarity index 100% rename from palettes/monochromatic/monochromeGreens/tsconfig.module.json rename to palettes/monochromatic/gold/tsconfig.module.json diff --git a/palettes/monochromatic/monochromeGreens/tsconfig.types.json b/palettes/monochromatic/gold/tsconfig.types.json similarity index 100% rename from palettes/monochromatic/monochromeGreens/tsconfig.types.json rename to palettes/monochromatic/gold/tsconfig.types.json diff --git a/palettes/monochromatic/gold/typedoc.json b/palettes/monochromatic/gold/typedoc.json new file mode 100644 index 00000000000..9e95e43dd88 --- /dev/null +++ b/palettes/monochromatic/gold/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Gold Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/monochromatic/monochromeTeal/.browserslistrc b/palettes/monochromatic/greens/.browserslistrc similarity index 100% rename from palettes/monochromatic/monochromeTeal/.browserslistrc rename to palettes/monochromatic/greens/.browserslistrc diff --git a/palettes/monochromatic/greens/CHANGELOG.md b/palettes/monochromatic/greens/CHANGELOG.md new file mode 100644 index 00000000000..c84d6915243 --- /dev/null +++ b/palettes/monochromatic/greens/CHANGELOG.md @@ -0,0 +1,16 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-monochrome-greens + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-monochrome-greens + +# 4.0.0-beta.0 (2026-04-08) + +**Note:** Version bump only for package @tsparticles/palette-monochrome-greens diff --git a/palettes/monochromatic/greens/LICENSE b/palettes/monochromatic/greens/LICENSE new file mode 100644 index 00000000000..bdc05f528fa --- /dev/null +++ b/palettes/monochromatic/greens/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/palettes/monochromatic/greens/README.md b/palettes/monochromatic/greens/README.md new file mode 100644 index 00000000000..0b83d36dd62 --- /dev/null +++ b/palettes/monochromatic/greens/README.md @@ -0,0 +1,203 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Greens Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-greens/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-greens) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-greens.svg)](https://www.npmjs.com/package/@tsparticles/palette-greens) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-greens) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/monochromatic/greens/images/sample.png)](https://particles.js.org/samples/palettes/greens) + +## Colors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ #1A1000 +
+
+ #3A2200 +
+
+ #6B3D00 +
+
+ #A65A00 +
+
+ #D98A1A +
+
+ #FFC266 +
+
+ #090500 +
+
+ #001400 +
+
+ #0A3A0A +
+
+ #1A6B1A +
+
+ #2EA82E +
+
+ #55CC55 +
+
+ #88E888 +
+
+ #C0F5C0 +
+
+ #FFA500 +
+
+ #FFEFD7 +
+
+ #000000 +
+
+ #FFFFFF +
+
+ #F5F5F5 +
+
+ #1E1E1E +
+
+ #252525 +
+
+ #E0E0E0 +
+
+ #A0A0A0 +
+
+ #404040 +
+
+ #1D3557 +
+
+ Background
+ #1A1000 +
+ Blend mode: source-over | Fill: true +
+## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadGreensPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadGreensPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "greens", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadGreensPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/monochromatic/monochromeGreens/eslint.config.js b/palettes/monochromatic/greens/eslint.config.js similarity index 100% rename from palettes/monochromatic/monochromeGreens/eslint.config.js rename to palettes/monochromatic/greens/eslint.config.js diff --git a/palettes/monochromatic/monochromeGreens/images/sample.png b/palettes/monochromatic/greens/images/sample.png similarity index 100% rename from palettes/monochromatic/monochromeGreens/images/sample.png rename to palettes/monochromatic/greens/images/sample.png diff --git a/palettes/monochromatic/greens/package.dist.json b/palettes/monochromatic/greens/package.dist.json new file mode 100644 index 00000000000..2f4b851c4bd --- /dev/null +++ b/palettes/monochromatic/greens/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-monochrome-greens", + "version": "4.0.0-beta.15", + "description": "tsParticles monochrome greens palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/monochromatic/greens" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/monochromatic/greens/package.json b/palettes/monochromatic/greens/package.json new file mode 100644 index 00000000000..824ceb8df94 --- /dev/null +++ b/palettes/monochromatic/greens/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-monochrome-greens", + "version": "4.0.0-beta.15", + "description": "tsParticles monochrome greens palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/monochromatic/greens" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/monochromatic/greens/rollup.config.js b/palettes/monochromatic/greens/rollup.config.js new file mode 100644 index 00000000000..a1d8469c8b9 --- /dev/null +++ b/palettes/monochromatic/greens/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-greens", + paletteName: "Greens Palette", + version, +}); diff --git a/palettes/monochromatic/greens/src/browser.ts b/palettes/monochromatic/greens/src/browser.ts new file mode 100644 index 00000000000..06ab3d22e72 --- /dev/null +++ b/palettes/monochromatic/greens/src/browser.ts @@ -0,0 +1,10 @@ +import { loadMonochromeGreensPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadMonochromeGreensPalette?: typeof loadMonochromeGreensPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadMonochromeGreensPalette = loadMonochromeGreensPalette; + +export * from "./index.js"; diff --git a/palettes/monochromatic/greens/src/index.lazy.ts b/palettes/monochromatic/greens/src/index.lazy.ts new file mode 100644 index 00000000000..98218b19bcc --- /dev/null +++ b/palettes/monochromatic/greens/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "greens"; + +/** + * @param engine - + */ +export async function loadGreensPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/monochromatic/greens/src/index.ts b/palettes/monochromatic/greens/src/index.ts new file mode 100644 index 00000000000..2e051ef0cfa --- /dev/null +++ b/palettes/monochromatic/greens/src/index.ts @@ -0,0 +1,11 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; +const paletteName = "monochrome-greens"; +/** + * @param engine - + */ +export async function loadMonochromeGreensPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/monochromatic/monochromeGreens/src/options.ts b/palettes/monochromatic/greens/src/options.ts similarity index 100% rename from palettes/monochromatic/monochromeGreens/src/options.ts rename to palettes/monochromatic/greens/src/options.ts diff --git a/palettes/monochromatic/greens/tsconfig.base.json b/palettes/monochromatic/greens/tsconfig.base.json new file mode 100644 index 00000000000..2b489b6aa1c --- /dev/null +++ b/palettes/monochromatic/greens/tsconfig.base.json @@ -0,0 +1,9 @@ +{ + "extends": "@tsparticles/tsconfig/dist/tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src" + }, + "include": [ + "./src" + ] +} diff --git a/palettes/monochromatic/monochromeNoir/tsconfig.browser.json b/palettes/monochromatic/greens/tsconfig.browser.json similarity index 100% rename from palettes/monochromatic/monochromeNoir/tsconfig.browser.json rename to palettes/monochromatic/greens/tsconfig.browser.json diff --git a/palettes/monochromatic/monochromeNoir/tsconfig.json b/palettes/monochromatic/greens/tsconfig.json similarity index 100% rename from palettes/monochromatic/monochromeNoir/tsconfig.json rename to palettes/monochromatic/greens/tsconfig.json diff --git a/palettes/monochromatic/monochromeNoir/tsconfig.module.json b/palettes/monochromatic/greens/tsconfig.module.json similarity index 100% rename from palettes/monochromatic/monochromeNoir/tsconfig.module.json rename to palettes/monochromatic/greens/tsconfig.module.json diff --git a/palettes/monochromatic/monochromeNoir/tsconfig.types.json b/palettes/monochromatic/greens/tsconfig.types.json similarity index 100% rename from palettes/monochromatic/monochromeNoir/tsconfig.types.json rename to palettes/monochromatic/greens/tsconfig.types.json diff --git a/palettes/monochromatic/greens/typedoc.json b/palettes/monochromatic/greens/typedoc.json new file mode 100644 index 00000000000..2d18f53d2ef --- /dev/null +++ b/palettes/monochromatic/greens/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Greens Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/monochromatic/monochromeBlues/CHANGELOG.md b/palettes/monochromatic/monochromeBlues/CHANGELOG.md deleted file mode 100644 index e0882cd323f..00000000000 --- a/palettes/monochromatic/monochromeBlues/CHANGELOG.md +++ /dev/null @@ -1,12 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-monochrome-blues - -# 4.0.0-beta.0 (2026-04-08) - -**Note:** Version bump only for package @tsparticles/palette-monochrome-blues diff --git a/palettes/monochromatic/monochromeBlues/README.md b/palettes/monochromatic/monochromeBlues/README.md deleted file mode 100644 index a5a446d7ddb..00000000000 --- a/palettes/monochromatic/monochromeBlues/README.md +++ /dev/null @@ -1,44 +0,0 @@ -# tsParticles Monochrome Blues Palette - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for monochrome blues. - -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadMonochromeBluesPalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## Install - -```bash -pnpm add @tsparticles/palette-monochrome-blues -``` - -## Usage - -```ts -import { loadBasic } from "@tsparticles/basic"; -import { tsParticles } from "@tsparticles/engine"; -import { loadMonochromeBluesPalette } from "@tsparticles/palette-monochrome-blues"; - -await loadBasic(tsParticles); -await loadMonochromeBluesPalette(tsParticles); - -await tsParticles.load({ - id: "tsparticles", - options: { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "monochrome-blues", - }, -}); -``` diff --git a/palettes/monochromatic/monochromeBlues/package.dist.json b/palettes/monochromatic/monochromeBlues/package.dist.json deleted file mode 100644 index 20b9cde3bad..00000000000 --- a/palettes/monochromatic/monochromeBlues/package.dist.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "name": "@tsparticles/palette-monochrome-blues", - "version": "4.0.0-beta.12", - "description": "tsParticles monochrome blues palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/monochromatic/monochromeBlues" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "jsdelivr": "tsparticles.palette-monochrome-blues.min.js", - "unpkg": "tsparticles.palette-monochrome-blues.min.js", - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "publishConfig": { - "access": "public" - }, - "type": "module" -} diff --git a/palettes/monochromatic/monochromeBlues/package.json b/palettes/monochromatic/monochromeBlues/package.json deleted file mode 100644 index c635d5f6886..00000000000 --- a/palettes/monochromatic/monochromeBlues/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-monochrome-blues", - "version": "4.0.0-beta.12", - "description": "tsParticles monochrome blues palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/monochromatic/monochromeBlues" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/monochromatic/monochromeBlues/src/index.ts b/palettes/monochromatic/monochromeBlues/src/index.ts deleted file mode 100644 index e7db7c5269e..00000000000 --- a/palettes/monochromatic/monochromeBlues/src/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; -const paletteName = "monochrome-blues"; -/** - * @param engine - - */ -export async function loadMonochromeBluesPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/monochromatic/monochromeBlues/typedoc.json b/palettes/monochromatic/monochromeBlues/typedoc.json deleted file mode 100644 index 0d27c69344c..00000000000 --- a/palettes/monochromatic/monochromeBlues/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Monochrome Blues Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/monochromatic/monochromeBlues/webpack.config.js b/palettes/monochromatic/monochromeBlues/webpack.config.js deleted file mode 100644 index 14f0fb05bb9..00000000000 --- a/palettes/monochromatic/monochromeBlues/webpack.config.js +++ /dev/null @@ -1,15 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-monochrome-blues", - paletteName: "Monochrome Blues Palette", - version, -}); diff --git a/palettes/monochromatic/monochromeBrown/CHANGELOG.md b/palettes/monochromatic/monochromeBrown/CHANGELOG.md deleted file mode 100644 index ac6f414c5c2..00000000000 --- a/palettes/monochromatic/monochromeBrown/CHANGELOG.md +++ /dev/null @@ -1,18 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-monochrome-brown - -# 4.0.0-beta.0 (2026-04-08) - -### Features - -- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) - -# [4.0.0-alpha.5] - -**Note:** Initial version of package @tsparticles/palette-monochrome-brown diff --git a/palettes/monochromatic/monochromeBrown/README.md b/palettes/monochromatic/monochromeBrown/README.md deleted file mode 100644 index c676b64db82..00000000000 --- a/palettes/monochromatic/monochromeBrown/README.md +++ /dev/null @@ -1,122 +0,0 @@ -[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) - -# tsParticles Monochrome Brown Palette - -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-monochrome-brown/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-monochrome-brown) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-monochrome-brown.svg)](https://www.npmjs.com/package/@tsparticles/palette-monochrome-brown) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-monochrome-brown)](https://www.npmjs.com/package/@tsparticles/palette-monochrome-brown) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for monochrome brown. - -[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) - -[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") - -## Sample - -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/monochromatic/monochromeBrown/images/sample.png)](https://particles.js.org/samples/palettes/monochrome-brown) - -## Colors - - - - - - - - - - - - - - - - - - - - -
-
- #F5DEB3 -
-
- #DEB887 -
-
- #CD853F -
-
- #8B4513 -
-
- #5C3317 -
-
- #2F1B0A -
-
- Background
- #0a0600 -
- Blend mode: source-over | Fill: true -
- -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadMonochromeBrownPalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## How to use it - -### CDN / Vanilla JS / jQuery - -```html - - -``` - -### Usage - -Once the scripts are loaded you can set up `tsParticles` like this: - -```javascript -(async engine => { - await loadBasic(engine); - await loadMonochromeBrownPalette(engine); - - const options = { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "monochrome-brown", - }; - - await engine.load({ - id: "tsparticles", - options, - }); -})(tsParticles); -``` - -#### Customization - -**Important ⚠️** -You can override all the options defining the properties like in any standard `tsParticles` installation. - -### Frameworks with a tsParticles component library - -Checkout the documentation in the component library repository and call the `loadMonochromeBrownPalette` function. - -## Related docs - -- Presets and palettes catalog: -- Main docs: diff --git a/palettes/monochromatic/monochromeBrown/images/sample.png b/palettes/monochromatic/monochromeBrown/images/sample.png deleted file mode 100644 index e61fc717fde..00000000000 Binary files a/palettes/monochromatic/monochromeBrown/images/sample.png and /dev/null differ diff --git a/palettes/monochromatic/monochromeBrown/package.dist.json b/palettes/monochromatic/monochromeBrown/package.dist.json deleted file mode 100644 index 262246c2b58..00000000000 --- a/palettes/monochromatic/monochromeBrown/package.dist.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "name": "@tsparticles/palette-monochrome-brown", - "version": "4.0.0-beta.12", - "description": "tsParticles monochrome brown palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/monochromatic/monochromeBrown" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "type": "module", - "jsdelivr": "tsparticles.palette-monochrome-brown.min.js", - "unpkg": "tsparticles.palette-monochrome-brown.min.js", - "publishConfig": { - "access": "public" - } -} diff --git a/palettes/monochromatic/monochromeBrown/package.json b/palettes/monochromatic/monochromeBrown/package.json deleted file mode 100644 index 01eb57115eb..00000000000 --- a/palettes/monochromatic/monochromeBrown/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-monochrome-brown", - "version": "4.0.0-beta.12", - "description": "tsParticles monochrome brown palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/monochromatic/monochromeBrown" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/monochromatic/monochromeBrown/src/index.ts b/palettes/monochromatic/monochromeBrown/src/index.ts deleted file mode 100644 index d60785435ec..00000000000 --- a/palettes/monochromatic/monochromeBrown/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; - -const paletteName = "monochrome-brown"; - -/** - * @param engine - - */ -export async function loadMonochromeBrownPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/monochromatic/monochromeBrown/typedoc.json b/palettes/monochromatic/monochromeBrown/typedoc.json deleted file mode 100644 index 37493525b78..00000000000 --- a/palettes/monochromatic/monochromeBrown/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Monochrome Brown Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/monochromatic/monochromeBrown/webpack.config.js b/palettes/monochromatic/monochromeBrown/webpack.config.js deleted file mode 100644 index e9213a67eec..00000000000 --- a/palettes/monochromatic/monochromeBrown/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-monochrome-brown", - paletteName: "Monochrome Brown Palette", - version, -}); diff --git a/palettes/monochromatic/monochromeCyan/CHANGELOG.md b/palettes/monochromatic/monochromeCyan/CHANGELOG.md deleted file mode 100644 index 55978cce76d..00000000000 --- a/palettes/monochromatic/monochromeCyan/CHANGELOG.md +++ /dev/null @@ -1,18 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-monochrome-cyan - -# 4.0.0-beta.0 (2026-04-08) - -### Features - -- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) - -# [4.0.0-alpha.5] - -**Note:** Initial version of package @tsparticles/palette-monochrome-cyan diff --git a/palettes/monochromatic/monochromeCyan/README.md b/palettes/monochromatic/monochromeCyan/README.md deleted file mode 100644 index 1c36ab5f7e6..00000000000 --- a/palettes/monochromatic/monochromeCyan/README.md +++ /dev/null @@ -1,122 +0,0 @@ -[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) - -# tsParticles Monochrome Cyan Palette - -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-monochrome-cyan/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-monochrome-cyan) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-monochrome-cyan.svg)](https://www.npmjs.com/package/@tsparticles/palette-monochrome-cyan) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-monochrome-cyan)](https://www.npmjs.com/package/@tsparticles/palette-monochrome-cyan) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for monochrome cyan. - -[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) - -[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") - -## Sample - -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/monochromatic/monochromeCyan/images/sample.png)](https://particles.js.org/samples/palettes/monochrome-cyan) - -## Colors - - - - - - - - - - - - - - - - - - - - -
-
- #DFFFFF -
-
- #88FFFF -
-
- #33EEEE -
-
- #00AACC -
-
- #006688 -
-
- #003344 -
-
- Background
- #000d0d -
- Blend mode: source-over | Fill: true -
- -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadMonochromeCyanPalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## How to use it - -### CDN / Vanilla JS / jQuery - -```html - - -``` - -### Usage - -Once the scripts are loaded you can set up `tsParticles` like this: - -```javascript -(async engine => { - await loadBasic(engine); - await loadMonochromeCyanPalette(engine); - - const options = { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "monochrome-cyan", - }; - - await engine.load({ - id: "tsparticles", - options, - }); -})(tsParticles); -``` - -#### Customization - -**Important ⚠️** -You can override all the options defining the properties like in any standard `tsParticles` installation. - -### Frameworks with a tsParticles component library - -Checkout the documentation in the component library repository and call the `loadMonochromeCyanPalette` function. - -## Related docs - -- Presets and palettes catalog: -- Main docs: diff --git a/palettes/monochromatic/monochromeCyan/images/sample.png b/palettes/monochromatic/monochromeCyan/images/sample.png deleted file mode 100644 index 8491bfe01f0..00000000000 Binary files a/palettes/monochromatic/monochromeCyan/images/sample.png and /dev/null differ diff --git a/palettes/monochromatic/monochromeCyan/package.dist.json b/palettes/monochromatic/monochromeCyan/package.dist.json deleted file mode 100644 index 6ea48bba2c3..00000000000 --- a/palettes/monochromatic/monochromeCyan/package.dist.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "name": "@tsparticles/palette-monochrome-cyan", - "version": "4.0.0-beta.12", - "description": "tsParticles monochrome cyan palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/monochromatic/monochromeCyan" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "type": "module", - "jsdelivr": "tsparticles.palette-monochrome-cyan.min.js", - "unpkg": "tsparticles.palette-monochrome-cyan.min.js", - "publishConfig": { - "access": "public" - } -} diff --git a/palettes/monochromatic/monochromeCyan/package.json b/palettes/monochromatic/monochromeCyan/package.json deleted file mode 100644 index 15adee98583..00000000000 --- a/palettes/monochromatic/monochromeCyan/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-monochrome-cyan", - "version": "4.0.0-beta.12", - "description": "tsParticles monochrome cyan palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/monochromatic/monochromeCyan" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/monochromatic/monochromeCyan/src/index.ts b/palettes/monochromatic/monochromeCyan/src/index.ts deleted file mode 100644 index 1bd15a0f086..00000000000 --- a/palettes/monochromatic/monochromeCyan/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; - -const paletteName = "monochrome-cyan"; - -/** - * @param engine - - */ -export async function loadMonochromeCyanPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/monochromatic/monochromeCyan/typedoc.json b/palettes/monochromatic/monochromeCyan/typedoc.json deleted file mode 100644 index 756af76136f..00000000000 --- a/palettes/monochromatic/monochromeCyan/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Monochrome Cyan Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/monochromatic/monochromeCyan/webpack.config.js b/palettes/monochromatic/monochromeCyan/webpack.config.js deleted file mode 100644 index e73f70b232d..00000000000 --- a/palettes/monochromatic/monochromeCyan/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-monochrome-cyan", - paletteName: "Monochrome Cyan Palette", - version, -}); diff --git a/palettes/monochromatic/monochromeGold/CHANGELOG.md b/palettes/monochromatic/monochromeGold/CHANGELOG.md deleted file mode 100644 index 555e98d782c..00000000000 --- a/palettes/monochromatic/monochromeGold/CHANGELOG.md +++ /dev/null @@ -1,18 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-monochrome-gold - -# 4.0.0-beta.0 (2026-04-08) - -### Features - -- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) - -# [4.0.0-alpha.5] - -**Note:** Initial version of package @tsparticles/palette-monochrome-gold diff --git a/palettes/monochromatic/monochromeGold/README.md b/palettes/monochromatic/monochromeGold/README.md deleted file mode 100644 index 1295f00a720..00000000000 --- a/palettes/monochromatic/monochromeGold/README.md +++ /dev/null @@ -1,122 +0,0 @@ -[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) - -# tsParticles Monochrome Gold Palette - -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-monochrome-gold/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-monochrome-gold) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-monochrome-gold.svg)](https://www.npmjs.com/package/@tsparticles/palette-monochrome-gold) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-monochrome-gold)](https://www.npmjs.com/package/@tsparticles/palette-monochrome-gold) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for monochrome gold. - -[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) - -[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") - -## Sample - -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/monochromatic/monochromeGold/images/sample.png)](https://particles.js.org/samples/palettes/monochrome-gold) - -## Colors - - - - - - - - - - - - - - - - - - - - -
-
- #FFF8E1 -
-
- #FFE082 -
-
- #FFD54F -
-
- #FFCA28 -
-
- #FFB300 -
-
- #FF8F00 -
-
- Background
- #0a0700 -
- Blend mode: source-over | Fill: true -
- -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadMonochromeGoldPalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## How to use it - -### CDN / Vanilla JS / jQuery - -```html - - -``` - -### Usage - -Once the scripts are loaded you can set up `tsParticles` like this: - -```javascript -(async engine => { - await loadBasic(engine); - await loadMonochromeGoldPalette(engine); - - const options = { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "monochrome-gold", - }; - - await engine.load({ - id: "tsparticles", - options, - }); -})(tsParticles); -``` - -#### Customization - -**Important ⚠️** -You can override all the options defining the properties like in any standard `tsParticles` installation. - -### Frameworks with a tsParticles component library - -Checkout the documentation in the component library repository and call the `loadMonochromeGoldPalette` function. - -## Related docs - -- Presets and palettes catalog: -- Main docs: diff --git a/palettes/monochromatic/monochromeGold/images/sample.png b/palettes/monochromatic/monochromeGold/images/sample.png deleted file mode 100644 index d8c109cd361..00000000000 Binary files a/palettes/monochromatic/monochromeGold/images/sample.png and /dev/null differ diff --git a/palettes/monochromatic/monochromeGold/package.dist.json b/palettes/monochromatic/monochromeGold/package.dist.json deleted file mode 100644 index ca0a896cf6a..00000000000 --- a/palettes/monochromatic/monochromeGold/package.dist.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "name": "@tsparticles/palette-monochrome-gold", - "version": "4.0.0-beta.12", - "description": "tsParticles monochrome gold palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/monochromatic/monochromeGold" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "type": "module", - "jsdelivr": "tsparticles.palette-monochrome-gold.min.js", - "unpkg": "tsparticles.palette-monochrome-gold.min.js", - "publishConfig": { - "access": "public" - } -} diff --git a/palettes/monochromatic/monochromeGold/package.json b/palettes/monochromatic/monochromeGold/package.json deleted file mode 100644 index e7e87617ddb..00000000000 --- a/palettes/monochromatic/monochromeGold/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-monochrome-gold", - "version": "4.0.0-beta.12", - "description": "tsParticles monochrome gold palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/monochromatic/monochromeGold" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/monochromatic/monochromeGold/src/index.ts b/palettes/monochromatic/monochromeGold/src/index.ts deleted file mode 100644 index b662259d548..00000000000 --- a/palettes/monochromatic/monochromeGold/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; - -const paletteName = "monochrome-gold"; - -/** - * @param engine - - */ -export async function loadMonochromeGoldPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/monochromatic/monochromeGold/typedoc.json b/palettes/monochromatic/monochromeGold/typedoc.json deleted file mode 100644 index 273aaa327a8..00000000000 --- a/palettes/monochromatic/monochromeGold/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Monochrome Gold Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/monochromatic/monochromeGold/webpack.config.js b/palettes/monochromatic/monochromeGold/webpack.config.js deleted file mode 100644 index 5e1dcc5cbbd..00000000000 --- a/palettes/monochromatic/monochromeGold/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-monochrome-gold", - paletteName: "Monochrome Gold Palette", - version, -}); diff --git a/palettes/monochromatic/monochromeGreens/CHANGELOG.md b/palettes/monochromatic/monochromeGreens/CHANGELOG.md deleted file mode 100644 index 5d46f73cb5e..00000000000 --- a/palettes/monochromatic/monochromeGreens/CHANGELOG.md +++ /dev/null @@ -1,12 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-monochrome-greens - -# 4.0.0-beta.0 (2026-04-08) - -**Note:** Version bump only for package @tsparticles/palette-monochrome-greens diff --git a/palettes/monochromatic/monochromeGreens/README.md b/palettes/monochromatic/monochromeGreens/README.md deleted file mode 100644 index 50d4dbabb5e..00000000000 --- a/palettes/monochromatic/monochromeGreens/README.md +++ /dev/null @@ -1,44 +0,0 @@ -# tsParticles Monochrome Greens Palette - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for monochrome greens. - -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadMonochromeGreensPalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## Install - -```bash -pnpm add @tsparticles/palette-monochrome-greens -``` - -## Usage - -```ts -import { loadBasic } from "@tsparticles/basic"; -import { tsParticles } from "@tsparticles/engine"; -import { loadMonochromeGreensPalette } from "@tsparticles/palette-monochrome-greens"; - -await loadBasic(tsParticles); -await loadMonochromeGreensPalette(tsParticles); - -await tsParticles.load({ - id: "tsparticles", - options: { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "monochrome-greens", - }, -}); -``` diff --git a/palettes/monochromatic/monochromeGreens/package.dist.json b/palettes/monochromatic/monochromeGreens/package.dist.json deleted file mode 100644 index fa85634e3e2..00000000000 --- a/palettes/monochromatic/monochromeGreens/package.dist.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "name": "@tsparticles/palette-monochrome-greens", - "version": "4.0.0-beta.12", - "description": "tsParticles monochrome greens palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/monochromatic/monochromeGreens" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "jsdelivr": "tsparticles.palette-monochrome-greens.min.js", - "unpkg": "tsparticles.palette-monochrome-greens.min.js", - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "publishConfig": { - "access": "public" - }, - "type": "module" -} diff --git a/palettes/monochromatic/monochromeGreens/package.json b/palettes/monochromatic/monochromeGreens/package.json deleted file mode 100644 index e03dff836a1..00000000000 --- a/palettes/monochromatic/monochromeGreens/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-monochrome-greens", - "version": "4.0.0-beta.12", - "description": "tsParticles monochrome greens palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/monochromatic/monochromeGreens" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/monochromatic/monochromeGreens/src/index.ts b/palettes/monochromatic/monochromeGreens/src/index.ts deleted file mode 100644 index 6937da0f025..00000000000 --- a/palettes/monochromatic/monochromeGreens/src/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; -const paletteName = "monochrome-greens"; -/** - * @param engine - - */ -export async function loadMonochromeGreensPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/monochromatic/monochromeGreens/typedoc.json b/palettes/monochromatic/monochromeGreens/typedoc.json deleted file mode 100644 index 15216823e03..00000000000 --- a/palettes/monochromatic/monochromeGreens/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Monochrome Greens Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/monochromatic/monochromeGreens/webpack.config.js b/palettes/monochromatic/monochromeGreens/webpack.config.js deleted file mode 100644 index 1d340038245..00000000000 --- a/palettes/monochromatic/monochromeGreens/webpack.config.js +++ /dev/null @@ -1,15 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-monochrome-greens", - paletteName: "Monochrome Greens Palette", - version, -}); diff --git a/palettes/monochromatic/monochromeNoir/CHANGELOG.md b/palettes/monochromatic/monochromeNoir/CHANGELOG.md deleted file mode 100644 index d0db95e27e7..00000000000 --- a/palettes/monochromatic/monochromeNoir/CHANGELOG.md +++ /dev/null @@ -1,12 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-monochrome-noir - -# 4.0.0-beta.0 (2026-04-08) - -**Note:** Version bump only for package @tsparticles/palette-monochrome-noir diff --git a/palettes/monochromatic/monochromeNoir/README.md b/palettes/monochromatic/monochromeNoir/README.md deleted file mode 100644 index 54155677bcc..00000000000 --- a/palettes/monochromatic/monochromeNoir/README.md +++ /dev/null @@ -1,158 +0,0 @@ -[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) - -# tsParticles Monochrome Noir Palette - -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-monochrome-noir/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-monochrome-noir) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-monochrome-noir.svg)](https://www.npmjs.com/package/@tsparticles/palette-monochrome-noir) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-monochrome-noir)](https://www.npmjs.com/package/@tsparticles/palette-monochrome-noir) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for monochrome noir. - -[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) - -[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") - -## Sample - -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/monochromeNoir/images/sample.png)](https://particles.js.org/samples/palettes/monochrome-noir) - -## Colors - - - - - - - - - - - - - - - - - - - - -
-
- #0B0B0C -
-
- #1C1D20 -
-
- #3A3D44 -
-
- #7A808C -
-
- #C7CCD6 -
-
- #F5F7FA -
-
- Background
- #050506 -
- Blend mode: source-over | Fill: true -
- -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadMonochromeNoirPalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## How to use it - -### CDN / Vanilla JS / jQuery - -```html - - -``` - -### Usage - -Once the scripts are loaded you can set up `tsParticles` like this: - -```javascript -(async engine => { - await loadBasic(engine); - await loadMonochromeNoirPalette(engine); - - const options = { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "monochrome-noir", - }; - - await engine.load({ - id: "tsparticles", - options, - }); -})(tsParticles); -``` - -#### Customization - -**Important ⚠️** -You can override all the options defining the properties like in any standard `tsParticles` installation. - -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "monochrome-noir", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - -### Frameworks with a tsParticles component library - -Checkout the documentation in the component library repository and call the `loadMonochromeNoirPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadMonochromeNoirPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly - -## Related docs - -- Presets and palettes catalog: -- Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -pamonochromeNoir[Monochrome Noir] -end - -e[tsParticles Engine] --> pamonochromeNoir -``` diff --git a/palettes/monochromatic/monochromeNoir/package.dist.json b/palettes/monochromatic/monochromeNoir/package.dist.json deleted file mode 100644 index 24c8d1ff7d1..00000000000 --- a/palettes/monochromatic/monochromeNoir/package.dist.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "name": "@tsparticles/palette-monochrome-noir", - "version": "4.0.0-beta.12", - "description": "tsParticles monochrome noir palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/monochromatic/monochromeNoir" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "jsdelivr": "tsparticles.palette.monochrome-noir.min.js", - "unpkg": "tsparticles.palette.monochrome-noir.min.js", - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "publishConfig": { - "access": "public" - }, - "type": "module" -} diff --git a/palettes/monochromatic/monochromeNoir/package.json b/palettes/monochromatic/monochromeNoir/package.json deleted file mode 100644 index d329b2d26bf..00000000000 --- a/palettes/monochromatic/monochromeNoir/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-monochrome-noir", - "version": "4.0.0-beta.12", - "description": "tsParticles monochrome noir palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/monochromatic/monochromeNoir" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/monochromatic/monochromeNoir/src/index.ts b/palettes/monochromatic/monochromeNoir/src/index.ts deleted file mode 100644 index 9da73e5db48..00000000000 --- a/palettes/monochromatic/monochromeNoir/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; - -const paletteName = "monochrome-noir"; - -/** - * @param engine - - */ -export async function loadMonochromeNoirPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/monochromatic/monochromeNoir/typedoc.json b/palettes/monochromatic/monochromeNoir/typedoc.json deleted file mode 100644 index 0f31ff54ebb..00000000000 --- a/palettes/monochromatic/monochromeNoir/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Autumn Leaves Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/monochromatic/monochromeNoir/webpack.config.js b/palettes/monochromatic/monochromeNoir/webpack.config.js deleted file mode 100644 index 4ef92959a7d..00000000000 --- a/palettes/monochromatic/monochromeNoir/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-monochrome-noir", - paletteName: "Monochrome Noir Palette", - version, -}); diff --git a/palettes/monochromatic/monochromeOranges/CHANGELOG.md b/palettes/monochromatic/monochromeOranges/CHANGELOG.md deleted file mode 100644 index 789b1e0d631..00000000000 --- a/palettes/monochromatic/monochromeOranges/CHANGELOG.md +++ /dev/null @@ -1,18 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-monochrome-oranges - -# 4.0.0-beta.0 (2026-04-08) - -### Features - -- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) - -# [4.0.0-alpha.5] - -**Note:** Initial version of package @tsparticles/palette-monochrome-oranges diff --git a/palettes/monochromatic/monochromeOranges/README.md b/palettes/monochromatic/monochromeOranges/README.md deleted file mode 100644 index bf1ab363e31..00000000000 --- a/palettes/monochromatic/monochromeOranges/README.md +++ /dev/null @@ -1,122 +0,0 @@ -[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) - -# tsParticles Monochrome Oranges Palette - -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-monochrome-oranges/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-monochrome-oranges) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-monochrome-oranges.svg)](https://www.npmjs.com/package/@tsparticles/palette-monochrome-oranges) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-monochrome-oranges)](https://www.npmjs.com/package/@tsparticles/palette-monochrome-oranges) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for monochrome oranges. - -[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) - -[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") - -## Sample - -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/monochromatic/monochromeOranges/images/sample.png)](https://particles.js.org/samples/palettes/monochrome-oranges) - -## Colors - - - - - - - - - - - - - - - - - - - - -
-
- #FFEEDD -
-
- #FFCC88 -
-
- #FF8833 -
-
- #CC5500 -
-
- #882200 -
-
- #441100 -
-
- Background
- #0d0400 -
- Blend mode: source-over | Fill: true -
- -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadMonochromeOrangesPalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## How to use it - -### CDN / Vanilla JS / jQuery - -```html - - -``` - -### Usage - -Once the scripts are loaded you can set up `tsParticles` like this: - -```javascript -(async engine => { - await loadBasic(engine); - await loadMonochromeOrangesPalette(engine); - - const options = { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "monochrome-oranges", - }; - - await engine.load({ - id: "tsparticles", - options, - }); -})(tsParticles); -``` - -#### Customization - -**Important ⚠️** -You can override all the options defining the properties like in any standard `tsParticles` installation. - -### Frameworks with a tsParticles component library - -Checkout the documentation in the component library repository and call the `loadMonochromeOrangesPalette` function. - -## Related docs - -- Presets and palettes catalog: -- Main docs: diff --git a/palettes/monochromatic/monochromeOranges/images/sample.png b/palettes/monochromatic/monochromeOranges/images/sample.png deleted file mode 100644 index a5fbdf9fc55..00000000000 Binary files a/palettes/monochromatic/monochromeOranges/images/sample.png and /dev/null differ diff --git a/palettes/monochromatic/monochromeOranges/package.dist.json b/palettes/monochromatic/monochromeOranges/package.dist.json deleted file mode 100644 index aed3a82dad4..00000000000 --- a/palettes/monochromatic/monochromeOranges/package.dist.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "name": "@tsparticles/palette-monochrome-oranges", - "version": "4.0.0-beta.12", - "description": "tsParticles monochrome oranges palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/monochromatic/monochromeOranges" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "type": "module", - "jsdelivr": "tsparticles.palette-monochrome-oranges.min.js", - "unpkg": "tsparticles.palette-monochrome-oranges.min.js", - "publishConfig": { - "access": "public" - } -} diff --git a/palettes/monochromatic/monochromeOranges/package.json b/palettes/monochromatic/monochromeOranges/package.json deleted file mode 100644 index 48b3f04a8c5..00000000000 --- a/palettes/monochromatic/monochromeOranges/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-monochrome-oranges", - "version": "4.0.0-beta.12", - "description": "tsParticles monochrome oranges palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/monochromatic/monochromeOranges" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/monochromatic/monochromeOranges/src/index.ts b/palettes/monochromatic/monochromeOranges/src/index.ts deleted file mode 100644 index a89112f8a56..00000000000 --- a/palettes/monochromatic/monochromeOranges/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; - -const paletteName = "monochrome-oranges"; - -/** - * @param engine - - */ -export async function loadMonochromeOrangesPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/monochromatic/monochromeOranges/typedoc.json b/palettes/monochromatic/monochromeOranges/typedoc.json deleted file mode 100644 index 61ed30044ec..00000000000 --- a/palettes/monochromatic/monochromeOranges/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Monochrome Oranges Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/monochromatic/monochromeOranges/webpack.config.js b/palettes/monochromatic/monochromeOranges/webpack.config.js deleted file mode 100644 index 28c30254ec8..00000000000 --- a/palettes/monochromatic/monochromeOranges/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-monochrome-oranges", - paletteName: "Monochrome Oranges Palette", - version, -}); diff --git a/palettes/monochromatic/monochromePinks/CHANGELOG.md b/palettes/monochromatic/monochromePinks/CHANGELOG.md deleted file mode 100644 index cb45437a767..00000000000 --- a/palettes/monochromatic/monochromePinks/CHANGELOG.md +++ /dev/null @@ -1,12 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-monochrome-pinks - -# 4.0.0-beta.0 (2026-04-08) - -**Note:** Version bump only for package @tsparticles/palette-monochrome-pinks diff --git a/palettes/monochromatic/monochromePinks/README.md b/palettes/monochromatic/monochromePinks/README.md deleted file mode 100644 index ea4db5eeb44..00000000000 --- a/palettes/monochromatic/monochromePinks/README.md +++ /dev/null @@ -1,44 +0,0 @@ -# tsParticles Monochrome Pinks Palette - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for monochrome pinks. - -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadMonochromePinksPalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## Install - -```bash -pnpm add @tsparticles/palette-monochrome-pinks -``` - -## Usage - -```ts -import { loadBasic } from "@tsparticles/basic"; -import { tsParticles } from "@tsparticles/engine"; -import { loadMonochromePinksPalette } from "@tsparticles/palette-monochrome-pinks"; - -await loadBasic(tsParticles); -await loadMonochromePinksPalette(tsParticles); - -await tsParticles.load({ - id: "tsparticles", - options: { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "monochrome-pinks", - }, -}); -``` diff --git a/palettes/monochromatic/monochromePinks/package.dist.json b/palettes/monochromatic/monochromePinks/package.dist.json deleted file mode 100644 index 5c71cacaff7..00000000000 --- a/palettes/monochromatic/monochromePinks/package.dist.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "name": "@tsparticles/palette-monochrome-pinks", - "version": "4.0.0-beta.12", - "description": "tsParticles monochrome pinks palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/monochromatic/monochromePinks" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "jsdelivr": "tsparticles.palette-monochrome-pinks.min.js", - "unpkg": "tsparticles.palette-monochrome-pinks.min.js", - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "publishConfig": { - "access": "public" - }, - "type": "module" -} diff --git a/palettes/monochromatic/monochromePinks/package.json b/palettes/monochromatic/monochromePinks/package.json deleted file mode 100644 index b33cef63f09..00000000000 --- a/palettes/monochromatic/monochromePinks/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-monochrome-pinks", - "version": "4.0.0-beta.12", - "description": "tsParticles monochrome pinks palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/monochromatic/monochromePinks" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/monochromatic/monochromePinks/src/index.ts b/palettes/monochromatic/monochromePinks/src/index.ts deleted file mode 100644 index e55b1977fe9..00000000000 --- a/palettes/monochromatic/monochromePinks/src/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; -const paletteName = "monochrome-pinks"; -/** - * @param engine - - */ -export async function loadMonochromePinksPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/monochromatic/monochromePinks/typedoc.json b/palettes/monochromatic/monochromePinks/typedoc.json deleted file mode 100644 index 9783a324d2a..00000000000 --- a/palettes/monochromatic/monochromePinks/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Monochrome Pinks Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/monochromatic/monochromePinks/webpack.config.js b/palettes/monochromatic/monochromePinks/webpack.config.js deleted file mode 100644 index aa4528db0ed..00000000000 --- a/palettes/monochromatic/monochromePinks/webpack.config.js +++ /dev/null @@ -1,15 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-monochrome-pinks", - paletteName: "Monochrome Pinks Palette", - version, -}); diff --git a/palettes/monochromatic/monochromePurples/CHANGELOG.md b/palettes/monochromatic/monochromePurples/CHANGELOG.md deleted file mode 100644 index bb9b39b42c9..00000000000 --- a/palettes/monochromatic/monochromePurples/CHANGELOG.md +++ /dev/null @@ -1,12 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-monochrome-purples - -# 4.0.0-beta.0 (2026-04-08) - -**Note:** Version bump only for package @tsparticles/palette-monochrome-purples diff --git a/palettes/monochromatic/monochromePurples/README.md b/palettes/monochromatic/monochromePurples/README.md deleted file mode 100644 index bc94287e26c..00000000000 --- a/palettes/monochromatic/monochromePurples/README.md +++ /dev/null @@ -1,44 +0,0 @@ -# tsParticles Monochrome Purples Palette - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for monochrome purples. - -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadMonochromePurplesPalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## Install - -```bash -pnpm add @tsparticles/palette-monochrome-purples -``` - -## Usage - -```ts -import { loadBasic } from "@tsparticles/basic"; -import { tsParticles } from "@tsparticles/engine"; -import { loadMonochromePurplesPalette } from "@tsparticles/palette-monochrome-purples"; - -await loadBasic(tsParticles); -await loadMonochromePurplesPalette(tsParticles); - -await tsParticles.load({ - id: "tsparticles", - options: { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "monochrome-purples", - }, -}); -``` diff --git a/palettes/monochromatic/monochromePurples/package.dist.json b/palettes/monochromatic/monochromePurples/package.dist.json deleted file mode 100644 index 922f856026b..00000000000 --- a/palettes/monochromatic/monochromePurples/package.dist.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "name": "@tsparticles/palette-monochrome-purples", - "version": "4.0.0-beta.12", - "description": "tsParticles monochrome purples palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/monochromatic/monochromePurples" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "jsdelivr": "tsparticles.palette-monochrome-purples.min.js", - "unpkg": "tsparticles.palette-monochrome-purples.min.js", - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "publishConfig": { - "access": "public" - }, - "type": "module" -} diff --git a/palettes/monochromatic/monochromePurples/package.json b/palettes/monochromatic/monochromePurples/package.json deleted file mode 100644 index a72f3f93210..00000000000 --- a/palettes/monochromatic/monochromePurples/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-monochrome-purples", - "version": "4.0.0-beta.12", - "description": "tsParticles monochrome purples palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/monochromatic/monochromePurples" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/monochromatic/monochromePurples/src/index.ts b/palettes/monochromatic/monochromePurples/src/index.ts deleted file mode 100644 index 3d261e9b508..00000000000 --- a/palettes/monochromatic/monochromePurples/src/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; -const paletteName = "monochrome-purples"; -/** - * @param engine - - */ -export async function loadMonochromePurplesPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/monochromatic/monochromePurples/typedoc.json b/palettes/monochromatic/monochromePurples/typedoc.json deleted file mode 100644 index 61175a6c6b3..00000000000 --- a/palettes/monochromatic/monochromePurples/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Monochrome Purples Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/monochromatic/monochromePurples/webpack.config.js b/palettes/monochromatic/monochromePurples/webpack.config.js deleted file mode 100644 index bd6af0593eb..00000000000 --- a/palettes/monochromatic/monochromePurples/webpack.config.js +++ /dev/null @@ -1,15 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-monochrome-purples", - paletteName: "Monochrome Purples Palette", - version, -}); diff --git a/palettes/monochromatic/monochromeReds/CHANGELOG.md b/palettes/monochromatic/monochromeReds/CHANGELOG.md deleted file mode 100644 index c3da008bb40..00000000000 --- a/palettes/monochromatic/monochromeReds/CHANGELOG.md +++ /dev/null @@ -1,18 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-monochrome-reds - -# 4.0.0-beta.0 (2026-04-08) - -### Features - -- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) - -# [4.0.0-alpha.5] - -**Note:** Initial version of package @tsparticles/palette-monochrome-reds diff --git a/palettes/monochromatic/monochromeReds/README.md b/palettes/monochromatic/monochromeReds/README.md deleted file mode 100644 index 86e27af9302..00000000000 --- a/palettes/monochromatic/monochromeReds/README.md +++ /dev/null @@ -1,122 +0,0 @@ -[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) - -# tsParticles Monochrome Reds Palette - -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-monochrome-reds/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-monochrome-reds) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-monochrome-reds.svg)](https://www.npmjs.com/package/@tsparticles/palette-monochrome-reds) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-monochrome-reds)](https://www.npmjs.com/package/@tsparticles/palette-monochrome-reds) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for monochrome reds. - -[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) - -[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") - -## Sample - -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/monochromatic/monochromeReds/images/sample.png)](https://particles.js.org/samples/palettes/monochrome-reds) - -## Colors - - - - - - - - - - - - - - - - - - - - -
-
- #FFDDDD -
-
- #FF8888 -
-
- #FF3333 -
-
- #CC0000 -
-
- #880000 -
-
- #440000 -
-
- Background
- #0d0000 -
- Blend mode: source-over | Fill: true -
- -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadMonochromeRedsPalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## How to use it - -### CDN / Vanilla JS / jQuery - -```html - - -``` - -### Usage - -Once the scripts are loaded you can set up `tsParticles` like this: - -```javascript -(async engine => { - await loadBasic(engine); - await loadMonochromeRedsPalette(engine); - - const options = { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "monochrome-reds", - }; - - await engine.load({ - id: "tsparticles", - options, - }); -})(tsParticles); -``` - -#### Customization - -**Important ⚠️** -You can override all the options defining the properties like in any standard `tsParticles` installation. - -### Frameworks with a tsParticles component library - -Checkout the documentation in the component library repository and call the `loadMonochromeRedsPalette` function. - -## Related docs - -- Presets and palettes catalog: -- Main docs: diff --git a/palettes/monochromatic/monochromeReds/images/sample.png b/palettes/monochromatic/monochromeReds/images/sample.png deleted file mode 100644 index 37048e20807..00000000000 Binary files a/palettes/monochromatic/monochromeReds/images/sample.png and /dev/null differ diff --git a/palettes/monochromatic/monochromeReds/package.dist.json b/palettes/monochromatic/monochromeReds/package.dist.json deleted file mode 100644 index 4a64345fd5b..00000000000 --- a/palettes/monochromatic/monochromeReds/package.dist.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "name": "@tsparticles/palette-monochrome-reds", - "version": "4.0.0-beta.12", - "description": "tsParticles monochrome reds palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/monochromatic/monochromeReds" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "type": "module", - "jsdelivr": "tsparticles.palette-monochrome-reds.min.js", - "unpkg": "tsparticles.palette-monochrome-reds.min.js", - "publishConfig": { - "access": "public" - } -} diff --git a/palettes/monochromatic/monochromeReds/package.json b/palettes/monochromatic/monochromeReds/package.json deleted file mode 100644 index e5b436c336e..00000000000 --- a/palettes/monochromatic/monochromeReds/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-monochrome-reds", - "version": "4.0.0-beta.12", - "description": "tsParticles monochrome reds palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/monochromatic/monochromeReds" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/monochromatic/monochromeReds/src/index.ts b/palettes/monochromatic/monochromeReds/src/index.ts deleted file mode 100644 index 61632af8662..00000000000 --- a/palettes/monochromatic/monochromeReds/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; - -const paletteName = "monochrome-reds"; - -/** - * @param engine - - */ -export async function loadMonochromeRedsPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/monochromatic/monochromeReds/typedoc.json b/palettes/monochromatic/monochromeReds/typedoc.json deleted file mode 100644 index f637beaa183..00000000000 --- a/palettes/monochromatic/monochromeReds/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Monochrome Reds Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/monochromatic/monochromeReds/webpack.config.js b/palettes/monochromatic/monochromeReds/webpack.config.js deleted file mode 100644 index 6d95ec7a921..00000000000 --- a/palettes/monochromatic/monochromeReds/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-monochrome-reds", - paletteName: "Monochrome Reds Palette", - version, -}); diff --git a/palettes/monochromatic/monochromeTeal/CHANGELOG.md b/palettes/monochromatic/monochromeTeal/CHANGELOG.md deleted file mode 100644 index 3ff141df0c2..00000000000 --- a/palettes/monochromatic/monochromeTeal/CHANGELOG.md +++ /dev/null @@ -1,18 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-monochrome-teal - -# 4.0.0-beta.0 (2026-04-08) - -### Features - -- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) - -# [4.0.0-alpha.5] - -**Note:** Initial version of package @tsparticles/palette-monochrome-teal diff --git a/palettes/monochromatic/monochromeTeal/README.md b/palettes/monochromatic/monochromeTeal/README.md deleted file mode 100644 index 412d45c68de..00000000000 --- a/palettes/monochromatic/monochromeTeal/README.md +++ /dev/null @@ -1,122 +0,0 @@ -[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) - -# tsParticles Monochrome Teal Palette - -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-monochrome-teal/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-monochrome-teal) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-monochrome-teal.svg)](https://www.npmjs.com/package/@tsparticles/palette-monochrome-teal) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-monochrome-teal)](https://www.npmjs.com/package/@tsparticles/palette-monochrome-teal) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for monochrome teal. - -[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) - -[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") - -## Sample - -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/monochromatic/monochromeTeal/images/sample.png)](https://particles.js.org/samples/palettes/monochrome-teal) - -## Colors - - - - - - - - - - - - - - - - - - - - -
-
- #DDFFF7 -
-
- #88FFEE -
-
- #33DDCC -
-
- #00AAAA -
-
- #006666 -
-
- #003333 -
-
- Background
- #000d0c -
- Blend mode: source-over | Fill: true -
- -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadMonochromeTealPalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## How to use it - -### CDN / Vanilla JS / jQuery - -```html - - -``` - -### Usage - -Once the scripts are loaded you can set up `tsParticles` like this: - -```javascript -(async engine => { - await loadBasic(engine); - await loadMonochromeTealPalette(engine); - - const options = { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "monochrome-teal", - }; - - await engine.load({ - id: "tsparticles", - options, - }); -})(tsParticles); -``` - -#### Customization - -**Important ⚠️** -You can override all the options defining the properties like in any standard `tsParticles` installation. - -### Frameworks with a tsParticles component library - -Checkout the documentation in the component library repository and call the `loadMonochromeTealPalette` function. - -## Related docs - -- Presets and palettes catalog: -- Main docs: diff --git a/palettes/monochromatic/monochromeTeal/images/sample.png b/palettes/monochromatic/monochromeTeal/images/sample.png deleted file mode 100644 index 82a3d13479a..00000000000 Binary files a/palettes/monochromatic/monochromeTeal/images/sample.png and /dev/null differ diff --git a/palettes/monochromatic/monochromeTeal/package.dist.json b/palettes/monochromatic/monochromeTeal/package.dist.json deleted file mode 100644 index 35e5f624413..00000000000 --- a/palettes/monochromatic/monochromeTeal/package.dist.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "name": "@tsparticles/palette-monochrome-teal", - "version": "4.0.0-beta.12", - "description": "tsParticles monochrome teal palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/monochromatic/monochromeTeal" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "type": "module", - "jsdelivr": "tsparticles.palette-monochrome-teal.min.js", - "unpkg": "tsparticles.palette-monochrome-teal.min.js", - "publishConfig": { - "access": "public" - } -} diff --git a/palettes/monochromatic/monochromeTeal/package.json b/palettes/monochromatic/monochromeTeal/package.json deleted file mode 100644 index 3755f960224..00000000000 --- a/palettes/monochromatic/monochromeTeal/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-monochrome-teal", - "version": "4.0.0-beta.12", - "description": "tsParticles monochrome teal palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/monochromatic/monochromeTeal" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/monochromatic/monochromeTeal/src/index.ts b/palettes/monochromatic/monochromeTeal/src/index.ts deleted file mode 100644 index 5fb48aa2862..00000000000 --- a/palettes/monochromatic/monochromeTeal/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; - -const paletteName = "monochrome-teal"; - -/** - * @param engine - - */ -export async function loadMonochromeTealPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/monochromatic/monochromeTeal/typedoc.json b/palettes/monochromatic/monochromeTeal/typedoc.json deleted file mode 100644 index 589a8d8325e..00000000000 --- a/palettes/monochromatic/monochromeTeal/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Monochrome Teal Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/monochromatic/monochromeTeal/webpack.config.js b/palettes/monochromatic/monochromeTeal/webpack.config.js deleted file mode 100644 index 536b19d40c6..00000000000 --- a/palettes/monochromatic/monochromeTeal/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-monochrome-teal", - paletteName: "Monochrome Teal Palette", - version, -}); diff --git a/palettes/monochromatic/monochromeWhite/CHANGELOG.md b/palettes/monochromatic/monochromeWhite/CHANGELOG.md deleted file mode 100644 index d549a54b58c..00000000000 --- a/palettes/monochromatic/monochromeWhite/CHANGELOG.md +++ /dev/null @@ -1,18 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-monochrome-white - -# 4.0.0-beta.0 (2026-04-08) - -### Features - -- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) - -# [4.0.0-alpha.5] - -**Note:** Initial version of package @tsparticles/palette-monochrome-white diff --git a/palettes/monochromatic/monochromeWhite/README.md b/palettes/monochromatic/monochromeWhite/README.md deleted file mode 100644 index 0941a3d1111..00000000000 --- a/palettes/monochromatic/monochromeWhite/README.md +++ /dev/null @@ -1,122 +0,0 @@ -[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) - -# tsParticles Monochrome White Palette - -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-monochrome-white/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-monochrome-white) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-monochrome-white.svg)](https://www.npmjs.com/package/@tsparticles/palette-monochrome-white) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-monochrome-white)](https://www.npmjs.com/package/@tsparticles/palette-monochrome-white) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for monochrome white. - -[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) - -[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") - -## Sample - -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/monochromatic/monochromeWhite/images/sample.png)](https://particles.js.org/samples/palettes/monochrome-white) - -## Colors - - - - - - - - - - - - - - - - - - - - -
-
- #FFFFFF -
-
- #F5F5F5 -
-
- #E0E0E0 -
-
- #CCCCCC -
-
- #AAAAAA -
-
- #888888 -
-
- Background
- #111111 -
- Blend mode: source-over | Fill: true -
- -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadMonochromeWhitePalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## How to use it - -### CDN / Vanilla JS / jQuery - -```html - - -``` - -### Usage - -Once the scripts are loaded you can set up `tsParticles` like this: - -```javascript -(async engine => { - await loadBasic(engine); - await loadMonochromeWhitePalette(engine); - - const options = { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "monochrome-white", - }; - - await engine.load({ - id: "tsparticles", - options, - }); -})(tsParticles); -``` - -#### Customization - -**Important ⚠️** -You can override all the options defining the properties like in any standard `tsParticles` installation. - -### Frameworks with a tsParticles component library - -Checkout the documentation in the component library repository and call the `loadMonochromeWhitePalette` function. - -## Related docs - -- Presets and palettes catalog: -- Main docs: diff --git a/palettes/monochromatic/monochromeWhite/images/sample.png b/palettes/monochromatic/monochromeWhite/images/sample.png deleted file mode 100644 index 8e7c3ab8c98..00000000000 Binary files a/palettes/monochromatic/monochromeWhite/images/sample.png and /dev/null differ diff --git a/palettes/monochromatic/monochromeWhite/package.dist.json b/palettes/monochromatic/monochromeWhite/package.dist.json deleted file mode 100644 index 5865a1f4965..00000000000 --- a/palettes/monochromatic/monochromeWhite/package.dist.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "name": "@tsparticles/palette-monochrome-white", - "version": "4.0.0-beta.12", - "description": "tsParticles monochrome white palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/monochromatic/monochromeWhite" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "type": "module", - "jsdelivr": "tsparticles.palette-monochrome-white.min.js", - "unpkg": "tsparticles.palette-monochrome-white.min.js", - "publishConfig": { - "access": "public" - } -} diff --git a/palettes/monochromatic/monochromeWhite/package.json b/palettes/monochromatic/monochromeWhite/package.json deleted file mode 100644 index e16b70f76e2..00000000000 --- a/palettes/monochromatic/monochromeWhite/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-monochrome-white", - "version": "4.0.0-beta.12", - "description": "tsParticles monochrome white palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/monochromatic/monochromeWhite" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/monochromatic/monochromeWhite/src/index.ts b/palettes/monochromatic/monochromeWhite/src/index.ts deleted file mode 100644 index 555de970206..00000000000 --- a/palettes/monochromatic/monochromeWhite/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; - -const paletteName = "monochrome-white"; - -/** - * @param engine - - */ -export async function loadMonochromeWhitePalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/monochromatic/monochromeWhite/typedoc.json b/palettes/monochromatic/monochromeWhite/typedoc.json deleted file mode 100644 index 12ac02cfbaa..00000000000 --- a/palettes/monochromatic/monochromeWhite/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Monochrome White Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/monochromatic/monochromeWhite/webpack.config.js b/palettes/monochromatic/monochromeWhite/webpack.config.js deleted file mode 100644 index b3a149e003b..00000000000 --- a/palettes/monochromatic/monochromeWhite/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-monochrome-white", - paletteName: "Monochrome White Palette", - version, -}); diff --git a/palettes/monochromatic/monochromeYellows/CHANGELOG.md b/palettes/monochromatic/monochromeYellows/CHANGELOG.md deleted file mode 100644 index 9ba75aa2836..00000000000 --- a/palettes/monochromatic/monochromeYellows/CHANGELOG.md +++ /dev/null @@ -1,18 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-monochrome-yellows - -# 4.0.0-beta.0 (2026-04-08) - -### Features - -- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) - -# [4.0.0-alpha.5] - -**Note:** Initial version of package @tsparticles/palette-monochrome-yellows diff --git a/palettes/monochromatic/monochromeYellows/README.md b/palettes/monochromatic/monochromeYellows/README.md deleted file mode 100644 index a77d98d5a97..00000000000 --- a/palettes/monochromatic/monochromeYellows/README.md +++ /dev/null @@ -1,122 +0,0 @@ -[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) - -# tsParticles Monochrome Yellows Palette - -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-monochrome-yellows/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-monochrome-yellows) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-monochrome-yellows.svg)](https://www.npmjs.com/package/@tsparticles/palette-monochrome-yellows) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-monochrome-yellows)](https://www.npmjs.com/package/@tsparticles/palette-monochrome-yellows) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for monochrome yellows. - -[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) - -[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") - -## Sample - -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/monochromatic/monochromeYellows/images/sample.png)](https://particles.js.org/samples/palettes/monochrome-yellows) - -## Colors - - - - - - - - - - - - - - - - - - - - -
-
- #FFFEDD -
-
- #FFEE88 -
-
- #FFCC33 -
-
- #DDA000 -
-
- #886600 -
-
- #443300 -
-
- Background
- #0d0c00 -
- Blend mode: source-over | Fill: true -
- -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadMonochromeYellowsPalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## How to use it - -### CDN / Vanilla JS / jQuery - -```html - - -``` - -### Usage - -Once the scripts are loaded you can set up `tsParticles` like this: - -```javascript -(async engine => { - await loadBasic(engine); - await loadMonochromeYellowsPalette(engine); - - const options = { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "monochrome-yellows", - }; - - await engine.load({ - id: "tsparticles", - options, - }); -})(tsParticles); -``` - -#### Customization - -**Important ⚠️** -You can override all the options defining the properties like in any standard `tsParticles` installation. - -### Frameworks with a tsParticles component library - -Checkout the documentation in the component library repository and call the `loadMonochromeYellowsPalette` function. - -## Related docs - -- Presets and palettes catalog: -- Main docs: diff --git a/palettes/monochromatic/monochromeYellows/images/sample.png b/palettes/monochromatic/monochromeYellows/images/sample.png deleted file mode 100644 index 65b268a7cf3..00000000000 Binary files a/palettes/monochromatic/monochromeYellows/images/sample.png and /dev/null differ diff --git a/palettes/monochromatic/monochromeYellows/package.dist.json b/palettes/monochromatic/monochromeYellows/package.dist.json deleted file mode 100644 index e65c4b39f49..00000000000 --- a/palettes/monochromatic/monochromeYellows/package.dist.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "name": "@tsparticles/palette-monochrome-yellows", - "version": "4.0.0-beta.12", - "description": "tsParticles monochrome yellows palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/monochromatic/monochromeYellows" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "type": "module", - "jsdelivr": "tsparticles.palette-monochrome-yellows.min.js", - "unpkg": "tsparticles.palette-monochrome-yellows.min.js", - "publishConfig": { - "access": "public" - } -} diff --git a/palettes/monochromatic/monochromeYellows/package.json b/palettes/monochromatic/monochromeYellows/package.json deleted file mode 100644 index d3349a3f5f2..00000000000 --- a/palettes/monochromatic/monochromeYellows/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-monochrome-yellows", - "version": "4.0.0-beta.12", - "description": "tsParticles monochrome yellows palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/monochromatic/monochromeYellows" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/monochromatic/monochromeYellows/src/index.ts b/palettes/monochromatic/monochromeYellows/src/index.ts deleted file mode 100644 index c40db5f6dba..00000000000 --- a/palettes/monochromatic/monochromeYellows/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; - -const paletteName = "monochrome-yellows"; - -/** - * @param engine - - */ -export async function loadMonochromeYellowsPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/monochromatic/monochromeYellows/typedoc.json b/palettes/monochromatic/monochromeYellows/typedoc.json deleted file mode 100644 index e0190af3bcf..00000000000 --- a/palettes/monochromatic/monochromeYellows/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Monochrome Yellows Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/monochromatic/monochromeYellows/webpack.config.js b/palettes/monochromatic/monochromeYellows/webpack.config.js deleted file mode 100644 index 44ddb3fd730..00000000000 --- a/palettes/monochromatic/monochromeYellows/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-monochrome-yellows", - paletteName: "Monochrome Yellows Palette", - version, -}); diff --git a/palettes/monochromatic/monochromeWhite/.browserslistrc b/palettes/monochromatic/noir/.browserslistrc similarity index 100% rename from palettes/monochromatic/monochromeWhite/.browserslistrc rename to palettes/monochromatic/noir/.browserslistrc diff --git a/palettes/monochromatic/noir/CHANGELOG.md b/palettes/monochromatic/noir/CHANGELOG.md new file mode 100644 index 00000000000..bb1df09aa8a --- /dev/null +++ b/palettes/monochromatic/noir/CHANGELOG.md @@ -0,0 +1,16 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-monochrome-noir + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-monochrome-noir + +# 4.0.0-beta.0 (2026-04-08) + +**Note:** Version bump only for package @tsparticles/palette-monochrome-noir diff --git a/palettes/monochromatic/noir/LICENSE b/palettes/monochromatic/noir/LICENSE new file mode 100644 index 00000000000..bdc05f528fa --- /dev/null +++ b/palettes/monochromatic/noir/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/palettes/monochromatic/noir/README.md b/palettes/monochromatic/noir/README.md new file mode 100644 index 00000000000..be12fb35a52 --- /dev/null +++ b/palettes/monochromatic/noir/README.md @@ -0,0 +1,122 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Noir Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-noir/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-noir) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-noir.svg)](https://www.npmjs.com/package/@tsparticles/palette-noir) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-noir) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/monochromatic/noir/images/sample.png)](https://particles.js.org/samples/palettes/noir) + +## Colors + + + + + + + + + + + + + + + + + + + + +
+
+ #0B0B0C +
+
+ #1C1D20 +
+
+ #3A3D44 +
+
+ #7A808C +
+
+ #C7CCD6 +
+
+ #F5F7FA +
+
+ Background
+ #050506 +
+ Blend mode: source-over | Fill: true +
+ +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadNoirPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadNoirPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "noir", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadNoirPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/monochromatic/monochromeNoir/eslint.config.js b/palettes/monochromatic/noir/eslint.config.js similarity index 100% rename from palettes/monochromatic/monochromeNoir/eslint.config.js rename to palettes/monochromatic/noir/eslint.config.js diff --git a/palettes/monochromatic/monochromeNoir/images/sample.png b/palettes/monochromatic/noir/images/sample.png similarity index 100% rename from palettes/monochromatic/monochromeNoir/images/sample.png rename to palettes/monochromatic/noir/images/sample.png diff --git a/palettes/monochromatic/noir/package.dist.json b/palettes/monochromatic/noir/package.dist.json new file mode 100644 index 00000000000..e1db33bd862 --- /dev/null +++ b/palettes/monochromatic/noir/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-monochrome-noir", + "version": "4.0.0-beta.15", + "description": "tsParticles monochrome noir palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/monochromatic/noir" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/monochromatic/noir/package.json b/palettes/monochromatic/noir/package.json new file mode 100644 index 00000000000..9269e705085 --- /dev/null +++ b/palettes/monochromatic/noir/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-monochrome-noir", + "version": "4.0.0-beta.15", + "description": "tsParticles monochrome noir palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/monochromatic/noir" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/monochromatic/noir/rollup.config.js b/palettes/monochromatic/noir/rollup.config.js new file mode 100644 index 00000000000..54a583ce194 --- /dev/null +++ b/palettes/monochromatic/noir/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-noir", + paletteName: "Noir Palette", + version, +}); diff --git a/palettes/monochromatic/noir/src/browser.ts b/palettes/monochromatic/noir/src/browser.ts new file mode 100644 index 00000000000..7664eba6db2 --- /dev/null +++ b/palettes/monochromatic/noir/src/browser.ts @@ -0,0 +1,10 @@ +import { loadMonochromeNoirPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadMonochromeNoirPalette?: typeof loadMonochromeNoirPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadMonochromeNoirPalette = loadMonochromeNoirPalette; + +export * from "./index.js"; diff --git a/palettes/monochromatic/noir/src/index.lazy.ts b/palettes/monochromatic/noir/src/index.lazy.ts new file mode 100644 index 00000000000..39f40745c08 --- /dev/null +++ b/palettes/monochromatic/noir/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "noir"; + +/** + * @param engine - + */ +export async function loadNoirPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/monochromatic/noir/src/index.ts b/palettes/monochromatic/noir/src/index.ts new file mode 100644 index 00000000000..81763b9bbb1 --- /dev/null +++ b/palettes/monochromatic/noir/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "monochrome-noir"; + +/** + * @param engine - + */ +export async function loadMonochromeNoirPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/monochromatic/monochromeNoir/src/options.ts b/palettes/monochromatic/noir/src/options.ts similarity index 100% rename from palettes/monochromatic/monochromeNoir/src/options.ts rename to palettes/monochromatic/noir/src/options.ts diff --git a/palettes/monochromatic/noir/tsconfig.base.json b/palettes/monochromatic/noir/tsconfig.base.json new file mode 100644 index 00000000000..2b489b6aa1c --- /dev/null +++ b/palettes/monochromatic/noir/tsconfig.base.json @@ -0,0 +1,9 @@ +{ + "extends": "@tsparticles/tsconfig/dist/tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src" + }, + "include": [ + "./src" + ] +} diff --git a/palettes/monochromatic/monochromeOranges/tsconfig.browser.json b/palettes/monochromatic/noir/tsconfig.browser.json similarity index 100% rename from palettes/monochromatic/monochromeOranges/tsconfig.browser.json rename to palettes/monochromatic/noir/tsconfig.browser.json diff --git a/palettes/monochromatic/monochromeOranges/tsconfig.json b/palettes/monochromatic/noir/tsconfig.json similarity index 100% rename from palettes/monochromatic/monochromeOranges/tsconfig.json rename to palettes/monochromatic/noir/tsconfig.json diff --git a/palettes/monochromatic/monochromeOranges/tsconfig.module.json b/palettes/monochromatic/noir/tsconfig.module.json similarity index 100% rename from palettes/monochromatic/monochromeOranges/tsconfig.module.json rename to palettes/monochromatic/noir/tsconfig.module.json diff --git a/palettes/monochromatic/monochromeOranges/tsconfig.types.json b/palettes/monochromatic/noir/tsconfig.types.json similarity index 100% rename from palettes/monochromatic/monochromeOranges/tsconfig.types.json rename to palettes/monochromatic/noir/tsconfig.types.json diff --git a/palettes/monochromatic/noir/typedoc.json b/palettes/monochromatic/noir/typedoc.json new file mode 100644 index 00000000000..3168cdcc63d --- /dev/null +++ b/palettes/monochromatic/noir/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Noir Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/monochromatic/monochromeYellows/.browserslistrc b/palettes/monochromatic/oranges/.browserslistrc similarity index 100% rename from palettes/monochromatic/monochromeYellows/.browserslistrc rename to palettes/monochromatic/oranges/.browserslistrc diff --git a/palettes/monochromatic/oranges/CHANGELOG.md b/palettes/monochromatic/oranges/CHANGELOG.md new file mode 100644 index 00000000000..ea6cbfaa9fc --- /dev/null +++ b/palettes/monochromatic/oranges/CHANGELOG.md @@ -0,0 +1,22 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-monochrome-oranges + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-monochrome-oranges + +# 4.0.0-beta.0 (2026-04-08) + +### Features + +- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) + +# [4.0.0-alpha.5] + +**Note:** Initial version of package @tsparticles/palette-monochrome-oranges diff --git a/palettes/monochromatic/oranges/LICENSE b/palettes/monochromatic/oranges/LICENSE new file mode 100644 index 00000000000..bdc05f528fa --- /dev/null +++ b/palettes/monochromatic/oranges/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/palettes/monochromatic/oranges/README.md b/palettes/monochromatic/oranges/README.md new file mode 100644 index 00000000000..58c8a480c54 --- /dev/null +++ b/palettes/monochromatic/oranges/README.md @@ -0,0 +1,122 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Oranges Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-oranges/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-oranges) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-oranges.svg)](https://www.npmjs.com/package/@tsparticles/palette-oranges) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-oranges) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/monochromatic/oranges/images/sample.png)](https://particles.js.org/samples/palettes/oranges) + +## Colors + + + + + + + + + + + + + + + + + + + + +
+
+ #FFEEDD +
+
+ #FFCC88 +
+
+ #FF8833 +
+
+ #CC5500 +
+
+ #882200 +
+
+ #441100 +
+
+ Background
+ #0d0400 +
+ Blend mode: source-over | Fill: true +
+ +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadOrangesPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadOrangesPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "oranges", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadOrangesPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/monochromatic/monochromeOranges/eslint.config.js b/palettes/monochromatic/oranges/eslint.config.js similarity index 100% rename from palettes/monochromatic/monochromeOranges/eslint.config.js rename to palettes/monochromatic/oranges/eslint.config.js diff --git a/palettes/monochromatic/oranges/images/sample.png b/palettes/monochromatic/oranges/images/sample.png new file mode 100644 index 00000000000..69df8dd2f0d Binary files /dev/null and b/palettes/monochromatic/oranges/images/sample.png differ diff --git a/palettes/monochromatic/oranges/package.dist.json b/palettes/monochromatic/oranges/package.dist.json new file mode 100644 index 00000000000..1a1af4ef34d --- /dev/null +++ b/palettes/monochromatic/oranges/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-monochrome-oranges", + "version": "4.0.0-beta.15", + "description": "tsParticles monochrome oranges palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/monochromatic/oranges" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/monochromatic/oranges/package.json b/palettes/monochromatic/oranges/package.json new file mode 100644 index 00000000000..a0a1620f6dd --- /dev/null +++ b/palettes/monochromatic/oranges/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-monochrome-oranges", + "version": "4.0.0-beta.15", + "description": "tsParticles monochrome oranges palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/monochromatic/oranges" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/monochromatic/oranges/rollup.config.js b/palettes/monochromatic/oranges/rollup.config.js new file mode 100644 index 00000000000..f74dfa7eed8 --- /dev/null +++ b/palettes/monochromatic/oranges/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-oranges", + paletteName: "Oranges Palette", + version, +}); diff --git a/palettes/monochromatic/oranges/src/browser.ts b/palettes/monochromatic/oranges/src/browser.ts new file mode 100644 index 00000000000..fbd9c29b5fa --- /dev/null +++ b/palettes/monochromatic/oranges/src/browser.ts @@ -0,0 +1,10 @@ +import { loadMonochromeOrangesPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadMonochromeOrangesPalette?: typeof loadMonochromeOrangesPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadMonochromeOrangesPalette = loadMonochromeOrangesPalette; + +export * from "./index.js"; diff --git a/palettes/monochromatic/oranges/src/index.lazy.ts b/palettes/monochromatic/oranges/src/index.lazy.ts new file mode 100644 index 00000000000..9318a92f74a --- /dev/null +++ b/palettes/monochromatic/oranges/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "oranges"; + +/** + * @param engine - + */ +export async function loadOrangesPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/monochromatic/oranges/src/index.ts b/palettes/monochromatic/oranges/src/index.ts new file mode 100644 index 00000000000..91b3fe514a0 --- /dev/null +++ b/palettes/monochromatic/oranges/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "monochrome-oranges"; + +/** + * @param engine - + */ +export async function loadMonochromeOrangesPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/monochromatic/monochromeOranges/src/options.ts b/palettes/monochromatic/oranges/src/options.ts similarity index 100% rename from palettes/monochromatic/monochromeOranges/src/options.ts rename to palettes/monochromatic/oranges/src/options.ts diff --git a/palettes/monochromatic/oranges/tsconfig.base.json b/palettes/monochromatic/oranges/tsconfig.base.json new file mode 100644 index 00000000000..2b489b6aa1c --- /dev/null +++ b/palettes/monochromatic/oranges/tsconfig.base.json @@ -0,0 +1,9 @@ +{ + "extends": "@tsparticles/tsconfig/dist/tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src" + }, + "include": [ + "./src" + ] +} diff --git a/palettes/monochromatic/monochromePinks/tsconfig.browser.json b/palettes/monochromatic/oranges/tsconfig.browser.json similarity index 100% rename from palettes/monochromatic/monochromePinks/tsconfig.browser.json rename to palettes/monochromatic/oranges/tsconfig.browser.json diff --git a/palettes/monochromatic/monochromePinks/tsconfig.json b/palettes/monochromatic/oranges/tsconfig.json similarity index 100% rename from palettes/monochromatic/monochromePinks/tsconfig.json rename to palettes/monochromatic/oranges/tsconfig.json diff --git a/palettes/monochromatic/monochromePinks/tsconfig.module.json b/palettes/monochromatic/oranges/tsconfig.module.json similarity index 100% rename from palettes/monochromatic/monochromePinks/tsconfig.module.json rename to palettes/monochromatic/oranges/tsconfig.module.json diff --git a/palettes/monochromatic/monochromePinks/tsconfig.types.json b/palettes/monochromatic/oranges/tsconfig.types.json similarity index 100% rename from palettes/monochromatic/monochromePinks/tsconfig.types.json rename to palettes/monochromatic/oranges/tsconfig.types.json diff --git a/palettes/monochromatic/oranges/typedoc.json b/palettes/monochromatic/oranges/typedoc.json new file mode 100644 index 00000000000..7a3a1b5b063 --- /dev/null +++ b/palettes/monochromatic/oranges/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Oranges Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/pastel/pastelCool/.browserslistrc b/palettes/monochromatic/pinks/.browserslistrc similarity index 100% rename from palettes/pastel/pastelCool/.browserslistrc rename to palettes/monochromatic/pinks/.browserslistrc diff --git a/palettes/monochromatic/pinks/CHANGELOG.md b/palettes/monochromatic/pinks/CHANGELOG.md new file mode 100644 index 00000000000..692dec6d714 --- /dev/null +++ b/palettes/monochromatic/pinks/CHANGELOG.md @@ -0,0 +1,16 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-monochrome-pinks + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-monochrome-pinks + +# 4.0.0-beta.0 (2026-04-08) + +**Note:** Version bump only for package @tsparticles/palette-monochrome-pinks diff --git a/palettes/monochromatic/pinks/LICENSE b/palettes/monochromatic/pinks/LICENSE new file mode 100644 index 00000000000..bdc05f528fa --- /dev/null +++ b/palettes/monochromatic/pinks/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/palettes/monochromatic/pinks/README.md b/palettes/monochromatic/pinks/README.md new file mode 100644 index 00000000000..5b8f61bf7e1 --- /dev/null +++ b/palettes/monochromatic/pinks/README.md @@ -0,0 +1,203 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Pinks Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-pinks/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-pinks) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-pinks.svg)](https://www.npmjs.com/package/@tsparticles/palette-pinks) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-pinks) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/monochromatic/pinks/images/sample.png)](https://particles.js.org/samples/palettes/pinks) + +## Colors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ #1A1000 +
+
+ #3A2200 +
+
+ #6B3D00 +
+
+ #A65A00 +
+
+ #D98A1A +
+
+ #FFC266 +
+
+ #090500 +
+
+ #1A0010 +
+
+ #3D0018 +
+
+ #7A0030 +
+
+ #B50048 +
+
+ #E5006A +
+
+ #FF5599 +
+
+ #FFAAD4 +
+
+ #FFA500 +
+
+ #FFEFD7 +
+
+ #000000 +
+
+ #FFFFFF +
+
+ #F5F5F5 +
+
+ #1E1E1E +
+
+ #252525 +
+
+ #E0E0E0 +
+
+ #A0A0A0 +
+
+ #404040 +
+
+ #1D3557 +
+
+ Background
+ #1A1000 +
+ Blend mode: source-over | Fill: true +
+## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadPinksPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadPinksPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "pinks", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadPinksPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/monochromatic/monochromePinks/eslint.config.js b/palettes/monochromatic/pinks/eslint.config.js similarity index 100% rename from palettes/monochromatic/monochromePinks/eslint.config.js rename to palettes/monochromatic/pinks/eslint.config.js diff --git a/palettes/monochromatic/monochromePinks/images/sample.png b/palettes/monochromatic/pinks/images/sample.png similarity index 100% rename from palettes/monochromatic/monochromePinks/images/sample.png rename to palettes/monochromatic/pinks/images/sample.png diff --git a/palettes/monochromatic/pinks/package.dist.json b/palettes/monochromatic/pinks/package.dist.json new file mode 100644 index 00000000000..e4feb76b80a --- /dev/null +++ b/palettes/monochromatic/pinks/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-monochrome-pinks", + "version": "4.0.0-beta.15", + "description": "tsParticles monochrome pinks palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/monochromatic/pinks" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/monochromatic/pinks/package.json b/palettes/monochromatic/pinks/package.json new file mode 100644 index 00000000000..12f5ccd7e30 --- /dev/null +++ b/palettes/monochromatic/pinks/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-monochrome-pinks", + "version": "4.0.0-beta.15", + "description": "tsParticles monochrome pinks palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/monochromatic/pinks" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/monochromatic/pinks/rollup.config.js b/palettes/monochromatic/pinks/rollup.config.js new file mode 100644 index 00000000000..93542d7d5ea --- /dev/null +++ b/palettes/monochromatic/pinks/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-pinks", + paletteName: "Pinks Palette", + version, +}); diff --git a/palettes/monochromatic/pinks/src/browser.ts b/palettes/monochromatic/pinks/src/browser.ts new file mode 100644 index 00000000000..58aceb6cd7d --- /dev/null +++ b/palettes/monochromatic/pinks/src/browser.ts @@ -0,0 +1,10 @@ +import { loadMonochromePinksPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadMonochromePinksPalette?: typeof loadMonochromePinksPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadMonochromePinksPalette = loadMonochromePinksPalette; + +export * from "./index.js"; diff --git a/palettes/monochromatic/pinks/src/index.lazy.ts b/palettes/monochromatic/pinks/src/index.lazy.ts new file mode 100644 index 00000000000..668c7342868 --- /dev/null +++ b/palettes/monochromatic/pinks/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "pinks"; + +/** + * @param engine - + */ +export async function loadPinksPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/monochromatic/pinks/src/index.ts b/palettes/monochromatic/pinks/src/index.ts new file mode 100644 index 00000000000..7aabd26b024 --- /dev/null +++ b/palettes/monochromatic/pinks/src/index.ts @@ -0,0 +1,11 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; +const paletteName = "monochrome-pinks"; +/** + * @param engine - + */ +export async function loadMonochromePinksPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/monochromatic/monochromePinks/src/options.ts b/palettes/monochromatic/pinks/src/options.ts similarity index 100% rename from palettes/monochromatic/monochromePinks/src/options.ts rename to palettes/monochromatic/pinks/src/options.ts diff --git a/palettes/monochromatic/pinks/tsconfig.base.json b/palettes/monochromatic/pinks/tsconfig.base.json new file mode 100644 index 00000000000..2b489b6aa1c --- /dev/null +++ b/palettes/monochromatic/pinks/tsconfig.base.json @@ -0,0 +1,9 @@ +{ + "extends": "@tsparticles/tsconfig/dist/tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src" + }, + "include": [ + "./src" + ] +} diff --git a/palettes/monochromatic/monochromePurples/tsconfig.browser.json b/palettes/monochromatic/pinks/tsconfig.browser.json similarity index 100% rename from palettes/monochromatic/monochromePurples/tsconfig.browser.json rename to palettes/monochromatic/pinks/tsconfig.browser.json diff --git a/palettes/monochromatic/monochromePurples/tsconfig.json b/palettes/monochromatic/pinks/tsconfig.json similarity index 100% rename from palettes/monochromatic/monochromePurples/tsconfig.json rename to palettes/monochromatic/pinks/tsconfig.json diff --git a/palettes/monochromatic/monochromePurples/tsconfig.module.json b/palettes/monochromatic/pinks/tsconfig.module.json similarity index 100% rename from palettes/monochromatic/monochromePurples/tsconfig.module.json rename to palettes/monochromatic/pinks/tsconfig.module.json diff --git a/palettes/monochromatic/monochromePurples/tsconfig.types.json b/palettes/monochromatic/pinks/tsconfig.types.json similarity index 100% rename from palettes/monochromatic/monochromePurples/tsconfig.types.json rename to palettes/monochromatic/pinks/tsconfig.types.json diff --git a/palettes/monochromatic/pinks/typedoc.json b/palettes/monochromatic/pinks/typedoc.json new file mode 100644 index 00000000000..0f2d90e5671 --- /dev/null +++ b/palettes/monochromatic/pinks/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Pinks Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/pastel/pastelDream/.browserslistrc b/palettes/monochromatic/purples/.browserslistrc similarity index 100% rename from palettes/pastel/pastelDream/.browserslistrc rename to palettes/monochromatic/purples/.browserslistrc diff --git a/palettes/monochromatic/purples/CHANGELOG.md b/palettes/monochromatic/purples/CHANGELOG.md new file mode 100644 index 00000000000..859183c3170 --- /dev/null +++ b/palettes/monochromatic/purples/CHANGELOG.md @@ -0,0 +1,16 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-monochrome-purples + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-monochrome-purples + +# 4.0.0-beta.0 (2026-04-08) + +**Note:** Version bump only for package @tsparticles/palette-monochrome-purples diff --git a/palettes/monochromatic/purples/LICENSE b/palettes/monochromatic/purples/LICENSE new file mode 100644 index 00000000000..bdc05f528fa --- /dev/null +++ b/palettes/monochromatic/purples/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/palettes/monochromatic/purples/README.md b/palettes/monochromatic/purples/README.md new file mode 100644 index 00000000000..521339b33d0 --- /dev/null +++ b/palettes/monochromatic/purples/README.md @@ -0,0 +1,203 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Purples Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-purples/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-purples) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-purples.svg)](https://www.npmjs.com/package/@tsparticles/palette-purples) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-purples) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/monochromatic/purples/images/sample.png)](https://particles.js.org/samples/palettes/purples) + +## Colors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ #1A1000 +
+
+ #3A2200 +
+
+ #6B3D00 +
+
+ #A65A00 +
+
+ #D98A1A +
+
+ #FFC266 +
+
+ #090500 +
+
+ #0D0020 +
+
+ #1A0033 +
+
+ #3D0080 +
+
+ #6600CC +
+
+ #9933FF +
+
+ #BB77FF +
+
+ #E0C2FF +
+
+ #FFA500 +
+
+ #FFEFD7 +
+
+ #000000 +
+
+ #FFFFFF +
+
+ #F5F5F5 +
+
+ #1E1E1E +
+
+ #252525 +
+
+ #E0E0E0 +
+
+ #A0A0A0 +
+
+ #404040 +
+
+ #1D3557 +
+
+ Background
+ #1A1000 +
+ Blend mode: source-over | Fill: true +
+## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadPurplesPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadPurplesPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "purples", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadPurplesPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/monochromatic/monochromePurples/eslint.config.js b/palettes/monochromatic/purples/eslint.config.js similarity index 100% rename from palettes/monochromatic/monochromePurples/eslint.config.js rename to palettes/monochromatic/purples/eslint.config.js diff --git a/palettes/monochromatic/monochromePurples/images/sample.png b/palettes/monochromatic/purples/images/sample.png similarity index 100% rename from palettes/monochromatic/monochromePurples/images/sample.png rename to palettes/monochromatic/purples/images/sample.png diff --git a/palettes/monochromatic/purples/package.dist.json b/palettes/monochromatic/purples/package.dist.json new file mode 100644 index 00000000000..e589b235dba --- /dev/null +++ b/palettes/monochromatic/purples/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-monochrome-purples", + "version": "4.0.0-beta.15", + "description": "tsParticles monochrome purples palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/monochromatic/purples" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/monochromatic/purples/package.json b/palettes/monochromatic/purples/package.json new file mode 100644 index 00000000000..a4772822ad6 --- /dev/null +++ b/palettes/monochromatic/purples/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-monochrome-purples", + "version": "4.0.0-beta.15", + "description": "tsParticles monochrome purples palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/monochromatic/purples" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/monochromatic/purples/rollup.config.js b/palettes/monochromatic/purples/rollup.config.js new file mode 100644 index 00000000000..eaa8a186506 --- /dev/null +++ b/palettes/monochromatic/purples/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-purples", + paletteName: "Purples Palette", + version, +}); diff --git a/palettes/monochromatic/purples/src/browser.ts b/palettes/monochromatic/purples/src/browser.ts new file mode 100644 index 00000000000..d19663b1ded --- /dev/null +++ b/palettes/monochromatic/purples/src/browser.ts @@ -0,0 +1,10 @@ +import { loadMonochromePurplesPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadMonochromePurplesPalette?: typeof loadMonochromePurplesPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadMonochromePurplesPalette = loadMonochromePurplesPalette; + +export * from "./index.js"; diff --git a/palettes/monochromatic/purples/src/index.lazy.ts b/palettes/monochromatic/purples/src/index.lazy.ts new file mode 100644 index 00000000000..361b0a4f59e --- /dev/null +++ b/palettes/monochromatic/purples/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "purples"; + +/** + * @param engine - + */ +export async function loadPurplesPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/monochromatic/purples/src/index.ts b/palettes/monochromatic/purples/src/index.ts new file mode 100644 index 00000000000..364ee5b4436 --- /dev/null +++ b/palettes/monochromatic/purples/src/index.ts @@ -0,0 +1,11 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; +const paletteName = "monochrome-purples"; +/** + * @param engine - + */ +export async function loadMonochromePurplesPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/monochromatic/monochromePurples/src/options.ts b/palettes/monochromatic/purples/src/options.ts similarity index 100% rename from palettes/monochromatic/monochromePurples/src/options.ts rename to palettes/monochromatic/purples/src/options.ts diff --git a/palettes/monochromatic/purples/tsconfig.base.json b/palettes/monochromatic/purples/tsconfig.base.json new file mode 100644 index 00000000000..2b489b6aa1c --- /dev/null +++ b/palettes/monochromatic/purples/tsconfig.base.json @@ -0,0 +1,9 @@ +{ + "extends": "@tsparticles/tsconfig/dist/tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src" + }, + "include": [ + "./src" + ] +} diff --git a/palettes/monochromatic/monochromeReds/tsconfig.browser.json b/palettes/monochromatic/purples/tsconfig.browser.json similarity index 100% rename from palettes/monochromatic/monochromeReds/tsconfig.browser.json rename to palettes/monochromatic/purples/tsconfig.browser.json diff --git a/palettes/monochromatic/monochromeReds/tsconfig.json b/palettes/monochromatic/purples/tsconfig.json similarity index 100% rename from palettes/monochromatic/monochromeReds/tsconfig.json rename to palettes/monochromatic/purples/tsconfig.json diff --git a/palettes/monochromatic/monochromeReds/tsconfig.module.json b/palettes/monochromatic/purples/tsconfig.module.json similarity index 100% rename from palettes/monochromatic/monochromeReds/tsconfig.module.json rename to palettes/monochromatic/purples/tsconfig.module.json diff --git a/palettes/monochromatic/monochromeReds/tsconfig.types.json b/palettes/monochromatic/purples/tsconfig.types.json similarity index 100% rename from palettes/monochromatic/monochromeReds/tsconfig.types.json rename to palettes/monochromatic/purples/tsconfig.types.json diff --git a/palettes/monochromatic/purples/typedoc.json b/palettes/monochromatic/purples/typedoc.json new file mode 100644 index 00000000000..c4bd916c734 --- /dev/null +++ b/palettes/monochromatic/purples/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Purples Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/pastel/pastelMint/.browserslistrc b/palettes/monochromatic/reds/.browserslistrc similarity index 100% rename from palettes/pastel/pastelMint/.browserslistrc rename to palettes/monochromatic/reds/.browserslistrc diff --git a/palettes/monochromatic/reds/CHANGELOG.md b/palettes/monochromatic/reds/CHANGELOG.md new file mode 100644 index 00000000000..203c58a44b3 --- /dev/null +++ b/palettes/monochromatic/reds/CHANGELOG.md @@ -0,0 +1,22 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-monochrome-reds + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-monochrome-reds + +# 4.0.0-beta.0 (2026-04-08) + +### Features + +- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) + +# [4.0.0-alpha.5] + +**Note:** Initial version of package @tsparticles/palette-monochrome-reds diff --git a/palettes/monochromatic/reds/LICENSE b/palettes/monochromatic/reds/LICENSE new file mode 100644 index 00000000000..bdc05f528fa --- /dev/null +++ b/palettes/monochromatic/reds/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/palettes/monochromatic/reds/README.md b/palettes/monochromatic/reds/README.md new file mode 100644 index 00000000000..dd45d15591e --- /dev/null +++ b/palettes/monochromatic/reds/README.md @@ -0,0 +1,122 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Reds Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-reds/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-reds) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-reds.svg)](https://www.npmjs.com/package/@tsparticles/palette-reds) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-reds) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/monochromatic/reds/images/sample.png)](https://particles.js.org/samples/palettes/reds) + +## Colors + + + + + + + + + + + + + + + + + + + + +
+
+ #FFDDDD +
+
+ #FF8888 +
+
+ #FF3333 +
+
+ #CC0000 +
+
+ #880000 +
+
+ #440000 +
+
+ Background
+ #0d0000 +
+ Blend mode: source-over | Fill: true +
+ +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadRedsPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadRedsPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "reds", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadRedsPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/monochromatic/monochromeReds/eslint.config.js b/palettes/monochromatic/reds/eslint.config.js similarity index 100% rename from palettes/monochromatic/monochromeReds/eslint.config.js rename to palettes/monochromatic/reds/eslint.config.js diff --git a/palettes/monochromatic/reds/images/sample.png b/palettes/monochromatic/reds/images/sample.png new file mode 100644 index 00000000000..092b554b330 Binary files /dev/null and b/palettes/monochromatic/reds/images/sample.png differ diff --git a/palettes/monochromatic/reds/package.dist.json b/palettes/monochromatic/reds/package.dist.json new file mode 100644 index 00000000000..9b9c2d72340 --- /dev/null +++ b/palettes/monochromatic/reds/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-monochrome-reds", + "version": "4.0.0-beta.15", + "description": "tsParticles monochrome reds palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/monochromatic/reds" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/monochromatic/reds/package.json b/palettes/monochromatic/reds/package.json new file mode 100644 index 00000000000..5609748d48b --- /dev/null +++ b/palettes/monochromatic/reds/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-monochrome-reds", + "version": "4.0.0-beta.15", + "description": "tsParticles monochrome reds palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/monochromatic/reds" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/monochromatic/reds/rollup.config.js b/palettes/monochromatic/reds/rollup.config.js new file mode 100644 index 00000000000..9cdf5ef6aef --- /dev/null +++ b/palettes/monochromatic/reds/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-reds", + paletteName: "Reds Palette", + version, +}); diff --git a/palettes/monochromatic/reds/src/browser.ts b/palettes/monochromatic/reds/src/browser.ts new file mode 100644 index 00000000000..dae3bf64f7c --- /dev/null +++ b/palettes/monochromatic/reds/src/browser.ts @@ -0,0 +1,10 @@ +import { loadMonochromeRedsPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadMonochromeRedsPalette?: typeof loadMonochromeRedsPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadMonochromeRedsPalette = loadMonochromeRedsPalette; + +export * from "./index.js"; diff --git a/palettes/monochromatic/reds/src/index.lazy.ts b/palettes/monochromatic/reds/src/index.lazy.ts new file mode 100644 index 00000000000..f47147f8b50 --- /dev/null +++ b/palettes/monochromatic/reds/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "reds"; + +/** + * @param engine - + */ +export async function loadRedsPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/monochromatic/reds/src/index.ts b/palettes/monochromatic/reds/src/index.ts new file mode 100644 index 00000000000..3d6e4b3a05c --- /dev/null +++ b/palettes/monochromatic/reds/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "monochrome-reds"; + +/** + * @param engine - + */ +export async function loadMonochromeRedsPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/monochromatic/monochromeReds/src/options.ts b/palettes/monochromatic/reds/src/options.ts similarity index 100% rename from palettes/monochromatic/monochromeReds/src/options.ts rename to palettes/monochromatic/reds/src/options.ts diff --git a/palettes/monochromatic/reds/tsconfig.base.json b/palettes/monochromatic/reds/tsconfig.base.json new file mode 100644 index 00000000000..2b489b6aa1c --- /dev/null +++ b/palettes/monochromatic/reds/tsconfig.base.json @@ -0,0 +1,9 @@ +{ + "extends": "@tsparticles/tsconfig/dist/tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src" + }, + "include": [ + "./src" + ] +} diff --git a/palettes/monochromatic/monochromeTeal/tsconfig.browser.json b/palettes/monochromatic/reds/tsconfig.browser.json similarity index 100% rename from palettes/monochromatic/monochromeTeal/tsconfig.browser.json rename to palettes/monochromatic/reds/tsconfig.browser.json diff --git a/palettes/monochromatic/monochromeTeal/tsconfig.json b/palettes/monochromatic/reds/tsconfig.json similarity index 100% rename from palettes/monochromatic/monochromeTeal/tsconfig.json rename to palettes/monochromatic/reds/tsconfig.json diff --git a/palettes/monochromatic/monochromeTeal/tsconfig.module.json b/palettes/monochromatic/reds/tsconfig.module.json similarity index 100% rename from palettes/monochromatic/monochromeTeal/tsconfig.module.json rename to palettes/monochromatic/reds/tsconfig.module.json diff --git a/palettes/monochromatic/monochromeTeal/tsconfig.types.json b/palettes/monochromatic/reds/tsconfig.types.json similarity index 100% rename from palettes/monochromatic/monochromeTeal/tsconfig.types.json rename to palettes/monochromatic/reds/tsconfig.types.json diff --git a/palettes/monochromatic/reds/typedoc.json b/palettes/monochromatic/reds/typedoc.json new file mode 100644 index 00000000000..bccf48a87cb --- /dev/null +++ b/palettes/monochromatic/reds/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Reds Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/pastel/pastelSunset/.browserslistrc b/palettes/monochromatic/silver/.browserslistrc similarity index 100% rename from palettes/pastel/pastelSunset/.browserslistrc rename to palettes/monochromatic/silver/.browserslistrc diff --git a/palettes/monochromatic/silver/CHANGELOG.md b/palettes/monochromatic/silver/CHANGELOG.md new file mode 100644 index 00000000000..7c53a43b3ab --- /dev/null +++ b/palettes/monochromatic/silver/CHANGELOG.md @@ -0,0 +1,12 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-monochrome-silver + +# [4.0.0-beta.12] + +**Note:** Initial version of package @tsparticles/palette-monochrome-silver diff --git a/palettes/monochromatic/silver/LICENSE b/palettes/monochromatic/silver/LICENSE new file mode 100644 index 00000000000..bdc05f528fa --- /dev/null +++ b/palettes/monochromatic/silver/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/palettes/monochromatic/silver/README.md b/palettes/monochromatic/silver/README.md new file mode 100644 index 00000000000..e89151f3dd4 --- /dev/null +++ b/palettes/monochromatic/silver/README.md @@ -0,0 +1,122 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Silver Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-silver/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-silver) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-silver.svg)](https://www.npmjs.com/package/@tsparticles/palette-silver) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-silver) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/monochromatic/silver/images/sample.png)](https://particles.js.org/samples/palettes/silver) + +## Colors + + + + + + + + + + + + + + + + + + + + +
+
+ #F5F7FA +
+
+ #D9E0E8 +
+
+ #B8C2CC +
+
+ #94A3B8 +
+
+ #64748B +
+
+ #334155 +
+
+ Background
+ #05070a +
+ Blend mode: source-over | Fill: true +
+ +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadSilverPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadSilverPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "silver", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadSilverPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/monochromatic/silver/eslint.config.js b/palettes/monochromatic/silver/eslint.config.js new file mode 100644 index 00000000000..248b4d3dd36 --- /dev/null +++ b/palettes/monochromatic/silver/eslint.config.js @@ -0,0 +1,6 @@ +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; +import { defineConfig } from "eslint/config"; + +export default defineConfig([ + tsParticlesESLintConfig, +]); diff --git a/palettes/monochromatic/silver/images/sample.png b/palettes/monochromatic/silver/images/sample.png new file mode 100644 index 00000000000..78ebc6f2c4a Binary files /dev/null and b/palettes/monochromatic/silver/images/sample.png differ diff --git a/palettes/monochromatic/silver/package.dist.json b/palettes/monochromatic/silver/package.dist.json new file mode 100644 index 00000000000..680729d93ff --- /dev/null +++ b/palettes/monochromatic/silver/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-monochrome-silver", + "version": "4.0.0-beta.15", + "description": "tsParticles monochrome silver palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/monochromatic/silver" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/monochromatic/silver/package.json b/palettes/monochromatic/silver/package.json new file mode 100644 index 00000000000..79b49789bb7 --- /dev/null +++ b/palettes/monochromatic/silver/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-monochrome-silver", + "version": "4.0.0-beta.15", + "description": "tsParticles monochrome silver palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/monochromatic/silver" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/monochromatic/silver/rollup.config.js b/palettes/monochromatic/silver/rollup.config.js new file mode 100644 index 00000000000..f50761b7875 --- /dev/null +++ b/palettes/monochromatic/silver/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-silver", + paletteName: "Silver Palette", + version, +}); diff --git a/palettes/monochromatic/silver/src/browser.ts b/palettes/monochromatic/silver/src/browser.ts new file mode 100644 index 00000000000..a3882904556 --- /dev/null +++ b/palettes/monochromatic/silver/src/browser.ts @@ -0,0 +1,10 @@ +import { loadMonochromeSilverPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadMonochromeSilverPalette?: typeof loadMonochromeSilverPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadMonochromeSilverPalette = loadMonochromeSilverPalette; + +export * from "./index.js"; diff --git a/palettes/monochromatic/silver/src/index.lazy.ts b/palettes/monochromatic/silver/src/index.lazy.ts new file mode 100644 index 00000000000..e8f81799ccc --- /dev/null +++ b/palettes/monochromatic/silver/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "monochrome-silver"; + +/** + * @param engine - + */ +export async function loadMonochromeSilverPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/monochromatic/silver/src/index.ts b/palettes/monochromatic/silver/src/index.ts new file mode 100644 index 00000000000..934831deade --- /dev/null +++ b/palettes/monochromatic/silver/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "monochrome-silver"; + +/** + * @param engine - + */ +export async function loadMonochromeSilverPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/monochromatic/silver/src/options.ts b/palettes/monochromatic/silver/src/options.ts new file mode 100644 index 00000000000..1f165d9680d --- /dev/null +++ b/palettes/monochromatic/silver/src/options.ts @@ -0,0 +1,20 @@ +import { type IPalette } from "@tsparticles/engine"; + +export const options: IPalette = { + name: "Monochrome - Silver", + background: "#05070a", + blendMode: "source-over", + colors: { + fill: { + enable: true, + value: [ + "#F5F7FA", + "#D9E0E8", + "#B8C2CC", + "#94A3B8", + "#64748B", + "#334155", + ], + }, + }, +}; diff --git a/palettes/monochromatic/silver/tsconfig.base.json b/palettes/monochromatic/silver/tsconfig.base.json new file mode 100644 index 00000000000..2b489b6aa1c --- /dev/null +++ b/palettes/monochromatic/silver/tsconfig.base.json @@ -0,0 +1,9 @@ +{ + "extends": "@tsparticles/tsconfig/dist/tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src" + }, + "include": [ + "./src" + ] +} diff --git a/palettes/monochromatic/silver/tsconfig.browser.json b/palettes/monochromatic/silver/tsconfig.browser.json new file mode 100644 index 00000000000..80d78351a7d --- /dev/null +++ b/palettes/monochromatic/silver/tsconfig.browser.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.browser.json"], + "compilerOptions": { + "outDir": "./dist/browser" + } +} diff --git a/palettes/monochromatic/silver/tsconfig.json b/palettes/monochromatic/silver/tsconfig.json new file mode 100644 index 00000000000..630bf828704 --- /dev/null +++ b/palettes/monochromatic/silver/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.json"], + "compilerOptions": { + "outDir": "./dist/cjs" + } +} diff --git a/palettes/monochromatic/silver/tsconfig.module.json b/palettes/monochromatic/silver/tsconfig.module.json new file mode 100644 index 00000000000..bb5035a8403 --- /dev/null +++ b/palettes/monochromatic/silver/tsconfig.module.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.module.json"], + "compilerOptions": { + "outDir": "./dist/esm" + } +} diff --git a/palettes/monochromatic/silver/tsconfig.types.json b/palettes/monochromatic/silver/tsconfig.types.json new file mode 100644 index 00000000000..570e9e9d8c6 --- /dev/null +++ b/palettes/monochromatic/silver/tsconfig.types.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.types.json"], + "compilerOptions": { + "outDir": "./dist/types" + } +} diff --git a/palettes/monochromatic/silver/typedoc.json b/palettes/monochromatic/silver/typedoc.json new file mode 100644 index 00000000000..fb9935fffa4 --- /dev/null +++ b/palettes/monochromatic/silver/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Silver Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/pastel/pastelWarm/.browserslistrc b/palettes/monochromatic/teal/.browserslistrc similarity index 100% rename from palettes/pastel/pastelWarm/.browserslistrc rename to palettes/monochromatic/teal/.browserslistrc diff --git a/palettes/monochromatic/teal/CHANGELOG.md b/palettes/monochromatic/teal/CHANGELOG.md new file mode 100644 index 00000000000..a479df53578 --- /dev/null +++ b/palettes/monochromatic/teal/CHANGELOG.md @@ -0,0 +1,22 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-monochrome-teal + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-monochrome-teal + +# 4.0.0-beta.0 (2026-04-08) + +### Features + +- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) + +# [4.0.0-alpha.5] + +**Note:** Initial version of package @tsparticles/palette-monochrome-teal diff --git a/palettes/monochromatic/teal/LICENSE b/palettes/monochromatic/teal/LICENSE new file mode 100644 index 00000000000..bdc05f528fa --- /dev/null +++ b/palettes/monochromatic/teal/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/palettes/monochromatic/teal/README.md b/palettes/monochromatic/teal/README.md new file mode 100644 index 00000000000..896228a0d9d --- /dev/null +++ b/palettes/monochromatic/teal/README.md @@ -0,0 +1,122 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Teal Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-teal/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-teal) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-teal.svg)](https://www.npmjs.com/package/@tsparticles/palette-teal) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-teal) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/monochromatic/teal/images/sample.png)](https://particles.js.org/samples/palettes/teal) + +## Colors + + + + + + + + + + + + + + + + + + + + +
+
+ #DDFFF7 +
+
+ #88FFEE +
+
+ #33DDCC +
+
+ #00AAAA +
+
+ #006666 +
+
+ #003333 +
+
+ Background
+ #000d0c +
+ Blend mode: source-over | Fill: true +
+ +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadTealPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadTealPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "teal", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadTealPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/monochromatic/monochromeTeal/eslint.config.js b/palettes/monochromatic/teal/eslint.config.js similarity index 100% rename from palettes/monochromatic/monochromeTeal/eslint.config.js rename to palettes/monochromatic/teal/eslint.config.js diff --git a/palettes/monochromatic/teal/images/sample.png b/palettes/monochromatic/teal/images/sample.png new file mode 100644 index 00000000000..7483867813a Binary files /dev/null and b/palettes/monochromatic/teal/images/sample.png differ diff --git a/palettes/monochromatic/teal/package.dist.json b/palettes/monochromatic/teal/package.dist.json new file mode 100644 index 00000000000..970fa45718e --- /dev/null +++ b/palettes/monochromatic/teal/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-monochrome-teal", + "version": "4.0.0-beta.15", + "description": "tsParticles monochrome teal palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/monochromatic/teal" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/monochromatic/teal/package.json b/palettes/monochromatic/teal/package.json new file mode 100644 index 00000000000..6ec0ebcb3c6 --- /dev/null +++ b/palettes/monochromatic/teal/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-monochrome-teal", + "version": "4.0.0-beta.15", + "description": "tsParticles monochrome teal palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/monochromatic/teal" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/monochromatic/teal/rollup.config.js b/palettes/monochromatic/teal/rollup.config.js new file mode 100644 index 00000000000..136f0affa15 --- /dev/null +++ b/palettes/monochromatic/teal/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-teal", + paletteName: "Teal Palette", + version, +}); diff --git a/palettes/monochromatic/teal/src/browser.ts b/palettes/monochromatic/teal/src/browser.ts new file mode 100644 index 00000000000..f222be500fb --- /dev/null +++ b/palettes/monochromatic/teal/src/browser.ts @@ -0,0 +1,10 @@ +import { loadMonochromeTealPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadMonochromeTealPalette?: typeof loadMonochromeTealPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadMonochromeTealPalette = loadMonochromeTealPalette; + +export * from "./index.js"; diff --git a/palettes/monochromatic/teal/src/index.lazy.ts b/palettes/monochromatic/teal/src/index.lazy.ts new file mode 100644 index 00000000000..db7a99f9135 --- /dev/null +++ b/palettes/monochromatic/teal/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "teal"; + +/** + * @param engine - + */ +export async function loadTealPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/monochromatic/teal/src/index.ts b/palettes/monochromatic/teal/src/index.ts new file mode 100644 index 00000000000..9de6a9ea323 --- /dev/null +++ b/palettes/monochromatic/teal/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "monochrome-teal"; + +/** + * @param engine - + */ +export async function loadMonochromeTealPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/monochromatic/monochromeTeal/src/options.ts b/palettes/monochromatic/teal/src/options.ts similarity index 100% rename from palettes/monochromatic/monochromeTeal/src/options.ts rename to palettes/monochromatic/teal/src/options.ts diff --git a/palettes/monochromatic/teal/tsconfig.base.json b/palettes/monochromatic/teal/tsconfig.base.json new file mode 100644 index 00000000000..2b489b6aa1c --- /dev/null +++ b/palettes/monochromatic/teal/tsconfig.base.json @@ -0,0 +1,9 @@ +{ + "extends": "@tsparticles/tsconfig/dist/tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src" + }, + "include": [ + "./src" + ] +} diff --git a/palettes/monochromatic/monochromeWhite/tsconfig.browser.json b/palettes/monochromatic/teal/tsconfig.browser.json similarity index 100% rename from palettes/monochromatic/monochromeWhite/tsconfig.browser.json rename to palettes/monochromatic/teal/tsconfig.browser.json diff --git a/palettes/monochromatic/monochromeWhite/tsconfig.json b/palettes/monochromatic/teal/tsconfig.json similarity index 100% rename from palettes/monochromatic/monochromeWhite/tsconfig.json rename to palettes/monochromatic/teal/tsconfig.json diff --git a/palettes/monochromatic/monochromeWhite/tsconfig.module.json b/palettes/monochromatic/teal/tsconfig.module.json similarity index 100% rename from palettes/monochromatic/monochromeWhite/tsconfig.module.json rename to palettes/monochromatic/teal/tsconfig.module.json diff --git a/palettes/monochromatic/monochromeWhite/tsconfig.types.json b/palettes/monochromatic/teal/tsconfig.types.json similarity index 100% rename from palettes/monochromatic/monochromeWhite/tsconfig.types.json rename to palettes/monochromatic/teal/tsconfig.types.json diff --git a/palettes/monochromatic/teal/typedoc.json b/palettes/monochromatic/teal/typedoc.json new file mode 100644 index 00000000000..9231f3249ab --- /dev/null +++ b/palettes/monochromatic/teal/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Teal Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/vibrant/vibrant/.browserslistrc b/palettes/monochromatic/white/.browserslistrc similarity index 100% rename from palettes/vibrant/vibrant/.browserslistrc rename to palettes/monochromatic/white/.browserslistrc diff --git a/palettes/monochromatic/white/CHANGELOG.md b/palettes/monochromatic/white/CHANGELOG.md new file mode 100644 index 00000000000..8bed6eb9ff7 --- /dev/null +++ b/palettes/monochromatic/white/CHANGELOG.md @@ -0,0 +1,22 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-monochrome-white + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-monochrome-white + +# 4.0.0-beta.0 (2026-04-08) + +### Features + +- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) + +# [4.0.0-alpha.5] + +**Note:** Initial version of package @tsparticles/palette-monochrome-white diff --git a/palettes/monochromatic/white/LICENSE b/palettes/monochromatic/white/LICENSE new file mode 100644 index 00000000000..bdc05f528fa --- /dev/null +++ b/palettes/monochromatic/white/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/palettes/monochromatic/white/README.md b/palettes/monochromatic/white/README.md new file mode 100644 index 00000000000..d2027bf33b4 --- /dev/null +++ b/palettes/monochromatic/white/README.md @@ -0,0 +1,122 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles White Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-white/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-white) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-white.svg)](https://www.npmjs.com/package/@tsparticles/palette-white) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-white) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/monochromatic/white/images/sample.png)](https://particles.js.org/samples/palettes/white) + +## Colors + + + + + + + + + + + + + + + + + + + + +
+
+ #FFFFFF +
+
+ #F5F5F5 +
+
+ #E0E0E0 +
+
+ #CCCCCC +
+
+ #AAAAAA +
+
+ #888888 +
+
+ Background
+ #111111 +
+ Blend mode: source-over | Fill: true +
+ +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadWhitePalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadWhitePalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "white", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadWhitePalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/monochromatic/monochromeWhite/eslint.config.js b/palettes/monochromatic/white/eslint.config.js similarity index 100% rename from palettes/monochromatic/monochromeWhite/eslint.config.js rename to palettes/monochromatic/white/eslint.config.js diff --git a/palettes/monochromatic/white/images/sample.png b/palettes/monochromatic/white/images/sample.png new file mode 100644 index 00000000000..94fa323d7da Binary files /dev/null and b/palettes/monochromatic/white/images/sample.png differ diff --git a/palettes/monochromatic/white/package.dist.json b/palettes/monochromatic/white/package.dist.json new file mode 100644 index 00000000000..e74925fe94d --- /dev/null +++ b/palettes/monochromatic/white/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-monochrome-white", + "version": "4.0.0-beta.15", + "description": "tsParticles monochrome white palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/monochromatic/white" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/monochromatic/white/package.json b/palettes/monochromatic/white/package.json new file mode 100644 index 00000000000..11b60b8ca4d --- /dev/null +++ b/palettes/monochromatic/white/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-monochrome-white", + "version": "4.0.0-beta.15", + "description": "tsParticles monochrome white palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/monochromatic/white" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/monochromatic/white/rollup.config.js b/palettes/monochromatic/white/rollup.config.js new file mode 100644 index 00000000000..88a1907bdc5 --- /dev/null +++ b/palettes/monochromatic/white/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-white", + paletteName: "White Palette", + version, +}); diff --git a/palettes/monochromatic/white/src/browser.ts b/palettes/monochromatic/white/src/browser.ts new file mode 100644 index 00000000000..c9793b66497 --- /dev/null +++ b/palettes/monochromatic/white/src/browser.ts @@ -0,0 +1,10 @@ +import { loadMonochromeWhitePalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadMonochromeWhitePalette?: typeof loadMonochromeWhitePalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadMonochromeWhitePalette = loadMonochromeWhitePalette; + +export * from "./index.js"; diff --git a/palettes/monochromatic/white/src/index.lazy.ts b/palettes/monochromatic/white/src/index.lazy.ts new file mode 100644 index 00000000000..0b596aac68e --- /dev/null +++ b/palettes/monochromatic/white/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "white"; + +/** + * @param engine - + */ +export async function loadWhitePalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/monochromatic/white/src/index.ts b/palettes/monochromatic/white/src/index.ts new file mode 100644 index 00000000000..4a96bb2abd9 --- /dev/null +++ b/palettes/monochromatic/white/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "monochrome-white"; + +/** + * @param engine - + */ +export async function loadMonochromeWhitePalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/monochromatic/monochromeWhite/src/options.ts b/palettes/monochromatic/white/src/options.ts similarity index 100% rename from palettes/monochromatic/monochromeWhite/src/options.ts rename to palettes/monochromatic/white/src/options.ts diff --git a/palettes/monochromatic/white/tsconfig.base.json b/palettes/monochromatic/white/tsconfig.base.json new file mode 100644 index 00000000000..2b489b6aa1c --- /dev/null +++ b/palettes/monochromatic/white/tsconfig.base.json @@ -0,0 +1,9 @@ +{ + "extends": "@tsparticles/tsconfig/dist/tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src" + }, + "include": [ + "./src" + ] +} diff --git a/palettes/monochromatic/monochromeYellows/tsconfig.browser.json b/palettes/monochromatic/white/tsconfig.browser.json similarity index 100% rename from palettes/monochromatic/monochromeYellows/tsconfig.browser.json rename to palettes/monochromatic/white/tsconfig.browser.json diff --git a/palettes/monochromatic/monochromeYellows/tsconfig.json b/palettes/monochromatic/white/tsconfig.json similarity index 100% rename from palettes/monochromatic/monochromeYellows/tsconfig.json rename to palettes/monochromatic/white/tsconfig.json diff --git a/palettes/monochromatic/monochromeYellows/tsconfig.module.json b/palettes/monochromatic/white/tsconfig.module.json similarity index 100% rename from palettes/monochromatic/monochromeYellows/tsconfig.module.json rename to palettes/monochromatic/white/tsconfig.module.json diff --git a/palettes/monochromatic/monochromeYellows/tsconfig.types.json b/palettes/monochromatic/white/tsconfig.types.json similarity index 100% rename from palettes/monochromatic/monochromeYellows/tsconfig.types.json rename to palettes/monochromatic/white/tsconfig.types.json diff --git a/palettes/monochromatic/white/typedoc.json b/palettes/monochromatic/white/typedoc.json new file mode 100644 index 00000000000..9626ecc610a --- /dev/null +++ b/palettes/monochromatic/white/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles White Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/vibrant/vibrantElectric/.browserslistrc b/palettes/monochromatic/yellows/.browserslistrc similarity index 100% rename from palettes/vibrant/vibrantElectric/.browserslistrc rename to palettes/monochromatic/yellows/.browserslistrc diff --git a/palettes/monochromatic/yellows/CHANGELOG.md b/palettes/monochromatic/yellows/CHANGELOG.md new file mode 100644 index 00000000000..df412576f1f --- /dev/null +++ b/palettes/monochromatic/yellows/CHANGELOG.md @@ -0,0 +1,22 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-monochrome-yellows + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-monochrome-yellows + +# 4.0.0-beta.0 (2026-04-08) + +### Features + +- added more palettes and reorganized some old ones ([1b1dd2b](https://github.com/tsparticles/palettes/commit/1b1dd2b029e7b9db6637ae210d4ea09f34d89c6d)) + +# [4.0.0-alpha.5] + +**Note:** Initial version of package @tsparticles/palette-monochrome-yellows diff --git a/palettes/monochromatic/yellows/LICENSE b/palettes/monochromatic/yellows/LICENSE new file mode 100644 index 00000000000..bdc05f528fa --- /dev/null +++ b/palettes/monochromatic/yellows/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/palettes/monochromatic/yellows/README.md b/palettes/monochromatic/yellows/README.md new file mode 100644 index 00000000000..3f041c04df3 --- /dev/null +++ b/palettes/monochromatic/yellows/README.md @@ -0,0 +1,122 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Yellows Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-yellows/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-yellows) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-yellows.svg)](https://www.npmjs.com/package/@tsparticles/palette-yellows) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-yellows) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/monochromatic/yellows/images/sample.png)](https://particles.js.org/samples/palettes/yellows) + +## Colors + + + + + + + + + + + + + + + + + + + + +
+
+ #FFFEDD +
+
+ #FFEE88 +
+
+ #FFCC33 +
+
+ #DDA000 +
+
+ #886600 +
+
+ #443300 +
+
+ Background
+ #0d0c00 +
+ Blend mode: source-over | Fill: true +
+ +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadYellowsPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadYellowsPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "yellows", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadYellowsPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/monochromatic/monochromeYellows/eslint.config.js b/palettes/monochromatic/yellows/eslint.config.js similarity index 100% rename from palettes/monochromatic/monochromeYellows/eslint.config.js rename to palettes/monochromatic/yellows/eslint.config.js diff --git a/palettes/monochromatic/yellows/images/sample.png b/palettes/monochromatic/yellows/images/sample.png new file mode 100644 index 00000000000..0a76926bad7 Binary files /dev/null and b/palettes/monochromatic/yellows/images/sample.png differ diff --git a/palettes/monochromatic/yellows/package.dist.json b/palettes/monochromatic/yellows/package.dist.json new file mode 100644 index 00000000000..85ba3abc208 --- /dev/null +++ b/palettes/monochromatic/yellows/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-monochrome-yellows", + "version": "4.0.0-beta.15", + "description": "tsParticles monochrome yellows palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/monochromatic/yellows" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/monochromatic/yellows/package.json b/palettes/monochromatic/yellows/package.json new file mode 100644 index 00000000000..5b7e65b2ebb --- /dev/null +++ b/palettes/monochromatic/yellows/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-monochrome-yellows", + "version": "4.0.0-beta.15", + "description": "tsParticles monochrome yellows palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/monochromatic/yellows" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/monochromatic/yellows/rollup.config.js b/palettes/monochromatic/yellows/rollup.config.js new file mode 100644 index 00000000000..d370e66bc6e --- /dev/null +++ b/palettes/monochromatic/yellows/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-yellows", + paletteName: "Yellows Palette", + version, +}); diff --git a/palettes/monochromatic/yellows/src/browser.ts b/palettes/monochromatic/yellows/src/browser.ts new file mode 100644 index 00000000000..76e064859eb --- /dev/null +++ b/palettes/monochromatic/yellows/src/browser.ts @@ -0,0 +1,10 @@ +import { loadMonochromeYellowsPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadMonochromeYellowsPalette?: typeof loadMonochromeYellowsPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadMonochromeYellowsPalette = loadMonochromeYellowsPalette; + +export * from "./index.js"; diff --git a/palettes/monochromatic/yellows/src/index.lazy.ts b/palettes/monochromatic/yellows/src/index.lazy.ts new file mode 100644 index 00000000000..cebfc4966a3 --- /dev/null +++ b/palettes/monochromatic/yellows/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "yellows"; + +/** + * @param engine - + */ +export async function loadYellowsPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/monochromatic/yellows/src/index.ts b/palettes/monochromatic/yellows/src/index.ts new file mode 100644 index 00000000000..ff0c9323119 --- /dev/null +++ b/palettes/monochromatic/yellows/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "monochrome-yellows"; + +/** + * @param engine - + */ +export async function loadMonochromeYellowsPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/monochromatic/monochromeYellows/src/options.ts b/palettes/monochromatic/yellows/src/options.ts similarity index 100% rename from palettes/monochromatic/monochromeYellows/src/options.ts rename to palettes/monochromatic/yellows/src/options.ts diff --git a/palettes/monochromatic/yellows/tsconfig.base.json b/palettes/monochromatic/yellows/tsconfig.base.json new file mode 100644 index 00000000000..2b489b6aa1c --- /dev/null +++ b/palettes/monochromatic/yellows/tsconfig.base.json @@ -0,0 +1,9 @@ +{ + "extends": "@tsparticles/tsconfig/dist/tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src" + }, + "include": [ + "./src" + ] +} diff --git a/palettes/pastel/pastelDream/tsconfig.browser.json b/palettes/monochromatic/yellows/tsconfig.browser.json similarity index 100% rename from palettes/pastel/pastelDream/tsconfig.browser.json rename to palettes/monochromatic/yellows/tsconfig.browser.json diff --git a/palettes/pastel/pastelDream/tsconfig.json b/palettes/monochromatic/yellows/tsconfig.json similarity index 100% rename from palettes/pastel/pastelDream/tsconfig.json rename to palettes/monochromatic/yellows/tsconfig.json diff --git a/palettes/pastel/pastelDream/tsconfig.module.json b/palettes/monochromatic/yellows/tsconfig.module.json similarity index 100% rename from palettes/pastel/pastelDream/tsconfig.module.json rename to palettes/monochromatic/yellows/tsconfig.module.json diff --git a/palettes/pastel/pastelDream/tsconfig.types.json b/palettes/monochromatic/yellows/tsconfig.types.json similarity index 100% rename from palettes/pastel/pastelDream/tsconfig.types.json rename to palettes/monochromatic/yellows/tsconfig.types.json diff --git a/palettes/monochromatic/yellows/typedoc.json b/palettes/monochromatic/yellows/typedoc.json new file mode 100644 index 00000000000..485a12a0e2d --- /dev/null +++ b/palettes/monochromatic/yellows/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Yellows Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/nature/autumnLeaves/CHANGELOG.md b/palettes/nature/autumnLeaves/CHANGELOG.md index c6b52c8502d..0e4b85dad05 100644 --- a/palettes/nature/autumnLeaves/CHANGELOG.md +++ b/palettes/nature/autumnLeaves/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-autumn-leaves + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-autumn-leaves diff --git a/palettes/nature/autumnLeaves/README.md b/palettes/nature/autumnLeaves/README.md index 5ee0f1ecf1b..1fc18d7a83f 100644 --- a/palettes/nature/autumnLeaves/README.md +++ b/palettes/nature/autumnLeaves/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Autumn Leaves Palette +# tsParticles AutumnLeaves Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-autumn-leaves/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-autumn-leaves) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-autumn-leaves.svg)](https://www.npmjs.com/package/@tsparticles/palette-autumn-leaves) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-autumn-leaves)](https://www.npmjs.com/package/@tsparticles/palette-autumn-leaves) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-autumnLeaves/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-autumnLeaves) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-autumnLeaves.svg)](https://www.npmjs.com/package/@tsparticles/palette-autumnLeaves) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-autumnLeaves) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for autumn leaves. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/autumnLeaves/images/sample.png)](https://particles.js.org/samples/palettes/autumn-leaves) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/nature/autumnLeaves/images/sample.png)](https://particles.js.org/samples/palettes/autumnLeaves) ## Colors @@ -83,7 +83,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -105,7 +105,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "autumn-leaves", + palette: "autumnLeaves", }; await engine.load({ @@ -120,47 +120,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "autumn-leaves", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadAutumnLeavesPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadAutumnLeavesPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadAutumnLeavesPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -paautumnLeaves[Autumn Leaves] -end - -e[tsParticles Engine] --> paautumnLeaves -``` diff --git a/palettes/nature/autumnLeaves/package.dist.json b/palettes/nature/autumnLeaves/package.dist.json index 4f30a8fd11a..e4849072a2d 100644 --- a/palettes/nature/autumnLeaves/package.dist.json +++ b/palettes/nature/autumnLeaves/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-autumn-leaves", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles autumn leaves palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.autumn-leaves.min.js", - "unpkg": "tsparticles.palette.autumn-leaves.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/nature/autumnLeaves/package.json b/palettes/nature/autumnLeaves/package.json index 90511630620..b66ec5b1722 100644 --- a/palettes/nature/autumnLeaves/package.json +++ b/palettes/nature/autumnLeaves/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-autumn-leaves", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles autumn leaves palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/nature/autumnLeaves/rollup.config.js b/palettes/nature/autumnLeaves/rollup.config.js new file mode 100644 index 00000000000..ef28c3f590e --- /dev/null +++ b/palettes/nature/autumnLeaves/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-autumnLeaves", + paletteName: "AutumnLeaves Palette", + version, +}); diff --git a/palettes/nature/autumnLeaves/src/browser.ts b/palettes/nature/autumnLeaves/src/browser.ts new file mode 100644 index 00000000000..aadc2e34354 --- /dev/null +++ b/palettes/nature/autumnLeaves/src/browser.ts @@ -0,0 +1,10 @@ +import { loadAutumnLeavesPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadAutumnLeavesPalette?: typeof loadAutumnLeavesPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadAutumnLeavesPalette = loadAutumnLeavesPalette; + +export * from "./index.js"; diff --git a/palettes/nature/autumnLeaves/src/index.lazy.ts b/palettes/nature/autumnLeaves/src/index.lazy.ts new file mode 100644 index 00000000000..b4cc36ca908 --- /dev/null +++ b/palettes/nature/autumnLeaves/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "autumn-leaves"; + +/** + * @param engine - + */ +export async function loadAutumnLeavesPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/nature/autumnLeaves/src/index.ts b/palettes/nature/autumnLeaves/src/index.ts index 89239a84621..d9b2b147345 100644 --- a/palettes/nature/autumnLeaves/src/index.ts +++ b/palettes/nature/autumnLeaves/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "autumn-leaves"; @@ -6,9 +7,7 @@ const paletteName = "autumn-leaves"; * @param engine - */ export async function loadAutumnLeavesPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/nature/autumnLeaves/typedoc.json b/palettes/nature/autumnLeaves/typedoc.json index 0f31ff54ebb..2a734c8bd54 100644 --- a/palettes/nature/autumnLeaves/typedoc.json +++ b/palettes/nature/autumnLeaves/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Autumn Leaves Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles AutumnLeaves Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/nature/autumnLeaves/webpack.config.js b/palettes/nature/autumnLeaves/webpack.config.js deleted file mode 100644 index be2c844b8af..00000000000 --- a/palettes/nature/autumnLeaves/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-autumn-leaves", - paletteName: "Autumn Leaves Palette", - version, -}); diff --git a/palettes/nature/cherryBlossom/CHANGELOG.md b/palettes/nature/cherryBlossom/CHANGELOG.md index b544787c674..e42b19c673e 100644 --- a/palettes/nature/cherryBlossom/CHANGELOG.md +++ b/palettes/nature/cherryBlossom/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-cherry-blossom + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-cherry-blossom diff --git a/palettes/nature/cherryBlossom/README.md b/palettes/nature/cherryBlossom/README.md index 1ba07213b29..95c8605cefb 100644 --- a/palettes/nature/cherryBlossom/README.md +++ b/palettes/nature/cherryBlossom/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Cherry Blossom Palette +# tsParticles CherryBlossom Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-cherry-blossom/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-cherry-blossom) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-cherry-blossom.svg)](https://www.npmjs.com/package/@tsparticles/palette-cherry-blossom) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-cherry-blossom)](https://www.npmjs.com/package/@tsparticles/palette-cherry-blossom) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-cherryBlossom/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-cherryBlossom) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-cherryBlossom.svg)](https://www.npmjs.com/package/@tsparticles/palette-cherryBlossom) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-cherryBlossom) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for cherry blossom. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/cherryBlossom/images/sample.png)](https://particles.js.org/samples/palettes/cherry-blossom) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/nature/cherryBlossom/images/sample.png)](https://particles.js.org/samples/palettes/cherryBlossom) ## Colors @@ -79,7 +79,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -101,7 +101,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "cherry-blossom", + palette: "cherryBlossom", }; await engine.load({ @@ -116,47 +116,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "cherry-blossom", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadCherryBlossomPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadCherryBlossomPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadCherryBlossomPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -pacherryBlossom[Cherry Blossom] -end - -e[tsParticles Engine] --> pacherryBlossom -``` diff --git a/palettes/nature/cherryBlossom/package.dist.json b/palettes/nature/cherryBlossom/package.dist.json index 5fe12c71854..0d23785d1a7 100644 --- a/palettes/nature/cherryBlossom/package.dist.json +++ b/palettes/nature/cherryBlossom/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-cherry-blossom", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles cherry blossom palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.cherry-blossom.min.js", - "unpkg": "tsparticles.palette.cherry-blossom.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/nature/cherryBlossom/package.json b/palettes/nature/cherryBlossom/package.json index c0909e2cdfb..905b08409d8 100644 --- a/palettes/nature/cherryBlossom/package.json +++ b/palettes/nature/cherryBlossom/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-cherry-blossom", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles cherry blossom palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/nature/cherryBlossom/rollup.config.js b/palettes/nature/cherryBlossom/rollup.config.js new file mode 100644 index 00000000000..9a00d84041b --- /dev/null +++ b/palettes/nature/cherryBlossom/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-cherryBlossom", + paletteName: "CherryBlossom Palette", + version, +}); diff --git a/palettes/nature/cherryBlossom/src/browser.ts b/palettes/nature/cherryBlossom/src/browser.ts new file mode 100644 index 00000000000..deb5c3b4605 --- /dev/null +++ b/palettes/nature/cherryBlossom/src/browser.ts @@ -0,0 +1,10 @@ +import { loadCherryBlossomPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadCherryBlossomPalette?: typeof loadCherryBlossomPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadCherryBlossomPalette = loadCherryBlossomPalette; + +export * from "./index.js"; diff --git a/palettes/nature/cherryBlossom/src/index.lazy.ts b/palettes/nature/cherryBlossom/src/index.lazy.ts new file mode 100644 index 00000000000..bc70ab337a3 --- /dev/null +++ b/palettes/nature/cherryBlossom/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "cherry-blossom"; + +/** + * @param engine - + */ +export async function loadCherryBlossomPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/nature/cherryBlossom/src/index.ts b/palettes/nature/cherryBlossom/src/index.ts index a350ee1a2ea..3f389dfdd62 100644 --- a/palettes/nature/cherryBlossom/src/index.ts +++ b/palettes/nature/cherryBlossom/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "cherry-blossom"; @@ -6,9 +7,7 @@ const paletteName = "cherry-blossom"; * @param engine - */ export async function loadCherryBlossomPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/nature/cherryBlossom/typedoc.json b/palettes/nature/cherryBlossom/typedoc.json index 6788a909977..1b745963d5c 100644 --- a/palettes/nature/cherryBlossom/typedoc.json +++ b/palettes/nature/cherryBlossom/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Cherry Blossom Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles CherryBlossom Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/nature/cherryBlossom/webpack.config.js b/palettes/nature/cherryBlossom/webpack.config.js deleted file mode 100644 index 2e6d30b3f39..00000000000 --- a/palettes/nature/cherryBlossom/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-cherry-blossom", - paletteName: "Cherry Blossom Palette", - version, -}); diff --git a/palettes/nature/dandelionSeeds/CHANGELOG.md b/palettes/nature/dandelionSeeds/CHANGELOG.md index 408ac10426a..db7cbba7ed5 100644 --- a/palettes/nature/dandelionSeeds/CHANGELOG.md +++ b/palettes/nature/dandelionSeeds/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-dandelion-seeds + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-dandelion-seeds diff --git a/palettes/nature/dandelionSeeds/README.md b/palettes/nature/dandelionSeeds/README.md index e954d4d1b86..43ee2f57d1d 100644 --- a/palettes/nature/dandelionSeeds/README.md +++ b/palettes/nature/dandelionSeeds/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Dandelion Seeds Palette +# tsParticles DandelionSeeds Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-dandelion-seeds/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-dandelion-seeds) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-dandelion-seeds.svg)](https://www.npmjs.com/package/@tsparticles/palette-dandelion-seeds) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-dandelion-seeds)](https://www.npmjs.com/package/@tsparticles/palette-dandelion-seeds) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-dandelionSeeds/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-dandelionSeeds) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-dandelionSeeds.svg)](https://www.npmjs.com/package/@tsparticles/palette-dandelionSeeds) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-dandelionSeeds) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for dandelion seeds. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/dandelionSeeds/images/sample.png)](https://particles.js.org/samples/palettes/dandelion-seeds) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/nature/dandelionSeeds/images/sample.png)](https://particles.js.org/samples/palettes/dandelionSeeds) ## Colors @@ -65,7 +65,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -87,7 +87,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "dandelion-seeds", + palette: "dandelionSeeds", }; await engine.load({ @@ -102,47 +102,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "dandelion-seeds", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadDandelionSeedsPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadDandelionSeedsPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadDandelionSeedsPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -padandelionSeeds[Dandelion Seeds] -end - -e[tsParticles Engine] --> padandelionSeeds -``` diff --git a/palettes/nature/dandelionSeeds/package.dist.json b/palettes/nature/dandelionSeeds/package.dist.json index d6094e17607..48e3f55f479 100644 --- a/palettes/nature/dandelionSeeds/package.dist.json +++ b/palettes/nature/dandelionSeeds/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-dandelion-seeds", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles dandelion seeds palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.dandelion-seeds.min.js", - "unpkg": "tsparticles.palette.dandelion-seeds.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/nature/dandelionSeeds/package.json b/palettes/nature/dandelionSeeds/package.json index d5b09bbcec5..0faf0a9efde 100644 --- a/palettes/nature/dandelionSeeds/package.json +++ b/palettes/nature/dandelionSeeds/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-dandelion-seeds", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles dandelion seeds palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/nature/dandelionSeeds/rollup.config.js b/palettes/nature/dandelionSeeds/rollup.config.js new file mode 100644 index 00000000000..10c510a958e --- /dev/null +++ b/palettes/nature/dandelionSeeds/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-dandelionSeeds", + paletteName: "DandelionSeeds Palette", + version, +}); diff --git a/palettes/nature/dandelionSeeds/src/browser.ts b/palettes/nature/dandelionSeeds/src/browser.ts new file mode 100644 index 00000000000..3f5c3b802a8 --- /dev/null +++ b/palettes/nature/dandelionSeeds/src/browser.ts @@ -0,0 +1,10 @@ +import { loadDandelionSeedsPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadDandelionSeedsPalette?: typeof loadDandelionSeedsPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadDandelionSeedsPalette = loadDandelionSeedsPalette; + +export * from "./index.js"; diff --git a/palettes/nature/dandelionSeeds/src/index.lazy.ts b/palettes/nature/dandelionSeeds/src/index.lazy.ts new file mode 100644 index 00000000000..40886b25bcd --- /dev/null +++ b/palettes/nature/dandelionSeeds/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "dandelion-seeds"; + +/** + * @param engine - + */ +export async function loadDandelionSeedsPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/nature/dandelionSeeds/src/index.ts b/palettes/nature/dandelionSeeds/src/index.ts index 0d95b116d9e..6aa1b143645 100644 --- a/palettes/nature/dandelionSeeds/src/index.ts +++ b/palettes/nature/dandelionSeeds/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "dandelion-seeds"; @@ -6,9 +7,7 @@ const paletteName = "dandelion-seeds"; * @param engine - */ export async function loadDandelionSeedsPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/nature/dandelionSeeds/typedoc.json b/palettes/nature/dandelionSeeds/typedoc.json index 1f260eb7b75..85f4b375401 100644 --- a/palettes/nature/dandelionSeeds/typedoc.json +++ b/palettes/nature/dandelionSeeds/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Dandelion Seeds Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles DandelionSeeds Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/nature/dandelionSeeds/webpack.config.js b/palettes/nature/dandelionSeeds/webpack.config.js deleted file mode 100644 index 0ca29aefdd6..00000000000 --- a/palettes/nature/dandelionSeeds/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-dandelion-seeds", - paletteName: "Dandelion Seeds Palette", - version, -}); diff --git a/palettes/nature/earthyNature/CHANGELOG.md b/palettes/nature/earthyNature/CHANGELOG.md index ad9758fb280..8e042448af3 100644 --- a/palettes/nature/earthyNature/CHANGELOG.md +++ b/palettes/nature/earthyNature/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-earthy-nature + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-earthy-nature diff --git a/palettes/nature/earthyNature/README.md b/palettes/nature/earthyNature/README.md index e09b004a330..be6b0c6f9f8 100644 --- a/palettes/nature/earthyNature/README.md +++ b/palettes/nature/earthyNature/README.md @@ -1,7 +1,147 @@ -# tsParticles Earthy Nature Palette +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for earthy nature. +# tsParticles EarthyNature Palette +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-earthyNature/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-earthyNature) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-earthyNature.svg)](https://www.npmjs.com/package/@tsparticles/palette-earthyNature) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-earthyNature) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/nature/earthyNature/images/sample.png)](https://particles.js.org/samples/palettes/earthyNature) + +## Colors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ #1A1000 +
+
+ #3A2200 +
+
+ #6B3D00 +
+
+ #A65A00 +
+
+ #D98A1A +
+
+ #FFC266 +
+
+ #090500 +
+
+ #1A1008 +
+
+ #2D5A27 +
+
+ #4A7C59 +
+
+ #6B8F71 +
+
+ #A8C5A0 +
+
+ #7C5A3C +
+
+ #C9A96E +
+
+ #FFA500 +
+
+ #FFEFD7 +
+
+ #000000 +
+
+ #FFFFFF +
+
+ #F5F5F5 +
+
+ #1E1E1E +
+
+ #252525 +
+
+ #E0E0E0 +
+
+ #A0A0A0 +
+
+ #404040 +
+
+ #1D3557 +
+
+ Background
+ #1A1000 +
+ Blend mode: source-over | Fill: true +
## Quick checklist 1. Install `@tsparticles/engine` (or use the CDN bundle below) @@ -10,25 +150,25 @@ A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. -## Install +## How to use it + +### CDN / Vanilla JS / jQuery -```bash -pnpm add @tsparticles/palette-earthy-nature +```html + + ``` -## Usage +### Usage -```ts -import { loadBasic } from "@tsparticles/basic"; -import { tsParticles } from "@tsparticles/engine"; -import { loadEarthyNaturePalette } from "@tsparticles/palette-earthy-nature"; +Once the scripts are loaded you can set up `tsParticles` like this: -await loadBasic(tsParticles); -await loadEarthyNaturePalette(tsParticles); +```javascript +(async engine => { + await loadBasic(engine); + await loadEarthyNaturePalette(engine); -await tsParticles.load({ - id: "tsparticles", - options: { + const options = { particles: { number: { value: 200 }, shape: { type: "circle" }, @@ -38,7 +178,26 @@ await tsParticles.load({ speed: 2, }, }, - palette: "earthy-nature", - }, -}); + palette: "earthyNature", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); ``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadEarthyNaturePalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/nature/earthyNature/package.dist.json b/palettes/nature/earthyNature/package.dist.json index 875dffe31c0..f112cab966d 100644 --- a/palettes/nature/earthyNature/package.dist.json +++ b/palettes/nature/earthyNature/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-earthy-nature", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles earthy nature palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette-earthy-nature.min.js", - "unpkg": "tsparticles.palette-earthy-nature.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/nature/earthyNature/package.json b/palettes/nature/earthyNature/package.json index 34be1f24472..a093f504ec6 100644 --- a/palettes/nature/earthyNature/package.json +++ b/palettes/nature/earthyNature/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-earthy-nature", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles earthy nature palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/nature/earthyNature/rollup.config.js b/palettes/nature/earthyNature/rollup.config.js new file mode 100644 index 00000000000..d66db35e1af --- /dev/null +++ b/palettes/nature/earthyNature/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-earthyNature", + paletteName: "EarthyNature Palette", + version, +}); diff --git a/palettes/nature/earthyNature/src/browser.ts b/palettes/nature/earthyNature/src/browser.ts new file mode 100644 index 00000000000..171fe60e528 --- /dev/null +++ b/palettes/nature/earthyNature/src/browser.ts @@ -0,0 +1,10 @@ +import { loadEarthyNaturePalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadEarthyNaturePalette?: typeof loadEarthyNaturePalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadEarthyNaturePalette = loadEarthyNaturePalette; + +export * from "./index.js"; diff --git a/palettes/nature/earthyNature/src/index.lazy.ts b/palettes/nature/earthyNature/src/index.lazy.ts new file mode 100644 index 00000000000..204175b7107 --- /dev/null +++ b/palettes/nature/earthyNature/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "earthy-nature"; + +/** + * @param engine - + */ +export async function loadEarthyNaturePalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/nature/earthyNature/src/index.ts b/palettes/nature/earthyNature/src/index.ts index 47b277b0f34..34effa45529 100644 --- a/palettes/nature/earthyNature/src/index.ts +++ b/palettes/nature/earthyNature/src/index.ts @@ -1,11 +1,11 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "earthy-nature"; /** * @param engine - */ export async function loadEarthyNaturePalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/nature/earthyNature/typedoc.json b/palettes/nature/earthyNature/typedoc.json index 7621d833d2e..67e01f5a4ce 100644 --- a/palettes/nature/earthyNature/typedoc.json +++ b/palettes/nature/earthyNature/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Earthy Nature Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles EarthyNature Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/nature/earthyNature/webpack.config.js b/palettes/nature/earthyNature/webpack.config.js deleted file mode 100644 index f7b675fa191..00000000000 --- a/palettes/nature/earthyNature/webpack.config.js +++ /dev/null @@ -1,15 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-earthy-nature", - paletteName: "Earthy Nature Palette", - version, -}); diff --git a/palettes/nature/fireflies/CHANGELOG.md b/palettes/nature/fireflies/CHANGELOG.md index 90e57036b7e..2b38f33ca43 100644 --- a/palettes/nature/fireflies/CHANGELOG.md +++ b/palettes/nature/fireflies/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-fireflies + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-fireflies diff --git a/palettes/nature/fireflies/README.md b/palettes/nature/fireflies/README.md index a3e525ea146..bec513d1b07 100644 --- a/palettes/nature/fireflies/README.md +++ b/palettes/nature/fireflies/README.md @@ -2,9 +2,9 @@ # tsParticles Fireflies Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-fireflies/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-fireflies) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-fireflies.svg)](https://www.npmjs.com/package/@tsparticles/palette-fireflies) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-fireflies)](https://www.npmjs.com/package/@tsparticles/palette-fireflies) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-fireflies/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-fireflies) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-fireflies.svg)](https://www.npmjs.com/package/@tsparticles/palette-fireflies) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-fireflies) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for fireflies. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fireflies/images/sample.png)](https://particles.js.org/samples/palettes/fireflies) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/nature/fireflies/images/sample.png)](https://particles.js.org/samples/palettes/fireflies) ## Colors @@ -79,7 +79,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -116,47 +116,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "fireflies", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadFirefliesPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadFirefliesPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadFirefliesPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -pafireflies[Fireflies] -end - -e[tsParticles Engine] --> pafireflies -``` diff --git a/palettes/nature/fireflies/package.dist.json b/palettes/nature/fireflies/package.dist.json index 8ccc13290b0..daf58b1cee7 100644 --- a/palettes/nature/fireflies/package.dist.json +++ b/palettes/nature/fireflies/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-fireflies", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles fireflies palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.fireflies.min.js", - "unpkg": "tsparticles.palette.fireflies.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/nature/fireflies/package.json b/palettes/nature/fireflies/package.json index 0b22cf707ec..2bd76bc6795 100644 --- a/palettes/nature/fireflies/package.json +++ b/palettes/nature/fireflies/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-fireflies", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles fireflies palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/nature/fireflies/rollup.config.js b/palettes/nature/fireflies/rollup.config.js new file mode 100644 index 00000000000..7f04a452474 --- /dev/null +++ b/palettes/nature/fireflies/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-fireflies", + paletteName: "Fireflies Palette", + version, +}); diff --git a/palettes/nature/fireflies/src/browser.ts b/palettes/nature/fireflies/src/browser.ts new file mode 100644 index 00000000000..aa3b4f41553 --- /dev/null +++ b/palettes/nature/fireflies/src/browser.ts @@ -0,0 +1,10 @@ +import { loadFirefliesPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadFirefliesPalette?: typeof loadFirefliesPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadFirefliesPalette = loadFirefliesPalette; + +export * from "./index.js"; diff --git a/palettes/nature/fireflies/src/index.lazy.ts b/palettes/nature/fireflies/src/index.lazy.ts new file mode 100644 index 00000000000..7250f54cee5 --- /dev/null +++ b/palettes/nature/fireflies/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "fireflies"; + +/** + * @param engine - + */ +export async function loadFirefliesPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/nature/fireflies/src/index.ts b/palettes/nature/fireflies/src/index.ts index 80de83e845c..330da54e488 100644 --- a/palettes/nature/fireflies/src/index.ts +++ b/palettes/nature/fireflies/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "fireflies"; @@ -6,9 +7,7 @@ const paletteName = "fireflies"; * @param engine - */ export async function loadFirefliesPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/nature/fireflies/typedoc.json b/palettes/nature/fireflies/typedoc.json index d374f703efa..9755e4dde87 100644 --- a/palettes/nature/fireflies/typedoc.json +++ b/palettes/nature/fireflies/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Fireflies Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Fireflies Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/nature/fireflies/webpack.config.js b/palettes/nature/fireflies/webpack.config.js deleted file mode 100644 index 6054e6474b5..00000000000 --- a/palettes/nature/fireflies/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-fireflies", - paletteName: "Fireflies Palette", - version, -}); diff --git a/palettes/nature/forestCanopy/CHANGELOG.md b/palettes/nature/forestCanopy/CHANGELOG.md index 289d3100216..040fd4f3ee9 100644 --- a/palettes/nature/forestCanopy/CHANGELOG.md +++ b/palettes/nature/forestCanopy/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-forest-canopy + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-forest-canopy diff --git a/palettes/nature/forestCanopy/README.md b/palettes/nature/forestCanopy/README.md index b4a61d0cfed..b65a90753a7 100644 --- a/palettes/nature/forestCanopy/README.md +++ b/palettes/nature/forestCanopy/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Forest Canopy Palette +# tsParticles ForestCanopy Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-forest-canopy/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-forest-canopy) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-forest-canopy.svg)](https://www.npmjs.com/package/@tsparticles/palette-forest-canopy) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-forest-canopy)](https://www.npmjs.com/package/@tsparticles/palette-forest-canopy) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-forestCanopy/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-forestCanopy) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-forestCanopy.svg)](https://www.npmjs.com/package/@tsparticles/palette-forestCanopy) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-forestCanopy) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for forest canopy. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/forestCanopy/images/sample.png)](https://particles.js.org/samples/palettes/forest-canopy) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/nature/forestCanopy/images/sample.png)](https://particles.js.org/samples/palettes/forestCanopy) ## Colors @@ -75,7 +75,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -97,7 +97,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "forest-canopy", + palette: "forestCanopy", }; await engine.load({ @@ -112,47 +112,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "forest-canopy", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadForestCanopyPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadForestCanopyPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadForestCanopyPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -paforestCanopy[Forest Canopy] -end - -e[tsParticles Engine] --> paforestCanopy -``` diff --git a/palettes/nature/forestCanopy/package.dist.json b/palettes/nature/forestCanopy/package.dist.json index ebdb4144bb3..4e1b450c0c8 100644 --- a/palettes/nature/forestCanopy/package.dist.json +++ b/palettes/nature/forestCanopy/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-forest-canopy", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles forest canopy palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.forest-canopy.min.js", - "unpkg": "tsparticles.palette.forest-canopy.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/nature/forestCanopy/package.json b/palettes/nature/forestCanopy/package.json index 052f3144206..aa900cd0907 100644 --- a/palettes/nature/forestCanopy/package.json +++ b/palettes/nature/forestCanopy/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-forest-canopy", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles forest canopy palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/nature/forestCanopy/rollup.config.js b/palettes/nature/forestCanopy/rollup.config.js new file mode 100644 index 00000000000..c790bbb1c18 --- /dev/null +++ b/palettes/nature/forestCanopy/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-forestCanopy", + paletteName: "ForestCanopy Palette", + version, +}); diff --git a/palettes/nature/forestCanopy/src/browser.ts b/palettes/nature/forestCanopy/src/browser.ts new file mode 100644 index 00000000000..eb58dbf5bf4 --- /dev/null +++ b/palettes/nature/forestCanopy/src/browser.ts @@ -0,0 +1,10 @@ +import { loadForestCanopyPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadForestCanopyPalette?: typeof loadForestCanopyPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadForestCanopyPalette = loadForestCanopyPalette; + +export * from "./index.js"; diff --git a/palettes/nature/forestCanopy/src/index.lazy.ts b/palettes/nature/forestCanopy/src/index.lazy.ts new file mode 100644 index 00000000000..d081249bb58 --- /dev/null +++ b/palettes/nature/forestCanopy/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "forest-canopy"; + +/** + * @param engine - + */ +export async function loadForestCanopyPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/nature/forestCanopy/src/index.ts b/palettes/nature/forestCanopy/src/index.ts index 6964fd1ca2f..976a07287e8 100644 --- a/palettes/nature/forestCanopy/src/index.ts +++ b/palettes/nature/forestCanopy/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "forest-canopy"; @@ -6,9 +7,7 @@ const paletteName = "forest-canopy"; * @param engine - */ export async function loadForestCanopyPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/nature/forestCanopy/typedoc.json b/palettes/nature/forestCanopy/typedoc.json index 0f31ff54ebb..ad8ab73048f 100644 --- a/palettes/nature/forestCanopy/typedoc.json +++ b/palettes/nature/forestCanopy/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Autumn Leaves Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles ForestCanopy Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/nature/forestCanopy/webpack.config.js b/palettes/nature/forestCanopy/webpack.config.js deleted file mode 100644 index 2d1df740f90..00000000000 --- a/palettes/nature/forestCanopy/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-forest-canopy", - paletteName: "Forest Canopy Palette", - version, -}); diff --git a/palettes/nature/pollenAndSpores/CHANGELOG.md b/palettes/nature/pollenAndSpores/CHANGELOG.md index dfc09a01bb1..d5dcab935e1 100644 --- a/palettes/nature/pollenAndSpores/CHANGELOG.md +++ b/palettes/nature/pollenAndSpores/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-pollen-and-spores + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-pollen-and-spores diff --git a/palettes/nature/pollenAndSpores/README.md b/palettes/nature/pollenAndSpores/README.md index 6ab922dc172..4a0944c73a5 100644 --- a/palettes/nature/pollenAndSpores/README.md +++ b/palettes/nature/pollenAndSpores/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Pollen & Spores Palette +# tsParticles PollenAndSpores Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-pollen-and-spores/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-pollen-and-spores) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-pollen-and-spores.svg)](https://www.npmjs.com/package/@tsparticles/palette-pollen-and-spores) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-pollen-and-spores)](https://www.npmjs.com/package/@tsparticles/palette-pollen-and-spores) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-pollenAndSpores/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-pollenAndSpores) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-pollenAndSpores.svg)](https://www.npmjs.com/package/@tsparticles/palette-pollenAndSpores) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-pollenAndSpores) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for pollen & spores. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/pollenAndSpores/images/sample.png)](https://particles.js.org/samples/palettes/pollen-and-spores) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/nature/pollenAndSpores/images/sample.png)](https://particles.js.org/samples/palettes/pollenAndSpores) ## Colors @@ -79,7 +79,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -101,7 +101,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "pollen-and-spores", + palette: "pollenAndSpores", }; await engine.load({ @@ -116,47 +116,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "pollen-and-spores", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadPollenAndSporesPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadPollenAndSporesPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadPollenAndSporesPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -papollenAndSpores[Pollen & Spores] -end - -e[tsParticles Engine] --> papollenAndSpores -``` diff --git a/palettes/nature/pollenAndSpores/package.dist.json b/palettes/nature/pollenAndSpores/package.dist.json index ea0727ea146..59881e66d1f 100644 --- a/palettes/nature/pollenAndSpores/package.dist.json +++ b/palettes/nature/pollenAndSpores/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-pollen-and-spores", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles pollen & spores palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.pollen-and-spores.min.js", - "unpkg": "tsparticles.palette.pollen-and-spores.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/nature/pollenAndSpores/package.json b/palettes/nature/pollenAndSpores/package.json index 4c0e4aee4f9..04cfd11fbfd 100644 --- a/palettes/nature/pollenAndSpores/package.json +++ b/palettes/nature/pollenAndSpores/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-pollen-and-spores", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles pollen & spores palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/nature/pollenAndSpores/rollup.config.js b/palettes/nature/pollenAndSpores/rollup.config.js new file mode 100644 index 00000000000..069af5b867e --- /dev/null +++ b/palettes/nature/pollenAndSpores/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-pollenAndSpores", + paletteName: "PollenAndSpores Palette", + version, +}); diff --git a/palettes/nature/pollenAndSpores/src/browser.ts b/palettes/nature/pollenAndSpores/src/browser.ts new file mode 100644 index 00000000000..61279fb782e --- /dev/null +++ b/palettes/nature/pollenAndSpores/src/browser.ts @@ -0,0 +1,10 @@ +import { loadPollenAndSporesPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadPollenAndSporesPalette?: typeof loadPollenAndSporesPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadPollenAndSporesPalette = loadPollenAndSporesPalette; + +export * from "./index.js"; diff --git a/palettes/nature/pollenAndSpores/src/index.lazy.ts b/palettes/nature/pollenAndSpores/src/index.lazy.ts new file mode 100644 index 00000000000..f449c552add --- /dev/null +++ b/palettes/nature/pollenAndSpores/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "pollen-and-spores"; + +/** + * @param engine - + */ +export async function loadPollenAndSporesPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/nature/pollenAndSpores/src/index.ts b/palettes/nature/pollenAndSpores/src/index.ts index df0f388ea92..29352092472 100644 --- a/palettes/nature/pollenAndSpores/src/index.ts +++ b/palettes/nature/pollenAndSpores/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "pollen-and-spores"; @@ -6,9 +7,7 @@ const paletteName = "pollen-and-spores"; * @param engine - */ export async function loadPollenAndSporesPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/nature/pollenAndSpores/typedoc.json b/palettes/nature/pollenAndSpores/typedoc.json index 5d1cd7514c6..653dc22b960 100644 --- a/palettes/nature/pollenAndSpores/typedoc.json +++ b/palettes/nature/pollenAndSpores/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Pollen & Spores Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles PollenAndSpores Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/nature/pollenAndSpores/webpack.config.js b/palettes/nature/pollenAndSpores/webpack.config.js deleted file mode 100644 index 7187afc2d98..00000000000 --- a/palettes/nature/pollenAndSpores/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-pollen-and-spores", - paletteName: "Pollen & Spores Palette", - version, -}); diff --git a/palettes/nature/snowfall/CHANGELOG.md b/palettes/nature/snowfall/CHANGELOG.md index 7455a5ffedd..9439a73dc07 100644 --- a/palettes/nature/snowfall/CHANGELOG.md +++ b/palettes/nature/snowfall/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-snowfall + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-snowfall diff --git a/palettes/nature/snowfall/README.md b/palettes/nature/snowfall/README.md index e46a1e15e61..494c86cfc56 100644 --- a/palettes/nature/snowfall/README.md +++ b/palettes/nature/snowfall/README.md @@ -2,9 +2,9 @@ # tsParticles Snowfall Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-snowfall/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-snowfall) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-snowfall.svg)](https://www.npmjs.com/package/@tsparticles/palette-snowfall) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-snowfall)](https://www.npmjs.com/package/@tsparticles/palette-snowfall) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-snowfall/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-snowfall) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-snowfall.svg)](https://www.npmjs.com/package/@tsparticles/palette-snowfall) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-snowfall) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for snowfall. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/snowfall/images/sample.png)](https://particles.js.org/samples/palettes/snowfall) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/nature/snowfall/images/sample.png)](https://particles.js.org/samples/palettes/snowfall) ## Colors @@ -69,7 +69,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -106,47 +106,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "snowfall", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadSnowfallPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadSnowfallPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadSnowfallPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -pasnowfall[Snowfall] -end - -e[tsParticles Engine] --> pasnowfall -``` diff --git a/palettes/nature/snowfall/package.dist.json b/palettes/nature/snowfall/package.dist.json index f8b70a663f3..7ed4122efe6 100644 --- a/palettes/nature/snowfall/package.dist.json +++ b/palettes/nature/snowfall/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-snowfall", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles snowfall palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.snowfall.min.js", - "unpkg": "tsparticles.palette.snowfall.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/nature/snowfall/package.json b/palettes/nature/snowfall/package.json index 0cd356fba83..699d674b8df 100644 --- a/palettes/nature/snowfall/package.json +++ b/palettes/nature/snowfall/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-snowfall", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles snowfall palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/nature/snowfall/rollup.config.js b/palettes/nature/snowfall/rollup.config.js new file mode 100644 index 00000000000..e578040be57 --- /dev/null +++ b/palettes/nature/snowfall/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-snowfall", + paletteName: "Snowfall Palette", + version, +}); diff --git a/palettes/nature/snowfall/src/browser.ts b/palettes/nature/snowfall/src/browser.ts new file mode 100644 index 00000000000..e70032f28e1 --- /dev/null +++ b/palettes/nature/snowfall/src/browser.ts @@ -0,0 +1,10 @@ +import { loadSnowfallPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadSnowfallPalette?: typeof loadSnowfallPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadSnowfallPalette = loadSnowfallPalette; + +export * from "./index.js"; diff --git a/palettes/nature/snowfall/src/index.lazy.ts b/palettes/nature/snowfall/src/index.lazy.ts new file mode 100644 index 00000000000..2d0ec16b1e3 --- /dev/null +++ b/palettes/nature/snowfall/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "snowfall"; + +/** + * @param engine - + */ +export async function loadSnowfallPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/nature/snowfall/src/index.ts b/palettes/nature/snowfall/src/index.ts index a9227bef5d9..eea122e82be 100644 --- a/palettes/nature/snowfall/src/index.ts +++ b/palettes/nature/snowfall/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "snowfall"; @@ -6,9 +7,7 @@ const paletteName = "snowfall"; * @param engine - */ export async function loadSnowfallPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/nature/snowfall/typedoc.json b/palettes/nature/snowfall/typedoc.json index b996db976b4..30856284d89 100644 --- a/palettes/nature/snowfall/typedoc.json +++ b/palettes/nature/snowfall/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Snowfall Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Snowfall Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/nature/snowfall/webpack.config.js b/palettes/nature/snowfall/webpack.config.js deleted file mode 100644 index 76bda097b4d..00000000000 --- a/palettes/nature/snowfall/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-snowfall", - paletteName: "Snowfall Palette", - version, -}); diff --git a/palettes/nature/springBloom/CHANGELOG.md b/palettes/nature/springBloom/CHANGELOG.md index ac57e45cb90..28bf7a55a98 100644 --- a/palettes/nature/springBloom/CHANGELOG.md +++ b/palettes/nature/springBloom/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-spring-bloom + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-spring-bloom diff --git a/palettes/nature/springBloom/README.md b/palettes/nature/springBloom/README.md index 1dc2e899cad..81068e812ec 100644 --- a/palettes/nature/springBloom/README.md +++ b/palettes/nature/springBloom/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Spring Bloom Palette +# tsParticles SpringBloom Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-spring-bloom/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-spring-bloom) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-spring-bloom.svg)](https://www.npmjs.com/package/@tsparticles/palette-spring-bloom) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-spring-bloom)](https://www.npmjs.com/package/@tsparticles/palette-spring-bloom) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-springBloom/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-springBloom) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-springBloom.svg)](https://www.npmjs.com/package/@tsparticles/palette-springBloom) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-springBloom) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for spring bloom. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/springBloom/images/sample.png)](https://particles.js.org/samples/palettes/spring-bloom) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/nature/springBloom/images/sample.png)](https://particles.js.org/samples/palettes/springBloom) ## Colors @@ -75,7 +75,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -97,7 +97,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "spring-bloom", + palette: "springBloom", }; await engine.load({ @@ -112,47 +112,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "spring-bloom", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadSpringBloomPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadSpringBloomPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadSpringBloomPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -paspringBloom[Spring Bloom] -end - -e[tsParticles Engine] --> paspringBloom -``` diff --git a/palettes/nature/springBloom/package.dist.json b/palettes/nature/springBloom/package.dist.json index baf3acc99b9..3b1c9d1f5a9 100644 --- a/palettes/nature/springBloom/package.dist.json +++ b/palettes/nature/springBloom/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-spring-bloom", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles spring bloom palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.spring-bloom.min.js", - "unpkg": "tsparticles.palette.spring-bloom.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/nature/springBloom/package.json b/palettes/nature/springBloom/package.json index 6bb36c18ad7..6c323d1fe0d 100644 --- a/palettes/nature/springBloom/package.json +++ b/palettes/nature/springBloom/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-spring-bloom", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles spring bloom palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/nature/springBloom/rollup.config.js b/palettes/nature/springBloom/rollup.config.js new file mode 100644 index 00000000000..384d08c3c5e --- /dev/null +++ b/palettes/nature/springBloom/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-springBloom", + paletteName: "SpringBloom Palette", + version, +}); diff --git a/palettes/nature/springBloom/src/browser.ts b/palettes/nature/springBloom/src/browser.ts new file mode 100644 index 00000000000..d935fbcdf5b --- /dev/null +++ b/palettes/nature/springBloom/src/browser.ts @@ -0,0 +1,10 @@ +import { loadSpringBloomPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadSpringBloomPalette?: typeof loadSpringBloomPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadSpringBloomPalette = loadSpringBloomPalette; + +export * from "./index.js"; diff --git a/palettes/nature/springBloom/src/index.lazy.ts b/palettes/nature/springBloom/src/index.lazy.ts new file mode 100644 index 00000000000..8ca3f5e969a --- /dev/null +++ b/palettes/nature/springBloom/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "spring-bloom"; + +/** + * @param engine - + */ +export async function loadSpringBloomPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/nature/springBloom/src/index.ts b/palettes/nature/springBloom/src/index.ts index f4bdfe84581..48e024a0df2 100644 --- a/palettes/nature/springBloom/src/index.ts +++ b/palettes/nature/springBloom/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "spring-bloom"; @@ -6,9 +7,7 @@ const paletteName = "spring-bloom"; * @param engine - */ export async function loadSpringBloomPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/nature/springBloom/typedoc.json b/palettes/nature/springBloom/typedoc.json index 0f31ff54ebb..210015e8d18 100644 --- a/palettes/nature/springBloom/typedoc.json +++ b/palettes/nature/springBloom/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Autumn Leaves Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles SpringBloom Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/nature/springBloom/webpack.config.js b/palettes/nature/springBloom/webpack.config.js deleted file mode 100644 index 1da5d68699c..00000000000 --- a/palettes/nature/springBloom/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-spring-bloom", - paletteName: "Spring Bloom Palette", - version, -}); diff --git a/palettes/optics/bokehCold/CHANGELOG.md b/palettes/optics/bokehCold/CHANGELOG.md index 10f03cb84ea..290df5baa70 100644 --- a/palettes/optics/bokehCold/CHANGELOG.md +++ b/palettes/optics/bokehCold/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-bokeh-cold + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-bokeh-cold diff --git a/palettes/optics/bokehCold/README.md b/palettes/optics/bokehCold/README.md index 4a80a1c84bd..7fdefdb72dd 100644 --- a/palettes/optics/bokehCold/README.md +++ b/palettes/optics/bokehCold/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Bokeh Cold Palette +# tsParticles BokehCold Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-bokeh-cold/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-bokeh-cold) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-bokeh-cold.svg)](https://www.npmjs.com/package/@tsparticles/palette-bokeh-cold) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-bokeh-cold)](https://www.npmjs.com/package/@tsparticles/palette-bokeh-cold) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-bokehCold/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-bokehCold) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-bokehCold.svg)](https://www.npmjs.com/package/@tsparticles/palette-bokehCold) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-bokehCold) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for bokeh cold optics. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/optics/bokehCold/images/sample.png)](https://particles.js.org/samples/palettes/bokeh-cold) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/optics/bokehCold/images/sample.png)](https://particles.js.org/samples/palettes/bokehCold) ## Colors @@ -75,7 +75,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -97,7 +97,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "bokeh-cold", + palette: "bokehCold", }; await engine.load({ diff --git a/palettes/optics/bokehCold/images/sample.png b/palettes/optics/bokehCold/images/sample.png index a7cee486fa9..67b3b2fc1e9 100644 Binary files a/palettes/optics/bokehCold/images/sample.png and b/palettes/optics/bokehCold/images/sample.png differ diff --git a/palettes/optics/bokehCold/package.dist.json b/palettes/optics/bokehCold/package.dist.json index fbed4d49caa..a8607de0ac5 100644 --- a/palettes/optics/bokehCold/package.dist.json +++ b/palettes/optics/bokehCold/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-bokeh-cold", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles bokeh cold optics palette", "homepage": "https://particles.js.org", "repository": { @@ -95,14 +95,22 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "type": "module", - "jsdelivr": "tsparticles.palette-bokeh-cold.min.js", - "unpkg": "tsparticles.palette-bokeh-cold.min.js", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" } diff --git a/palettes/optics/bokehCold/package.json b/palettes/optics/bokehCold/package.json index a63088be5d8..1b5a966c478 100644 --- a/palettes/optics/bokehCold/package.json +++ b/palettes/optics/bokehCold/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-bokeh-cold", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles bokeh cold optics palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/optics/bokehCold/rollup.config.js b/palettes/optics/bokehCold/rollup.config.js new file mode 100644 index 00000000000..38bc1fe4a1e --- /dev/null +++ b/palettes/optics/bokehCold/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-bokehCold", + paletteName: "BokehCold Palette", + version, +}); diff --git a/palettes/optics/bokehCold/src/browser.ts b/palettes/optics/bokehCold/src/browser.ts new file mode 100644 index 00000000000..7516f479720 --- /dev/null +++ b/palettes/optics/bokehCold/src/browser.ts @@ -0,0 +1,10 @@ +import { loadBokehColdPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadBokehColdPalette?: typeof loadBokehColdPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadBokehColdPalette = loadBokehColdPalette; + +export * from "./index.js"; diff --git a/palettes/optics/bokehCold/src/index.lazy.ts b/palettes/optics/bokehCold/src/index.lazy.ts new file mode 100644 index 00000000000..a5a3660070c --- /dev/null +++ b/palettes/optics/bokehCold/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "bokeh-cold"; + +/** + * @param engine - + */ +export async function loadBokehColdPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/optics/bokehCold/src/index.ts b/palettes/optics/bokehCold/src/index.ts index 07e9413c335..b15a8def9c1 100644 --- a/palettes/optics/bokehCold/src/index.ts +++ b/palettes/optics/bokehCold/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "bokeh-cold"; @@ -6,9 +7,7 @@ const paletteName = "bokeh-cold"; * @param engine - */ export async function loadBokehColdPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/optics/bokehCold/typedoc.json b/palettes/optics/bokehCold/typedoc.json index 310569fad02..53e1d960ecf 100644 --- a/palettes/optics/bokehCold/typedoc.json +++ b/palettes/optics/bokehCold/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Bokeh Cold Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles BokehCold Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/optics/bokehCold/webpack.config.js b/palettes/optics/bokehCold/webpack.config.js deleted file mode 100644 index d8543770978..00000000000 --- a/palettes/optics/bokehCold/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-bokeh-cold", - paletteName: "Bokeh Cold Palette", - version, -}); diff --git a/palettes/optics/bokehGold/CHANGELOG.md b/palettes/optics/bokehGold/CHANGELOG.md index 0c79f69383b..2b9ae838890 100644 --- a/palettes/optics/bokehGold/CHANGELOG.md +++ b/palettes/optics/bokehGold/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-bokeh-gold + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-bokeh-gold diff --git a/palettes/optics/bokehGold/README.md b/palettes/optics/bokehGold/README.md index 3a659b3a898..c5e0361a125 100644 --- a/palettes/optics/bokehGold/README.md +++ b/palettes/optics/bokehGold/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Bokeh Gold Palette +# tsParticles BokehGold Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-bokeh-gold/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-bokeh-gold) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-bokeh-gold.svg)](https://www.npmjs.com/package/@tsparticles/palette-bokeh-gold) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-bokeh-gold)](https://www.npmjs.com/package/@tsparticles/palette-bokeh-gold) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-bokehGold/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-bokehGold) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-bokehGold.svg)](https://www.npmjs.com/package/@tsparticles/palette-bokehGold) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-bokehGold) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for bokeh gold optics. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/optics/bokehGold/images/sample.png)](https://particles.js.org/samples/palettes/bokeh-gold) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/optics/bokehGold/images/sample.png)](https://particles.js.org/samples/palettes/bokehGold) ## Colors @@ -75,7 +75,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -97,7 +97,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "bokeh-gold", + palette: "bokehGold", }; await engine.load({ diff --git a/palettes/optics/bokehGold/images/sample.png b/palettes/optics/bokehGold/images/sample.png index a6b493f99f1..024a75f1c53 100644 Binary files a/palettes/optics/bokehGold/images/sample.png and b/palettes/optics/bokehGold/images/sample.png differ diff --git a/palettes/optics/bokehGold/package.dist.json b/palettes/optics/bokehGold/package.dist.json index 491fd9c5038..8ebe4f89537 100644 --- a/palettes/optics/bokehGold/package.dist.json +++ b/palettes/optics/bokehGold/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-bokeh-gold", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles bokeh gold optics palette", "homepage": "https://particles.js.org", "repository": { @@ -95,14 +95,22 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "type": "module", - "jsdelivr": "tsparticles.palette-bokeh-gold.min.js", - "unpkg": "tsparticles.palette-bokeh-gold.min.js", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" } diff --git a/palettes/optics/bokehGold/package.json b/palettes/optics/bokehGold/package.json index 348ab91ba60..7a480982633 100644 --- a/palettes/optics/bokehGold/package.json +++ b/palettes/optics/bokehGold/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-bokeh-gold", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles bokeh gold optics palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/optics/bokehGold/rollup.config.js b/palettes/optics/bokehGold/rollup.config.js new file mode 100644 index 00000000000..f160311b38b --- /dev/null +++ b/palettes/optics/bokehGold/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-bokehGold", + paletteName: "BokehGold Palette", + version, +}); diff --git a/palettes/optics/bokehGold/src/browser.ts b/palettes/optics/bokehGold/src/browser.ts new file mode 100644 index 00000000000..2a84f269952 --- /dev/null +++ b/palettes/optics/bokehGold/src/browser.ts @@ -0,0 +1,10 @@ +import { loadBokehGoldPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadBokehGoldPalette?: typeof loadBokehGoldPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadBokehGoldPalette = loadBokehGoldPalette; + +export * from "./index.js"; diff --git a/palettes/optics/bokehGold/src/index.lazy.ts b/palettes/optics/bokehGold/src/index.lazy.ts new file mode 100644 index 00000000000..34730834a8a --- /dev/null +++ b/palettes/optics/bokehGold/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "bokeh-gold"; + +/** + * @param engine - + */ +export async function loadBokehGoldPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/optics/bokehGold/src/index.ts b/palettes/optics/bokehGold/src/index.ts index f39a617cd4f..9331cd28f13 100644 --- a/palettes/optics/bokehGold/src/index.ts +++ b/palettes/optics/bokehGold/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "bokeh-gold"; @@ -6,9 +7,7 @@ const paletteName = "bokeh-gold"; * @param engine - */ export async function loadBokehGoldPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/optics/bokehGold/typedoc.json b/palettes/optics/bokehGold/typedoc.json index 658e5ee297c..281d140f5dd 100644 --- a/palettes/optics/bokehGold/typedoc.json +++ b/palettes/optics/bokehGold/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Bokeh Gold Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles BokehGold Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/optics/bokehGold/webpack.config.js b/palettes/optics/bokehGold/webpack.config.js deleted file mode 100644 index a029c1b2d5c..00000000000 --- a/palettes/optics/bokehGold/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-bokeh-gold", - paletteName: "Bokeh Gold Palette", - version, -}); diff --git a/palettes/optics/bokehPastel/CHANGELOG.md b/palettes/optics/bokehPastel/CHANGELOG.md index 15cd89977a5..05739a4062b 100644 --- a/palettes/optics/bokehPastel/CHANGELOG.md +++ b/palettes/optics/bokehPastel/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-bokeh-pastel + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-bokeh-pastel diff --git a/palettes/optics/bokehPastel/README.md b/palettes/optics/bokehPastel/README.md index 65c75a64553..11fc0f4ba1d 100644 --- a/palettes/optics/bokehPastel/README.md +++ b/palettes/optics/bokehPastel/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Bokeh Pastel Palette +# tsParticles BokehPastel Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-bokeh-pastel/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-bokeh-pastel) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-bokeh-pastel.svg)](https://www.npmjs.com/package/@tsparticles/palette-bokeh-pastel) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-bokeh-pastel)](https://www.npmjs.com/package/@tsparticles/palette-bokeh-pastel) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-bokehPastel/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-bokehPastel) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-bokehPastel.svg)](https://www.npmjs.com/package/@tsparticles/palette-bokehPastel) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-bokehPastel) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for bokeh pastel optics. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/optics/bokehPastel/images/sample.png)](https://particles.js.org/samples/palettes/bokeh-pastel) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/optics/bokehPastel/images/sample.png)](https://particles.js.org/samples/palettes/bokehPastel) ## Colors @@ -79,7 +79,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -101,7 +101,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "bokeh-pastel", + palette: "bokehPastel", }; await engine.load({ diff --git a/palettes/optics/bokehPastel/images/sample.png b/palettes/optics/bokehPastel/images/sample.png index a8e0aaa6bdc..51908c803f8 100644 Binary files a/palettes/optics/bokehPastel/images/sample.png and b/palettes/optics/bokehPastel/images/sample.png differ diff --git a/palettes/optics/bokehPastel/package.dist.json b/palettes/optics/bokehPastel/package.dist.json index 7ac4b154473..cbeb49e9224 100644 --- a/palettes/optics/bokehPastel/package.dist.json +++ b/palettes/optics/bokehPastel/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-bokeh-pastel", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles bokeh pastel optics palette", "homepage": "https://particles.js.org", "repository": { @@ -95,14 +95,22 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "type": "module", - "jsdelivr": "tsparticles.palette-bokeh-pastel.min.js", - "unpkg": "tsparticles.palette-bokeh-pastel.min.js", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" } diff --git a/palettes/optics/bokehPastel/package.json b/palettes/optics/bokehPastel/package.json index 04822f584ad..646ee5555b9 100644 --- a/palettes/optics/bokehPastel/package.json +++ b/palettes/optics/bokehPastel/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-bokeh-pastel", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles bokeh pastel optics palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/optics/bokehPastel/rollup.config.js b/palettes/optics/bokehPastel/rollup.config.js new file mode 100644 index 00000000000..01d91fab9ba --- /dev/null +++ b/palettes/optics/bokehPastel/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-bokehPastel", + paletteName: "BokehPastel Palette", + version, +}); diff --git a/palettes/optics/bokehPastel/src/browser.ts b/palettes/optics/bokehPastel/src/browser.ts new file mode 100644 index 00000000000..72e793bef29 --- /dev/null +++ b/palettes/optics/bokehPastel/src/browser.ts @@ -0,0 +1,10 @@ +import { loadBokehPastelPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadBokehPastelPalette?: typeof loadBokehPastelPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadBokehPastelPalette = loadBokehPastelPalette; + +export * from "./index.js"; diff --git a/palettes/optics/bokehPastel/src/index.lazy.ts b/palettes/optics/bokehPastel/src/index.lazy.ts new file mode 100644 index 00000000000..6f4c6bfd175 --- /dev/null +++ b/palettes/optics/bokehPastel/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "bokeh-pastel"; + +/** + * @param engine - + */ +export async function loadBokehPastelPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/optics/bokehPastel/src/index.ts b/palettes/optics/bokehPastel/src/index.ts index 40f5bbcd412..7ad804ee7c7 100644 --- a/palettes/optics/bokehPastel/src/index.ts +++ b/palettes/optics/bokehPastel/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "bokeh-pastel"; @@ -6,9 +7,7 @@ const paletteName = "bokeh-pastel"; * @param engine - */ export async function loadBokehPastelPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/optics/bokehPastel/typedoc.json b/palettes/optics/bokehPastel/typedoc.json index f72589e09fa..df7eee9d68f 100644 --- a/palettes/optics/bokehPastel/typedoc.json +++ b/palettes/optics/bokehPastel/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Bokeh Pastel Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles BokehPastel Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/optics/bokehPastel/webpack.config.js b/palettes/optics/bokehPastel/webpack.config.js deleted file mode 100644 index 30a6adbbbfb..00000000000 --- a/palettes/optics/bokehPastel/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-bokeh-pastel", - paletteName: "Bokeh Pastel Palette", - version, -}); diff --git a/palettes/optics/holographicShimmer/CHANGELOG.md b/palettes/optics/holographicShimmer/CHANGELOG.md index 33d33644bc9..51ac94a7df2 100644 --- a/palettes/optics/holographicShimmer/CHANGELOG.md +++ b/palettes/optics/holographicShimmer/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-holographic-shimmer + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-holographic-shimmer diff --git a/palettes/optics/holographicShimmer/README.md b/palettes/optics/holographicShimmer/README.md index 18c423550b3..b81d56ec01a 100644 --- a/palettes/optics/holographicShimmer/README.md +++ b/palettes/optics/holographicShimmer/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Holographic Shimmer Palette +# tsParticles HolographicShimmer Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-holographic-shimmer/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-holographic-shimmer) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-holographic-shimmer.svg)](https://www.npmjs.com/package/@tsparticles/palette-holographic-shimmer) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-holographic-shimmer)](https://www.npmjs.com/package/@tsparticles/palette-holographic-shimmer) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-holographicShimmer/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-holographicShimmer) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-holographicShimmer.svg)](https://www.npmjs.com/package/@tsparticles/palette-holographicShimmer) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-holographicShimmer) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for holographic shimmer optics. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/optics/holographicShimmer/images/sample.png)](https://particles.js.org/samples/palettes/holographic-shimmer) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/optics/holographicShimmer/images/sample.png)](https://particles.js.org/samples/palettes/holographicShimmer) ## Colors @@ -79,7 +79,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -101,7 +101,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "holographic-shimmer", + palette: "holographicShimmer", }; await engine.load({ diff --git a/palettes/optics/holographicShimmer/images/sample.png b/palettes/optics/holographicShimmer/images/sample.png index 7c29d94f2c2..75721e72f39 100644 Binary files a/palettes/optics/holographicShimmer/images/sample.png and b/palettes/optics/holographicShimmer/images/sample.png differ diff --git a/palettes/optics/holographicShimmer/package.dist.json b/palettes/optics/holographicShimmer/package.dist.json index 8ef1643d7f6..418ad4d9f4e 100644 --- a/palettes/optics/holographicShimmer/package.dist.json +++ b/palettes/optics/holographicShimmer/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-holographic-shimmer", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles holographic shimmer optics palette", "homepage": "https://particles.js.org", "repository": { @@ -95,14 +95,22 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "type": "module", - "jsdelivr": "tsparticles.palette-holographic-shimmer.min.js", - "unpkg": "tsparticles.palette-holographic-shimmer.min.js", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" } diff --git a/palettes/optics/holographicShimmer/package.json b/palettes/optics/holographicShimmer/package.json index 1c8593de723..005ef7d208f 100644 --- a/palettes/optics/holographicShimmer/package.json +++ b/palettes/optics/holographicShimmer/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-holographic-shimmer", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles holographic shimmer optics palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/optics/holographicShimmer/rollup.config.js b/palettes/optics/holographicShimmer/rollup.config.js new file mode 100644 index 00000000000..9524a164cad --- /dev/null +++ b/palettes/optics/holographicShimmer/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-holographicShimmer", + paletteName: "HolographicShimmer Palette", + version, +}); diff --git a/palettes/optics/holographicShimmer/src/browser.ts b/palettes/optics/holographicShimmer/src/browser.ts new file mode 100644 index 00000000000..a1ee062a7dc --- /dev/null +++ b/palettes/optics/holographicShimmer/src/browser.ts @@ -0,0 +1,10 @@ +import { loadHolographicShimmerPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadHolographicShimmerPalette?: typeof loadHolographicShimmerPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadHolographicShimmerPalette = loadHolographicShimmerPalette; + +export * from "./index.js"; diff --git a/palettes/optics/holographicShimmer/src/index.lazy.ts b/palettes/optics/holographicShimmer/src/index.lazy.ts new file mode 100644 index 00000000000..9be6999aa1d --- /dev/null +++ b/palettes/optics/holographicShimmer/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "holographic-shimmer"; + +/** + * @param engine - + */ +export async function loadHolographicShimmerPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/optics/holographicShimmer/src/index.ts b/palettes/optics/holographicShimmer/src/index.ts index 0dc8d61802c..ae379cf59ba 100644 --- a/palettes/optics/holographicShimmer/src/index.ts +++ b/palettes/optics/holographicShimmer/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "holographic-shimmer"; @@ -6,9 +7,7 @@ const paletteName = "holographic-shimmer"; * @param engine - */ export async function loadHolographicShimmerPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/optics/holographicShimmer/typedoc.json b/palettes/optics/holographicShimmer/typedoc.json index 386f5f9a22d..399eafb2b3c 100644 --- a/palettes/optics/holographicShimmer/typedoc.json +++ b/palettes/optics/holographicShimmer/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Holographic Shimmer Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles HolographicShimmer Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/optics/holographicShimmer/webpack.config.js b/palettes/optics/holographicShimmer/webpack.config.js deleted file mode 100644 index b878477230c..00000000000 --- a/palettes/optics/holographicShimmer/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-holographic-shimmer", - paletteName: "Holographic Shimmer Palette", - version, -}); diff --git a/palettes/optics/laserScatter/CHANGELOG.md b/palettes/optics/laserScatter/CHANGELOG.md index 91c24b9bb39..147c0107cc1 100644 --- a/palettes/optics/laserScatter/CHANGELOG.md +++ b/palettes/optics/laserScatter/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-laser-scatter + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-laser-scatter diff --git a/palettes/optics/laserScatter/README.md b/palettes/optics/laserScatter/README.md index c704f1998aa..0f48de6ab38 100644 --- a/palettes/optics/laserScatter/README.md +++ b/palettes/optics/laserScatter/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Laser Scatter Palette +# tsParticles LaserScatter Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-laser-scatter/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-laser-scatter) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-laser-scatter.svg)](https://www.npmjs.com/package/@tsparticles/palette-laser-scatter) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-laser-scatter)](https://www.npmjs.com/package/@tsparticles/palette-laser-scatter) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-laserScatter/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-laserScatter) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-laserScatter.svg)](https://www.npmjs.com/package/@tsparticles/palette-laserScatter) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-laserScatter) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for laser scatter optics. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/optics/laserScatter/images/sample.png)](https://particles.js.org/samples/palettes/laser-scatter) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/optics/laserScatter/images/sample.png)](https://particles.js.org/samples/palettes/laserScatter) ## Colors @@ -69,7 +69,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -91,7 +91,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "laser-scatter", + palette: "laserScatter", }; await engine.load({ diff --git a/palettes/optics/laserScatter/images/sample.png b/palettes/optics/laserScatter/images/sample.png index 7ba6f36b1ca..0bc9e57b59e 100644 Binary files a/palettes/optics/laserScatter/images/sample.png and b/palettes/optics/laserScatter/images/sample.png differ diff --git a/palettes/optics/laserScatter/package.dist.json b/palettes/optics/laserScatter/package.dist.json index 2a7bd9ad156..d8f702e9d85 100644 --- a/palettes/optics/laserScatter/package.dist.json +++ b/palettes/optics/laserScatter/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-laser-scatter", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles laser scatter optics palette", "homepage": "https://particles.js.org", "repository": { @@ -95,14 +95,22 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "type": "module", - "jsdelivr": "tsparticles.palette-laser-scatter.min.js", - "unpkg": "tsparticles.palette-laser-scatter.min.js", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" } diff --git a/palettes/optics/laserScatter/package.json b/palettes/optics/laserScatter/package.json index 3e63822aa9b..79b875e3509 100644 --- a/palettes/optics/laserScatter/package.json +++ b/palettes/optics/laserScatter/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-laser-scatter", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles laser scatter optics palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/optics/laserScatter/rollup.config.js b/palettes/optics/laserScatter/rollup.config.js new file mode 100644 index 00000000000..207259b79cd --- /dev/null +++ b/palettes/optics/laserScatter/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-laserScatter", + paletteName: "LaserScatter Palette", + version, +}); diff --git a/palettes/optics/laserScatter/src/browser.ts b/palettes/optics/laserScatter/src/browser.ts new file mode 100644 index 00000000000..4425d019b72 --- /dev/null +++ b/palettes/optics/laserScatter/src/browser.ts @@ -0,0 +1,10 @@ +import { loadLaserScatterPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadLaserScatterPalette?: typeof loadLaserScatterPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadLaserScatterPalette = loadLaserScatterPalette; + +export * from "./index.js"; diff --git a/palettes/optics/laserScatter/src/index.lazy.ts b/palettes/optics/laserScatter/src/index.lazy.ts new file mode 100644 index 00000000000..9532c0839b1 --- /dev/null +++ b/palettes/optics/laserScatter/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "laser-scatter"; + +/** + * @param engine - + */ +export async function loadLaserScatterPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/optics/laserScatter/src/index.ts b/palettes/optics/laserScatter/src/index.ts index 8a4b2d02e2c..e31fe4c15d6 100644 --- a/palettes/optics/laserScatter/src/index.ts +++ b/palettes/optics/laserScatter/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "laser-scatter"; @@ -6,9 +7,7 @@ const paletteName = "laser-scatter"; * @param engine - */ export async function loadLaserScatterPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/optics/laserScatter/typedoc.json b/palettes/optics/laserScatter/typedoc.json index b17ab09e4d5..43138a5958e 100644 --- a/palettes/optics/laserScatter/typedoc.json +++ b/palettes/optics/laserScatter/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Laser Scatter Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles LaserScatter Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/optics/laserScatter/webpack.config.js b/palettes/optics/laserScatter/webpack.config.js deleted file mode 100644 index b9050419970..00000000000 --- a/palettes/optics/laserScatter/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-laser-scatter", - paletteName: "Laser Scatter Palette", - version, -}); diff --git a/palettes/optics/lensFlareDust/CHANGELOG.md b/palettes/optics/lensFlareDust/CHANGELOG.md index 92fde0c7faa..7d455927ad7 100644 --- a/palettes/optics/lensFlareDust/CHANGELOG.md +++ b/palettes/optics/lensFlareDust/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-lens-flare-dust + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-lens-flare-dust diff --git a/palettes/optics/lensFlareDust/README.md b/palettes/optics/lensFlareDust/README.md index 3078b6dbd5f..de501ae0c76 100644 --- a/palettes/optics/lensFlareDust/README.md +++ b/palettes/optics/lensFlareDust/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Lens Flare Dust Palette +# tsParticles LensFlareDust Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-lens-flare-dust/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-lens-flare-dust) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-lens-flare-dust.svg)](https://www.npmjs.com/package/@tsparticles/palette-lens-flare-dust) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-lens-flare-dust)](https://www.npmjs.com/package/@tsparticles/palette-lens-flare-dust) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-lensFlareDust/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-lensFlareDust) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-lensFlareDust.svg)](https://www.npmjs.com/package/@tsparticles/palette-lensFlareDust) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-lensFlareDust) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for lens flare dust. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/lensFlareDust/images/sample.png)](https://particles.js.org/samples/palettes/lens-flare-dust) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/optics/lensFlareDust/images/sample.png)](https://particles.js.org/samples/palettes/lensFlareDust) ## Colors @@ -69,7 +69,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -91,7 +91,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "lens-flare-dust", + palette: "lensFlareDust", }; await engine.load({ @@ -106,47 +106,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "lens-flare-dust", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadLensFlareDustPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadLensFlareDustPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadLensFlareDustPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -palensFlareDust[Lens Flare Dust] -end - -e[tsParticles Engine] --> palensFlareDust -``` diff --git a/palettes/optics/lensFlareDust/package.dist.json b/palettes/optics/lensFlareDust/package.dist.json index d724b7c2ff8..1ff2283962c 100644 --- a/palettes/optics/lensFlareDust/package.dist.json +++ b/palettes/optics/lensFlareDust/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-lens-flare-dust", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles lens flare dust palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.lens-flare-dust.min.js", - "unpkg": "tsparticles.palette.lens-flare-dust.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/optics/lensFlareDust/package.json b/palettes/optics/lensFlareDust/package.json index 30b42ffe832..57d34001d26 100644 --- a/palettes/optics/lensFlareDust/package.json +++ b/palettes/optics/lensFlareDust/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-lens-flare-dust", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles lens flare dust palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/optics/lensFlareDust/rollup.config.js b/palettes/optics/lensFlareDust/rollup.config.js new file mode 100644 index 00000000000..796e676bc90 --- /dev/null +++ b/palettes/optics/lensFlareDust/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-lensFlareDust", + paletteName: "LensFlareDust Palette", + version, +}); diff --git a/palettes/optics/lensFlareDust/src/browser.ts b/palettes/optics/lensFlareDust/src/browser.ts new file mode 100644 index 00000000000..84de260f9ab --- /dev/null +++ b/palettes/optics/lensFlareDust/src/browser.ts @@ -0,0 +1,10 @@ +import { loadLensFlareDustPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadLensFlareDustPalette?: typeof loadLensFlareDustPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadLensFlareDustPalette = loadLensFlareDustPalette; + +export * from "./index.js"; diff --git a/palettes/optics/lensFlareDust/src/index.lazy.ts b/palettes/optics/lensFlareDust/src/index.lazy.ts new file mode 100644 index 00000000000..6cc51639682 --- /dev/null +++ b/palettes/optics/lensFlareDust/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "lens-flare-dust"; + +/** + * @param engine - + */ +export async function loadLensFlareDustPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/optics/lensFlareDust/src/index.ts b/palettes/optics/lensFlareDust/src/index.ts index 2529a8c809a..af4f25969a6 100644 --- a/palettes/optics/lensFlareDust/src/index.ts +++ b/palettes/optics/lensFlareDust/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "lens-flare-dust"; @@ -6,9 +7,7 @@ const paletteName = "lens-flare-dust"; * @param engine - */ export async function loadLensFlareDustPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/optics/lensFlareDust/typedoc.json b/palettes/optics/lensFlareDust/typedoc.json index bca69c4cb7f..2d351cd368d 100644 --- a/palettes/optics/lensFlareDust/typedoc.json +++ b/palettes/optics/lensFlareDust/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Lens Flare Dust Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles LensFlareDust Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/optics/lensFlareDust/webpack.config.js b/palettes/optics/lensFlareDust/webpack.config.js deleted file mode 100644 index ef10a25d713..00000000000 --- a/palettes/optics/lensFlareDust/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-lens-flare-dust", - paletteName: "Lens Flare Dust Palette", - version, -}); diff --git a/palettes/optics/prismSpectrum/CHANGELOG.md b/palettes/optics/prismSpectrum/CHANGELOG.md index 6f904f75486..8b8505341a6 100644 --- a/palettes/optics/prismSpectrum/CHANGELOG.md +++ b/palettes/optics/prismSpectrum/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-prism-spectrum + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-prism-spectrum diff --git a/palettes/optics/prismSpectrum/README.md b/palettes/optics/prismSpectrum/README.md index 965a825b8ea..b9786c72108 100644 --- a/palettes/optics/prismSpectrum/README.md +++ b/palettes/optics/prismSpectrum/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Prism Spectrum Palette +# tsParticles PrismSpectrum Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-prism-spectrum/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-prism-spectrum) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-prism-spectrum.svg)](https://www.npmjs.com/package/@tsparticles/palette-prism-spectrum) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-prism-spectrum)](https://www.npmjs.com/package/@tsparticles/palette-prism-spectrum) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-prismSpectrum/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-prismSpectrum) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-prismSpectrum.svg)](https://www.npmjs.com/package/@tsparticles/palette-prismSpectrum) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-prismSpectrum) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for prism spectrum optics. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/optics/prismSpectrum/images/sample.png)](https://particles.js.org/samples/palettes/prism-spectrum) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/optics/prismSpectrum/images/sample.png)](https://particles.js.org/samples/palettes/prismSpectrum) ## Colors @@ -79,7 +79,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -101,7 +101,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "prism-spectrum", + palette: "prismSpectrum", }; await engine.load({ diff --git a/palettes/optics/prismSpectrum/images/sample.png b/palettes/optics/prismSpectrum/images/sample.png index 19c2f4c8448..9c6a3c54b63 100644 Binary files a/palettes/optics/prismSpectrum/images/sample.png and b/palettes/optics/prismSpectrum/images/sample.png differ diff --git a/palettes/optics/prismSpectrum/package.dist.json b/palettes/optics/prismSpectrum/package.dist.json index c670d7cf53e..8c1b105afdc 100644 --- a/palettes/optics/prismSpectrum/package.dist.json +++ b/palettes/optics/prismSpectrum/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-prism-spectrum", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles prism spectrum optics palette", "homepage": "https://particles.js.org", "repository": { @@ -95,14 +95,22 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "type": "module", - "jsdelivr": "tsparticles.palette-prism-spectrum.min.js", - "unpkg": "tsparticles.palette-prism-spectrum.min.js", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" } diff --git a/palettes/optics/prismSpectrum/package.json b/palettes/optics/prismSpectrum/package.json index 744c4c544b5..b39edabcaa4 100644 --- a/palettes/optics/prismSpectrum/package.json +++ b/palettes/optics/prismSpectrum/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-prism-spectrum", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles prism spectrum optics palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/optics/prismSpectrum/rollup.config.js b/palettes/optics/prismSpectrum/rollup.config.js new file mode 100644 index 00000000000..69e8588baf4 --- /dev/null +++ b/palettes/optics/prismSpectrum/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-prismSpectrum", + paletteName: "PrismSpectrum Palette", + version, +}); diff --git a/palettes/optics/prismSpectrum/src/browser.ts b/palettes/optics/prismSpectrum/src/browser.ts new file mode 100644 index 00000000000..ed9b3995172 --- /dev/null +++ b/palettes/optics/prismSpectrum/src/browser.ts @@ -0,0 +1,10 @@ +import { loadPrismSpectrumPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadPrismSpectrumPalette?: typeof loadPrismSpectrumPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadPrismSpectrumPalette = loadPrismSpectrumPalette; + +export * from "./index.js"; diff --git a/palettes/optics/prismSpectrum/src/index.lazy.ts b/palettes/optics/prismSpectrum/src/index.lazy.ts new file mode 100644 index 00000000000..926262fb3e5 --- /dev/null +++ b/palettes/optics/prismSpectrum/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "prism-spectrum"; + +/** + * @param engine - + */ +export async function loadPrismSpectrumPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/optics/prismSpectrum/src/index.ts b/palettes/optics/prismSpectrum/src/index.ts index 34528724766..8c19d3513a2 100644 --- a/palettes/optics/prismSpectrum/src/index.ts +++ b/palettes/optics/prismSpectrum/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "prism-spectrum"; @@ -6,9 +7,7 @@ const paletteName = "prism-spectrum"; * @param engine - */ export async function loadPrismSpectrumPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/optics/prismSpectrum/typedoc.json b/palettes/optics/prismSpectrum/typedoc.json index 44f1c81da81..0b6dd8d5f9b 100644 --- a/palettes/optics/prismSpectrum/typedoc.json +++ b/palettes/optics/prismSpectrum/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Prism Spectrum Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles PrismSpectrum Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/optics/prismSpectrum/webpack.config.js b/palettes/optics/prismSpectrum/webpack.config.js deleted file mode 100644 index 017f310c0c7..00000000000 --- a/palettes/optics/prismSpectrum/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-prism-spectrum", - paletteName: "Prism Spectrum Palette", - version, -}); diff --git a/palettes/vibrant/vibrantNeon/.browserslistrc b/palettes/pastel/cool/.browserslistrc similarity index 100% rename from palettes/vibrant/vibrantNeon/.browserslistrc rename to palettes/pastel/cool/.browserslistrc diff --git a/palettes/pastel/cool/CHANGELOG.md b/palettes/pastel/cool/CHANGELOG.md new file mode 100644 index 00000000000..1ac589a4858 --- /dev/null +++ b/palettes/pastel/cool/CHANGELOG.md @@ -0,0 +1,16 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-pastel-cool + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-pastel-cool + +# 4.0.0-beta.0 (2026-04-08) + +**Note:** Version bump only for package @tsparticles/palette-pastel-cool diff --git a/palettes/pastel/cool/LICENSE b/palettes/pastel/cool/LICENSE new file mode 100644 index 00000000000..bdc05f528fa --- /dev/null +++ b/palettes/pastel/cool/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/palettes/pastel/cool/README.md b/palettes/pastel/cool/README.md new file mode 100644 index 00000000000..f1d90a435d1 --- /dev/null +++ b/palettes/pastel/cool/README.md @@ -0,0 +1,203 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Cool Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-cool/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-cool) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-cool.svg)](https://www.npmjs.com/package/@tsparticles/palette-cool) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-cool) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/pastel/cool/images/sample.png)](https://particles.js.org/samples/palettes/cool) + +## Colors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ #1A1000 +
+
+ #3A2200 +
+
+ #6B3D00 +
+
+ #A65A00 +
+
+ #D98A1A +
+
+ #FFC266 +
+
+ #090500 +
+
+ #F0F4FF +
+
+ #B3D9FF +
+
+ #C9BAFF +
+
+ #E0BAFF +
+
+ #BADEEF +
+
+ #BAEAE8 +
+
+ #D4BAFF +
+
+ #FFA500 +
+
+ #FFEFD7 +
+
+ #000000 +
+
+ #FFFFFF +
+
+ #F5F5F5 +
+
+ #1E1E1E +
+
+ #252525 +
+
+ #E0E0E0 +
+
+ #A0A0A0 +
+
+ #404040 +
+
+ #1D3557 +
+
+ Background
+ #1A1000 +
+ Blend mode: source-over | Fill: true +
+## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadCoolPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadCoolPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "cool", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadCoolPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/pastel/pastelMint/eslint.config.js b/palettes/pastel/cool/eslint.config.js similarity index 100% rename from palettes/pastel/pastelMint/eslint.config.js rename to palettes/pastel/cool/eslint.config.js diff --git a/palettes/pastel/pastelCool/images/sample.png b/palettes/pastel/cool/images/sample.png similarity index 100% rename from palettes/pastel/pastelCool/images/sample.png rename to palettes/pastel/cool/images/sample.png diff --git a/palettes/pastel/cool/package.dist.json b/palettes/pastel/cool/package.dist.json new file mode 100644 index 00000000000..0902ef94bfd --- /dev/null +++ b/palettes/pastel/cool/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-pastel-cool", + "version": "4.0.0-beta.15", + "description": "tsParticles pastel cool palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/pastel/cool" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/pastel/cool/package.json b/palettes/pastel/cool/package.json new file mode 100644 index 00000000000..d5e35352420 --- /dev/null +++ b/palettes/pastel/cool/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-pastel-cool", + "version": "4.0.0-beta.15", + "description": "tsParticles pastel cool palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/pastel/cool" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/pastel/cool/rollup.config.js b/palettes/pastel/cool/rollup.config.js new file mode 100644 index 00000000000..49f2c941a54 --- /dev/null +++ b/palettes/pastel/cool/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-cool", + paletteName: "Cool Palette", + version, +}); diff --git a/palettes/pastel/cool/src/browser.ts b/palettes/pastel/cool/src/browser.ts new file mode 100644 index 00000000000..64be3f3a6bf --- /dev/null +++ b/palettes/pastel/cool/src/browser.ts @@ -0,0 +1,10 @@ +import { loadPastelCoolPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadPastelCoolPalette?: typeof loadPastelCoolPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadPastelCoolPalette = loadPastelCoolPalette; + +export * from "./index.js"; diff --git a/palettes/pastel/cool/src/index.lazy.ts b/palettes/pastel/cool/src/index.lazy.ts new file mode 100644 index 00000000000..f4f945e1d8a --- /dev/null +++ b/palettes/pastel/cool/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "pastel-cool"; + +/** + * @param engine - + */ +export async function loadPastelCoolPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/pastel/cool/src/index.ts b/palettes/pastel/cool/src/index.ts new file mode 100644 index 00000000000..caaf04926d6 --- /dev/null +++ b/palettes/pastel/cool/src/index.ts @@ -0,0 +1,11 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; +const paletteName = "pastel-cool"; +/** + * @param engine - + */ +export async function loadPastelCoolPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/pastel/pastelCool/src/options.ts b/palettes/pastel/cool/src/options.ts similarity index 100% rename from palettes/pastel/pastelCool/src/options.ts rename to palettes/pastel/cool/src/options.ts diff --git a/palettes/pastel/pastelWarm/tsconfig.base.json b/palettes/pastel/cool/tsconfig.base.json similarity index 100% rename from palettes/pastel/pastelWarm/tsconfig.base.json rename to palettes/pastel/cool/tsconfig.base.json diff --git a/palettes/pastel/pastelMint/tsconfig.browser.json b/palettes/pastel/cool/tsconfig.browser.json similarity index 100% rename from palettes/pastel/pastelMint/tsconfig.browser.json rename to palettes/pastel/cool/tsconfig.browser.json diff --git a/palettes/pastel/pastelMint/tsconfig.json b/palettes/pastel/cool/tsconfig.json similarity index 100% rename from palettes/pastel/pastelMint/tsconfig.json rename to palettes/pastel/cool/tsconfig.json diff --git a/palettes/pastel/pastelMint/tsconfig.module.json b/palettes/pastel/cool/tsconfig.module.json similarity index 100% rename from palettes/pastel/pastelMint/tsconfig.module.json rename to palettes/pastel/cool/tsconfig.module.json diff --git a/palettes/pastel/pastelMint/tsconfig.types.json b/palettes/pastel/cool/tsconfig.types.json similarity index 100% rename from palettes/pastel/pastelMint/tsconfig.types.json rename to palettes/pastel/cool/tsconfig.types.json diff --git a/palettes/pastel/cool/typedoc.json b/palettes/pastel/cool/typedoc.json new file mode 100644 index 00000000000..98fbd736a63 --- /dev/null +++ b/palettes/pastel/cool/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Cool Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/vibrant/vibrantRetro/.browserslistrc b/palettes/pastel/dream/.browserslistrc similarity index 100% rename from palettes/vibrant/vibrantRetro/.browserslistrc rename to palettes/pastel/dream/.browserslistrc diff --git a/palettes/pastel/dream/CHANGELOG.md b/palettes/pastel/dream/CHANGELOG.md new file mode 100644 index 00000000000..001e13a2602 --- /dev/null +++ b/palettes/pastel/dream/CHANGELOG.md @@ -0,0 +1,16 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-pastel-dream + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-pastel-dream + +# 4.0.0-beta.0 (2026-04-08) + +**Note:** Version bump only for package @tsparticles/palette-pastel-dream diff --git a/palettes/pastel/dream/LICENSE b/palettes/pastel/dream/LICENSE new file mode 100644 index 00000000000..bdc05f528fa --- /dev/null +++ b/palettes/pastel/dream/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/palettes/pastel/dream/README.md b/palettes/pastel/dream/README.md new file mode 100644 index 00000000000..4b87b5ec3e3 --- /dev/null +++ b/palettes/pastel/dream/README.md @@ -0,0 +1,203 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Dream Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-dream/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-dream) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-dream.svg)](https://www.npmjs.com/package/@tsparticles/palette-dream) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-dream) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/pastel/dream/images/sample.png)](https://particles.js.org/samples/palettes/dream) + +## Colors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ #1A1000 +
+
+ #3A2200 +
+
+ #6B3D00 +
+
+ #A65A00 +
+
+ #D98A1A +
+
+ #FFC266 +
+
+ #090500 +
+
+ #F0EEF8 +
+
+ #FFB3BA +
+
+ #FFDFBA +
+
+ #FFFFBA +
+
+ #BAFFC9 +
+
+ #BAE1FF +
+
+ #E8BAFF +
+
+ #FFA500 +
+
+ #FFEFD7 +
+
+ #000000 +
+
+ #FFFFFF +
+
+ #F5F5F5 +
+
+ #1E1E1E +
+
+ #252525 +
+
+ #E0E0E0 +
+
+ #A0A0A0 +
+
+ #404040 +
+
+ #1D3557 +
+
+ Background
+ #1A1000 +
+ Blend mode: source-over | Fill: true +
+## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadDreamPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadDreamPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "dream", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadDreamPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/pastel/pastelDream/eslint.config.js b/palettes/pastel/dream/eslint.config.js similarity index 100% rename from palettes/pastel/pastelDream/eslint.config.js rename to palettes/pastel/dream/eslint.config.js diff --git a/palettes/pastel/pastelDream/images/sample.png b/palettes/pastel/dream/images/sample.png similarity index 100% rename from palettes/pastel/pastelDream/images/sample.png rename to palettes/pastel/dream/images/sample.png diff --git a/palettes/pastel/dream/package.dist.json b/palettes/pastel/dream/package.dist.json new file mode 100644 index 00000000000..de54755ff79 --- /dev/null +++ b/palettes/pastel/dream/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-pastel-dream", + "version": "4.0.0-beta.15", + "description": "tsParticles pastel dream palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/pastel/dream" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/pastel/dream/package.json b/palettes/pastel/dream/package.json new file mode 100644 index 00000000000..2cbc227f447 --- /dev/null +++ b/palettes/pastel/dream/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-pastel-dream", + "version": "4.0.0-beta.15", + "description": "tsParticles pastel dream palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/pastel/dream" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/pastel/dream/rollup.config.js b/palettes/pastel/dream/rollup.config.js new file mode 100644 index 00000000000..92b9322a622 --- /dev/null +++ b/palettes/pastel/dream/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-dream", + paletteName: "Dream Palette", + version, +}); diff --git a/palettes/pastel/dream/src/browser.ts b/palettes/pastel/dream/src/browser.ts new file mode 100644 index 00000000000..afe94dccbaa --- /dev/null +++ b/palettes/pastel/dream/src/browser.ts @@ -0,0 +1,10 @@ +import { loadPastelDreamPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadPastelDreamPalette?: typeof loadPastelDreamPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadPastelDreamPalette = loadPastelDreamPalette; + +export * from "./index.js"; diff --git a/palettes/pastel/dream/src/index.lazy.ts b/palettes/pastel/dream/src/index.lazy.ts new file mode 100644 index 00000000000..1572de4a3d1 --- /dev/null +++ b/palettes/pastel/dream/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "pastel-dream"; + +/** + * @param engine - + */ +export async function loadPastelDreamPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/pastel/dream/src/index.ts b/palettes/pastel/dream/src/index.ts new file mode 100644 index 00000000000..ebf14a538bf --- /dev/null +++ b/palettes/pastel/dream/src/index.ts @@ -0,0 +1,11 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; +const paletteName = "pastel-dream"; +/** + * @param engine - + */ +export async function loadPastelDreamPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/pastel/pastelDream/src/options.ts b/palettes/pastel/dream/src/options.ts similarity index 100% rename from palettes/pastel/pastelDream/src/options.ts rename to palettes/pastel/dream/src/options.ts diff --git a/palettes/pastel/dream/tsconfig.base.json b/palettes/pastel/dream/tsconfig.base.json new file mode 100644 index 00000000000..2b489b6aa1c --- /dev/null +++ b/palettes/pastel/dream/tsconfig.base.json @@ -0,0 +1,9 @@ +{ + "extends": "@tsparticles/tsconfig/dist/tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src" + }, + "include": [ + "./src" + ] +} diff --git a/palettes/vibrant/vibrant/tsconfig.browser.json b/palettes/pastel/dream/tsconfig.browser.json similarity index 100% rename from palettes/vibrant/vibrant/tsconfig.browser.json rename to palettes/pastel/dream/tsconfig.browser.json diff --git a/palettes/vibrant/vibrant/tsconfig.json b/palettes/pastel/dream/tsconfig.json similarity index 100% rename from palettes/vibrant/vibrant/tsconfig.json rename to palettes/pastel/dream/tsconfig.json diff --git a/palettes/vibrant/vibrant/tsconfig.module.json b/palettes/pastel/dream/tsconfig.module.json similarity index 100% rename from palettes/vibrant/vibrant/tsconfig.module.json rename to palettes/pastel/dream/tsconfig.module.json diff --git a/palettes/vibrant/vibrant/tsconfig.types.json b/palettes/pastel/dream/tsconfig.types.json similarity index 100% rename from palettes/vibrant/vibrant/tsconfig.types.json rename to palettes/pastel/dream/tsconfig.types.json diff --git a/palettes/pastel/dream/typedoc.json b/palettes/pastel/dream/typedoc.json new file mode 100644 index 00000000000..da5e5061377 --- /dev/null +++ b/palettes/pastel/dream/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Dream Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/vibrant/vibrantTropical/.browserslistrc b/palettes/pastel/mint/.browserslistrc similarity index 100% rename from palettes/vibrant/vibrantTropical/.browserslistrc rename to palettes/pastel/mint/.browserslistrc diff --git a/palettes/pastel/mint/CHANGELOG.md b/palettes/pastel/mint/CHANGELOG.md new file mode 100644 index 00000000000..deb3d412147 --- /dev/null +++ b/palettes/pastel/mint/CHANGELOG.md @@ -0,0 +1,16 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-pastel-mint + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-pastel-mint + +# 4.0.0-beta.0 (2026-04-08) + +**Note:** Version bump only for package @tsparticles/palette-pastel-mint diff --git a/palettes/pastel/mint/LICENSE b/palettes/pastel/mint/LICENSE new file mode 100644 index 00000000000..bdc05f528fa --- /dev/null +++ b/palettes/pastel/mint/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/palettes/pastel/mint/README.md b/palettes/pastel/mint/README.md new file mode 100644 index 00000000000..9b4d515a19a --- /dev/null +++ b/palettes/pastel/mint/README.md @@ -0,0 +1,203 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Mint Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-mint/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-mint) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-mint.svg)](https://www.npmjs.com/package/@tsparticles/palette-mint) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-mint) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/pastel/mint/images/sample.png)](https://particles.js.org/samples/palettes/mint) + +## Colors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ #1A1000 +
+
+ #3A2200 +
+
+ #6B3D00 +
+
+ #A65A00 +
+
+ #D98A1A +
+
+ #FFC266 +
+
+ #090500 +
+
+ #F0FFF8 +
+
+ #BAFFC9 +
+
+ #B3F5E8 +
+
+ #BAFFFF +
+
+ #D4FFEF +
+
+ #C0F0DE +
+
+ #CAFFCC +
+
+ #FFA500 +
+
+ #FFEFD7 +
+
+ #000000 +
+
+ #FFFFFF +
+
+ #F5F5F5 +
+
+ #1E1E1E +
+
+ #252525 +
+
+ #E0E0E0 +
+
+ #A0A0A0 +
+
+ #404040 +
+
+ #1D3557 +
+
+ Background
+ #1A1000 +
+ Blend mode: source-over | Fill: true +
+## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadMintPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadMintPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "mint", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadMintPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/pastel/pastelSunset/eslint.config.js b/palettes/pastel/mint/eslint.config.js similarity index 100% rename from palettes/pastel/pastelSunset/eslint.config.js rename to palettes/pastel/mint/eslint.config.js diff --git a/palettes/pastel/pastelMint/images/sample.png b/palettes/pastel/mint/images/sample.png similarity index 100% rename from palettes/pastel/pastelMint/images/sample.png rename to palettes/pastel/mint/images/sample.png diff --git a/palettes/pastel/mint/package.dist.json b/palettes/pastel/mint/package.dist.json new file mode 100644 index 00000000000..4e9618e5c35 --- /dev/null +++ b/palettes/pastel/mint/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-pastel-mint", + "version": "4.0.0-beta.15", + "description": "tsParticles pastel mint palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/pastel/mint" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/pastel/mint/package.json b/palettes/pastel/mint/package.json new file mode 100644 index 00000000000..526a617821f --- /dev/null +++ b/palettes/pastel/mint/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-pastel-mint", + "version": "4.0.0-beta.15", + "description": "tsParticles pastel mint palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/pastel/mint" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/pastel/mint/rollup.config.js b/palettes/pastel/mint/rollup.config.js new file mode 100644 index 00000000000..7555642abbc --- /dev/null +++ b/palettes/pastel/mint/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-mint", + paletteName: "Mint Palette", + version, +}); diff --git a/palettes/pastel/mint/src/browser.ts b/palettes/pastel/mint/src/browser.ts new file mode 100644 index 00000000000..9073c026d26 --- /dev/null +++ b/palettes/pastel/mint/src/browser.ts @@ -0,0 +1,10 @@ +import { loadPastelMintPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadPastelMintPalette?: typeof loadPastelMintPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadPastelMintPalette = loadPastelMintPalette; + +export * from "./index.js"; diff --git a/palettes/pastel/mint/src/index.lazy.ts b/palettes/pastel/mint/src/index.lazy.ts new file mode 100644 index 00000000000..ab4b6eac73d --- /dev/null +++ b/palettes/pastel/mint/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "pastel-mint"; + +/** + * @param engine - + */ +export async function loadPastelMintPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/pastel/mint/src/index.ts b/palettes/pastel/mint/src/index.ts new file mode 100644 index 00000000000..b8912768a0e --- /dev/null +++ b/palettes/pastel/mint/src/index.ts @@ -0,0 +1,11 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; +const paletteName = "pastel-mint"; +/** + * @param engine - + */ +export async function loadPastelMintPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/pastel/pastelMint/src/options.ts b/palettes/pastel/mint/src/options.ts similarity index 100% rename from palettes/pastel/pastelMint/src/options.ts rename to palettes/pastel/mint/src/options.ts diff --git a/palettes/vibrant/vibrantElectric/tsconfig.base.json b/palettes/pastel/mint/tsconfig.base.json similarity index 100% rename from palettes/vibrant/vibrantElectric/tsconfig.base.json rename to palettes/pastel/mint/tsconfig.base.json diff --git a/palettes/pastel/pastelSunset/tsconfig.browser.json b/palettes/pastel/mint/tsconfig.browser.json similarity index 100% rename from palettes/pastel/pastelSunset/tsconfig.browser.json rename to palettes/pastel/mint/tsconfig.browser.json diff --git a/palettes/pastel/pastelSunset/tsconfig.json b/palettes/pastel/mint/tsconfig.json similarity index 100% rename from palettes/pastel/pastelSunset/tsconfig.json rename to palettes/pastel/mint/tsconfig.json diff --git a/palettes/pastel/pastelSunset/tsconfig.module.json b/palettes/pastel/mint/tsconfig.module.json similarity index 100% rename from palettes/pastel/pastelSunset/tsconfig.module.json rename to palettes/pastel/mint/tsconfig.module.json diff --git a/palettes/pastel/pastelSunset/tsconfig.types.json b/palettes/pastel/mint/tsconfig.types.json similarity index 100% rename from palettes/pastel/pastelSunset/tsconfig.types.json rename to palettes/pastel/mint/tsconfig.types.json diff --git a/palettes/pastel/mint/typedoc.json b/palettes/pastel/mint/typedoc.json new file mode 100644 index 00000000000..2b0cbd729d0 --- /dev/null +++ b/palettes/pastel/mint/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Mint Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/pastel/pastelCool/CHANGELOG.md b/palettes/pastel/pastelCool/CHANGELOG.md deleted file mode 100644 index bf701d28e5b..00000000000 --- a/palettes/pastel/pastelCool/CHANGELOG.md +++ /dev/null @@ -1,12 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-pastel-cool - -# 4.0.0-beta.0 (2026-04-08) - -**Note:** Version bump only for package @tsparticles/palette-pastel-cool diff --git a/palettes/pastel/pastelCool/README.md b/palettes/pastel/pastelCool/README.md deleted file mode 100644 index f0a3de4f207..00000000000 --- a/palettes/pastel/pastelCool/README.md +++ /dev/null @@ -1,44 +0,0 @@ -# tsParticles Pastel Cool Palette - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for pastel cool. - -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadPastelCoolPalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## Install - -```bash -pnpm add @tsparticles/palette-pastel-cool -``` - -## Usage - -```ts -import { loadBasic } from "@tsparticles/basic"; -import { tsParticles } from "@tsparticles/engine"; -import { loadPastelCoolPalette } from "@tsparticles/palette-pastel-cool"; - -await loadBasic(tsParticles); -await loadPastelCoolPalette(tsParticles); - -await tsParticles.load({ - id: "tsparticles", - options: { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "pastel-cool", - }, -}); -``` diff --git a/palettes/pastel/pastelCool/package.dist.json b/palettes/pastel/pastelCool/package.dist.json deleted file mode 100644 index d7fc9f8c7ec..00000000000 --- a/palettes/pastel/pastelCool/package.dist.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "name": "@tsparticles/palette-pastel-cool", - "version": "4.0.0-beta.12", - "description": "tsParticles pastel cool palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/pastel/pastelCool" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "jsdelivr": "tsparticles.palette-pastel-cool.min.js", - "unpkg": "tsparticles.palette-pastel-cool.min.js", - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "publishConfig": { - "access": "public" - }, - "type": "module" -} diff --git a/palettes/pastel/pastelCool/package.json b/palettes/pastel/pastelCool/package.json deleted file mode 100644 index 2a2bdf9a68e..00000000000 --- a/palettes/pastel/pastelCool/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-pastel-cool", - "version": "4.0.0-beta.12", - "description": "tsParticles pastel cool palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/pastel/pastelCool" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/pastel/pastelCool/src/index.ts b/palettes/pastel/pastelCool/src/index.ts deleted file mode 100644 index 26abf94463e..00000000000 --- a/palettes/pastel/pastelCool/src/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; -const paletteName = "pastel-cool"; -/** - * @param engine - - */ -export async function loadPastelCoolPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/pastel/pastelCool/typedoc.json b/palettes/pastel/pastelCool/typedoc.json deleted file mode 100644 index b1b2c7a9669..00000000000 --- a/palettes/pastel/pastelCool/typedoc.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Pastel Cool Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} - diff --git a/palettes/pastel/pastelCool/webpack.config.js b/palettes/pastel/pastelCool/webpack.config.js deleted file mode 100644 index f1d7af54bda..00000000000 --- a/palettes/pastel/pastelCool/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-pastel-cool", - paletteName: "Pastel Cool Palette", - version, -}); - diff --git a/palettes/pastel/pastelDream/CHANGELOG.md b/palettes/pastel/pastelDream/CHANGELOG.md deleted file mode 100644 index a3b0dfcb3c1..00000000000 --- a/palettes/pastel/pastelDream/CHANGELOG.md +++ /dev/null @@ -1,12 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-pastel-dream - -# 4.0.0-beta.0 (2026-04-08) - -**Note:** Version bump only for package @tsparticles/palette-pastel-dream diff --git a/palettes/pastel/pastelDream/README.md b/palettes/pastel/pastelDream/README.md deleted file mode 100644 index b01d878512a..00000000000 --- a/palettes/pastel/pastelDream/README.md +++ /dev/null @@ -1,44 +0,0 @@ -# tsParticles Pastel Dream Palette - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for pastel dream. - -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadPastelDreamPalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## Install - -```bash -pnpm add @tsparticles/palette-pastel-dream -``` - -## Usage - -```ts -import { loadBasic } from "@tsparticles/basic"; -import { tsParticles } from "@tsparticles/engine"; -import { loadPastelDreamPalette } from "@tsparticles/palette-pastel-dream"; - -await loadBasic(tsParticles); -await loadPastelDreamPalette(tsParticles); - -await tsParticles.load({ - id: "tsparticles", - options: { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "pastel-dream", - }, -}); -``` diff --git a/palettes/pastel/pastelDream/package.dist.json b/palettes/pastel/pastelDream/package.dist.json deleted file mode 100644 index 5bd0fe06635..00000000000 --- a/palettes/pastel/pastelDream/package.dist.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "name": "@tsparticles/palette-pastel-dream", - "version": "4.0.0-beta.12", - "description": "tsParticles pastel dream palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/pastel/pastelDream" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "jsdelivr": "tsparticles.palette-pastel-dream.min.js", - "unpkg": "tsparticles.palette-pastel-dream.min.js", - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "publishConfig": { - "access": "public" - }, - "type": "module" -} diff --git a/palettes/pastel/pastelDream/package.json b/palettes/pastel/pastelDream/package.json deleted file mode 100644 index a104678bd83..00000000000 --- a/palettes/pastel/pastelDream/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-pastel-dream", - "version": "4.0.0-beta.12", - "description": "tsParticles pastel dream palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/pastel/pastelDream" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/pastel/pastelDream/src/index.ts b/palettes/pastel/pastelDream/src/index.ts deleted file mode 100644 index d328603a6a6..00000000000 --- a/palettes/pastel/pastelDream/src/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; -const paletteName = "pastel-dream"; -/** - * @param engine - - */ -export async function loadPastelDreamPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/pastel/pastelDream/typedoc.json b/palettes/pastel/pastelDream/typedoc.json deleted file mode 100644 index 23a015c8812..00000000000 --- a/palettes/pastel/pastelDream/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Pastel Dream Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/pastel/pastelDream/webpack.config.js b/palettes/pastel/pastelDream/webpack.config.js deleted file mode 100644 index cd37e741e1a..00000000000 --- a/palettes/pastel/pastelDream/webpack.config.js +++ /dev/null @@ -1,15 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-pastel-dream", - paletteName: "Pastel Dream Palette", - version, -}); diff --git a/palettes/pastel/pastelMint/CHANGELOG.md b/palettes/pastel/pastelMint/CHANGELOG.md deleted file mode 100644 index 753a4c3f2be..00000000000 --- a/palettes/pastel/pastelMint/CHANGELOG.md +++ /dev/null @@ -1,12 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-pastel-mint - -# 4.0.0-beta.0 (2026-04-08) - -**Note:** Version bump only for package @tsparticles/palette-pastel-mint diff --git a/palettes/pastel/pastelMint/LICENSE b/palettes/pastel/pastelMint/LICENSE deleted file mode 100644 index 8a7e836f792..00000000000 --- a/palettes/pastel/pastelMint/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -MIT License - -Copyright (c) 2020 Matteo Bruni - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - diff --git a/palettes/pastel/pastelMint/README.md b/palettes/pastel/pastelMint/README.md deleted file mode 100644 index 29709f60785..00000000000 --- a/palettes/pastel/pastelMint/README.md +++ /dev/null @@ -1,44 +0,0 @@ -# tsParticles Pastel Mint Palette - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for pastel mint. - -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadPastelMintPalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## Install - -```bash -pnpm add @tsparticles/palette-pastel-mint -``` - -## Usage - -```ts -import { loadBasic } from "@tsparticles/basic"; -import { tsParticles } from "@tsparticles/engine"; -import { loadPastelMintPalette } from "@tsparticles/palette-pastel-mint"; - -await loadBasic(tsParticles); -await loadPastelMintPalette(tsParticles); - -await tsParticles.load({ - id: "tsparticles", - options: { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "pastel-mint", - }, -}); -``` diff --git a/palettes/pastel/pastelMint/package.dist.json b/palettes/pastel/pastelMint/package.dist.json deleted file mode 100644 index 263405a394e..00000000000 --- a/palettes/pastel/pastelMint/package.dist.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "name": "@tsparticles/palette-pastel-mint", - "version": "4.0.0-beta.12", - "description": "tsParticles pastel mint palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/pastel/pastelMint" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "jsdelivr": "tsparticles.palette-pastel-mint.min.js", - "unpkg": "tsparticles.palette-pastel-mint.min.js", - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "publishConfig": { - "access": "public" - }, - "type": "module" -} diff --git a/palettes/pastel/pastelMint/package.json b/palettes/pastel/pastelMint/package.json deleted file mode 100644 index 812db6ef962..00000000000 --- a/palettes/pastel/pastelMint/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-pastel-mint", - "version": "4.0.0-beta.12", - "description": "tsParticles pastel mint palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/pastel/pastelMint" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/pastel/pastelMint/src/index.ts b/palettes/pastel/pastelMint/src/index.ts deleted file mode 100644 index ce870b3c247..00000000000 --- a/palettes/pastel/pastelMint/src/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; -const paletteName = "pastel-mint"; -/** - * @param engine - - */ -export async function loadPastelMintPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/pastel/pastelMint/typedoc.json b/palettes/pastel/pastelMint/typedoc.json deleted file mode 100644 index 1d618cdbcc7..00000000000 --- a/palettes/pastel/pastelMint/typedoc.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Pastel Mint Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} - diff --git a/palettes/pastel/pastelMint/webpack.config.js b/palettes/pastel/pastelMint/webpack.config.js deleted file mode 100644 index d02a009fda1..00000000000 --- a/palettes/pastel/pastelMint/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-pastel-mint", - paletteName: "Pastel Mint Palette", - version, -}); - diff --git a/palettes/pastel/pastelSunset/CHANGELOG.md b/palettes/pastel/pastelSunset/CHANGELOG.md deleted file mode 100644 index fc3433b02b5..00000000000 --- a/palettes/pastel/pastelSunset/CHANGELOG.md +++ /dev/null @@ -1,12 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-pastel-sunset - -# 4.0.0-beta.0 (2026-04-08) - -**Note:** Version bump only for package @tsparticles/palette-pastel-sunset diff --git a/palettes/pastel/pastelSunset/LICENSE b/palettes/pastel/pastelSunset/LICENSE deleted file mode 100644 index 8a7e836f792..00000000000 --- a/palettes/pastel/pastelSunset/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -MIT License - -Copyright (c) 2020 Matteo Bruni - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - diff --git a/palettes/pastel/pastelSunset/README.md b/palettes/pastel/pastelSunset/README.md deleted file mode 100644 index db9adba2357..00000000000 --- a/palettes/pastel/pastelSunset/README.md +++ /dev/null @@ -1,44 +0,0 @@ -# tsParticles Pastel Sunset Palette - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for pastel sunset. - -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadPastelSunsetPalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## Install - -```bash -pnpm add @tsparticles/palette-pastel-sunset -``` - -## Usage - -```ts -import { loadBasic } from "@tsparticles/basic"; -import { tsParticles } from "@tsparticles/engine"; -import { loadPastelSunsetPalette } from "@tsparticles/palette-pastel-sunset"; - -await loadBasic(tsParticles); -await loadPastelSunsetPalette(tsParticles); - -await tsParticles.load({ - id: "tsparticles", - options: { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "pastel-sunset", - }, -}); -``` diff --git a/palettes/pastel/pastelSunset/package.dist.json b/palettes/pastel/pastelSunset/package.dist.json deleted file mode 100644 index 336422618f0..00000000000 --- a/palettes/pastel/pastelSunset/package.dist.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "name": "@tsparticles/palette-pastel-sunset", - "version": "4.0.0-beta.12", - "description": "tsParticles pastel sunset palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/pastel/pastelSunset" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "jsdelivr": "tsparticles.palette-pastel-sunset.min.js", - "unpkg": "tsparticles.palette-pastel-sunset.min.js", - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "publishConfig": { - "access": "public" - }, - "type": "module" -} diff --git a/palettes/pastel/pastelSunset/package.json b/palettes/pastel/pastelSunset/package.json deleted file mode 100644 index f00814a0e99..00000000000 --- a/palettes/pastel/pastelSunset/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-pastel-sunset", - "version": "4.0.0-beta.12", - "description": "tsParticles pastel sunset palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/pastel/pastelSunset" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/pastel/pastelSunset/src/index.ts b/palettes/pastel/pastelSunset/src/index.ts deleted file mode 100644 index 8ef001f14dc..00000000000 --- a/palettes/pastel/pastelSunset/src/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; -const paletteName = "pastel-sunset"; -/** - * @param engine - - */ -export async function loadPastelSunsetPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/pastel/pastelSunset/typedoc.json b/palettes/pastel/pastelSunset/typedoc.json deleted file mode 100644 index 8af2b7d88b2..00000000000 --- a/palettes/pastel/pastelSunset/typedoc.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Pastel Sunset Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} - diff --git a/palettes/pastel/pastelSunset/webpack.config.js b/palettes/pastel/pastelSunset/webpack.config.js deleted file mode 100644 index 90ab431f92c..00000000000 --- a/palettes/pastel/pastelSunset/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-pastel-sunset", - paletteName: "Pastel Sunset Palette", - version, -}); - diff --git a/palettes/pastel/pastelWarm/CHANGELOG.md b/palettes/pastel/pastelWarm/CHANGELOG.md deleted file mode 100644 index 7e2419551fc..00000000000 --- a/palettes/pastel/pastelWarm/CHANGELOG.md +++ /dev/null @@ -1,12 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-pastel-warm - -# 4.0.0-beta.0 (2026-04-08) - -**Note:** Version bump only for package @tsparticles/palette-pastel-warm diff --git a/palettes/pastel/pastelWarm/LICENSE b/palettes/pastel/pastelWarm/LICENSE deleted file mode 100644 index 8a7e836f792..00000000000 --- a/palettes/pastel/pastelWarm/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -MIT License - -Copyright (c) 2020 Matteo Bruni - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - diff --git a/palettes/pastel/pastelWarm/README.md b/palettes/pastel/pastelWarm/README.md deleted file mode 100644 index 1970f469e30..00000000000 --- a/palettes/pastel/pastelWarm/README.md +++ /dev/null @@ -1,44 +0,0 @@ -# tsParticles Pastel Warm Palette - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for pastel warm. - -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadPastelWarmPalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## Install - -```bash -pnpm add @tsparticles/palette-pastel-warm -``` - -## Usage - -```ts -import { loadBasic } from "@tsparticles/basic"; -import { tsParticles } from "@tsparticles/engine"; -import { loadPastelWarmPalette } from "@tsparticles/palette-pastel-warm"; - -await loadBasic(tsParticles); -await loadPastelWarmPalette(tsParticles); - -await tsParticles.load({ - id: "tsparticles", - options: { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "pastel-warm", - }, -}); -``` diff --git a/palettes/pastel/pastelWarm/package.dist.json b/palettes/pastel/pastelWarm/package.dist.json deleted file mode 100644 index e67f57f860f..00000000000 --- a/palettes/pastel/pastelWarm/package.dist.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "name": "@tsparticles/palette-pastel-warm", - "version": "4.0.0-beta.12", - "description": "tsParticles pastel warm palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/pastel/pastelWarm" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "jsdelivr": "tsparticles.palette-pastel-warm.min.js", - "unpkg": "tsparticles.palette-pastel-warm.min.js", - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "publishConfig": { - "access": "public" - }, - "type": "module" -} diff --git a/palettes/pastel/pastelWarm/package.json b/palettes/pastel/pastelWarm/package.json deleted file mode 100644 index d3f9a3e0c9b..00000000000 --- a/palettes/pastel/pastelWarm/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-pastel-warm", - "version": "4.0.0-beta.12", - "description": "tsParticles pastel warm palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/pastel/pastelWarm" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/pastel/pastelWarm/src/index.ts b/palettes/pastel/pastelWarm/src/index.ts deleted file mode 100644 index 04d8472386a..00000000000 --- a/palettes/pastel/pastelWarm/src/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; -const paletteName = "pastel-warm"; -/** - * @param engine - - */ -export async function loadPastelWarmPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/pastel/pastelWarm/typedoc.json b/palettes/pastel/pastelWarm/typedoc.json deleted file mode 100644 index 516b5d23499..00000000000 --- a/palettes/pastel/pastelWarm/typedoc.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Pastel Warm Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} - diff --git a/palettes/pastel/pastelWarm/webpack.config.js b/palettes/pastel/pastelWarm/webpack.config.js deleted file mode 100644 index 3d26bccd74c..00000000000 --- a/palettes/pastel/pastelWarm/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-pastel-warm", - paletteName: "Pastel Warm Palette", - version, -}); - diff --git a/palettes/water/water/.browserslistrc b/palettes/pastel/sunset/.browserslistrc similarity index 100% rename from palettes/water/water/.browserslistrc rename to palettes/pastel/sunset/.browserslistrc diff --git a/palettes/pastel/sunset/CHANGELOG.md b/palettes/pastel/sunset/CHANGELOG.md new file mode 100644 index 00000000000..a5c1999eb7e --- /dev/null +++ b/palettes/pastel/sunset/CHANGELOG.md @@ -0,0 +1,16 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-pastel-sunset + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-pastel-sunset + +# 4.0.0-beta.0 (2026-04-08) + +**Note:** Version bump only for package @tsparticles/palette-pastel-sunset diff --git a/palettes/pastel/sunset/LICENSE b/palettes/pastel/sunset/LICENSE new file mode 100644 index 00000000000..bdc05f528fa --- /dev/null +++ b/palettes/pastel/sunset/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/palettes/pastel/sunset/README.md b/palettes/pastel/sunset/README.md new file mode 100644 index 00000000000..e321221b656 --- /dev/null +++ b/palettes/pastel/sunset/README.md @@ -0,0 +1,203 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Sunset Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-sunset/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-sunset) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-sunset.svg)](https://www.npmjs.com/package/@tsparticles/palette-sunset) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-sunset) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/pastel/sunset/images/sample.png)](https://particles.js.org/samples/palettes/sunset) + +## Colors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ #1A1000 +
+
+ #3A2200 +
+
+ #6B3D00 +
+
+ #A65A00 +
+
+ #D98A1A +
+
+ #FFC266 +
+
+ #090500 +
+
+ #FFF3E6 +
+
+ #FFD4B3 +
+
+ #FFCCBA +
+
+ #FFD9B3 +
+
+ #FFCAB3 +
+
+ #FFE4BA +
+
+ #FFC9BA +
+
+ #FFA500 +
+
+ #FFEFD7 +
+
+ #000000 +
+
+ #FFFFFF +
+
+ #F5F5F5 +
+
+ #1E1E1E +
+
+ #252525 +
+
+ #E0E0E0 +
+
+ #A0A0A0 +
+
+ #404040 +
+
+ #1D3557 +
+
+ Background
+ #1A1000 +
+ Blend mode: source-over | Fill: true +
+## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadSunsetPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadSunsetPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "sunset", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadSunsetPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/pastel/pastelWarm/eslint.config.js b/palettes/pastel/sunset/eslint.config.js similarity index 100% rename from palettes/pastel/pastelWarm/eslint.config.js rename to palettes/pastel/sunset/eslint.config.js diff --git a/palettes/pastel/pastelSunset/images/sample.png b/palettes/pastel/sunset/images/sample.png similarity index 100% rename from palettes/pastel/pastelSunset/images/sample.png rename to palettes/pastel/sunset/images/sample.png diff --git a/palettes/pastel/sunset/package.dist.json b/palettes/pastel/sunset/package.dist.json new file mode 100644 index 00000000000..249d98a6564 --- /dev/null +++ b/palettes/pastel/sunset/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-pastel-sunset", + "version": "4.0.0-beta.15", + "description": "tsParticles pastel sunset palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/pastel/sunset" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/pastel/sunset/package.json b/palettes/pastel/sunset/package.json new file mode 100644 index 00000000000..db52d623e57 --- /dev/null +++ b/palettes/pastel/sunset/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-pastel-sunset", + "version": "4.0.0-beta.15", + "description": "tsParticles pastel sunset palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/pastel/sunset" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/pastel/sunset/rollup.config.js b/palettes/pastel/sunset/rollup.config.js new file mode 100644 index 00000000000..9ec06a12f18 --- /dev/null +++ b/palettes/pastel/sunset/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-sunset", + paletteName: "Sunset Palette", + version, +}); diff --git a/palettes/pastel/sunset/src/browser.ts b/palettes/pastel/sunset/src/browser.ts new file mode 100644 index 00000000000..847c3953d98 --- /dev/null +++ b/palettes/pastel/sunset/src/browser.ts @@ -0,0 +1,10 @@ +import { loadPastelSunsetPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadPastelSunsetPalette?: typeof loadPastelSunsetPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadPastelSunsetPalette = loadPastelSunsetPalette; + +export * from "./index.js"; diff --git a/palettes/pastel/sunset/src/index.lazy.ts b/palettes/pastel/sunset/src/index.lazy.ts new file mode 100644 index 00000000000..a23bb79efb2 --- /dev/null +++ b/palettes/pastel/sunset/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "pastel-sunset"; + +/** + * @param engine - + */ +export async function loadPastelSunsetPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/pastel/sunset/src/index.ts b/palettes/pastel/sunset/src/index.ts new file mode 100644 index 00000000000..e2d2009d2a7 --- /dev/null +++ b/palettes/pastel/sunset/src/index.ts @@ -0,0 +1,11 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; +const paletteName = "pastel-sunset"; +/** + * @param engine - + */ +export async function loadPastelSunsetPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/pastel/pastelSunset/src/options.ts b/palettes/pastel/sunset/src/options.ts similarity index 100% rename from palettes/pastel/pastelSunset/src/options.ts rename to palettes/pastel/sunset/src/options.ts diff --git a/palettes/vibrant/vibrantNeon/tsconfig.base.json b/palettes/pastel/sunset/tsconfig.base.json similarity index 100% rename from palettes/vibrant/vibrantNeon/tsconfig.base.json rename to palettes/pastel/sunset/tsconfig.base.json diff --git a/palettes/pastel/pastelWarm/tsconfig.browser.json b/palettes/pastel/sunset/tsconfig.browser.json similarity index 100% rename from palettes/pastel/pastelWarm/tsconfig.browser.json rename to palettes/pastel/sunset/tsconfig.browser.json diff --git a/palettes/pastel/pastelWarm/tsconfig.json b/palettes/pastel/sunset/tsconfig.json similarity index 100% rename from palettes/pastel/pastelWarm/tsconfig.json rename to palettes/pastel/sunset/tsconfig.json diff --git a/palettes/pastel/pastelWarm/tsconfig.module.json b/palettes/pastel/sunset/tsconfig.module.json similarity index 100% rename from palettes/pastel/pastelWarm/tsconfig.module.json rename to palettes/pastel/sunset/tsconfig.module.json diff --git a/palettes/pastel/pastelWarm/tsconfig.types.json b/palettes/pastel/sunset/tsconfig.types.json similarity index 100% rename from palettes/pastel/pastelWarm/tsconfig.types.json rename to palettes/pastel/sunset/tsconfig.types.json diff --git a/palettes/pastel/sunset/typedoc.json b/palettes/pastel/sunset/typedoc.json new file mode 100644 index 00000000000..a1ad8e3b739 --- /dev/null +++ b/palettes/pastel/sunset/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Sunset Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/water/waterSplash/.browserslistrc b/palettes/pastel/warm/.browserslistrc similarity index 100% rename from palettes/water/waterSplash/.browserslistrc rename to palettes/pastel/warm/.browserslistrc diff --git a/palettes/pastel/warm/CHANGELOG.md b/palettes/pastel/warm/CHANGELOG.md new file mode 100644 index 00000000000..04a86a93d5e --- /dev/null +++ b/palettes/pastel/warm/CHANGELOG.md @@ -0,0 +1,16 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-pastel-warm + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-pastel-warm + +# 4.0.0-beta.0 (2026-04-08) + +**Note:** Version bump only for package @tsparticles/palette-pastel-warm diff --git a/palettes/pastel/warm/LICENSE b/palettes/pastel/warm/LICENSE new file mode 100644 index 00000000000..bdc05f528fa --- /dev/null +++ b/palettes/pastel/warm/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/palettes/pastel/warm/README.md b/palettes/pastel/warm/README.md new file mode 100644 index 00000000000..eb15186ca02 --- /dev/null +++ b/palettes/pastel/warm/README.md @@ -0,0 +1,203 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Warm Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-warm/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-warm) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-warm.svg)](https://www.npmjs.com/package/@tsparticles/palette-warm) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-warm) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/pastel/warm/images/sample.png)](https://particles.js.org/samples/palettes/warm) + +## Colors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ #1A1000 +
+
+ #3A2200 +
+
+ #6B3D00 +
+
+ #A65A00 +
+
+ #D98A1A +
+
+ #FFC266 +
+
+ #090500 +
+
+ #FFF5F0 +
+
+ #FFD4B3 +
+
+ #FFE4B3 +
+
+ #FFF4BA +
+
+ #FFE5BA +
+
+ #FFD9C0 +
+
+ #FFE8CC +
+
+ #FFA500 +
+
+ #FFEFD7 +
+
+ #000000 +
+
+ #FFFFFF +
+
+ #F5F5F5 +
+
+ #1E1E1E +
+
+ #252525 +
+
+ #E0E0E0 +
+
+ #A0A0A0 +
+
+ #404040 +
+
+ #1D3557 +
+
+ Background
+ #1A1000 +
+ Blend mode: source-over | Fill: true +
+## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadWarmPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadWarmPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "warm", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadWarmPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/vibrant/vibrantElectric/eslint.config.js b/palettes/pastel/warm/eslint.config.js similarity index 100% rename from palettes/vibrant/vibrantElectric/eslint.config.js rename to palettes/pastel/warm/eslint.config.js diff --git a/palettes/pastel/pastelWarm/images/sample.png b/palettes/pastel/warm/images/sample.png similarity index 100% rename from palettes/pastel/pastelWarm/images/sample.png rename to palettes/pastel/warm/images/sample.png diff --git a/palettes/pastel/warm/package.dist.json b/palettes/pastel/warm/package.dist.json new file mode 100644 index 00000000000..54c6be44aa1 --- /dev/null +++ b/palettes/pastel/warm/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-pastel-warm", + "version": "4.0.0-beta.15", + "description": "tsParticles pastel warm palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/pastel/warm" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/pastel/warm/package.json b/palettes/pastel/warm/package.json new file mode 100644 index 00000000000..6b79139c016 --- /dev/null +++ b/palettes/pastel/warm/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-pastel-warm", + "version": "4.0.0-beta.15", + "description": "tsParticles pastel warm palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/pastel/warm" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/pastel/warm/rollup.config.js b/palettes/pastel/warm/rollup.config.js new file mode 100644 index 00000000000..a6a96fe40d7 --- /dev/null +++ b/palettes/pastel/warm/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-warm", + paletteName: "Warm Palette", + version, +}); diff --git a/palettes/pastel/warm/src/browser.ts b/palettes/pastel/warm/src/browser.ts new file mode 100644 index 00000000000..8c4d0fa0c60 --- /dev/null +++ b/palettes/pastel/warm/src/browser.ts @@ -0,0 +1,10 @@ +import { loadPastelWarmPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadPastelWarmPalette?: typeof loadPastelWarmPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadPastelWarmPalette = loadPastelWarmPalette; + +export * from "./index.js"; diff --git a/palettes/pastel/warm/src/index.lazy.ts b/palettes/pastel/warm/src/index.lazy.ts new file mode 100644 index 00000000000..6540f0ed97c --- /dev/null +++ b/palettes/pastel/warm/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "pastel-warm"; + +/** + * @param engine - + */ +export async function loadPastelWarmPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/pastel/warm/src/index.ts b/palettes/pastel/warm/src/index.ts new file mode 100644 index 00000000000..6ae900ff0a9 --- /dev/null +++ b/palettes/pastel/warm/src/index.ts @@ -0,0 +1,11 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; +const paletteName = "pastel-warm"; +/** + * @param engine - + */ +export async function loadPastelWarmPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/pastel/pastelWarm/src/options.ts b/palettes/pastel/warm/src/options.ts similarity index 100% rename from palettes/pastel/pastelWarm/src/options.ts rename to palettes/pastel/warm/src/options.ts diff --git a/palettes/vibrant/vibrantRetro/tsconfig.base.json b/palettes/pastel/warm/tsconfig.base.json similarity index 100% rename from palettes/vibrant/vibrantRetro/tsconfig.base.json rename to palettes/pastel/warm/tsconfig.base.json diff --git a/palettes/vibrant/vibrantElectric/tsconfig.browser.json b/palettes/pastel/warm/tsconfig.browser.json similarity index 100% rename from palettes/vibrant/vibrantElectric/tsconfig.browser.json rename to palettes/pastel/warm/tsconfig.browser.json diff --git a/palettes/vibrant/vibrantElectric/tsconfig.json b/palettes/pastel/warm/tsconfig.json similarity index 100% rename from palettes/vibrant/vibrantElectric/tsconfig.json rename to palettes/pastel/warm/tsconfig.json diff --git a/palettes/vibrant/vibrantElectric/tsconfig.module.json b/palettes/pastel/warm/tsconfig.module.json similarity index 100% rename from palettes/vibrant/vibrantElectric/tsconfig.module.json rename to palettes/pastel/warm/tsconfig.module.json diff --git a/palettes/vibrant/vibrantElectric/tsconfig.types.json b/palettes/pastel/warm/tsconfig.types.json similarity index 100% rename from palettes/vibrant/vibrantElectric/tsconfig.types.json rename to palettes/pastel/warm/tsconfig.types.json diff --git a/palettes/pastel/warm/typedoc.json b/palettes/pastel/warm/typedoc.json new file mode 100644 index 00000000000..df9e8542322 --- /dev/null +++ b/palettes/pastel/warm/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Warm Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/space/auroraBorealis/CHANGELOG.md b/palettes/space/auroraBorealis/CHANGELOG.md index 974b0a65e1a..d1d6ced2be1 100644 --- a/palettes/space/auroraBorealis/CHANGELOG.md +++ b/palettes/space/auroraBorealis/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-aurora-borealis + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-aurora-borealis diff --git a/palettes/space/auroraBorealis/README.md b/palettes/space/auroraBorealis/README.md index 35580440d73..0da62d37232 100644 --- a/palettes/space/auroraBorealis/README.md +++ b/palettes/space/auroraBorealis/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Aurora Borealis Palette +# tsParticles AuroraBorealis Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-aurora-borealis/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-aurora-borealis) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-aurora-borealis.svg)](https://www.npmjs.com/package/@tsparticles/palette-aurora-borealis) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-aurora-borealis)](https://www.npmjs.com/package/@tsparticles/palette-aurora-borealis) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-auroraBorealis/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-auroraBorealis) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-auroraBorealis.svg)](https://www.npmjs.com/package/@tsparticles/palette-auroraBorealis) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-auroraBorealis) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for aurora borealis. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/auroraBorealis/images/sample.png)](https://particles.js.org/samples/palettes/aurora-borealis) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/space/auroraBorealis/images/sample.png)](https://particles.js.org/samples/palettes/auroraBorealis) ## Colors @@ -83,7 +83,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -105,7 +105,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "aurora-borealis", + palette: "auroraBorealis", }; await engine.load({ @@ -120,47 +120,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "aurora-borealis", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadAuroraBorealisPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadAuroraBorealisPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadAuroraBorealisPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -paauroraBorealis[Aurora Borealis] -end - -e[tsParticles Engine] --> paauroraBorealis -``` diff --git a/palettes/space/auroraBorealis/package.dist.json b/palettes/space/auroraBorealis/package.dist.json index 3a9162c6795..6182797ee3b 100644 --- a/palettes/space/auroraBorealis/package.dist.json +++ b/palettes/space/auroraBorealis/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-aurora-borealis", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles aurora borealis palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.aurora-borealis.min.js", - "unpkg": "tsparticles.palette.aurora-borealis.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/space/auroraBorealis/package.json b/palettes/space/auroraBorealis/package.json index 1706aa9f1e2..d6248fd7488 100644 --- a/palettes/space/auroraBorealis/package.json +++ b/palettes/space/auroraBorealis/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-aurora-borealis", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles aurora borealis palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/space/auroraBorealis/rollup.config.js b/palettes/space/auroraBorealis/rollup.config.js new file mode 100644 index 00000000000..eed841a43f1 --- /dev/null +++ b/palettes/space/auroraBorealis/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-auroraBorealis", + paletteName: "AuroraBorealis Palette", + version, +}); diff --git a/palettes/space/auroraBorealis/src/browser.ts b/palettes/space/auroraBorealis/src/browser.ts new file mode 100644 index 00000000000..4f1706c0320 --- /dev/null +++ b/palettes/space/auroraBorealis/src/browser.ts @@ -0,0 +1,10 @@ +import { loadAuroraBorealisPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadAuroraBorealisPalette?: typeof loadAuroraBorealisPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadAuroraBorealisPalette = loadAuroraBorealisPalette; + +export * from "./index.js"; diff --git a/palettes/space/auroraBorealis/src/index.lazy.ts b/palettes/space/auroraBorealis/src/index.lazy.ts new file mode 100644 index 00000000000..b609d81eb86 --- /dev/null +++ b/palettes/space/auroraBorealis/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "aurora-borealis"; + +/** + * @param engine - + */ +export async function loadAuroraBorealisPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/space/auroraBorealis/src/index.ts b/palettes/space/auroraBorealis/src/index.ts index 362547b8a3b..5269df919c5 100644 --- a/palettes/space/auroraBorealis/src/index.ts +++ b/palettes/space/auroraBorealis/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "aurora-borealis"; @@ -6,9 +7,7 @@ const paletteName = "aurora-borealis"; * @param engine - */ export async function loadAuroraBorealisPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/space/auroraBorealis/typedoc.json b/palettes/space/auroraBorealis/typedoc.json index e6a93e510a2..27b64a32135 100644 --- a/palettes/space/auroraBorealis/typedoc.json +++ b/palettes/space/auroraBorealis/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Aurora Borealis Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles AuroraBorealis Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/space/auroraBorealis/webpack.config.js b/palettes/space/auroraBorealis/webpack.config.js deleted file mode 100644 index 5bcbfd4f586..00000000000 --- a/palettes/space/auroraBorealis/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-aurora-borealis", - paletteName: "Aurora Borealis Palette", - version, -}); diff --git a/palettes/space/cosmicRadiation/CHANGELOG.md b/palettes/space/cosmicRadiation/CHANGELOG.md index 9d140b7a06c..1426bd4c294 100644 --- a/palettes/space/cosmicRadiation/CHANGELOG.md +++ b/palettes/space/cosmicRadiation/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-cosmic-radiation + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-cosmic-radiation diff --git a/palettes/space/cosmicRadiation/README.md b/palettes/space/cosmicRadiation/README.md index cbc3ab5c450..e4edddae58c 100644 --- a/palettes/space/cosmicRadiation/README.md +++ b/palettes/space/cosmicRadiation/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Cosmic Radiation Palette +# tsParticles CosmicRadiation Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-cosmic-radiation/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-cosmic-radiation) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-cosmic-radiation.svg)](https://www.npmjs.com/package/@tsparticles/palette-cosmic-radiation) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-cosmic-radiation)](https://www.npmjs.com/package/@tsparticles/palette-cosmic-radiation) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-cosmicRadiation/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-cosmicRadiation) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-cosmicRadiation.svg)](https://www.npmjs.com/package/@tsparticles/palette-cosmicRadiation) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-cosmicRadiation) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for cosmic radiation. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/cosmicRadiation/images/sample.png)](https://particles.js.org/samples/palettes/cosmic-radiation) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/space/cosmicRadiation/images/sample.png)](https://particles.js.org/samples/palettes/cosmicRadiation) ## Colors @@ -79,7 +79,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -101,7 +101,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "cosmic-radiation", + palette: "cosmicRadiation", }; await engine.load({ @@ -116,47 +116,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "cosmic-radiation", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadCosmicRadiationPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadCosmicRadiationPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadCosmicRadiationPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -pacosmicRadiation[Cosmic Radiation] -end - -e[tsParticles Engine] --> pacosmicRadiation -``` diff --git a/palettes/space/cosmicRadiation/package.dist.json b/palettes/space/cosmicRadiation/package.dist.json index 7e734ae52fa..ba658ba685b 100644 --- a/palettes/space/cosmicRadiation/package.dist.json +++ b/palettes/space/cosmicRadiation/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-cosmic-radiation", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles cosmic radiation palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.cosmic-radiation.min.js", - "unpkg": "tsparticles.palette.cosmic-radiation.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/space/cosmicRadiation/package.json b/palettes/space/cosmicRadiation/package.json index f7a3490958c..5a475462bfa 100644 --- a/palettes/space/cosmicRadiation/package.json +++ b/palettes/space/cosmicRadiation/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-cosmic-radiation", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles cosmic radiation palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/space/cosmicRadiation/rollup.config.js b/palettes/space/cosmicRadiation/rollup.config.js new file mode 100644 index 00000000000..3ff5ff519db --- /dev/null +++ b/palettes/space/cosmicRadiation/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-cosmicRadiation", + paletteName: "CosmicRadiation Palette", + version, +}); diff --git a/palettes/space/cosmicRadiation/src/browser.ts b/palettes/space/cosmicRadiation/src/browser.ts new file mode 100644 index 00000000000..4e41888041b --- /dev/null +++ b/palettes/space/cosmicRadiation/src/browser.ts @@ -0,0 +1,10 @@ +import { loadCosmicRadiationPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadCosmicRadiationPalette?: typeof loadCosmicRadiationPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadCosmicRadiationPalette = loadCosmicRadiationPalette; + +export * from "./index.js"; diff --git a/palettes/space/cosmicRadiation/src/index.lazy.ts b/palettes/space/cosmicRadiation/src/index.lazy.ts new file mode 100644 index 00000000000..c698db1e54d --- /dev/null +++ b/palettes/space/cosmicRadiation/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "cosmic-radiation"; + +/** + * @param engine - + */ +export async function loadCosmicRadiationPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/space/cosmicRadiation/src/index.ts b/palettes/space/cosmicRadiation/src/index.ts index 4433773900d..13457b29da7 100644 --- a/palettes/space/cosmicRadiation/src/index.ts +++ b/palettes/space/cosmicRadiation/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "cosmic-radiation"; @@ -6,9 +7,7 @@ const paletteName = "cosmic-radiation"; * @param engine - */ export async function loadCosmicRadiationPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/space/cosmicRadiation/typedoc.json b/palettes/space/cosmicRadiation/typedoc.json index 938ac7e8627..56446b58d92 100644 --- a/palettes/space/cosmicRadiation/typedoc.json +++ b/palettes/space/cosmicRadiation/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Cosmic Radiation Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles CosmicRadiation Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/space/cosmicRadiation/webpack.config.js b/palettes/space/cosmicRadiation/webpack.config.js deleted file mode 100644 index 772548acf15..00000000000 --- a/palettes/space/cosmicRadiation/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-cosmic-radiation", - paletteName: "Cosmic Radiation Palette", - version, -}); diff --git a/palettes/space/darkMatter/CHANGELOG.md b/palettes/space/darkMatter/CHANGELOG.md index db9722d61c7..0eb0098c9d8 100644 --- a/palettes/space/darkMatter/CHANGELOG.md +++ b/palettes/space/darkMatter/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-dark-matter + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-dark-matter diff --git a/palettes/space/darkMatter/README.md b/palettes/space/darkMatter/README.md index 1e8a554e541..59ee988f53d 100644 --- a/palettes/space/darkMatter/README.md +++ b/palettes/space/darkMatter/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Dark Matter Palette +# tsParticles DarkMatter Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-dark-matter/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-dark-matter) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-dark-matter.svg)](https://www.npmjs.com/package/@tsparticles/palette-dark-matter) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-dark-matter)](https://www.npmjs.com/package/@tsparticles/palette-dark-matter) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-darkMatter/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-darkMatter) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-darkMatter.svg)](https://www.npmjs.com/package/@tsparticles/palette-darkMatter) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-darkMatter) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for dark matter. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/darkMatter/images/samples.png)](https://particles.js.org/samples/palettes/dark-matter) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/space/darkMatter/images/sample.png)](https://particles.js.org/samples/palettes/darkMatter) ## Colors @@ -69,7 +69,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -91,7 +91,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "dark-matter", + palette: "darkMatter", }; await engine.load({ @@ -106,47 +106,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "dark-matter", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadDarkMatterPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadDarkMatterPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadDarkMatterPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -padarkMatter[Dark Matter] -end - -e[tsParticles Engine] --> padarkMatter -``` diff --git a/palettes/space/darkMatter/package.dist.json b/palettes/space/darkMatter/package.dist.json index 3879f5e103d..cc9bddf94b2 100644 --- a/palettes/space/darkMatter/package.dist.json +++ b/palettes/space/darkMatter/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-dark-matter", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles dark matter palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.dark-matter.min.js", - "unpkg": "tsparticles.palette.dark-matter.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/space/darkMatter/package.json b/palettes/space/darkMatter/package.json index 1829aa6df87..13758cf4142 100644 --- a/palettes/space/darkMatter/package.json +++ b/palettes/space/darkMatter/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-dark-matter", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles dark matter palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/space/darkMatter/rollup.config.js b/palettes/space/darkMatter/rollup.config.js new file mode 100644 index 00000000000..133785af496 --- /dev/null +++ b/palettes/space/darkMatter/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-darkMatter", + paletteName: "DarkMatter Palette", + version, +}); diff --git a/palettes/space/darkMatter/src/browser.ts b/palettes/space/darkMatter/src/browser.ts new file mode 100644 index 00000000000..5800d73a1ed --- /dev/null +++ b/palettes/space/darkMatter/src/browser.ts @@ -0,0 +1,10 @@ +import { loadDarkMatterPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadDarkMatterPalette?: typeof loadDarkMatterPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadDarkMatterPalette = loadDarkMatterPalette; + +export * from "./index.js"; diff --git a/palettes/space/darkMatter/src/index.lazy.ts b/palettes/space/darkMatter/src/index.lazy.ts new file mode 100644 index 00000000000..de5f4fec7dc --- /dev/null +++ b/palettes/space/darkMatter/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "dark-matter"; + +/** + * @param engine - + */ +export async function loadDarkMatterPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/space/darkMatter/src/index.ts b/palettes/space/darkMatter/src/index.ts index 7a5e918071a..9c53018d316 100644 --- a/palettes/space/darkMatter/src/index.ts +++ b/palettes/space/darkMatter/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "dark-matter"; @@ -6,9 +7,7 @@ const paletteName = "dark-matter"; * @param engine - */ export async function loadDarkMatterPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/space/darkMatter/typedoc.json b/palettes/space/darkMatter/typedoc.json index c7d2d3b6915..8bc9bd6fbef 100644 --- a/palettes/space/darkMatter/typedoc.json +++ b/palettes/space/darkMatter/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Dark Matter Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles DarkMatter Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/space/darkMatter/webpack.config.js b/palettes/space/darkMatter/webpack.config.js deleted file mode 100644 index c7fd6045a45..00000000000 --- a/palettes/space/darkMatter/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-dark-matter", - paletteName: "Dark Matter Palette", - version, -}); diff --git a/palettes/space/galaxyDust/CHANGELOG.md b/palettes/space/galaxyDust/CHANGELOG.md index 3255defc777..35ca0ca6830 100644 --- a/palettes/space/galaxyDust/CHANGELOG.md +++ b/palettes/space/galaxyDust/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-galaxy-dust + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-galaxy-dust diff --git a/palettes/space/galaxyDust/README.md b/palettes/space/galaxyDust/README.md index 6662a60b72d..05ba76d1a42 100644 --- a/palettes/space/galaxyDust/README.md +++ b/palettes/space/galaxyDust/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Galaxy Dust Palette +# tsParticles GalaxyDust Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-galaxy-dust/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-galaxy-dust) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-galaxy-dust.svg)](https://www.npmjs.com/package/@tsparticles/palette-galaxy-dust) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-galaxy-dust)](https://www.npmjs.com/package/@tsparticles/palette-galaxy-dust) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-galaxyDust/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-galaxyDust) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-galaxyDust.svg)](https://www.npmjs.com/package/@tsparticles/palette-galaxyDust) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-galaxyDust) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for galaxy dust. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/galaxyDust/images/sample.png)](https://particles.js.org/samples/palettes/galaxy-dust) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/space/galaxyDust/images/sample.png)](https://particles.js.org/samples/palettes/galaxyDust) ## Colors @@ -119,7 +119,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -141,7 +141,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "galaxy-dust", + palette: "galaxyDust", }; await engine.load({ @@ -156,47 +156,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "galaxy-dust", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadGalaxyDustPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadGalaxyDustPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadGalaxyDustPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -pagalaxyDust[Galaxy Dust] -end - -e[tsParticles Engine] --> pagalaxyDust -``` diff --git a/palettes/space/galaxyDust/package.dist.json b/palettes/space/galaxyDust/package.dist.json index 246c3ab8022..1c3363f1f5c 100644 --- a/palettes/space/galaxyDust/package.dist.json +++ b/palettes/space/galaxyDust/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-galaxy-dust", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles galaxy dust palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.galaxy-dust.min.js", - "unpkg": "tsparticles.palette.galaxy-dust.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/space/galaxyDust/package.json b/palettes/space/galaxyDust/package.json index 0f4930ed57d..bb71a01d7ea 100644 --- a/palettes/space/galaxyDust/package.json +++ b/palettes/space/galaxyDust/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-galaxy-dust", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles galaxy dust palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/space/galaxyDust/rollup.config.js b/palettes/space/galaxyDust/rollup.config.js new file mode 100644 index 00000000000..542b041bcfe --- /dev/null +++ b/palettes/space/galaxyDust/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-galaxyDust", + paletteName: "GalaxyDust Palette", + version, +}); diff --git a/palettes/space/galaxyDust/src/browser.ts b/palettes/space/galaxyDust/src/browser.ts new file mode 100644 index 00000000000..f32d48c5e10 --- /dev/null +++ b/palettes/space/galaxyDust/src/browser.ts @@ -0,0 +1,10 @@ +import { loadGalaxyDustPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadGalaxyDustPalette?: typeof loadGalaxyDustPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadGalaxyDustPalette = loadGalaxyDustPalette; + +export * from "./index.js"; diff --git a/palettes/space/galaxyDust/src/index.lazy.ts b/palettes/space/galaxyDust/src/index.lazy.ts new file mode 100644 index 00000000000..81e79da9266 --- /dev/null +++ b/palettes/space/galaxyDust/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "galaxy-dust"; + +/** + * @param engine - + */ +export async function loadGalaxyDustPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/space/galaxyDust/src/index.ts b/palettes/space/galaxyDust/src/index.ts index 8988c458f1f..e69a60f5feb 100644 --- a/palettes/space/galaxyDust/src/index.ts +++ b/palettes/space/galaxyDust/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "galaxy-dust"; @@ -6,9 +7,7 @@ const paletteName = "galaxy-dust"; * @param engine - */ export async function loadGalaxyDustPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/space/galaxyDust/typedoc.json b/palettes/space/galaxyDust/typedoc.json index ec6c002e9b5..5db2e263f06 100644 --- a/palettes/space/galaxyDust/typedoc.json +++ b/palettes/space/galaxyDust/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Galaxy Dust Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles GalaxyDust Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/space/galaxyDust/webpack.config.js b/palettes/space/galaxyDust/webpack.config.js deleted file mode 100644 index 97234d97068..00000000000 --- a/palettes/space/galaxyDust/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-galaxy-dust", - paletteName: "Galaxy Dust Palette", - version, -}); diff --git a/palettes/space/nebula/.browserslistrc b/palettes/space/nebula/.browserslistrc new file mode 100644 index 00000000000..9cce1e55dd9 --- /dev/null +++ b/palettes/space/nebula/.browserslistrc @@ -0,0 +1 @@ +extends @tsparticles/browserslist-config diff --git a/palettes/space/nebula/CHANGELOG.md b/palettes/space/nebula/CHANGELOG.md new file mode 100644 index 00000000000..a55c592295a --- /dev/null +++ b/palettes/space/nebula/CHANGELOG.md @@ -0,0 +1,12 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-nebula + +# [4.0.0-beta.12] + +**Note:** Initial version of package @tsparticles/palette-nebula diff --git a/palettes/space/nebula/LICENSE b/palettes/space/nebula/LICENSE new file mode 100644 index 00000000000..bdc05f528fa --- /dev/null +++ b/palettes/space/nebula/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/palettes/space/nebula/README.md b/palettes/space/nebula/README.md new file mode 100644 index 00000000000..c2d1d34fb4f --- /dev/null +++ b/palettes/space/nebula/README.md @@ -0,0 +1,130 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Nebula Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-nebula/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-nebula) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-nebula.svg)](https://www.npmjs.com/package/@tsparticles/palette-nebula) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-nebula) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/space/nebula/images/sample.png)](https://particles.js.org/samples/palettes/nebula) + +## Colors + + + + + + + + + + + + + + + + + + + + + + +
+
+ #220044 +
+
+ #4B0082 +
+
+ #6A0DAD +
+
+ #8A2BE2 +
+
+ #FF4FD8 +
+
+ #66CCFF +
+
+ #C792FF +
+
+ #FFFFFF +
+
+ Background
+ #050014 +
+ Blend mode: screen | Fill: true +
+ +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadNebulaPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadNebulaPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "nebula", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadNebulaPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/space/nebula/eslint.config.js b/palettes/space/nebula/eslint.config.js new file mode 100644 index 00000000000..248b4d3dd36 --- /dev/null +++ b/palettes/space/nebula/eslint.config.js @@ -0,0 +1,6 @@ +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; +import { defineConfig } from "eslint/config"; + +export default defineConfig([ + tsParticlesESLintConfig, +]); diff --git a/palettes/space/nebula/images/sample.png b/palettes/space/nebula/images/sample.png new file mode 100644 index 00000000000..a2ac1433f5b Binary files /dev/null and b/palettes/space/nebula/images/sample.png differ diff --git a/palettes/space/nebula/package.dist.json b/palettes/space/nebula/package.dist.json new file mode 100644 index 00000000000..27017f974c3 --- /dev/null +++ b/palettes/space/nebula/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-nebula", + "version": "4.0.0-beta.15", + "description": "tsParticles nebula palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/space/nebula" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/space/nebula/package.json b/palettes/space/nebula/package.json new file mode 100644 index 00000000000..af2ddefbf27 --- /dev/null +++ b/palettes/space/nebula/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-nebula", + "version": "4.0.0-beta.15", + "description": "tsParticles nebula palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/space/nebula" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/space/nebula/rollup.config.js b/palettes/space/nebula/rollup.config.js new file mode 100644 index 00000000000..b2f869bd50a --- /dev/null +++ b/palettes/space/nebula/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-nebula", + paletteName: "Nebula Palette", + version, +}); diff --git a/palettes/space/nebula/src/browser.ts b/palettes/space/nebula/src/browser.ts new file mode 100644 index 00000000000..0330df9caf4 --- /dev/null +++ b/palettes/space/nebula/src/browser.ts @@ -0,0 +1,10 @@ +import { loadNebulaPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadNebulaPalette?: typeof loadNebulaPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadNebulaPalette = loadNebulaPalette; + +export * from "./index.js"; diff --git a/palettes/space/nebula/src/index.lazy.ts b/palettes/space/nebula/src/index.lazy.ts new file mode 100644 index 00000000000..6d3d67352c8 --- /dev/null +++ b/palettes/space/nebula/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "nebula"; + +/** + * @param engine - + */ +export async function loadNebulaPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/space/nebula/src/index.ts b/palettes/space/nebula/src/index.ts new file mode 100644 index 00000000000..e877d4ebd76 --- /dev/null +++ b/palettes/space/nebula/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "nebula"; + +/** + * @param engine - + */ +export async function loadNebulaPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/space/nebula/src/options.ts b/palettes/space/nebula/src/options.ts new file mode 100644 index 00000000000..96221eefe48 --- /dev/null +++ b/palettes/space/nebula/src/options.ts @@ -0,0 +1,22 @@ +import { type IPalette } from "@tsparticles/engine"; + +export const options: IPalette = { + name: "Nebula", + background: "#050014", + blendMode: "screen", + colors: { + fill: { + enable: true, + value: [ + "#220044", + "#4B0082", + "#6A0DAD", + "#8A2BE2", + "#FF4FD8", + "#66CCFF", + "#C792FF", + "#FFFFFF", + ], + }, + }, +}; diff --git a/palettes/space/nebula/tsconfig.base.json b/palettes/space/nebula/tsconfig.base.json new file mode 100644 index 00000000000..2b489b6aa1c --- /dev/null +++ b/palettes/space/nebula/tsconfig.base.json @@ -0,0 +1,9 @@ +{ + "extends": "@tsparticles/tsconfig/dist/tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src" + }, + "include": [ + "./src" + ] +} diff --git a/palettes/space/nebula/tsconfig.browser.json b/palettes/space/nebula/tsconfig.browser.json new file mode 100644 index 00000000000..80d78351a7d --- /dev/null +++ b/palettes/space/nebula/tsconfig.browser.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.browser.json"], + "compilerOptions": { + "outDir": "./dist/browser" + } +} diff --git a/palettes/space/nebula/tsconfig.json b/palettes/space/nebula/tsconfig.json new file mode 100644 index 00000000000..630bf828704 --- /dev/null +++ b/palettes/space/nebula/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.json"], + "compilerOptions": { + "outDir": "./dist/cjs" + } +} diff --git a/palettes/space/nebula/tsconfig.module.json b/palettes/space/nebula/tsconfig.module.json new file mode 100644 index 00000000000..bb5035a8403 --- /dev/null +++ b/palettes/space/nebula/tsconfig.module.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.module.json"], + "compilerOptions": { + "outDir": "./dist/esm" + } +} diff --git a/palettes/space/nebula/tsconfig.types.json b/palettes/space/nebula/tsconfig.types.json new file mode 100644 index 00000000000..570e9e9d8c6 --- /dev/null +++ b/palettes/space/nebula/tsconfig.types.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.types.json"], + "compilerOptions": { + "outDir": "./dist/types" + } +} diff --git a/palettes/space/nebula/typedoc.json b/palettes/space/nebula/typedoc.json new file mode 100644 index 00000000000..f2e66af6ca3 --- /dev/null +++ b/palettes/space/nebula/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Nebula Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/space/portal/CHANGELOG.md b/palettes/space/portal/CHANGELOG.md index 46cccf67a78..bc9949212d1 100644 --- a/palettes/space/portal/CHANGELOG.md +++ b/palettes/space/portal/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-portal + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-portal diff --git a/palettes/space/portal/README.md b/palettes/space/portal/README.md index ca68c779e83..9dd1949fa68 100644 --- a/palettes/space/portal/README.md +++ b/palettes/space/portal/README.md @@ -2,9 +2,9 @@ # tsParticles Portal Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-portal/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-portal) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-portal.svg)](https://www.npmjs.com/package/@tsparticles/palette-portal) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-portal)](https://www.npmjs.com/package/@tsparticles/palette-portal) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-portal/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-portal) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-portal.svg)](https://www.npmjs.com/package/@tsparticles/palette-portal) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-portal) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for portal. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/portal/images/sample.png)](https://particles.js.org/samples/palettes/portal) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/space/portal/images/sample.png)](https://particles.js.org/samples/palettes/portal) ## Colors @@ -79,7 +79,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -116,47 +116,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "portal", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadPortalPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadPortalPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadPortalPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -paportal[Portal] -end - -e[tsParticles Engine] --> paportal -``` diff --git a/palettes/space/portal/package.dist.json b/palettes/space/portal/package.dist.json index 2ca8c4d77bf..781c3be6e7a 100644 --- a/palettes/space/portal/package.dist.json +++ b/palettes/space/portal/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-portal", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles portal palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.portal.min.js", - "unpkg": "tsparticles.palette.portal.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/space/portal/package.json b/palettes/space/portal/package.json index 2d1049e130c..6811941cf2b 100644 --- a/palettes/space/portal/package.json +++ b/palettes/space/portal/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-portal", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles portal palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/space/portal/rollup.config.js b/palettes/space/portal/rollup.config.js new file mode 100644 index 00000000000..268c899b473 --- /dev/null +++ b/palettes/space/portal/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-portal", + paletteName: "Portal Palette", + version, +}); diff --git a/palettes/space/portal/src/browser.ts b/palettes/space/portal/src/browser.ts new file mode 100644 index 00000000000..02a16bdc628 --- /dev/null +++ b/palettes/space/portal/src/browser.ts @@ -0,0 +1,10 @@ +import { loadPortalPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadPortalPalette?: typeof loadPortalPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadPortalPalette = loadPortalPalette; + +export * from "./index.js"; diff --git a/palettes/space/portal/src/index.lazy.ts b/palettes/space/portal/src/index.lazy.ts new file mode 100644 index 00000000000..7b850f0c349 --- /dev/null +++ b/palettes/space/portal/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "portal"; + +/** + * @param engine - + */ +export async function loadPortalPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/space/portal/src/index.ts b/palettes/space/portal/src/index.ts index ecaea21a9b2..d47ba4a05ae 100644 --- a/palettes/space/portal/src/index.ts +++ b/palettes/space/portal/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "portal"; @@ -6,9 +7,7 @@ const paletteName = "portal"; * @param engine - */ export async function loadPortalPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/space/portal/typedoc.json b/palettes/space/portal/typedoc.json index ffbfe2cec9e..79b233f8cb3 100644 --- a/palettes/space/portal/typedoc.json +++ b/palettes/space/portal/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Portal Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Portal Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/space/portal/webpack.config.js b/palettes/space/portal/webpack.config.js deleted file mode 100644 index 9d688c6a97e..00000000000 --- a/palettes/space/portal/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-portal", - paletteName: "Portal Palette", - version, -}); diff --git a/palettes/space/pulsar/CHANGELOG.md b/palettes/space/pulsar/CHANGELOG.md index 4ee2ab0d9ce..adc7bf9697e 100644 --- a/palettes/space/pulsar/CHANGELOG.md +++ b/palettes/space/pulsar/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-pulsar + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-pulsar diff --git a/palettes/space/pulsar/README.md b/palettes/space/pulsar/README.md index f5799e937af..1110e02097c 100644 --- a/palettes/space/pulsar/README.md +++ b/palettes/space/pulsar/README.md @@ -2,9 +2,9 @@ # tsParticles Pulsar Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-pulsar/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-pulsar) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-pulsar.svg)](https://www.npmjs.com/package/@tsparticles/palette-pulsar) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-pulsar)](https://www.npmjs.com/package/@tsparticles/palette-pulsar) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-pulsar/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-pulsar) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-pulsar.svg)](https://www.npmjs.com/package/@tsparticles/palette-pulsar) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-pulsar) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for pulsar. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/pulsar/images/sample.png)](https://particles.js.org/samples/palettes/pulsar) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/space/pulsar/images/sample.png)](https://particles.js.org/samples/palettes/pulsar) ## Colors @@ -75,7 +75,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -112,47 +112,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "pulsar", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadPulsarPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadPulsarPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadPulsarPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -papulsar[Pulsar] -end - -e[tsParticles Engine] --> papulsar -``` diff --git a/palettes/space/pulsar/package.dist.json b/palettes/space/pulsar/package.dist.json index c5f8d3bfe13..8d6466b8f77 100644 --- a/palettes/space/pulsar/package.dist.json +++ b/palettes/space/pulsar/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-pulsar", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles pulsar palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.pulsar.min.js", - "unpkg": "tsparticles.palette.pulsar.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/space/pulsar/package.json b/palettes/space/pulsar/package.json index edcbecb37ca..ba6350e9211 100644 --- a/palettes/space/pulsar/package.json +++ b/palettes/space/pulsar/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-pulsar", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles pulsar palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/space/pulsar/rollup.config.js b/palettes/space/pulsar/rollup.config.js new file mode 100644 index 00000000000..ceb089aed40 --- /dev/null +++ b/palettes/space/pulsar/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-pulsar", + paletteName: "Pulsar Palette", + version, +}); diff --git a/palettes/space/pulsar/src/browser.ts b/palettes/space/pulsar/src/browser.ts new file mode 100644 index 00000000000..f8ac814052e --- /dev/null +++ b/palettes/space/pulsar/src/browser.ts @@ -0,0 +1,10 @@ +import { loadPulsarPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadPulsarPalette?: typeof loadPulsarPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadPulsarPalette = loadPulsarPalette; + +export * from "./index.js"; diff --git a/palettes/space/pulsar/src/index.lazy.ts b/palettes/space/pulsar/src/index.lazy.ts new file mode 100644 index 00000000000..01bb98ce8f1 --- /dev/null +++ b/palettes/space/pulsar/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "pulsar"; + +/** + * @param engine - + */ +export async function loadPulsarPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/space/pulsar/src/index.ts b/palettes/space/pulsar/src/index.ts index 79ccd789edb..ec69988fb3a 100644 --- a/palettes/space/pulsar/src/index.ts +++ b/palettes/space/pulsar/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "pulsar"; @@ -6,9 +7,7 @@ const paletteName = "pulsar"; * @param engine - */ export async function loadPulsarPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/space/pulsar/typedoc.json b/palettes/space/pulsar/typedoc.json index 4c6b19ce357..708a7af31a1 100644 --- a/palettes/space/pulsar/typedoc.json +++ b/palettes/space/pulsar/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Pulsar Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Pulsar Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/space/pulsar/webpack.config.js b/palettes/space/pulsar/webpack.config.js deleted file mode 100644 index 3502e99f900..00000000000 --- a/palettes/space/pulsar/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-pulsar", - paletteName: "Pulsar Palette", - version, -}); diff --git a/palettes/space/solarWind/CHANGELOG.md b/palettes/space/solarWind/CHANGELOG.md index 3250e29d878..624639cf864 100644 --- a/palettes/space/solarWind/CHANGELOG.md +++ b/palettes/space/solarWind/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-solar-wind + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-solar-wind diff --git a/palettes/space/solarWind/README.md b/palettes/space/solarWind/README.md index d81050a9179..cd9149dde4e 100644 --- a/palettes/space/solarWind/README.md +++ b/palettes/space/solarWind/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Solar Wind Palette +# tsParticles SolarWind Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-solar-wind/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-solar-wind) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-solar-wind.svg)](https://www.npmjs.com/package/@tsparticles/palette-solar-wind) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-solar-wind)](https://www.npmjs.com/package/@tsparticles/palette-solar-wind) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-solarWind/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-solarWind) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-solarWind.svg)](https://www.npmjs.com/package/@tsparticles/palette-solarWind) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-solarWind) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for solar wind. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/solarWind/images/sample.png)](https://particles.js.org/samples/palettes/solar-wind) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/space/solarWind/images/sample.png)](https://particles.js.org/samples/palettes/solarWind) ## Colors @@ -75,7 +75,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -97,7 +97,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "solar-wind", + palette: "solarWind", }; await engine.load({ @@ -112,47 +112,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "solar-wind", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadSolarWindPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadSolarWindPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadSolarWindPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -pasolarWind[Solar Wind] -end - -e[tsParticles Engine] --> pasolarWind -``` diff --git a/palettes/space/solarWind/package.dist.json b/palettes/space/solarWind/package.dist.json index 3448af8608d..dc5d4142401 100644 --- a/palettes/space/solarWind/package.dist.json +++ b/palettes/space/solarWind/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-solar-wind", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles solar wind palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.solar-wind.min.js", - "unpkg": "tsparticles.palette.solar-wind.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/space/solarWind/package.json b/palettes/space/solarWind/package.json index 5f73fad6828..c2f4f2c28c0 100644 --- a/palettes/space/solarWind/package.json +++ b/palettes/space/solarWind/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-solar-wind", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles solar wind palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/space/solarWind/rollup.config.js b/palettes/space/solarWind/rollup.config.js new file mode 100644 index 00000000000..6aaa329d9ac --- /dev/null +++ b/palettes/space/solarWind/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-solarWind", + paletteName: "SolarWind Palette", + version, +}); diff --git a/palettes/space/solarWind/src/browser.ts b/palettes/space/solarWind/src/browser.ts new file mode 100644 index 00000000000..8a52e7b7e74 --- /dev/null +++ b/palettes/space/solarWind/src/browser.ts @@ -0,0 +1,10 @@ +import { loadSolarWindPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadSolarWindPalette?: typeof loadSolarWindPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadSolarWindPalette = loadSolarWindPalette; + +export * from "./index.js"; diff --git a/palettes/space/solarWind/src/index.lazy.ts b/palettes/space/solarWind/src/index.lazy.ts new file mode 100644 index 00000000000..dbfd6493879 --- /dev/null +++ b/palettes/space/solarWind/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "solar-wind"; + +/** + * @param engine - + */ +export async function loadSolarWindPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/space/solarWind/src/index.ts b/palettes/space/solarWind/src/index.ts index ec86494f9cd..478252c1415 100644 --- a/palettes/space/solarWind/src/index.ts +++ b/palettes/space/solarWind/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "solar-wind"; @@ -6,9 +7,7 @@ const paletteName = "solar-wind"; * @param engine - */ export async function loadSolarWindPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/space/solarWind/typedoc.json b/palettes/space/solarWind/typedoc.json index cfd7c76bc2a..f5a6228f795 100644 --- a/palettes/space/solarWind/typedoc.json +++ b/palettes/space/solarWind/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Solar Wind Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles SolarWind Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/space/solarWind/webpack.config.js b/palettes/space/solarWind/webpack.config.js deleted file mode 100644 index 8060c47606f..00000000000 --- a/palettes/space/solarWind/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-solar-wind", - paletteName: "Solar Wind Palette", - version, -}); diff --git a/palettes/space/supernova/CHANGELOG.md b/palettes/space/supernova/CHANGELOG.md index 7df8224157a..6eb9a81c699 100644 --- a/palettes/space/supernova/CHANGELOG.md +++ b/palettes/space/supernova/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-supernova + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-supernova diff --git a/palettes/space/supernova/README.md b/palettes/space/supernova/README.md index eac18b6faf1..79388fa0347 100644 --- a/palettes/space/supernova/README.md +++ b/palettes/space/supernova/README.md @@ -2,9 +2,9 @@ # tsParticles Supernova Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-supernova/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-supernova) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-supernova.svg)](https://www.npmjs.com/package/@tsparticles/palette-supernova) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-supernova)](https://www.npmjs.com/package/@tsparticles/palette-supernova) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-supernova/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-supernova) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-supernova.svg)](https://www.npmjs.com/package/@tsparticles/palette-supernova) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-supernova) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for supernova. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/supernova/images/sample.png)](https://particles.js.org/samples/palettes/supernova) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/space/supernova/images/sample.png)](https://particles.js.org/samples/palettes/supernova) ## Colors @@ -83,7 +83,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -120,47 +120,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "supernova", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadSupernovaPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadSupernovaPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadSupernovaPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -pasupernova[Supernova] -end - -e[tsParticles Engine] --> pasupernova -``` diff --git a/palettes/space/supernova/package.dist.json b/palettes/space/supernova/package.dist.json index dc6b691fe3d..34cb5d26e8a 100644 --- a/palettes/space/supernova/package.dist.json +++ b/palettes/space/supernova/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-supernova", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles supernova palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.supernova.min.js", - "unpkg": "tsparticles.palette.supernova.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/space/supernova/package.json b/palettes/space/supernova/package.json index 9111fdd8be6..d811bc2185d 100644 --- a/palettes/space/supernova/package.json +++ b/palettes/space/supernova/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-supernova", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles supernova palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/space/supernova/rollup.config.js b/palettes/space/supernova/rollup.config.js new file mode 100644 index 00000000000..d4ff4f1f195 --- /dev/null +++ b/palettes/space/supernova/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-supernova", + paletteName: "Supernova Palette", + version, +}); diff --git a/palettes/space/supernova/src/browser.ts b/palettes/space/supernova/src/browser.ts new file mode 100644 index 00000000000..74675067ad6 --- /dev/null +++ b/palettes/space/supernova/src/browser.ts @@ -0,0 +1,10 @@ +import { loadSupernovaPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadSupernovaPalette?: typeof loadSupernovaPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadSupernovaPalette = loadSupernovaPalette; + +export * from "./index.js"; diff --git a/palettes/space/supernova/src/index.lazy.ts b/palettes/space/supernova/src/index.lazy.ts new file mode 100644 index 00000000000..1871b8819bb --- /dev/null +++ b/palettes/space/supernova/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "supernova"; + +/** + * @param engine - + */ +export async function loadSupernovaPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/space/supernova/src/index.ts b/palettes/space/supernova/src/index.ts index 5bada4ee776..e4db1937e58 100644 --- a/palettes/space/supernova/src/index.ts +++ b/palettes/space/supernova/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "supernova"; @@ -6,9 +7,7 @@ const paletteName = "supernova"; * @param engine - */ export async function loadSupernovaPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/space/supernova/typedoc.json b/palettes/space/supernova/typedoc.json index 675da6af5d2..004cffcf59e 100644 --- a/palettes/space/supernova/typedoc.json +++ b/palettes/space/supernova/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Supernova Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Supernova Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/space/supernova/webpack.config.js b/palettes/space/supernova/webpack.config.js deleted file mode 100644 index 5ef345e3b79..00000000000 --- a/palettes/space/supernova/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-supernova", - paletteName: "Supernova Palette", - version, -}); diff --git a/palettes/spectrum/acidPair/CHANGELOG.md b/palettes/spectrum/acidPair/CHANGELOG.md index ac5390b3c40..84f839eefbb 100644 --- a/palettes/spectrum/acidPair/CHANGELOG.md +++ b/palettes/spectrum/acidPair/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-acid-pair + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-acid-pair diff --git a/palettes/spectrum/acidPair/README.md b/palettes/spectrum/acidPair/README.md index 739f24b1134..8c792695fe6 100644 --- a/palettes/spectrum/acidPair/README.md +++ b/palettes/spectrum/acidPair/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Acid Pair Palette +# tsParticles AcidPair Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-acid-pair/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-acid-pair) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-acid-pair.svg)](https://www.npmjs.com/package/@tsparticles/palette-acid-pair) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-acid-pair)](https://www.npmjs.com/package/@tsparticles/palette-acid-pair) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-acidPair/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-acidPair) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-acidPair.svg)](https://www.npmjs.com/package/@tsparticles/palette-acidPair) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-acidPair) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for acid pair. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/acidPair/images/sample.png)](https://particles.js.org/samples/palettes/acid-pair) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/spectrum/acidPair/images/sample.png)](https://particles.js.org/samples/palettes/acidPair) ## Colors @@ -57,7 +57,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -79,7 +79,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "acid-pair", + palette: "acidPair", }; await engine.load({ @@ -94,47 +94,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "acid-pair", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadAcidPairPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadAcidPairPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadAcidPairPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -paacidPair[Acid Pair] -end - -e[tsParticles Engine] --> paacidPair -``` diff --git a/palettes/spectrum/acidPair/package.dist.json b/palettes/spectrum/acidPair/package.dist.json index fa7032d3b0d..8ba84328b60 100644 --- a/palettes/spectrum/acidPair/package.dist.json +++ b/palettes/spectrum/acidPair/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-acid-pair", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles acid pair palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.acid-pair.min.js", - "unpkg": "tsparticles.palette.acid-pair.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/spectrum/acidPair/package.json b/palettes/spectrum/acidPair/package.json index 46852be5793..2ebc9ac91f2 100644 --- a/palettes/spectrum/acidPair/package.json +++ b/palettes/spectrum/acidPair/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-acid-pair", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles acid pair palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/spectrum/acidPair/rollup.config.js b/palettes/spectrum/acidPair/rollup.config.js new file mode 100644 index 00000000000..4f1ae36929e --- /dev/null +++ b/palettes/spectrum/acidPair/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-acidPair", + paletteName: "AcidPair Palette", + version, +}); diff --git a/palettes/spectrum/acidPair/src/browser.ts b/palettes/spectrum/acidPair/src/browser.ts new file mode 100644 index 00000000000..3ea1f1884d5 --- /dev/null +++ b/palettes/spectrum/acidPair/src/browser.ts @@ -0,0 +1,10 @@ +import { loadAcidPairPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadAcidPairPalette?: typeof loadAcidPairPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadAcidPairPalette = loadAcidPairPalette; + +export * from "./index.js"; diff --git a/palettes/spectrum/acidPair/src/index.lazy.ts b/palettes/spectrum/acidPair/src/index.lazy.ts new file mode 100644 index 00000000000..cc0192f9c52 --- /dev/null +++ b/palettes/spectrum/acidPair/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "acid-pair"; + +/** + * @param engine - + */ +export async function loadAcidPairPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/spectrum/acidPair/src/index.ts b/palettes/spectrum/acidPair/src/index.ts index cc575d184db..1c3208f9c17 100644 --- a/palettes/spectrum/acidPair/src/index.ts +++ b/palettes/spectrum/acidPair/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "acid-pair"; @@ -6,9 +7,7 @@ const paletteName = "acid-pair"; * @param engine - */ export async function loadAcidPairPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/spectrum/acidPair/typedoc.json b/palettes/spectrum/acidPair/typedoc.json index ede3bc66010..382cef6ccdc 100644 --- a/palettes/spectrum/acidPair/typedoc.json +++ b/palettes/spectrum/acidPair/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Acid Pair Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles AcidPair Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/spectrum/acidPair/webpack.config.js b/palettes/spectrum/acidPair/webpack.config.js deleted file mode 100644 index 3224f191a6d..00000000000 --- a/palettes/spectrum/acidPair/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-acid-pair", - paletteName: "Acid Pair Palette", - version, -}); diff --git a/palettes/spectrum/cmySecondaries/CHANGELOG.md b/palettes/spectrum/cmySecondaries/CHANGELOG.md index 19544c994a2..42a6ac0900e 100644 --- a/palettes/spectrum/cmySecondaries/CHANGELOG.md +++ b/palettes/spectrum/cmySecondaries/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-cmy-secondaries + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-cmy-secondaries diff --git a/palettes/spectrum/cmySecondaries/README.md b/palettes/spectrum/cmySecondaries/README.md index b759aa03967..73557528003 100644 --- a/palettes/spectrum/cmySecondaries/README.md +++ b/palettes/spectrum/cmySecondaries/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles CMY Secondaries Palette +# tsParticles CmySecondaries Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-cmy-secondaries/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-cmy-secondaries) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-cmy-secondaries.svg)](https://www.npmjs.com/package/@tsparticles/palette-cmy-secondaries) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-cmy-secondaries)](https://www.npmjs.com/package/@tsparticles/palette-cmy-secondaries) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-cmySecondaries/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-cmySecondaries) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-cmySecondaries.svg)](https://www.npmjs.com/package/@tsparticles/palette-cmySecondaries) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-cmySecondaries) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for cmy secondaries. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/cmySecondaries/images/sample.png)](https://particles.js.org/samples/palettes/cmy-secondaries) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/spectrum/cmySecondaries/images/sample.png)](https://particles.js.org/samples/palettes/cmySecondaries) ## Colors @@ -61,7 +61,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -83,7 +83,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "cmy-secondaries", + palette: "cmySecondaries", }; await engine.load({ @@ -98,47 +98,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "cmy-secondaries", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadCmySecondariesPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadCmySecondariesPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadCmySecondariesPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -pacmySecondaries[CMY Secondaries] -end - -e[tsParticles Engine] --> pacmySecondaries -``` diff --git a/palettes/spectrum/cmySecondaries/package.dist.json b/palettes/spectrum/cmySecondaries/package.dist.json index 888c0e4163c..a0734f774d1 100644 --- a/palettes/spectrum/cmySecondaries/package.dist.json +++ b/palettes/spectrum/cmySecondaries/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-cmy-secondaries", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles cmy secondaries palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.cmy-secondaries.min.js", - "unpkg": "tsparticles.palette.cmy-secondaries.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/spectrum/cmySecondaries/package.json b/palettes/spectrum/cmySecondaries/package.json index a455323689c..5178c2078d2 100644 --- a/palettes/spectrum/cmySecondaries/package.json +++ b/palettes/spectrum/cmySecondaries/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-cmy-secondaries", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles cmy secondaries palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/spectrum/cmySecondaries/rollup.config.js b/palettes/spectrum/cmySecondaries/rollup.config.js new file mode 100644 index 00000000000..7a6b4f31f87 --- /dev/null +++ b/palettes/spectrum/cmySecondaries/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-cmySecondaries", + paletteName: "CmySecondaries Palette", + version, +}); diff --git a/palettes/spectrum/cmySecondaries/src/browser.ts b/palettes/spectrum/cmySecondaries/src/browser.ts new file mode 100644 index 00000000000..3ce72bf30c5 --- /dev/null +++ b/palettes/spectrum/cmySecondaries/src/browser.ts @@ -0,0 +1,10 @@ +import { loadCmySecondariesPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadCmySecondariesPalette?: typeof loadCmySecondariesPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadCmySecondariesPalette = loadCmySecondariesPalette; + +export * from "./index.js"; diff --git a/palettes/spectrum/cmySecondaries/src/index.lazy.ts b/palettes/spectrum/cmySecondaries/src/index.lazy.ts new file mode 100644 index 00000000000..0c9f84967f9 --- /dev/null +++ b/palettes/spectrum/cmySecondaries/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "cmy-secondaries"; + +/** + * @param engine - + */ +export async function loadCmySecondariesPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/spectrum/cmySecondaries/src/index.ts b/palettes/spectrum/cmySecondaries/src/index.ts index de4c27d7031..10a39e57ac8 100644 --- a/palettes/spectrum/cmySecondaries/src/index.ts +++ b/palettes/spectrum/cmySecondaries/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "cmy-secondaries"; @@ -6,9 +7,7 @@ const paletteName = "cmy-secondaries"; * @param engine - */ export async function loadCmySecondariesPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/spectrum/cmySecondaries/typedoc.json b/palettes/spectrum/cmySecondaries/typedoc.json index dedfbc282e1..d523ea2c2f4 100644 --- a/palettes/spectrum/cmySecondaries/typedoc.json +++ b/palettes/spectrum/cmySecondaries/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles CMY Secondaries Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles CmySecondaries Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/spectrum/cmySecondaries/webpack.config.js b/palettes/spectrum/cmySecondaries/webpack.config.js deleted file mode 100644 index d4c95b66b94..00000000000 --- a/palettes/spectrum/cmySecondaries/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-cmy-secondaries", - paletteName: "CMY Secondaries Palette", - version, -}); diff --git a/palettes/spectrum/dualityBlueYellow/CHANGELOG.md b/palettes/spectrum/dualityBlueYellow/CHANGELOG.md index 36774675607..9ee55c8dae3 100644 --- a/palettes/spectrum/dualityBlueYellow/CHANGELOG.md +++ b/palettes/spectrum/dualityBlueYellow/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-duality-blue-yellow + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-duality-blue-yellow diff --git a/palettes/spectrum/dualityBlueYellow/README.md b/palettes/spectrum/dualityBlueYellow/README.md index 3c9742d71b0..3624402a1a4 100644 --- a/palettes/spectrum/dualityBlueYellow/README.md +++ b/palettes/spectrum/dualityBlueYellow/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Duality Blue/Yellow Palette +# tsParticles DualityBlueYellow Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-duality-blue-yellow/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-duality-blue-yellow) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-duality-blue-yellow.svg)](https://www.npmjs.com/package/@tsparticles/palette-duality-blue-yellow) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-duality-blue-yellow)](https://www.npmjs.com/package/@tsparticles/palette-duality-blue-yellow) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-dualityBlueYellow/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-dualityBlueYellow) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-dualityBlueYellow.svg)](https://www.npmjs.com/package/@tsparticles/palette-dualityBlueYellow) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-dualityBlueYellow) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for duality - blue/yellow. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/dualityBlueYellow/images/sample.png)](https://particles.js.org/samples/palettes/duality-blue-yellow) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/spectrum/dualityBlueYellow/images/sample.png)](https://particles.js.org/samples/palettes/dualityBlueYellow) ## Colors @@ -57,7 +57,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -79,7 +79,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "duality-blue-yellow", + palette: "dualityBlueYellow", }; await engine.load({ @@ -94,47 +94,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "duality-blue-yellow", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadDualityBlueYellowPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadDualityBlueYellowPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadDualityBlueYellowPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -padualityBlueYellow[Duality Blue/Yellow] -end - -e[tsParticles Engine] --> padualityBlueYellow -``` diff --git a/palettes/spectrum/dualityBlueYellow/package.dist.json b/palettes/spectrum/dualityBlueYellow/package.dist.json index 6cf1ecabdea..94c178c7359 100644 --- a/palettes/spectrum/dualityBlueYellow/package.dist.json +++ b/palettes/spectrum/dualityBlueYellow/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-duality-blue-yellow", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles duality - blue/yellow palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.duality-blue-yellow.min.js", - "unpkg": "tsparticles.palette.duality-blue-yellow.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/spectrum/dualityBlueYellow/package.json b/palettes/spectrum/dualityBlueYellow/package.json index 71fe349cc72..c7a5b4f31e2 100644 --- a/palettes/spectrum/dualityBlueYellow/package.json +++ b/palettes/spectrum/dualityBlueYellow/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-duality-blue-yellow", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles duality - blue/yellow palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/spectrum/dualityBlueYellow/rollup.config.js b/palettes/spectrum/dualityBlueYellow/rollup.config.js new file mode 100644 index 00000000000..41d0e16ea46 --- /dev/null +++ b/palettes/spectrum/dualityBlueYellow/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-dualityBlueYellow", + paletteName: "DualityBlueYellow Palette", + version, +}); diff --git a/palettes/spectrum/dualityBlueYellow/src/browser.ts b/palettes/spectrum/dualityBlueYellow/src/browser.ts new file mode 100644 index 00000000000..db1ca894356 --- /dev/null +++ b/palettes/spectrum/dualityBlueYellow/src/browser.ts @@ -0,0 +1,10 @@ +import { loadDualityBlueYellowPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadDualityBlueYellowPalette?: typeof loadDualityBlueYellowPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadDualityBlueYellowPalette = loadDualityBlueYellowPalette; + +export * from "./index.js"; diff --git a/palettes/spectrum/dualityBlueYellow/src/index.lazy.ts b/palettes/spectrum/dualityBlueYellow/src/index.lazy.ts new file mode 100644 index 00000000000..81c0ecebce6 --- /dev/null +++ b/palettes/spectrum/dualityBlueYellow/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "duality-blue-yellow"; + +/** + * @param engine - + */ +export async function loadDualityBlueYellowPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/spectrum/dualityBlueYellow/src/index.ts b/palettes/spectrum/dualityBlueYellow/src/index.ts index 90e4ec86c68..e071c1312a8 100644 --- a/palettes/spectrum/dualityBlueYellow/src/index.ts +++ b/palettes/spectrum/dualityBlueYellow/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "duality-blue-yellow"; @@ -6,9 +7,7 @@ const paletteName = "duality-blue-yellow"; * @param engine - */ export async function loadDualityBlueYellowPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/spectrum/dualityBlueYellow/typedoc.json b/palettes/spectrum/dualityBlueYellow/typedoc.json index 2c26ddad155..933eeb99ec7 100644 --- a/palettes/spectrum/dualityBlueYellow/typedoc.json +++ b/palettes/spectrum/dualityBlueYellow/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Duality Blue Yellow Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles DualityBlueYellow Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/spectrum/dualityBlueYellow/webpack.config.js b/palettes/spectrum/dualityBlueYellow/webpack.config.js deleted file mode 100644 index fca2efbf62a..00000000000 --- a/palettes/spectrum/dualityBlueYellow/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-duality-blue-yellow", - paletteName: "Duality Blue Yellow Palette", - version, -}); diff --git a/palettes/spectrum/dualityGreenMagenta/CHANGELOG.md b/palettes/spectrum/dualityGreenMagenta/CHANGELOG.md index 9d28507dfb3..087b7eb93f5 100644 --- a/palettes/spectrum/dualityGreenMagenta/CHANGELOG.md +++ b/palettes/spectrum/dualityGreenMagenta/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-duality-green-magenta + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-duality-green-magenta diff --git a/palettes/spectrum/dualityGreenMagenta/README.md b/palettes/spectrum/dualityGreenMagenta/README.md index 8b29b34410e..f09dabe4a03 100644 --- a/palettes/spectrum/dualityGreenMagenta/README.md +++ b/palettes/spectrum/dualityGreenMagenta/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Duality Green/Magenta Palette +# tsParticles DualityGreenMagenta Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-duality-green-magenta/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-duality-green-magenta) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-duality-green-magenta.svg)](https://www.npmjs.com/package/@tsparticles/palette-duality-green-magenta) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-duality-green-magenta)](https://www.npmjs.com/package/@tsparticles/palette-duality-green-magenta) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-dualityGreenMagenta/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-dualityGreenMagenta) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-dualityGreenMagenta.svg)](https://www.npmjs.com/package/@tsparticles/palette-dualityGreenMagenta) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-dualityGreenMagenta) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for duality - green/magenta. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/dualityGreenMagenta/images/sample.png)](https://particles.js.org/samples/palettes/duality-green-magenta) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/spectrum/dualityGreenMagenta/images/sample.png)](https://particles.js.org/samples/palettes/dualityGreenMagenta) ## Colors @@ -57,7 +57,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -79,7 +79,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "duality-green-magenta", + palette: "dualityGreenMagenta", }; await engine.load({ @@ -94,47 +94,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "duality-green-magenta", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadDualityGreenMagentaPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadDualityGreenMagentaPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadDualityGreenMagentaPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -padualityGreenMagenta[Duality Green/Magenta] -end - -e[tsParticles Engine] --> padualityGreenMagenta -``` diff --git a/palettes/spectrum/dualityGreenMagenta/package.dist.json b/palettes/spectrum/dualityGreenMagenta/package.dist.json index cb39dd334d5..a73e38f08b8 100644 --- a/palettes/spectrum/dualityGreenMagenta/package.dist.json +++ b/palettes/spectrum/dualityGreenMagenta/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-duality-green-magenta", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles duality - green/magenta palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.duality-green-magenta.min.js", - "unpkg": "tsparticles.palette.duality-green-magenta.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/spectrum/dualityGreenMagenta/package.json b/palettes/spectrum/dualityGreenMagenta/package.json index ccc3c8eed4a..81c89847979 100644 --- a/palettes/spectrum/dualityGreenMagenta/package.json +++ b/palettes/spectrum/dualityGreenMagenta/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-duality-green-magenta", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles duality - green/magenta palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/spectrum/dualityGreenMagenta/rollup.config.js b/palettes/spectrum/dualityGreenMagenta/rollup.config.js new file mode 100644 index 00000000000..99250092168 --- /dev/null +++ b/palettes/spectrum/dualityGreenMagenta/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-dualityGreenMagenta", + paletteName: "DualityGreenMagenta Palette", + version, +}); diff --git a/palettes/spectrum/dualityGreenMagenta/src/browser.ts b/palettes/spectrum/dualityGreenMagenta/src/browser.ts new file mode 100644 index 00000000000..42019178038 --- /dev/null +++ b/palettes/spectrum/dualityGreenMagenta/src/browser.ts @@ -0,0 +1,10 @@ +import { loadDualityGreenMagentaPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadDualityGreenMagentaPalette?: typeof loadDualityGreenMagentaPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadDualityGreenMagentaPalette = loadDualityGreenMagentaPalette; + +export * from "./index.js"; diff --git a/palettes/spectrum/dualityGreenMagenta/src/index.lazy.ts b/palettes/spectrum/dualityGreenMagenta/src/index.lazy.ts new file mode 100644 index 00000000000..1bc59e4a4f4 --- /dev/null +++ b/palettes/spectrum/dualityGreenMagenta/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "duality-green-magenta"; + +/** + * @param engine - + */ +export async function loadDualityGreenMagentaPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/spectrum/dualityGreenMagenta/src/index.ts b/palettes/spectrum/dualityGreenMagenta/src/index.ts index 285635c1719..90b666dadc5 100644 --- a/palettes/spectrum/dualityGreenMagenta/src/index.ts +++ b/palettes/spectrum/dualityGreenMagenta/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "duality-green-magenta"; @@ -6,9 +7,7 @@ const paletteName = "duality-green-magenta"; * @param engine - */ export async function loadDualityGreenMagentaPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/spectrum/dualityGreenMagenta/typedoc.json b/palettes/spectrum/dualityGreenMagenta/typedoc.json index c0316ffa8d4..5584f7333e2 100644 --- a/palettes/spectrum/dualityGreenMagenta/typedoc.json +++ b/palettes/spectrum/dualityGreenMagenta/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Duality Green Magenta Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles DualityGreenMagenta Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/spectrum/dualityGreenMagenta/webpack.config.js b/palettes/spectrum/dualityGreenMagenta/webpack.config.js deleted file mode 100644 index 9f564c0b432..00000000000 --- a/palettes/spectrum/dualityGreenMagenta/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-duality-green-magenta", - paletteName: "Duality Green Magenta Palette", - version, -}); diff --git a/palettes/spectrum/dualityRedCyan/CHANGELOG.md b/palettes/spectrum/dualityRedCyan/CHANGELOG.md index 9d21c51a772..f48aa3eaf32 100644 --- a/palettes/spectrum/dualityRedCyan/CHANGELOG.md +++ b/palettes/spectrum/dualityRedCyan/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-duality-red-cyan + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-duality-red-cyan diff --git a/palettes/spectrum/dualityRedCyan/README.md b/palettes/spectrum/dualityRedCyan/README.md index e9fd28c4271..2d9abadd8e0 100644 --- a/palettes/spectrum/dualityRedCyan/README.md +++ b/palettes/spectrum/dualityRedCyan/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Duality Red/Cyan Palette +# tsParticles DualityRedCyan Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-duality-red-cyan/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-duality-red-cyan) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-duality-red-cyan.svg)](https://www.npmjs.com/package/@tsparticles/palette-duality-red-cyan) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-duality-red-cyan)](https://www.npmjs.com/package/@tsparticles/palette-duality-red-cyan) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-dualityRedCyan/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-dualityRedCyan) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-dualityRedCyan.svg)](https://www.npmjs.com/package/@tsparticles/palette-dualityRedCyan) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-dualityRedCyan) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for cyan and red particles on a dark background. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/dualityRedCyan/images/sample.png)](https://particles.js.org/samples/palettes/duality-red-cyan) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/spectrum/dualityRedCyan/images/sample.png)](https://particles.js.org/samples/palettes/dualityRedCyan) ## Colors @@ -57,7 +57,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -79,7 +79,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "duality-red-cyan", + palette: "dualityRedCyan", }; await engine.load({ @@ -94,47 +94,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "duality-red-cyan", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadDualityRedCyanPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadDualityRedCyanPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadDualityRedCyanPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -padrc[Duality Red Cyan] -end - -e[tsParticles Engine] --> padrc -``` diff --git a/palettes/spectrum/dualityRedCyan/package.dist.json b/palettes/spectrum/dualityRedCyan/package.dist.json index 9838cff3708..e5889d8f7ff 100644 --- a/palettes/spectrum/dualityRedCyan/package.dist.json +++ b/palettes/spectrum/dualityRedCyan/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-duality-red-cyan", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles duality red/cyan palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.duality-red-cyan.min.js", - "unpkg": "tsparticles.palette.duality-red-cyan.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/spectrum/dualityRedCyan/package.json b/palettes/spectrum/dualityRedCyan/package.json index ce1517a3b59..299f5c3fcc6 100644 --- a/palettes/spectrum/dualityRedCyan/package.json +++ b/palettes/spectrum/dualityRedCyan/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-duality-red-cyan", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles duality red/cyan palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/spectrum/dualityRedCyan/rollup.config.js b/palettes/spectrum/dualityRedCyan/rollup.config.js new file mode 100644 index 00000000000..fdf7902c7a7 --- /dev/null +++ b/palettes/spectrum/dualityRedCyan/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-dualityRedCyan", + paletteName: "DualityRedCyan Palette", + version, +}); diff --git a/palettes/spectrum/dualityRedCyan/src/browser.ts b/palettes/spectrum/dualityRedCyan/src/browser.ts new file mode 100644 index 00000000000..dbcbd28efa3 --- /dev/null +++ b/palettes/spectrum/dualityRedCyan/src/browser.ts @@ -0,0 +1,10 @@ +import { loadDualityRedCyanPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadDualityRedCyanPalette?: typeof loadDualityRedCyanPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadDualityRedCyanPalette = loadDualityRedCyanPalette; + +export * from "./index.js"; diff --git a/palettes/spectrum/dualityRedCyan/src/index.lazy.ts b/palettes/spectrum/dualityRedCyan/src/index.lazy.ts new file mode 100644 index 00000000000..66a7e283687 --- /dev/null +++ b/palettes/spectrum/dualityRedCyan/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "duality-red-cyan"; + +/** + * @param engine - + */ +export async function loadDualityRedCyanPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/spectrum/dualityRedCyan/src/index.ts b/palettes/spectrum/dualityRedCyan/src/index.ts index 02f75c203c4..3708149fc45 100644 --- a/palettes/spectrum/dualityRedCyan/src/index.ts +++ b/palettes/spectrum/dualityRedCyan/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "duality-red-cyan"; @@ -6,9 +7,7 @@ const paletteName = "duality-red-cyan"; * @param engine - */ export async function loadDualityRedCyanPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/spectrum/dualityRedCyan/typedoc.json b/palettes/spectrum/dualityRedCyan/typedoc.json index d68de1cb634..83f64ea8ab5 100644 --- a/palettes/spectrum/dualityRedCyan/typedoc.json +++ b/palettes/spectrum/dualityRedCyan/typedoc.json @@ -1,13 +1,15 @@ { - "includes": "./markdown", - "entryPoints": ["./src/"], - "entryPointStrategy": "expand", - "name": "tsParticles Duality Red Cyan Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles DualityRedCyan Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/spectrum/dualityRedCyan/webpack.config.js b/palettes/spectrum/dualityRedCyan/webpack.config.js deleted file mode 100644 index 12c6da37ce5..00000000000 --- a/palettes/spectrum/dualityRedCyan/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-duality-red-cyan", - paletteName: "Duality Red Cyan Palette", - version, -}); diff --git a/palettes/spectrum/fullSpectrum/CHANGELOG.md b/palettes/spectrum/fullSpectrum/CHANGELOG.md index aefe0dd1c9e..0d6de503025 100644 --- a/palettes/spectrum/fullSpectrum/CHANGELOG.md +++ b/palettes/spectrum/fullSpectrum/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-full-spectrum + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-full-spectrum diff --git a/palettes/spectrum/fullSpectrum/README.md b/palettes/spectrum/fullSpectrum/README.md index 3164fdd66f0..98eff883a46 100644 --- a/palettes/spectrum/fullSpectrum/README.md +++ b/palettes/spectrum/fullSpectrum/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Full Spectrum High Saturation Palette +# tsParticles FullSpectrum Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-full-spectrum/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-full-spectrum) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-full-spectrum.svg)](https://www.npmjs.com/package/@tsparticles/palette-full-spectrum) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-full-spectrum)](https://www.npmjs.com/package/@tsparticles/palette-full-spectrum) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-fullSpectrum/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-fullSpectrum) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-fullSpectrum.svg)](https://www.npmjs.com/package/@tsparticles/palette-fullSpectrum) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-fullSpectrum) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for full spectrum - high saturation. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fullSpectrum/images/sample.png)](https://particles.js.org/samples/palettes/full-spectrum) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/spectrum/fullSpectrum/images/sample.png)](https://particles.js.org/samples/palettes/fullSpectrum) ## Colors @@ -207,7 +207,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -229,7 +229,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "full-spectrum", + palette: "fullSpectrum", }; await engine.load({ @@ -244,47 +244,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "full-spectrum", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadFullSpectrumPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadFullSpectrumPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadFullSpectrumPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -pafullSpectrum[Full Spectrum High Saturation] -end - -e[tsParticles Engine] --> pafullSpectrum -``` diff --git a/palettes/spectrum/fullSpectrum/package.dist.json b/palettes/spectrum/fullSpectrum/package.dist.json index b4d00dea836..ac487a6b944 100644 --- a/palettes/spectrum/fullSpectrum/package.dist.json +++ b/palettes/spectrum/fullSpectrum/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-full-spectrum", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles full spectrum - high saturation palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.full-spectrum.min.js", - "unpkg": "tsparticles.palette.full-spectrum.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/spectrum/fullSpectrum/package.json b/palettes/spectrum/fullSpectrum/package.json index b7232362438..2aa9c120da1 100644 --- a/palettes/spectrum/fullSpectrum/package.json +++ b/palettes/spectrum/fullSpectrum/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-full-spectrum", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles full spectrum - high saturation palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/spectrum/fullSpectrum/rollup.config.js b/palettes/spectrum/fullSpectrum/rollup.config.js new file mode 100644 index 00000000000..6be924c546f --- /dev/null +++ b/palettes/spectrum/fullSpectrum/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-fullSpectrum", + paletteName: "FullSpectrum Palette", + version, +}); diff --git a/palettes/spectrum/fullSpectrum/src/browser.ts b/palettes/spectrum/fullSpectrum/src/browser.ts new file mode 100644 index 00000000000..2be0892bc08 --- /dev/null +++ b/palettes/spectrum/fullSpectrum/src/browser.ts @@ -0,0 +1,10 @@ +import { loadFullSpectrumPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadFullSpectrumPalette?: typeof loadFullSpectrumPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadFullSpectrumPalette = loadFullSpectrumPalette; + +export * from "./index.js"; diff --git a/palettes/spectrum/fullSpectrum/src/index.lazy.ts b/palettes/spectrum/fullSpectrum/src/index.lazy.ts new file mode 100644 index 00000000000..16220b79156 --- /dev/null +++ b/palettes/spectrum/fullSpectrum/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "full-spectrum"; + +/** + * @param engine - + */ +export async function loadFullSpectrumPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/spectrum/fullSpectrum/src/index.ts b/palettes/spectrum/fullSpectrum/src/index.ts index cb836978be9..ecf7df5108a 100644 --- a/palettes/spectrum/fullSpectrum/src/index.ts +++ b/palettes/spectrum/fullSpectrum/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "full-spectrum"; @@ -6,9 +7,7 @@ const paletteName = "full-spectrum"; * @param engine - */ export async function loadFullSpectrumPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/spectrum/fullSpectrum/typedoc.json b/palettes/spectrum/fullSpectrum/typedoc.json index 319c626455e..89c02dab18f 100644 --- a/palettes/spectrum/fullSpectrum/typedoc.json +++ b/palettes/spectrum/fullSpectrum/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Full Spectrum High Saturation Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles FullSpectrum Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/spectrum/fullSpectrum/webpack.config.js b/palettes/spectrum/fullSpectrum/webpack.config.js deleted file mode 100644 index a44456f6ba0..00000000000 --- a/palettes/spectrum/fullSpectrum/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-full-spectrum", - paletteName: "Full Spectrum High Saturation Palette", - version, -}); diff --git a/palettes/spectrum/okabeItoAccessible/CHANGELOG.md b/palettes/spectrum/okabeItoAccessible/CHANGELOG.md index 0b3a951922d..d3241df2401 100644 --- a/palettes/spectrum/okabeItoAccessible/CHANGELOG.md +++ b/palettes/spectrum/okabeItoAccessible/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-okabe-ito-accessible + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-okabe-ito-accessible diff --git a/palettes/spectrum/okabeItoAccessible/README.md b/palettes/spectrum/okabeItoAccessible/README.md index 6171194b218..f9813c88d6c 100644 --- a/palettes/spectrum/okabeItoAccessible/README.md +++ b/palettes/spectrum/okabeItoAccessible/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Okabe Ito Accessible Palette +# tsParticles OkabeItoAccessible Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-okabe-ito-accessible/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-okabe-ito-accessible) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-okabe-ito-accessible.svg)](https://www.npmjs.com/package/@tsparticles/palette-okabe-ito-accessible) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-okabe-ito-accessible)](https://www.npmjs.com/package/@tsparticles/palette-okabe-ito-accessible) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-okabeItoAccessible/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-okabeItoAccessible) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-okabeItoAccessible.svg)](https://www.npmjs.com/package/@tsparticles/palette-okabeItoAccessible) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-okabeItoAccessible) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for okabe ito accessible. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/okabeItoAccessible/images/sample.png)](https://particles.js.org/samples/palettes/okabe-ito-accessible) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/spectrum/okabeItoAccessible/images/sample.png)](https://particles.js.org/samples/palettes/okabeItoAccessible) ## Colors @@ -83,7 +83,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -105,7 +105,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "okabe-ito-accessible", + palette: "okabeItoAccessible", }; await engine.load({ @@ -120,47 +120,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "okabe-ito-accessible", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadOkabeItoAccessiblePalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadOkabeItoAccessiblePalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadOkabeItoAccessiblePalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -paokabeItoAccessible[Okabe Ito Accessible] -end - -e[tsParticles Engine] --> paokabeItoAccessible -``` diff --git a/palettes/spectrum/okabeItoAccessible/package.dist.json b/palettes/spectrum/okabeItoAccessible/package.dist.json index 5f445a81cda..7239bb6e654 100644 --- a/palettes/spectrum/okabeItoAccessible/package.dist.json +++ b/palettes/spectrum/okabeItoAccessible/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-okabe-ito-accessible", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles okabe ito accessible palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.okabe-ito-accessible.min.js", - "unpkg": "tsparticles.palette.okabe-ito-accessible.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/spectrum/okabeItoAccessible/package.json b/palettes/spectrum/okabeItoAccessible/package.json index 9933dabf028..f4367f52e76 100644 --- a/palettes/spectrum/okabeItoAccessible/package.json +++ b/palettes/spectrum/okabeItoAccessible/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-okabe-ito-accessible", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles okabe ito accessible palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/spectrum/okabeItoAccessible/rollup.config.js b/palettes/spectrum/okabeItoAccessible/rollup.config.js new file mode 100644 index 00000000000..c895dd9d8ec --- /dev/null +++ b/palettes/spectrum/okabeItoAccessible/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-okabeItoAccessible", + paletteName: "OkabeItoAccessible Palette", + version, +}); diff --git a/palettes/spectrum/okabeItoAccessible/src/browser.ts b/palettes/spectrum/okabeItoAccessible/src/browser.ts new file mode 100644 index 00000000000..e897427f87c --- /dev/null +++ b/palettes/spectrum/okabeItoAccessible/src/browser.ts @@ -0,0 +1,10 @@ +import { loadOkabeItoAccessiblePalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadOkabeItoAccessiblePalette?: typeof loadOkabeItoAccessiblePalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadOkabeItoAccessiblePalette = loadOkabeItoAccessiblePalette; + +export * from "./index.js"; diff --git a/palettes/spectrum/okabeItoAccessible/src/index.lazy.ts b/palettes/spectrum/okabeItoAccessible/src/index.lazy.ts new file mode 100644 index 00000000000..c3abd5040cf --- /dev/null +++ b/palettes/spectrum/okabeItoAccessible/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "okabe-ito-accessible"; + +/** + * @param engine - + */ +export async function loadOkabeItoAccessiblePalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/spectrum/okabeItoAccessible/src/index.ts b/palettes/spectrum/okabeItoAccessible/src/index.ts index c2584f05c4f..c2ff256f917 100644 --- a/palettes/spectrum/okabeItoAccessible/src/index.ts +++ b/palettes/spectrum/okabeItoAccessible/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "okabe-ito-accessible"; @@ -6,9 +7,7 @@ const paletteName = "okabe-ito-accessible"; * @param engine - */ export async function loadOkabeItoAccessiblePalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/spectrum/okabeItoAccessible/typedoc.json b/palettes/spectrum/okabeItoAccessible/typedoc.json index 0f31ff54ebb..5b3a50da3f4 100644 --- a/palettes/spectrum/okabeItoAccessible/typedoc.json +++ b/palettes/spectrum/okabeItoAccessible/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Autumn Leaves Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles OkabeItoAccessible Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/spectrum/okabeItoAccessible/webpack.config.js b/palettes/spectrum/okabeItoAccessible/webpack.config.js deleted file mode 100644 index 6950111e850..00000000000 --- a/palettes/spectrum/okabeItoAccessible/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-okabe-ito-accessible", - paletteName: "Okabe Ito Accessible Palette", - version, -}); diff --git a/palettes/spectrum/prismScatter/CHANGELOG.md b/palettes/spectrum/prismScatter/CHANGELOG.md index 201da7ad0fc..95b380c2986 100644 --- a/palettes/spectrum/prismScatter/CHANGELOG.md +++ b/palettes/spectrum/prismScatter/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-prism-scatter + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-prism-scatter diff --git a/palettes/spectrum/prismScatter/README.md b/palettes/spectrum/prismScatter/README.md index 361562c7deb..663607d90f1 100644 --- a/palettes/spectrum/prismScatter/README.md +++ b/palettes/spectrum/prismScatter/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Prism Scatter Palette +# tsParticles PrismScatter Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-prism-scatter/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-prism-scatter) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-prism-scatter.svg)](https://www.npmjs.com/package/@tsparticles/palette-prism-scatter) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-prism-scatter)](https://www.npmjs.com/package/@tsparticles/palette-prism-scatter) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-prismScatter/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-prismScatter) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-prismScatter.svg)](https://www.npmjs.com/package/@tsparticles/palette-prismScatter) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-prismScatter) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for prism scatter. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/prismScatter/images/sample.png)](https://particles.js.org/samples/palettes/prism-scatter) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/spectrum/prismScatter/images/sample.png)](https://particles.js.org/samples/palettes/prismScatter) ## Colors @@ -79,7 +79,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -101,7 +101,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "prism-scatter", + palette: "prismScatter", }; await engine.load({ @@ -116,47 +116,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "prism-scatter", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadPrismScatterPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadPrismScatterPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadPrismScatterPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -paprismScatter[Prism Scatter] -end - -e[tsParticles Engine] --> paprismScatter -``` diff --git a/palettes/spectrum/prismScatter/package.dist.json b/palettes/spectrum/prismScatter/package.dist.json index 2816e0b49f6..12f90264ea6 100644 --- a/palettes/spectrum/prismScatter/package.dist.json +++ b/palettes/spectrum/prismScatter/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-prism-scatter", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles prism scatter palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.prism-scatter.min.js", - "unpkg": "tsparticles.palette.prism-scatter.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/spectrum/prismScatter/package.json b/palettes/spectrum/prismScatter/package.json index 612997b8d97..b5757eeb863 100644 --- a/palettes/spectrum/prismScatter/package.json +++ b/palettes/spectrum/prismScatter/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-prism-scatter", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles prism scatter palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/spectrum/prismScatter/rollup.config.js b/palettes/spectrum/prismScatter/rollup.config.js new file mode 100644 index 00000000000..b7679ea1584 --- /dev/null +++ b/palettes/spectrum/prismScatter/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-prismScatter", + paletteName: "PrismScatter Palette", + version, +}); diff --git a/palettes/spectrum/prismScatter/src/browser.ts b/palettes/spectrum/prismScatter/src/browser.ts new file mode 100644 index 00000000000..c2c1e029ae5 --- /dev/null +++ b/palettes/spectrum/prismScatter/src/browser.ts @@ -0,0 +1,10 @@ +import { loadPrismScatterPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadPrismScatterPalette?: typeof loadPrismScatterPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadPrismScatterPalette = loadPrismScatterPalette; + +export * from "./index.js"; diff --git a/palettes/spectrum/prismScatter/src/index.lazy.ts b/palettes/spectrum/prismScatter/src/index.lazy.ts new file mode 100644 index 00000000000..b3ea301e20c --- /dev/null +++ b/palettes/spectrum/prismScatter/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "prism-scatter"; + +/** + * @param engine - + */ +export async function loadPrismScatterPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/spectrum/prismScatter/src/index.ts b/palettes/spectrum/prismScatter/src/index.ts index 2b6e0ce5b9c..bcc819dc838 100644 --- a/palettes/spectrum/prismScatter/src/index.ts +++ b/palettes/spectrum/prismScatter/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "prism-scatter"; @@ -6,9 +7,7 @@ const paletteName = "prism-scatter"; * @param engine - */ export async function loadPrismScatterPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/spectrum/prismScatter/typedoc.json b/palettes/spectrum/prismScatter/typedoc.json index eb6dcd5c8d0..0360e99c83a 100644 --- a/palettes/spectrum/prismScatter/typedoc.json +++ b/palettes/spectrum/prismScatter/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Prism Scatter Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles PrismScatter Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/spectrum/prismScatter/webpack.config.js b/palettes/spectrum/prismScatter/webpack.config.js deleted file mode 100644 index 05d2b1e07ed..00000000000 --- a/palettes/spectrum/prismScatter/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-prism-scatter", - paletteName: "Prism Scatter Palette", - version, -}); diff --git a/palettes/spectrum/rainbow/CHANGELOG.md b/palettes/spectrum/rainbow/CHANGELOG.md index a0f2229ce2e..1e7c1d87697 100644 --- a/palettes/spectrum/rainbow/CHANGELOG.md +++ b/palettes/spectrum/rainbow/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-rainbow + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-rainbow diff --git a/palettes/spectrum/rainbow/README.md b/palettes/spectrum/rainbow/README.md index bccd181bff4..589e80e4970 100644 --- a/palettes/spectrum/rainbow/README.md +++ b/palettes/spectrum/rainbow/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Rainbow Maximum Saturation sRGB Palette +# tsParticles Rainbow Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-rainbow/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-rainbow) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-rainbow.svg)](https://www.npmjs.com/package/@tsparticles/palette-rainbow) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-rainbow)](https://www.npmjs.com/package/@tsparticles/palette-rainbow) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-rainbow/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-rainbow) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-rainbow.svg)](https://www.npmjs.com/package/@tsparticles/palette-rainbow) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-rainbow) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for rainbow - maximum saturation srgb. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/rainbow/images/sample.png)](https://particles.js.org/samples/palettes/rainbow) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/spectrum/rainbow/images/sample.png)](https://particles.js.org/samples/palettes/rainbow) ## Colors @@ -365,7 +365,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -402,47 +402,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "rainbow", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadRainbowPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadRainbowPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadRainbowPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -parainbow[Rainbow Maximum Saturation sRGB] -end - -e[tsParticles Engine] --> parainbow -``` diff --git a/palettes/spectrum/rainbow/package.dist.json b/palettes/spectrum/rainbow/package.dist.json index 3d8822aa158..48e76afa890 100644 --- a/palettes/spectrum/rainbow/package.dist.json +++ b/palettes/spectrum/rainbow/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-rainbow", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles rainbow - maximum saturation srgb palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.rainbow.min.js", - "unpkg": "tsparticles.palette.rainbow.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/spectrum/rainbow/package.json b/palettes/spectrum/rainbow/package.json index 4b5df6c35bd..e85b952a49e 100644 --- a/palettes/spectrum/rainbow/package.json +++ b/palettes/spectrum/rainbow/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-rainbow", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles rainbow - maximum saturation srgb palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/spectrum/rainbow/rollup.config.js b/palettes/spectrum/rainbow/rollup.config.js new file mode 100644 index 00000000000..03015c77f6d --- /dev/null +++ b/palettes/spectrum/rainbow/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-rainbow", + paletteName: "Rainbow Palette", + version, +}); diff --git a/palettes/spectrum/rainbow/src/browser.ts b/palettes/spectrum/rainbow/src/browser.ts new file mode 100644 index 00000000000..d1f87ef83cd --- /dev/null +++ b/palettes/spectrum/rainbow/src/browser.ts @@ -0,0 +1,10 @@ +import { loadRainbowPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadRainbowPalette?: typeof loadRainbowPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadRainbowPalette = loadRainbowPalette; + +export * from "./index.js"; diff --git a/palettes/spectrum/rainbow/src/index.lazy.ts b/palettes/spectrum/rainbow/src/index.lazy.ts new file mode 100644 index 00000000000..b13f0b29cd5 --- /dev/null +++ b/palettes/spectrum/rainbow/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "spectrum-rainbow"; + +/** + * @param engine - + */ +export async function loadSpectrumRainbowPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/spectrum/rainbow/src/index.ts b/palettes/spectrum/rainbow/src/index.ts index febce3794ec..4447f20e1dd 100644 --- a/palettes/spectrum/rainbow/src/index.ts +++ b/palettes/spectrum/rainbow/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "rainbow"; @@ -6,9 +7,7 @@ const paletteName = "rainbow"; * @param engine - */ export async function loadRainbowPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/spectrum/rainbow/typedoc.json b/palettes/spectrum/rainbow/typedoc.json index 00bc54f885a..95a8f026815 100644 --- a/palettes/spectrum/rainbow/typedoc.json +++ b/palettes/spectrum/rainbow/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Rainbow Maximum Saturation sRGB Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Rainbow Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/spectrum/rainbow/webpack.config.js b/palettes/spectrum/rainbow/webpack.config.js deleted file mode 100644 index e5171986207..00000000000 --- a/palettes/spectrum/rainbow/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-rainbow", - paletteName: "Rainbow Maximum Saturation sRGB Palette", - version, -}); diff --git a/palettes/spectrum/rgbPrimaries/CHANGELOG.md b/palettes/spectrum/rgbPrimaries/CHANGELOG.md index 0983be9ee9f..560a1695306 100644 --- a/palettes/spectrum/rgbPrimaries/CHANGELOG.md +++ b/palettes/spectrum/rgbPrimaries/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-rgb-primaries + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-rgb-primaries diff --git a/palettes/spectrum/rgbPrimaries/README.md b/palettes/spectrum/rgbPrimaries/README.md index 3c985c8c792..91ddf492423 100644 --- a/palettes/spectrum/rgbPrimaries/README.md +++ b/palettes/spectrum/rgbPrimaries/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles RGB Primaries Palette +# tsParticles RgbPrimaries Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-rgb-primaries/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-rgb-primaries) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-rgb-primaries.svg)](https://www.npmjs.com/package/@tsparticles/palette-rgb-primaries) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-rgb-primaries)](https://www.npmjs.com/package/@tsparticles/palette-rgb-primaries) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-rgbPrimaries/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-rgbPrimaries) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-rgbPrimaries.svg)](https://www.npmjs.com/package/@tsparticles/palette-rgbPrimaries) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-rgbPrimaries) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for rgb primaries. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/rgbPrimaries/images/sample.png)](https://particles.js.org/samples/palettes/rgb-primaries) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/spectrum/rgbPrimaries/images/sample.png)](https://particles.js.org/samples/palettes/rgbPrimaries) ## Colors @@ -61,7 +61,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -83,7 +83,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "rgb-primaries", + palette: "rgbPrimaries", }; await engine.load({ @@ -98,47 +98,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "rgb-primaries", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadRgbPrimariesPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadRgbPrimariesPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadRgbPrimariesPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -pargbPrimaries[RGB Primaries] -end - -e[tsParticles Engine] --> pargbPrimaries -``` diff --git a/palettes/spectrum/rgbPrimaries/package.dist.json b/palettes/spectrum/rgbPrimaries/package.dist.json index 8e5dcbc738c..7f2a042f2fb 100644 --- a/palettes/spectrum/rgbPrimaries/package.dist.json +++ b/palettes/spectrum/rgbPrimaries/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-rgb-primaries", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles rgb primaries palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.rgb-primaries.min.js", - "unpkg": "tsparticles.palette.rgb-primaries.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/spectrum/rgbPrimaries/package.json b/palettes/spectrum/rgbPrimaries/package.json index e3e721c43d7..669f66ae2e7 100644 --- a/palettes/spectrum/rgbPrimaries/package.json +++ b/palettes/spectrum/rgbPrimaries/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-rgb-primaries", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles rgb primaries palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/spectrum/rgbPrimaries/rollup.config.js b/palettes/spectrum/rgbPrimaries/rollup.config.js new file mode 100644 index 00000000000..3f219b1f73a --- /dev/null +++ b/palettes/spectrum/rgbPrimaries/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-rgbPrimaries", + paletteName: "RgbPrimaries Palette", + version, +}); diff --git a/palettes/spectrum/rgbPrimaries/src/browser.ts b/palettes/spectrum/rgbPrimaries/src/browser.ts new file mode 100644 index 00000000000..8a17e7f0f72 --- /dev/null +++ b/palettes/spectrum/rgbPrimaries/src/browser.ts @@ -0,0 +1,10 @@ +import { loadRgbPrimariesPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadRgbPrimariesPalette?: typeof loadRgbPrimariesPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadRgbPrimariesPalette = loadRgbPrimariesPalette; + +export * from "./index.js"; diff --git a/palettes/spectrum/rgbPrimaries/src/index.lazy.ts b/palettes/spectrum/rgbPrimaries/src/index.lazy.ts new file mode 100644 index 00000000000..7844f06eeb5 --- /dev/null +++ b/palettes/spectrum/rgbPrimaries/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "rgb-primaries"; + +/** + * @param engine - + */ +export async function loadRgbPrimariesPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/spectrum/rgbPrimaries/src/index.ts b/palettes/spectrum/rgbPrimaries/src/index.ts index 1bf68d650dd..ae7c8b078e1 100644 --- a/palettes/spectrum/rgbPrimaries/src/index.ts +++ b/palettes/spectrum/rgbPrimaries/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "rgb-primaries"; @@ -6,9 +7,7 @@ const paletteName = "rgb-primaries"; * @param engine - */ export async function loadRgbPrimariesPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/spectrum/rgbPrimaries/typedoc.json b/palettes/spectrum/rgbPrimaries/typedoc.json index 611c5e25eb1..4493e548322 100644 --- a/palettes/spectrum/rgbPrimaries/typedoc.json +++ b/palettes/spectrum/rgbPrimaries/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles RGB Primaries Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles RgbPrimaries Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/spectrum/rgbPrimaries/webpack.config.js b/palettes/spectrum/rgbPrimaries/webpack.config.js deleted file mode 100644 index 1ae0e26424e..00000000000 --- a/palettes/spectrum/rgbPrimaries/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-rgb-primaries", - paletteName: "RGB Primaries Palette", - version, -}); diff --git a/palettes/tech/crtPhosphor/CHANGELOG.md b/palettes/tech/crtPhosphor/CHANGELOG.md index 6468ff9597d..c58a3d1197b 100644 --- a/palettes/tech/crtPhosphor/CHANGELOG.md +++ b/palettes/tech/crtPhosphor/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-crt-phosphor + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-crt-phosphor diff --git a/palettes/tech/crtPhosphor/README.md b/palettes/tech/crtPhosphor/README.md index 2e6c379d17a..791aaf13125 100644 --- a/palettes/tech/crtPhosphor/README.md +++ b/palettes/tech/crtPhosphor/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles CRT Phosphor Palette +# tsParticles CrtPhosphor Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-crt-phosphor/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-crt-phosphor) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-crt-phosphor.svg)](https://www.npmjs.com/package/@tsparticles/palette-crt-phosphor) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-crt-phosphor)](https://www.npmjs.com/package/@tsparticles/palette-crt-phosphor) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-crtPhosphor/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-crtPhosphor) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-crtPhosphor.svg)](https://www.npmjs.com/package/@tsparticles/palette-crtPhosphor) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-crtPhosphor) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for crt phosphor. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/crtPhosphor/images/sample.png)](https://particles.js.org/samples/palettes/crt-phosphor) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/tech/crtPhosphor/images/sample.png)](https://particles.js.org/samples/palettes/crtPhosphor) ## Colors @@ -79,7 +79,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -101,7 +101,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "crt-phosphor", + palette: "crtPhosphor", }; await engine.load({ @@ -116,47 +116,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "crt-phosphor", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadCrtPhosphorPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadCrtPhosphorPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadCrtPhosphorPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -pacrtPhosphor[CRT Phosphor] -end - -e[tsParticles Engine] --> pacrtPhosphor -``` diff --git a/palettes/tech/crtPhosphor/package.dist.json b/palettes/tech/crtPhosphor/package.dist.json index d8af0acfc2d..01d3f77fa2a 100644 --- a/palettes/tech/crtPhosphor/package.dist.json +++ b/palettes/tech/crtPhosphor/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-crt-phosphor", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles crt phosphor palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.crt-phosphor.min.js", - "unpkg": "tsparticles.palette.crt-phosphor.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/tech/crtPhosphor/package.json b/palettes/tech/crtPhosphor/package.json index f5a8a3b62b4..6dd2d67f43f 100644 --- a/palettes/tech/crtPhosphor/package.json +++ b/palettes/tech/crtPhosphor/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-crt-phosphor", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles crt phosphor palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/tech/crtPhosphor/rollup.config.js b/palettes/tech/crtPhosphor/rollup.config.js new file mode 100644 index 00000000000..7718c4ff590 --- /dev/null +++ b/palettes/tech/crtPhosphor/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-crtPhosphor", + paletteName: "CrtPhosphor Palette", + version, +}); diff --git a/palettes/tech/crtPhosphor/src/browser.ts b/palettes/tech/crtPhosphor/src/browser.ts new file mode 100644 index 00000000000..82a2426c7ac --- /dev/null +++ b/palettes/tech/crtPhosphor/src/browser.ts @@ -0,0 +1,10 @@ +import { loadCrtPhosphorPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadCrtPhosphorPalette?: typeof loadCrtPhosphorPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadCrtPhosphorPalette = loadCrtPhosphorPalette; + +export * from "./index.js"; diff --git a/palettes/tech/crtPhosphor/src/index.lazy.ts b/palettes/tech/crtPhosphor/src/index.lazy.ts new file mode 100644 index 00000000000..97e6a44c02b --- /dev/null +++ b/palettes/tech/crtPhosphor/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "crt-phosphor"; + +/** + * @param engine - + */ +export async function loadCrtPhosphorPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/tech/crtPhosphor/src/index.ts b/palettes/tech/crtPhosphor/src/index.ts index 9e06023adbe..bf4e2d1fd8f 100644 --- a/palettes/tech/crtPhosphor/src/index.ts +++ b/palettes/tech/crtPhosphor/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "crt-phosphor"; @@ -6,9 +7,7 @@ const paletteName = "crt-phosphor"; * @param engine - */ export async function loadCrtPhosphorPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/tech/crtPhosphor/typedoc.json b/palettes/tech/crtPhosphor/typedoc.json index e2ce1064c09..3e1fc9dcd4a 100644 --- a/palettes/tech/crtPhosphor/typedoc.json +++ b/palettes/tech/crtPhosphor/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles CRT Phosphor Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles CrtPhosphor Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/tech/crtPhosphor/webpack.config.js b/palettes/tech/crtPhosphor/webpack.config.js deleted file mode 100644 index c64036997b4..00000000000 --- a/palettes/tech/crtPhosphor/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-crt-phosphor", - paletteName: "CRT Phosphor Palette", - version, -}); diff --git a/palettes/tech/glitch/CHANGELOG.md b/palettes/tech/glitch/CHANGELOG.md index cc25e8fd5b7..954a0fcedf1 100644 --- a/palettes/tech/glitch/CHANGELOG.md +++ b/palettes/tech/glitch/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-glitch + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-glitch diff --git a/palettes/tech/glitch/README.md b/palettes/tech/glitch/README.md index 0d6537b1c50..b2ca8c1c648 100644 --- a/palettes/tech/glitch/README.md +++ b/palettes/tech/glitch/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Glitch Full RGB Shift Palette +# tsParticles Glitch Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-glitch/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-glitch) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-glitch.svg)](https://www.npmjs.com/package/@tsparticles/palette-glitch) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-glitch)](https://www.npmjs.com/package/@tsparticles/palette-glitch) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-glitch/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-glitch) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-glitch.svg)](https://www.npmjs.com/package/@tsparticles/palette-glitch) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-glitch) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for glitch - full rgb shift. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/glitch/images/sample.png)](https://particles.js.org/samples/palettes/glitch) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/tech/glitch/images/sample.png)](https://particles.js.org/samples/palettes/glitch) ## Colors @@ -113,7 +113,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -150,47 +150,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "glitch", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadGlitchPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadGlitchPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadGlitchPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -paglitch[Glitch Full RGB Shift] -end - -e[tsParticles Engine] --> paglitch -``` diff --git a/palettes/tech/glitch/package.dist.json b/palettes/tech/glitch/package.dist.json index 351b1f28f3e..89ed819ab01 100644 --- a/palettes/tech/glitch/package.dist.json +++ b/palettes/tech/glitch/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-glitch", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles glitch - full rgb shift palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.glitch.min.js", - "unpkg": "tsparticles.palette.glitch.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/tech/glitch/package.json b/palettes/tech/glitch/package.json index 4a2142efe54..ca3383c2fdb 100644 --- a/palettes/tech/glitch/package.json +++ b/palettes/tech/glitch/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-glitch", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles glitch - full rgb shift palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/tech/glitch/rollup.config.js b/palettes/tech/glitch/rollup.config.js new file mode 100644 index 00000000000..6e5c1f88241 --- /dev/null +++ b/palettes/tech/glitch/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-glitch", + paletteName: "Glitch Palette", + version, +}); diff --git a/palettes/tech/glitch/src/browser.ts b/palettes/tech/glitch/src/browser.ts new file mode 100644 index 00000000000..cbac02bbcf8 --- /dev/null +++ b/palettes/tech/glitch/src/browser.ts @@ -0,0 +1,10 @@ +import { loadGlitchPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadGlitchPalette?: typeof loadGlitchPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadGlitchPalette = loadGlitchPalette; + +export * from "./index.js"; diff --git a/palettes/tech/glitch/src/index.lazy.ts b/palettes/tech/glitch/src/index.lazy.ts new file mode 100644 index 00000000000..0a02ab657bd --- /dev/null +++ b/palettes/tech/glitch/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "glitch"; + +/** + * @param engine - + */ +export async function loadGlitchPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/tech/glitch/src/index.ts b/palettes/tech/glitch/src/index.ts index aaa09774d73..ae8737dda03 100644 --- a/palettes/tech/glitch/src/index.ts +++ b/palettes/tech/glitch/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "glitch"; @@ -6,9 +7,7 @@ const paletteName = "glitch"; * @param engine - */ export async function loadGlitchPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/tech/glitch/typedoc.json b/palettes/tech/glitch/typedoc.json index efc3d963e14..0743d3916b0 100644 --- a/palettes/tech/glitch/typedoc.json +++ b/palettes/tech/glitch/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Glitch Full RGB Shift Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Glitch Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/tech/glitch/webpack.config.js b/palettes/tech/glitch/webpack.config.js deleted file mode 100644 index e2f23941e0c..00000000000 --- a/palettes/tech/glitch/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-glitch", - paletteName: "Glitch Full RGB Shift Palette", - version, -}); diff --git a/palettes/tech/hologram/CHANGELOG.md b/palettes/tech/hologram/CHANGELOG.md index 48d9d2f91d5..91803708413 100644 --- a/palettes/tech/hologram/CHANGELOG.md +++ b/palettes/tech/hologram/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-hologram + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-hologram diff --git a/palettes/tech/hologram/README.md b/palettes/tech/hologram/README.md index ad01ddf4154..d189b64c36f 100644 --- a/palettes/tech/hologram/README.md +++ b/palettes/tech/hologram/README.md @@ -2,9 +2,9 @@ # tsParticles Hologram Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-hologram/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-hologram) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-hologram.svg)](https://www.npmjs.com/package/@tsparticles/palette-hologram) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-hologram)](https://www.npmjs.com/package/@tsparticles/palette-hologram) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-hologram/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-hologram) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-hologram.svg)](https://www.npmjs.com/package/@tsparticles/palette-hologram) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-hologram) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for hologram. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/hologram/images/sample.png)](https://particles.js.org/samples/palettes/hologram) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/tech/hologram/images/sample.png)](https://particles.js.org/samples/palettes/hologram) ## Colors @@ -79,7 +79,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -116,47 +116,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "hologram", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadHologramPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadHologramPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadHologramPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -pahologram[Hologram] -end - -e[tsParticles Engine] --> pahologram -``` diff --git a/palettes/tech/hologram/package.dist.json b/palettes/tech/hologram/package.dist.json index aef017965ae..fc661e34cf8 100644 --- a/palettes/tech/hologram/package.dist.json +++ b/palettes/tech/hologram/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-hologram", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles hologram palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.hologram.min.js", - "unpkg": "tsparticles.palette.hologram.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/tech/hologram/package.json b/palettes/tech/hologram/package.json index d9eb43a89fb..4dea4e532bb 100644 --- a/palettes/tech/hologram/package.json +++ b/palettes/tech/hologram/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-hologram", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles hologram palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/tech/hologram/rollup.config.js b/palettes/tech/hologram/rollup.config.js new file mode 100644 index 00000000000..f9317cd960e --- /dev/null +++ b/palettes/tech/hologram/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-hologram", + paletteName: "Hologram Palette", + version, +}); diff --git a/palettes/tech/hologram/src/browser.ts b/palettes/tech/hologram/src/browser.ts new file mode 100644 index 00000000000..60ff3175891 --- /dev/null +++ b/palettes/tech/hologram/src/browser.ts @@ -0,0 +1,10 @@ +import { loadHologramPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadHologramPalette?: typeof loadHologramPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadHologramPalette = loadHologramPalette; + +export * from "./index.js"; diff --git a/palettes/tech/hologram/src/index.lazy.ts b/palettes/tech/hologram/src/index.lazy.ts new file mode 100644 index 00000000000..c1060f15c78 --- /dev/null +++ b/palettes/tech/hologram/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "hologram"; + +/** + * @param engine - + */ +export async function loadHologramPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/tech/hologram/src/index.ts b/palettes/tech/hologram/src/index.ts index 69b03ee5700..ed4a0285c12 100644 --- a/palettes/tech/hologram/src/index.ts +++ b/palettes/tech/hologram/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "hologram"; @@ -6,9 +7,7 @@ const paletteName = "hologram"; * @param engine - */ export async function loadHologramPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/tech/hologram/typedoc.json b/palettes/tech/hologram/typedoc.json index 422668bb24a..cec1ac49c14 100644 --- a/palettes/tech/hologram/typedoc.json +++ b/palettes/tech/hologram/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Hologram Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Hologram Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/tech/hologram/webpack.config.js b/palettes/tech/hologram/webpack.config.js deleted file mode 100644 index 13287405f77..00000000000 --- a/palettes/tech/hologram/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-hologram", - paletteName: "Hologram Palette", - version, -}); diff --git a/palettes/tech/lofiWarm/CHANGELOG.md b/palettes/tech/lofiWarm/CHANGELOG.md index 09185cdc3f0..c36b1560f11 100644 --- a/palettes/tech/lofiWarm/CHANGELOG.md +++ b/palettes/tech/lofiWarm/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-lofi-warm + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-lofi-warm diff --git a/palettes/tech/lofiWarm/README.md b/palettes/tech/lofiWarm/README.md index 2a9ef223855..7df843245f1 100644 --- a/palettes/tech/lofiWarm/README.md +++ b/palettes/tech/lofiWarm/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Lo-Fi Warm Palette +# tsParticles LofiWarm Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-lofi-warm/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-lofi-warm) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-lofi-warm.svg)](https://www.npmjs.com/package/@tsparticles/palette-lofi-warm) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-lofi-warm)](https://www.npmjs.com/package/@tsparticles/palette-lofi-warm) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-lofiWarm/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-lofiWarm) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-lofiWarm.svg)](https://www.npmjs.com/package/@tsparticles/palette-lofiWarm) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-lofiWarm) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for lo-fi warm. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/lofiWarm/images/sample.png)](https://particles.js.org/samples/palettes/lofi-warm) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/tech/lofiWarm/images/sample.png)](https://particles.js.org/samples/palettes/lofiWarm) ## Colors @@ -75,7 +75,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -97,7 +97,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "lofi-warm", + palette: "lofiWarm", }; await engine.load({ @@ -112,47 +112,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "lofi-warm", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadLofiWarmPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadLofiWarmPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadLofiWarmPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -palofiWarm[Lo-Fi Warm] -end - -e[tsParticles Engine] --> palofiWarm -``` diff --git a/palettes/tech/lofiWarm/package.dist.json b/palettes/tech/lofiWarm/package.dist.json index 6cd624ba960..ea3b60fd047 100644 --- a/palettes/tech/lofiWarm/package.dist.json +++ b/palettes/tech/lofiWarm/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-lofi-warm", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles lo-fi warm palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.lofi-warm.min.js", - "unpkg": "tsparticles.palette.lofi-warm.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/tech/lofiWarm/package.json b/palettes/tech/lofiWarm/package.json index 2e13833930c..8c6512f00fa 100644 --- a/palettes/tech/lofiWarm/package.json +++ b/palettes/tech/lofiWarm/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-lofi-warm", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles lo-fi warm palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/tech/lofiWarm/rollup.config.js b/palettes/tech/lofiWarm/rollup.config.js new file mode 100644 index 00000000000..882233f2529 --- /dev/null +++ b/palettes/tech/lofiWarm/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-lofiWarm", + paletteName: "LofiWarm Palette", + version, +}); diff --git a/palettes/tech/lofiWarm/src/browser.ts b/palettes/tech/lofiWarm/src/browser.ts new file mode 100644 index 00000000000..bfb9ef9fbcb --- /dev/null +++ b/palettes/tech/lofiWarm/src/browser.ts @@ -0,0 +1,10 @@ +import { loadLofiWarmPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadLofiWarmPalette?: typeof loadLofiWarmPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadLofiWarmPalette = loadLofiWarmPalette; + +export * from "./index.js"; diff --git a/palettes/tech/lofiWarm/src/index.lazy.ts b/palettes/tech/lofiWarm/src/index.lazy.ts new file mode 100644 index 00000000000..f1cf161e0b7 --- /dev/null +++ b/palettes/tech/lofiWarm/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "lofi-warm"; + +/** + * @param engine - + */ +export async function loadLofiWarmPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/tech/lofiWarm/src/index.ts b/palettes/tech/lofiWarm/src/index.ts index d948245c9ea..66950cae175 100644 --- a/palettes/tech/lofiWarm/src/index.ts +++ b/palettes/tech/lofiWarm/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "lofi-warm"; @@ -6,9 +7,7 @@ const paletteName = "lofi-warm"; * @param engine - */ export async function loadLofiWarmPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/tech/lofiWarm/typedoc.json b/palettes/tech/lofiWarm/typedoc.json index d3a23407c8f..e6035a067f0 100644 --- a/palettes/tech/lofiWarm/typedoc.json +++ b/palettes/tech/lofiWarm/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Lo Fi Warm Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles LofiWarm Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/tech/lofiWarm/webpack.config.js b/palettes/tech/lofiWarm/webpack.config.js deleted file mode 100644 index 8df837aab36..00000000000 --- a/palettes/tech/lofiWarm/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-lofi-warm", - paletteName: "Lo Fi Warm Palette", - version, -}); diff --git a/palettes/tech/matrixRain/CHANGELOG.md b/palettes/tech/matrixRain/CHANGELOG.md index 97ab594ba63..9be639b6fb8 100644 --- a/palettes/tech/matrixRain/CHANGELOG.md +++ b/palettes/tech/matrixRain/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-matrix-rain + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-matrix-rain diff --git a/palettes/tech/matrixRain/README.md b/palettes/tech/matrixRain/README.md index 53138880694..a988b0b2511 100644 --- a/palettes/tech/matrixRain/README.md +++ b/palettes/tech/matrixRain/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Matrix Rain Palette +# tsParticles MatrixRain Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-matrix-rain/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-matrix-rain) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-matrix-rain.svg)](https://www.npmjs.com/package/@tsparticles/palette-matrix-rain) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-matrix-rain)](https://www.npmjs.com/package/@tsparticles/palette-matrix-rain) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-matrixRain/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-matrixRain) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-matrixRain.svg)](https://www.npmjs.com/package/@tsparticles/palette-matrixRain) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-matrixRain) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for matrix rain. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/matrixRain/images/sample.png)](https://particles.js.org/samples/palettes/matrix-rain) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/tech/matrixRain/images/sample.png)](https://particles.js.org/samples/palettes/matrixRain) ## Colors @@ -79,7 +79,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -101,7 +101,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "matrix-rain", + palette: "matrixRain", }; await engine.load({ @@ -116,47 +116,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "matrix-rain", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadMatrixRainPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadMatrixRainPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadMatrixRainPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -pamatrixRain[Matrix Rain] -end - -e[tsParticles Engine] --> pamatrixRain -``` diff --git a/palettes/tech/matrixRain/package.dist.json b/palettes/tech/matrixRain/package.dist.json index f1f1f73cab0..4926a1964e2 100644 --- a/palettes/tech/matrixRain/package.dist.json +++ b/palettes/tech/matrixRain/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-matrix-rain", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles matrix rain palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.matrix-rain.min.js", - "unpkg": "tsparticles.palette.matrix-rain.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/tech/matrixRain/package.json b/palettes/tech/matrixRain/package.json index 99fa0a6a0c9..fbb3a96ed80 100644 --- a/palettes/tech/matrixRain/package.json +++ b/palettes/tech/matrixRain/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-matrix-rain", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles matrix rain palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/tech/matrixRain/rollup.config.js b/palettes/tech/matrixRain/rollup.config.js new file mode 100644 index 00000000000..03636635f40 --- /dev/null +++ b/palettes/tech/matrixRain/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-matrixRain", + paletteName: "MatrixRain Palette", + version, +}); diff --git a/palettes/tech/matrixRain/src/browser.ts b/palettes/tech/matrixRain/src/browser.ts new file mode 100644 index 00000000000..1a412a5df8d --- /dev/null +++ b/palettes/tech/matrixRain/src/browser.ts @@ -0,0 +1,10 @@ +import { loadMatrixRainPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadMatrixRainPalette?: typeof loadMatrixRainPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadMatrixRainPalette = loadMatrixRainPalette; + +export * from "./index.js"; diff --git a/palettes/tech/matrixRain/src/index.lazy.ts b/palettes/tech/matrixRain/src/index.lazy.ts new file mode 100644 index 00000000000..79ea510104f --- /dev/null +++ b/palettes/tech/matrixRain/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "matrix-rain"; + +/** + * @param engine - + */ +export async function loadMatrixRainPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/tech/matrixRain/src/index.ts b/palettes/tech/matrixRain/src/index.ts index a4f7eadbd40..e063255f7bd 100644 --- a/palettes/tech/matrixRain/src/index.ts +++ b/palettes/tech/matrixRain/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "matrix-rain"; @@ -6,9 +7,7 @@ const paletteName = "matrix-rain"; * @param engine - */ export async function loadMatrixRainPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/tech/matrixRain/typedoc.json b/palettes/tech/matrixRain/typedoc.json index 7dc52a27286..d651240748d 100644 --- a/palettes/tech/matrixRain/typedoc.json +++ b/palettes/tech/matrixRain/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Matrix Rain Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles MatrixRain Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/tech/matrixRain/webpack.config.js b/palettes/tech/matrixRain/webpack.config.js deleted file mode 100644 index 299325036e7..00000000000 --- a/palettes/tech/matrixRain/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-matrix-rain", - paletteName: "Matrix Rain Palette", - version, -}); diff --git a/palettes/tech/neonCity/CHANGELOG.md b/palettes/tech/neonCity/CHANGELOG.md index d9670dcbdfd..6ca31e917d3 100644 --- a/palettes/tech/neonCity/CHANGELOG.md +++ b/palettes/tech/neonCity/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-neon-city + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-neon-city diff --git a/palettes/tech/neonCity/README.md b/palettes/tech/neonCity/README.md index 72a8b0a23f5..41d8af52892 100644 --- a/palettes/tech/neonCity/README.md +++ b/palettes/tech/neonCity/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Neon City Palette +# tsParticles NeonCity Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-neon-city/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-neon-city) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-neon-city.svg)](https://www.npmjs.com/package/@tsparticles/palette-neon-city) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-neon-city)](https://www.npmjs.com/package/@tsparticles/palette-neon-city) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-neonCity/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-neonCity) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-neonCity.svg)](https://www.npmjs.com/package/@tsparticles/palette-neonCity) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-neonCity) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for neon city. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/neonCity/images/sample.png)](https://particles.js.org/samples/palettes/neon-city) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/tech/neonCity/images/sample.png)](https://particles.js.org/samples/palettes/neonCity) ## Colors @@ -83,7 +83,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -105,7 +105,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "neon-city", + palette: "neonCity", }; await engine.load({ @@ -120,47 +120,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "neon-city", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadNeonCityPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadNeonCityPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadNeonCityPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -paneonCity[Neon City] -end - -e[tsParticles Engine] --> paneonCity -``` diff --git a/palettes/tech/neonCity/package.dist.json b/palettes/tech/neonCity/package.dist.json index 5dbb450d2f1..803402c61c2 100644 --- a/palettes/tech/neonCity/package.dist.json +++ b/palettes/tech/neonCity/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-neon-city", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles neon city palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.neon-city.min.js", - "unpkg": "tsparticles.palette.neon-city.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/tech/neonCity/package.json b/palettes/tech/neonCity/package.json index f404eeadb57..2243bab84e4 100644 --- a/palettes/tech/neonCity/package.json +++ b/palettes/tech/neonCity/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-neon-city", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles neon city palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/tech/neonCity/rollup.config.js b/palettes/tech/neonCity/rollup.config.js new file mode 100644 index 00000000000..463230e8af3 --- /dev/null +++ b/palettes/tech/neonCity/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-neonCity", + paletteName: "NeonCity Palette", + version, +}); diff --git a/palettes/tech/neonCity/src/browser.ts b/palettes/tech/neonCity/src/browser.ts new file mode 100644 index 00000000000..d4c445eb33f --- /dev/null +++ b/palettes/tech/neonCity/src/browser.ts @@ -0,0 +1,10 @@ +import { loadNeonCityPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadNeonCityPalette?: typeof loadNeonCityPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadNeonCityPalette = loadNeonCityPalette; + +export * from "./index.js"; diff --git a/palettes/tech/neonCity/src/index.lazy.ts b/palettes/tech/neonCity/src/index.lazy.ts new file mode 100644 index 00000000000..76f9ca24ae4 --- /dev/null +++ b/palettes/tech/neonCity/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "neon-city"; + +/** + * @param engine - + */ +export async function loadNeonCityPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/tech/neonCity/src/index.ts b/palettes/tech/neonCity/src/index.ts index eddb8bf5279..31b75e8b243 100644 --- a/palettes/tech/neonCity/src/index.ts +++ b/palettes/tech/neonCity/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "neon-city"; @@ -6,9 +7,7 @@ const paletteName = "neon-city"; * @param engine - */ export async function loadNeonCityPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/tech/neonCity/typedoc.json b/palettes/tech/neonCity/typedoc.json index 600627a4198..911c5df3900 100644 --- a/palettes/tech/neonCity/typedoc.json +++ b/palettes/tech/neonCity/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Neon City Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles NeonCity Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/tech/neonCity/webpack.config.js b/palettes/tech/neonCity/webpack.config.js deleted file mode 100644 index 8283b4c240a..00000000000 --- a/palettes/tech/neonCity/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-neon-city", - paletteName: "Neon City Palette", - version, -}); diff --git a/palettes/tech/networkNodes/CHANGELOG.md b/palettes/tech/networkNodes/CHANGELOG.md index 3d31beb3e3c..2db70d8e26f 100644 --- a/palettes/tech/networkNodes/CHANGELOG.md +++ b/palettes/tech/networkNodes/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-network-nodes + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-network-nodes diff --git a/palettes/tech/networkNodes/README.md b/palettes/tech/networkNodes/README.md index 4ab5d307bae..09c1a0855ac 100644 --- a/palettes/tech/networkNodes/README.md +++ b/palettes/tech/networkNodes/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Network Nodes Palette +# tsParticles NetworkNodes Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-network-nodes/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-network-nodes) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-network-nodes.svg)](https://www.npmjs.com/package/@tsparticles/palette-network-nodes) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-network-nodes)](https://www.npmjs.com/package/@tsparticles/palette-network-nodes) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-networkNodes/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-networkNodes) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-networkNodes.svg)](https://www.npmjs.com/package/@tsparticles/palette-networkNodes) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-networkNodes) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for network nodes. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/networkNodes/images/sample.png)](https://particles.js.org/samples/palettes/network-nodes) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/tech/networkNodes/images/sample.png)](https://particles.js.org/samples/palettes/networkNodes) ## Colors @@ -75,7 +75,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -97,7 +97,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "network-nodes", + palette: "networkNodes", }; await engine.load({ @@ -112,47 +112,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "network-nodes", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadNetworkNodesPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadNetworkNodesPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadNetworkNodesPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -panetworkNodes[Network Nodes] -end - -e[tsParticles Engine] --> panetworkNodes -``` diff --git a/palettes/tech/networkNodes/package.dist.json b/palettes/tech/networkNodes/package.dist.json index ac04d381edd..997272ddc1b 100644 --- a/palettes/tech/networkNodes/package.dist.json +++ b/palettes/tech/networkNodes/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-network-nodes", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles network nodes palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.network-nodes.min.js", - "unpkg": "tsparticles.palette.network-nodes.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/tech/networkNodes/package.json b/palettes/tech/networkNodes/package.json index f75217e5357..230fa203499 100644 --- a/palettes/tech/networkNodes/package.json +++ b/palettes/tech/networkNodes/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-network-nodes", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles network nodes palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/tech/networkNodes/rollup.config.js b/palettes/tech/networkNodes/rollup.config.js new file mode 100644 index 00000000000..e733180913d --- /dev/null +++ b/palettes/tech/networkNodes/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-networkNodes", + paletteName: "NetworkNodes Palette", + version, +}); diff --git a/palettes/tech/networkNodes/src/browser.ts b/palettes/tech/networkNodes/src/browser.ts new file mode 100644 index 00000000000..35f548f07fb --- /dev/null +++ b/palettes/tech/networkNodes/src/browser.ts @@ -0,0 +1,10 @@ +import { loadNetworkNodesPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadNetworkNodesPalette?: typeof loadNetworkNodesPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadNetworkNodesPalette = loadNetworkNodesPalette; + +export * from "./index.js"; diff --git a/palettes/tech/networkNodes/src/index.lazy.ts b/palettes/tech/networkNodes/src/index.lazy.ts new file mode 100644 index 00000000000..c6a8d690f5e --- /dev/null +++ b/palettes/tech/networkNodes/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "network-nodes"; + +/** + * @param engine - + */ +export async function loadNetworkNodesPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/tech/networkNodes/src/index.ts b/palettes/tech/networkNodes/src/index.ts index 7f9267ac10f..e08fffb0a98 100644 --- a/palettes/tech/networkNodes/src/index.ts +++ b/palettes/tech/networkNodes/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "network-nodes"; @@ -6,9 +7,7 @@ const paletteName = "network-nodes"; * @param engine - */ export async function loadNetworkNodesPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/tech/networkNodes/typedoc.json b/palettes/tech/networkNodes/typedoc.json index d539e63ef01..35245f962ea 100644 --- a/palettes/tech/networkNodes/typedoc.json +++ b/palettes/tech/networkNodes/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Network Nodes Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles NetworkNodes Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/tech/networkNodes/webpack.config.js b/palettes/tech/networkNodes/webpack.config.js deleted file mode 100644 index e30c2b189a3..00000000000 --- a/palettes/tech/networkNodes/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-network-nodes", - paletteName: "Network Nodes Palette", - version, -}); diff --git a/palettes/tech/plasmaArc/CHANGELOG.md b/palettes/tech/plasmaArc/CHANGELOG.md index 51d2b6652f4..b5456a3daea 100644 --- a/palettes/tech/plasmaArc/CHANGELOG.md +++ b/palettes/tech/plasmaArc/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-plasma-arc + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-plasma-arc diff --git a/palettes/tech/plasmaArc/README.md b/palettes/tech/plasmaArc/README.md index 74e01463d5b..f5a1b40dc83 100644 --- a/palettes/tech/plasmaArc/README.md +++ b/palettes/tech/plasmaArc/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Plasma Arc Palette +# tsParticles PlasmaArc Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-plasma-arc/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-plasma-arc) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-plasma-arc.svg)](https://www.npmjs.com/package/@tsparticles/palette-plasma-arc) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-plasma-arc)](https://www.npmjs.com/package/@tsparticles/palette-plasma-arc) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-plasmaArc/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-plasmaArc) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-plasmaArc.svg)](https://www.npmjs.com/package/@tsparticles/palette-plasmaArc) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-plasmaArc) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for plasma arc. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/plasmaArc/images/sample.png)](https://particles.js.org/samples/palettes/plasma-arc) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/tech/plasmaArc/images/sample.png)](https://particles.js.org/samples/palettes/plasmaArc) ## Colors @@ -79,7 +79,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -101,7 +101,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "plasma-arc", + palette: "plasmaArc", }; await engine.load({ @@ -116,47 +116,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "plasma-arc", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadPlasmaArcPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadPlasmaArcPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadPlasmaArcPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -paplasmaArc[Plasma Arc] -end - -e[tsParticles Engine] --> paplasmaArc -``` diff --git a/palettes/tech/plasmaArc/package.dist.json b/palettes/tech/plasmaArc/package.dist.json index 864c0eda777..6e1d0f34d22 100644 --- a/palettes/tech/plasmaArc/package.dist.json +++ b/palettes/tech/plasmaArc/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-plasma-arc", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles plasma arc palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.plasma-arc.min.js", - "unpkg": "tsparticles.palette.plasma-arc.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/tech/plasmaArc/package.json b/palettes/tech/plasmaArc/package.json index c0c43fb8fcd..b3fecae3b0c 100644 --- a/palettes/tech/plasmaArc/package.json +++ b/palettes/tech/plasmaArc/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-plasma-arc", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles plasma arc palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/tech/plasmaArc/rollup.config.js b/palettes/tech/plasmaArc/rollup.config.js new file mode 100644 index 00000000000..4d991f713e9 --- /dev/null +++ b/palettes/tech/plasmaArc/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-plasmaArc", + paletteName: "PlasmaArc Palette", + version, +}); diff --git a/palettes/tech/plasmaArc/src/browser.ts b/palettes/tech/plasmaArc/src/browser.ts new file mode 100644 index 00000000000..e642b3c315b --- /dev/null +++ b/palettes/tech/plasmaArc/src/browser.ts @@ -0,0 +1,10 @@ +import { loadPlasmaArcPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadPlasmaArcPalette?: typeof loadPlasmaArcPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadPlasmaArcPalette = loadPlasmaArcPalette; + +export * from "./index.js"; diff --git a/palettes/tech/plasmaArc/src/index.lazy.ts b/palettes/tech/plasmaArc/src/index.lazy.ts new file mode 100644 index 00000000000..26f52fc15ef --- /dev/null +++ b/palettes/tech/plasmaArc/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "plasma-arc"; + +/** + * @param engine - + */ +export async function loadPlasmaArcPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/tech/plasmaArc/src/index.ts b/palettes/tech/plasmaArc/src/index.ts index 3440705858b..30742ea9d8d 100644 --- a/palettes/tech/plasmaArc/src/index.ts +++ b/palettes/tech/plasmaArc/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "plasma-arc"; @@ -6,9 +7,7 @@ const paletteName = "plasma-arc"; * @param engine - */ export async function loadPlasmaArcPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/tech/plasmaArc/typedoc.json b/palettes/tech/plasmaArc/typedoc.json index d2276bb4227..8258d1063f6 100644 --- a/palettes/tech/plasmaArc/typedoc.json +++ b/palettes/tech/plasmaArc/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Plasma Arc Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles PlasmaArc Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/tech/plasmaArc/webpack.config.js b/palettes/tech/plasmaArc/webpack.config.js deleted file mode 100644 index ba31906b614..00000000000 --- a/palettes/tech/plasmaArc/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-plasma-arc", - paletteName: "Plasma Arc Palette", - version, -}); diff --git a/palettes/tech/vaporwave/CHANGELOG.md b/palettes/tech/vaporwave/CHANGELOG.md index 129d8af4721..eee89aff3be 100644 --- a/palettes/tech/vaporwave/CHANGELOG.md +++ b/palettes/tech/vaporwave/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-vaporwave + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-vaporwave diff --git a/palettes/tech/vaporwave/README.md b/palettes/tech/vaporwave/README.md index 7784c31a605..8694b29ff3e 100644 --- a/palettes/tech/vaporwave/README.md +++ b/palettes/tech/vaporwave/README.md @@ -2,9 +2,9 @@ # tsParticles Vaporwave Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-vaporwave/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-vaporwave) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-vaporwave.svg)](https://www.npmjs.com/package/@tsparticles/palette-vaporwave) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-vaporwave)](https://www.npmjs.com/package/@tsparticles/palette-vaporwave) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-vaporwave/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-vaporwave) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-vaporwave.svg)](https://www.npmjs.com/package/@tsparticles/palette-vaporwave) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-vaporwave) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for vaporwave. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/vaporwave/images/sample.png)](https://particles.js.org/samples/palettes/vaporwave) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/tech/vaporwave/images/sample.png)](https://particles.js.org/samples/palettes/vaporwave) ## Colors @@ -79,7 +79,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -116,47 +116,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "vaporwave", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadVaporwavePalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadVaporwavePalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadVaporwavePalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -pavaporwave[Vaporwave] -end - -e[tsParticles Engine] --> pavaporwave -``` diff --git a/palettes/tech/vaporwave/package.dist.json b/palettes/tech/vaporwave/package.dist.json index 9925ef14fd4..15c88cd1edf 100644 --- a/palettes/tech/vaporwave/package.dist.json +++ b/palettes/tech/vaporwave/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-vaporwave", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles vaporwave palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.vaporwave.min.js", - "unpkg": "tsparticles.palette.vaporwave.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/tech/vaporwave/package.json b/palettes/tech/vaporwave/package.json index b4f1471ae61..f8f7a8449bb 100644 --- a/palettes/tech/vaporwave/package.json +++ b/palettes/tech/vaporwave/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-vaporwave", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles vaporwave palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/tech/vaporwave/rollup.config.js b/palettes/tech/vaporwave/rollup.config.js new file mode 100644 index 00000000000..f8af3c6bf15 --- /dev/null +++ b/palettes/tech/vaporwave/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-vaporwave", + paletteName: "Vaporwave Palette", + version, +}); diff --git a/palettes/tech/vaporwave/src/browser.ts b/palettes/tech/vaporwave/src/browser.ts new file mode 100644 index 00000000000..69fa9128f31 --- /dev/null +++ b/palettes/tech/vaporwave/src/browser.ts @@ -0,0 +1,10 @@ +import { loadVaporwavePalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadVaporwavePalette?: typeof loadVaporwavePalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadVaporwavePalette = loadVaporwavePalette; + +export * from "./index.js"; diff --git a/palettes/tech/vaporwave/src/index.lazy.ts b/palettes/tech/vaporwave/src/index.lazy.ts new file mode 100644 index 00000000000..f9d7588ec30 --- /dev/null +++ b/palettes/tech/vaporwave/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "vaporwave"; + +/** + * @param engine - + */ +export async function loadVaporwavePalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/tech/vaporwave/src/index.ts b/palettes/tech/vaporwave/src/index.ts index b48fb17fc1a..1f9557c5c6e 100644 --- a/palettes/tech/vaporwave/src/index.ts +++ b/palettes/tech/vaporwave/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "vaporwave"; @@ -6,9 +7,7 @@ const paletteName = "vaporwave"; * @param engine - */ export async function loadVaporwavePalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/tech/vaporwave/typedoc.json b/palettes/tech/vaporwave/typedoc.json index 2114603bcf0..76a18860fd8 100644 --- a/palettes/tech/vaporwave/typedoc.json +++ b/palettes/tech/vaporwave/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Vaporwave Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Vaporwave Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/tech/vaporwave/webpack.config.js b/palettes/tech/vaporwave/webpack.config.js deleted file mode 100644 index 1eea3bcfa2a..00000000000 --- a/palettes/tech/vaporwave/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-vaporwave", - paletteName: "Vaporwave Palette", - version, -}); diff --git a/palettes/vibrant/default/.browserslistrc b/palettes/vibrant/default/.browserslistrc new file mode 100644 index 00000000000..9cce1e55dd9 --- /dev/null +++ b/palettes/vibrant/default/.browserslistrc @@ -0,0 +1 @@ +extends @tsparticles/browserslist-config diff --git a/palettes/vibrant/default/CHANGELOG.md b/palettes/vibrant/default/CHANGELOG.md new file mode 100644 index 00000000000..ecc53a64ac6 --- /dev/null +++ b/palettes/vibrant/default/CHANGELOG.md @@ -0,0 +1,16 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-vibrant + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-vibrant + +# 4.0.0-beta.0 (2026-04-08) + +**Note:** Version bump only for package @tsparticles/palette-vibrant diff --git a/palettes/vibrant/default/LICENSE b/palettes/vibrant/default/LICENSE new file mode 100644 index 00000000000..bdc05f528fa --- /dev/null +++ b/palettes/vibrant/default/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/palettes/vibrant/default/README.md b/palettes/vibrant/default/README.md new file mode 100644 index 00000000000..fd8f3220dc4 --- /dev/null +++ b/palettes/vibrant/default/README.md @@ -0,0 +1,199 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Default Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-default/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-default) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-default.svg)](https://www.npmjs.com/package/@tsparticles/palette-default) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-default) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/vibrant/default/images/sample.png)](https://particles.js.org/samples/palettes/default) + +## Colors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ #1A1000 +
+
+ #3A2200 +
+
+ #6B3D00 +
+
+ #A65A00 +
+
+ #D98A1A +
+
+ #FFC266 +
+
+ #090500 +
+
+ #000000 +
+
+ #FF0090 +
+
+ #FF6600 +
+
+ #FFD700 +
+
+ #00FF44 +
+
+ #00AAFF +
+
+ #AA00FF +
+
+ #FFA500 +
+
+ #FFEFD7 +
+
+ #FFFFFF +
+
+ #F5F5F5 +
+
+ #1E1E1E +
+
+ #252525 +
+
+ #E0E0E0 +
+
+ #A0A0A0 +
+
+ #404040 +
+
+ #1D3557 +
+
+ Background
+ #1A1000 +
+ Blend mode: source-over | Fill: true +
+## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadDefaultPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadDefaultPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "default", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadDefaultPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/vibrant/vibrant/eslint.config.js b/palettes/vibrant/default/eslint.config.js similarity index 100% rename from palettes/vibrant/vibrant/eslint.config.js rename to palettes/vibrant/default/eslint.config.js diff --git a/palettes/vibrant/vibrant/images/sample.png b/palettes/vibrant/default/images/sample.png similarity index 100% rename from palettes/vibrant/vibrant/images/sample.png rename to palettes/vibrant/default/images/sample.png diff --git a/palettes/vibrant/default/package.dist.json b/palettes/vibrant/default/package.dist.json new file mode 100644 index 00000000000..7643433fa1d --- /dev/null +++ b/palettes/vibrant/default/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-vibrant", + "version": "4.0.0-beta.15", + "description": "tsParticles vibrant palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/vibrant/default" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/vibrant/default/package.json b/palettes/vibrant/default/package.json new file mode 100644 index 00000000000..19c521d9642 --- /dev/null +++ b/palettes/vibrant/default/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-vibrant", + "version": "4.0.0-beta.15", + "description": "tsParticles vibrant palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/vibrant/default" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/vibrant/default/rollup.config.js b/palettes/vibrant/default/rollup.config.js new file mode 100644 index 00000000000..378de5b5479 --- /dev/null +++ b/palettes/vibrant/default/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-default", + paletteName: "Default Palette", + version, +}); diff --git a/palettes/vibrant/default/src/browser.ts b/palettes/vibrant/default/src/browser.ts new file mode 100644 index 00000000000..63470342c36 --- /dev/null +++ b/palettes/vibrant/default/src/browser.ts @@ -0,0 +1,10 @@ +import { loadVibrantPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadVibrantPalette?: typeof loadVibrantPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadVibrantPalette = loadVibrantPalette; + +export * from "./index.js"; diff --git a/palettes/vibrant/default/src/index.lazy.ts b/palettes/vibrant/default/src/index.lazy.ts new file mode 100644 index 00000000000..1275c5c1bf3 --- /dev/null +++ b/palettes/vibrant/default/src/index.lazy.ts @@ -0,0 +1,11 @@ +import { type Engine } from "@tsparticles/engine/lazy"; +const paletteName = "vibrant"; +/** + * @param engine - + */ +export async function loadVibrantPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/vibrant/default/src/index.ts b/palettes/vibrant/default/src/index.ts new file mode 100644 index 00000000000..33997562bd3 --- /dev/null +++ b/palettes/vibrant/default/src/index.ts @@ -0,0 +1,11 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; +const paletteName = "vibrant"; +/** + * @param engine - + */ +export async function loadVibrantPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/vibrant/vibrant/src/options.ts b/palettes/vibrant/default/src/options.ts similarity index 100% rename from palettes/vibrant/vibrant/src/options.ts rename to palettes/vibrant/default/src/options.ts diff --git a/palettes/vibrant/default/tsconfig.base.json b/palettes/vibrant/default/tsconfig.base.json new file mode 100644 index 00000000000..2b489b6aa1c --- /dev/null +++ b/palettes/vibrant/default/tsconfig.base.json @@ -0,0 +1,9 @@ +{ + "extends": "@tsparticles/tsconfig/dist/tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src" + }, + "include": [ + "./src" + ] +} diff --git a/palettes/water/water/tsconfig.browser.json b/palettes/vibrant/default/tsconfig.browser.json similarity index 100% rename from palettes/water/water/tsconfig.browser.json rename to palettes/vibrant/default/tsconfig.browser.json diff --git a/palettes/water/water/tsconfig.json b/palettes/vibrant/default/tsconfig.json similarity index 100% rename from palettes/water/water/tsconfig.json rename to palettes/vibrant/default/tsconfig.json diff --git a/palettes/water/water/tsconfig.module.json b/palettes/vibrant/default/tsconfig.module.json similarity index 100% rename from palettes/water/water/tsconfig.module.json rename to palettes/vibrant/default/tsconfig.module.json diff --git a/palettes/water/water/tsconfig.types.json b/palettes/vibrant/default/tsconfig.types.json similarity index 100% rename from palettes/water/water/tsconfig.types.json rename to palettes/vibrant/default/tsconfig.types.json diff --git a/palettes/vibrant/default/typedoc.json b/palettes/vibrant/default/typedoc.json new file mode 100644 index 00000000000..64d1b3874a9 --- /dev/null +++ b/palettes/vibrant/default/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Default Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/vibrant/electric/.browserslistrc b/palettes/vibrant/electric/.browserslistrc new file mode 100644 index 00000000000..9cce1e55dd9 --- /dev/null +++ b/palettes/vibrant/electric/.browserslistrc @@ -0,0 +1 @@ +extends @tsparticles/browserslist-config diff --git a/palettes/vibrant/electric/CHANGELOG.md b/palettes/vibrant/electric/CHANGELOG.md new file mode 100644 index 00000000000..3d4f4289f29 --- /dev/null +++ b/palettes/vibrant/electric/CHANGELOG.md @@ -0,0 +1,16 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-vibrant-electric + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-vibrant-electric + +# 4.0.0-beta.0 (2026-04-08) + +**Note:** Version bump only for package @tsparticles/palette-vibrant-electric diff --git a/palettes/vibrant/electric/LICENSE b/palettes/vibrant/electric/LICENSE new file mode 100644 index 00000000000..bdc05f528fa --- /dev/null +++ b/palettes/vibrant/electric/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/palettes/vibrant/electric/README.md b/palettes/vibrant/electric/README.md new file mode 100644 index 00000000000..977600bf7dc --- /dev/null +++ b/palettes/vibrant/electric/README.md @@ -0,0 +1,203 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Electric Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-electric/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-electric) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-electric.svg)](https://www.npmjs.com/package/@tsparticles/palette-electric) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-electric) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/vibrant/electric/images/sample.png)](https://particles.js.org/samples/palettes/electric) + +## Colors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ #1A1000 +
+
+ #3A2200 +
+
+ #6B3D00 +
+
+ #A65A00 +
+
+ #D98A1A +
+
+ #FFC266 +
+
+ #090500 +
+
+ #0D0221 +
+
+ #3D5AF1 +
+
+ #7B2CBF +
+
+ #C60C30 +
+
+ #FF006E +
+
+ #FFBE0B +
+
+ #8338EC +
+
+ #FFA500 +
+
+ #FFEFD7 +
+
+ #000000 +
+
+ #FFFFFF +
+
+ #F5F5F5 +
+
+ #1E1E1E +
+
+ #252525 +
+
+ #E0E0E0 +
+
+ #A0A0A0 +
+
+ #404040 +
+
+ #1D3557 +
+
+ Background
+ #1A1000 +
+ Blend mode: source-over | Fill: true +
+## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadElectricPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadElectricPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "electric", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadElectricPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/vibrant/vibrantNeon/eslint.config.js b/palettes/vibrant/electric/eslint.config.js similarity index 100% rename from palettes/vibrant/vibrantNeon/eslint.config.js rename to palettes/vibrant/electric/eslint.config.js diff --git a/palettes/vibrant/vibrantElectric/images/sample.png b/palettes/vibrant/electric/images/sample.png similarity index 100% rename from palettes/vibrant/vibrantElectric/images/sample.png rename to palettes/vibrant/electric/images/sample.png diff --git a/palettes/vibrant/electric/package.dist.json b/palettes/vibrant/electric/package.dist.json new file mode 100644 index 00000000000..fcb45afeeb3 --- /dev/null +++ b/palettes/vibrant/electric/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-vibrant-electric", + "version": "4.0.0-beta.15", + "description": "tsParticles vibrant electric palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/vibrant/electric" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/vibrant/electric/package.json b/palettes/vibrant/electric/package.json new file mode 100644 index 00000000000..27dea946489 --- /dev/null +++ b/palettes/vibrant/electric/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-vibrant-electric", + "version": "4.0.0-beta.15", + "description": "tsParticles vibrant electric palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/vibrant/electric" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/vibrant/electric/rollup.config.js b/palettes/vibrant/electric/rollup.config.js new file mode 100644 index 00000000000..59725ac5a5e --- /dev/null +++ b/palettes/vibrant/electric/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-electric", + paletteName: "Electric Palette", + version, +}); diff --git a/palettes/vibrant/electric/src/browser.ts b/palettes/vibrant/electric/src/browser.ts new file mode 100644 index 00000000000..51738c8706f --- /dev/null +++ b/palettes/vibrant/electric/src/browser.ts @@ -0,0 +1,10 @@ +import { loadVibrantElectricPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadVibrantElectricPalette?: typeof loadVibrantElectricPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadVibrantElectricPalette = loadVibrantElectricPalette; + +export * from "./index.js"; diff --git a/palettes/vibrant/electric/src/index.lazy.ts b/palettes/vibrant/electric/src/index.lazy.ts new file mode 100644 index 00000000000..271b734b22d --- /dev/null +++ b/palettes/vibrant/electric/src/index.lazy.ts @@ -0,0 +1,11 @@ +import { type Engine } from "@tsparticles/engine/lazy"; +const paletteName = "vibrant-electric"; +/** + * @param engine - + */ +export async function loadVibrantElectricPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/vibrant/electric/src/index.ts b/palettes/vibrant/electric/src/index.ts new file mode 100644 index 00000000000..9a1e84f43ff --- /dev/null +++ b/palettes/vibrant/electric/src/index.ts @@ -0,0 +1,11 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; +const paletteName = "vibrant-electric"; +/** + * @param engine - + */ +export async function loadVibrantElectricPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/vibrant/vibrantElectric/src/options.ts b/palettes/vibrant/electric/src/options.ts similarity index 100% rename from palettes/vibrant/vibrantElectric/src/options.ts rename to palettes/vibrant/electric/src/options.ts diff --git a/palettes/vibrant/vibrantTropical/tsconfig.base.json b/palettes/vibrant/electric/tsconfig.base.json similarity index 100% rename from palettes/vibrant/vibrantTropical/tsconfig.base.json rename to palettes/vibrant/electric/tsconfig.base.json diff --git a/palettes/vibrant/vibrantNeon/tsconfig.browser.json b/palettes/vibrant/electric/tsconfig.browser.json similarity index 100% rename from palettes/vibrant/vibrantNeon/tsconfig.browser.json rename to palettes/vibrant/electric/tsconfig.browser.json diff --git a/palettes/vibrant/vibrantNeon/tsconfig.json b/palettes/vibrant/electric/tsconfig.json similarity index 100% rename from palettes/vibrant/vibrantNeon/tsconfig.json rename to palettes/vibrant/electric/tsconfig.json diff --git a/palettes/vibrant/vibrantNeon/tsconfig.module.json b/palettes/vibrant/electric/tsconfig.module.json similarity index 100% rename from palettes/vibrant/vibrantNeon/tsconfig.module.json rename to palettes/vibrant/electric/tsconfig.module.json diff --git a/palettes/vibrant/vibrantNeon/tsconfig.types.json b/palettes/vibrant/electric/tsconfig.types.json similarity index 100% rename from palettes/vibrant/vibrantNeon/tsconfig.types.json rename to palettes/vibrant/electric/tsconfig.types.json diff --git a/palettes/vibrant/electric/typedoc.json b/palettes/vibrant/electric/typedoc.json new file mode 100644 index 00000000000..54be438f41d --- /dev/null +++ b/palettes/vibrant/electric/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Electric Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/vibrant/neon/.browserslistrc b/palettes/vibrant/neon/.browserslistrc new file mode 100644 index 00000000000..9cce1e55dd9 --- /dev/null +++ b/palettes/vibrant/neon/.browserslistrc @@ -0,0 +1 @@ +extends @tsparticles/browserslist-config diff --git a/palettes/vibrant/neon/CHANGELOG.md b/palettes/vibrant/neon/CHANGELOG.md new file mode 100644 index 00000000000..71fc9b9226d --- /dev/null +++ b/palettes/vibrant/neon/CHANGELOG.md @@ -0,0 +1,16 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-vibrant-neon + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-vibrant-neon + +# 4.0.0-beta.0 (2026-04-08) + +**Note:** Version bump only for package @tsparticles/palette-vibrant-neon diff --git a/palettes/vibrant/neon/LICENSE b/palettes/vibrant/neon/LICENSE new file mode 100644 index 00000000000..bdc05f528fa --- /dev/null +++ b/palettes/vibrant/neon/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/palettes/vibrant/neon/README.md b/palettes/vibrant/neon/README.md new file mode 100644 index 00000000000..fc0a81bedd2 --- /dev/null +++ b/palettes/vibrant/neon/README.md @@ -0,0 +1,203 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Neon Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-neon/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-neon) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-neon.svg)](https://www.npmjs.com/package/@tsparticles/palette-neon) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-neon) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/vibrant/neon/images/sample.png)](https://particles.js.org/samples/palettes/neon) + +## Colors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ #1A1000 +
+
+ #3A2200 +
+
+ #6B3D00 +
+
+ #A65A00 +
+
+ #D98A1A +
+
+ #FFC266 +
+
+ #090500 +
+
+ #0A0E27 +
+
+ #00FF00 +
+
+ #00FFFF +
+
+ #FF00FF +
+
+ #FFFF00 +
+
+ #FF0080 +
+
+ #00FF80 +
+
+ #FFA500 +
+
+ #FFEFD7 +
+
+ #000000 +
+
+ #FFFFFF +
+
+ #F5F5F5 +
+
+ #1E1E1E +
+
+ #252525 +
+
+ #E0E0E0 +
+
+ #A0A0A0 +
+
+ #404040 +
+
+ #1D3557 +
+
+ Background
+ #1A1000 +
+ Blend mode: source-over | Fill: true +
+## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadNeonPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadNeonPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "neon", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadNeonPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/vibrant/vibrantRetro/eslint.config.js b/palettes/vibrant/neon/eslint.config.js similarity index 100% rename from palettes/vibrant/vibrantRetro/eslint.config.js rename to palettes/vibrant/neon/eslint.config.js diff --git a/palettes/vibrant/vibrantNeon/images/sample.png b/palettes/vibrant/neon/images/sample.png similarity index 100% rename from palettes/vibrant/vibrantNeon/images/sample.png rename to palettes/vibrant/neon/images/sample.png diff --git a/palettes/vibrant/neon/package.dist.json b/palettes/vibrant/neon/package.dist.json new file mode 100644 index 00000000000..54a40f2ee70 --- /dev/null +++ b/palettes/vibrant/neon/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-vibrant-neon", + "version": "4.0.0-beta.15", + "description": "tsParticles vibrant neon palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/vibrant/neon" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/vibrant/neon/package.json b/palettes/vibrant/neon/package.json new file mode 100644 index 00000000000..ec2e529ca35 --- /dev/null +++ b/palettes/vibrant/neon/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-vibrant-neon", + "version": "4.0.0-beta.15", + "description": "tsParticles vibrant neon palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/vibrant/neon" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/vibrant/neon/rollup.config.js b/palettes/vibrant/neon/rollup.config.js new file mode 100644 index 00000000000..4d57769a869 --- /dev/null +++ b/palettes/vibrant/neon/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-neon", + paletteName: "Neon Palette", + version, +}); diff --git a/palettes/vibrant/neon/src/browser.ts b/palettes/vibrant/neon/src/browser.ts new file mode 100644 index 00000000000..18f79f1ffed --- /dev/null +++ b/palettes/vibrant/neon/src/browser.ts @@ -0,0 +1,10 @@ +import { loadVibrantNeonPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadVibrantNeonPalette?: typeof loadVibrantNeonPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadVibrantNeonPalette = loadVibrantNeonPalette; + +export * from "./index.js"; diff --git a/palettes/vibrant/neon/src/index.lazy.ts b/palettes/vibrant/neon/src/index.lazy.ts new file mode 100644 index 00000000000..a8f003083ae --- /dev/null +++ b/palettes/vibrant/neon/src/index.lazy.ts @@ -0,0 +1,11 @@ +import { type Engine } from "@tsparticles/engine/lazy"; +const paletteName = "vibrant-neon"; +/** + * @param engine - + */ +export async function loadVibrantNeonPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/vibrant/neon/src/index.ts b/palettes/vibrant/neon/src/index.ts new file mode 100644 index 00000000000..3553c572bc5 --- /dev/null +++ b/palettes/vibrant/neon/src/index.ts @@ -0,0 +1,11 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; +const paletteName = "vibrant-neon"; +/** + * @param engine - + */ +export async function loadVibrantNeonPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/vibrant/vibrantNeon/src/options.ts b/palettes/vibrant/neon/src/options.ts similarity index 100% rename from palettes/vibrant/vibrantNeon/src/options.ts rename to palettes/vibrant/neon/src/options.ts diff --git a/palettes/vibrant/neon/tsconfig.base.json b/palettes/vibrant/neon/tsconfig.base.json new file mode 100644 index 00000000000..deef1f14976 --- /dev/null +++ b/palettes/vibrant/neon/tsconfig.base.json @@ -0,0 +1,10 @@ +{ + "extends": "@tsparticles/tsconfig/dist/tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src" + }, + "include": [ + "./src" + ] +} + diff --git a/palettes/vibrant/vibrantRetro/tsconfig.browser.json b/palettes/vibrant/neon/tsconfig.browser.json similarity index 100% rename from palettes/vibrant/vibrantRetro/tsconfig.browser.json rename to palettes/vibrant/neon/tsconfig.browser.json diff --git a/palettes/vibrant/vibrantRetro/tsconfig.json b/palettes/vibrant/neon/tsconfig.json similarity index 100% rename from palettes/vibrant/vibrantRetro/tsconfig.json rename to palettes/vibrant/neon/tsconfig.json diff --git a/palettes/vibrant/vibrantRetro/tsconfig.module.json b/palettes/vibrant/neon/tsconfig.module.json similarity index 100% rename from palettes/vibrant/vibrantRetro/tsconfig.module.json rename to palettes/vibrant/neon/tsconfig.module.json diff --git a/palettes/vibrant/vibrantRetro/tsconfig.types.json b/palettes/vibrant/neon/tsconfig.types.json similarity index 100% rename from palettes/vibrant/vibrantRetro/tsconfig.types.json rename to palettes/vibrant/neon/tsconfig.types.json diff --git a/palettes/vibrant/neon/typedoc.json b/palettes/vibrant/neon/typedoc.json new file mode 100644 index 00000000000..97477c02dfe --- /dev/null +++ b/palettes/vibrant/neon/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Neon Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/vibrant/retro/.browserslistrc b/palettes/vibrant/retro/.browserslistrc new file mode 100644 index 00000000000..9cce1e55dd9 --- /dev/null +++ b/palettes/vibrant/retro/.browserslistrc @@ -0,0 +1 @@ +extends @tsparticles/browserslist-config diff --git a/palettes/vibrant/retro/CHANGELOG.md b/palettes/vibrant/retro/CHANGELOG.md new file mode 100644 index 00000000000..c5fe6f074a8 --- /dev/null +++ b/palettes/vibrant/retro/CHANGELOG.md @@ -0,0 +1,16 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-vibrant-retro + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-vibrant-retro + +# 4.0.0-beta.0 (2026-04-08) + +**Note:** Version bump only for package @tsparticles/palette-vibrant-retro diff --git a/palettes/vibrant/retro/LICENSE b/palettes/vibrant/retro/LICENSE new file mode 100644 index 00000000000..bdc05f528fa --- /dev/null +++ b/palettes/vibrant/retro/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/palettes/vibrant/retro/README.md b/palettes/vibrant/retro/README.md new file mode 100644 index 00000000000..03ce06d2fc1 --- /dev/null +++ b/palettes/vibrant/retro/README.md @@ -0,0 +1,203 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Retro Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-retro/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-retro) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-retro.svg)](https://www.npmjs.com/package/@tsparticles/palette-retro) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-retro) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/vibrant/retro/images/sample.png)](https://particles.js.org/samples/palettes/retro) + +## Colors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ #1A1000 +
+
+ #3A2200 +
+
+ #6B3D00 +
+
+ #A65A00 +
+
+ #D98A1A +
+
+ #FFC266 +
+
+ #090500 +
+
+ #1A0A2E +
+
+ #FF6B35 +
+
+ #F7931E +
+
+ #FDB833 +
+
+ #C41E3A +
+
+ #8B0000 +
+
+ #FF1744 +
+
+ #FFA500 +
+
+ #FFEFD7 +
+
+ #000000 +
+
+ #FFFFFF +
+
+ #F5F5F5 +
+
+ #1E1E1E +
+
+ #252525 +
+
+ #E0E0E0 +
+
+ #A0A0A0 +
+
+ #404040 +
+
+ #1D3557 +
+
+ Background
+ #1A1000 +
+ Blend mode: source-over | Fill: true +
+## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadRetroPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadRetroPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "retro", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadRetroPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/vibrant/vibrantTropical/eslint.config.js b/palettes/vibrant/retro/eslint.config.js similarity index 100% rename from palettes/vibrant/vibrantTropical/eslint.config.js rename to palettes/vibrant/retro/eslint.config.js diff --git a/palettes/vibrant/vibrantRetro/images/sample.png b/palettes/vibrant/retro/images/sample.png similarity index 100% rename from palettes/vibrant/vibrantRetro/images/sample.png rename to palettes/vibrant/retro/images/sample.png diff --git a/palettes/vibrant/retro/package.dist.json b/palettes/vibrant/retro/package.dist.json new file mode 100644 index 00000000000..d79a4173e24 --- /dev/null +++ b/palettes/vibrant/retro/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-vibrant-retro", + "version": "4.0.0-beta.15", + "description": "tsParticles vibrant retro palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/vibrant/retro" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/vibrant/retro/package.json b/palettes/vibrant/retro/package.json new file mode 100644 index 00000000000..89c8f77e82e --- /dev/null +++ b/palettes/vibrant/retro/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-vibrant-retro", + "version": "4.0.0-beta.15", + "description": "tsParticles vibrant retro palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/vibrant/retro" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/vibrant/retro/rollup.config.js b/palettes/vibrant/retro/rollup.config.js new file mode 100644 index 00000000000..10467330efa --- /dev/null +++ b/palettes/vibrant/retro/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-retro", + paletteName: "Retro Palette", + version, +}); diff --git a/palettes/vibrant/retro/src/browser.ts b/palettes/vibrant/retro/src/browser.ts new file mode 100644 index 00000000000..962350ae52b --- /dev/null +++ b/palettes/vibrant/retro/src/browser.ts @@ -0,0 +1,10 @@ +import { loadVibrantRetroPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadVibrantRetroPalette?: typeof loadVibrantRetroPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadVibrantRetroPalette = loadVibrantRetroPalette; + +export * from "./index.js"; diff --git a/palettes/vibrant/retro/src/index.lazy.ts b/palettes/vibrant/retro/src/index.lazy.ts new file mode 100644 index 00000000000..685ef4397f9 --- /dev/null +++ b/palettes/vibrant/retro/src/index.lazy.ts @@ -0,0 +1,11 @@ +import { type Engine } from "@tsparticles/engine/lazy"; +const paletteName = "vibrant-retro"; +/** + * @param engine - + */ +export async function loadVibrantRetroPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/vibrant/retro/src/index.ts b/palettes/vibrant/retro/src/index.ts new file mode 100644 index 00000000000..09927c2826d --- /dev/null +++ b/palettes/vibrant/retro/src/index.ts @@ -0,0 +1,11 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; +const paletteName = "vibrant-retro"; +/** + * @param engine - + */ +export async function loadVibrantRetroPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/vibrant/vibrantRetro/src/options.ts b/palettes/vibrant/retro/src/options.ts similarity index 100% rename from palettes/vibrant/vibrantRetro/src/options.ts rename to palettes/vibrant/retro/src/options.ts diff --git a/palettes/vibrant/retro/tsconfig.base.json b/palettes/vibrant/retro/tsconfig.base.json new file mode 100644 index 00000000000..deef1f14976 --- /dev/null +++ b/palettes/vibrant/retro/tsconfig.base.json @@ -0,0 +1,10 @@ +{ + "extends": "@tsparticles/tsconfig/dist/tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src" + }, + "include": [ + "./src" + ] +} + diff --git a/palettes/vibrant/vibrantTropical/tsconfig.browser.json b/palettes/vibrant/retro/tsconfig.browser.json similarity index 100% rename from palettes/vibrant/vibrantTropical/tsconfig.browser.json rename to palettes/vibrant/retro/tsconfig.browser.json diff --git a/palettes/vibrant/vibrantTropical/tsconfig.json b/palettes/vibrant/retro/tsconfig.json similarity index 100% rename from palettes/vibrant/vibrantTropical/tsconfig.json rename to palettes/vibrant/retro/tsconfig.json diff --git a/palettes/vibrant/vibrantTropical/tsconfig.module.json b/palettes/vibrant/retro/tsconfig.module.json similarity index 100% rename from palettes/vibrant/vibrantTropical/tsconfig.module.json rename to palettes/vibrant/retro/tsconfig.module.json diff --git a/palettes/vibrant/vibrantTropical/tsconfig.types.json b/palettes/vibrant/retro/tsconfig.types.json similarity index 100% rename from palettes/vibrant/vibrantTropical/tsconfig.types.json rename to palettes/vibrant/retro/tsconfig.types.json diff --git a/palettes/vibrant/retro/typedoc.json b/palettes/vibrant/retro/typedoc.json new file mode 100644 index 00000000000..6192fbe3abb --- /dev/null +++ b/palettes/vibrant/retro/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Retro Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/vibrant/tropical/.browserslistrc b/palettes/vibrant/tropical/.browserslistrc new file mode 100644 index 00000000000..9cce1e55dd9 --- /dev/null +++ b/palettes/vibrant/tropical/.browserslistrc @@ -0,0 +1 @@ +extends @tsparticles/browserslist-config diff --git a/palettes/vibrant/tropical/CHANGELOG.md b/palettes/vibrant/tropical/CHANGELOG.md new file mode 100644 index 00000000000..29a5f912b11 --- /dev/null +++ b/palettes/vibrant/tropical/CHANGELOG.md @@ -0,0 +1,16 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-vibrant-tropical + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-vibrant-tropical + +# 4.0.0-beta.0 (2026-04-08) + +**Note:** Version bump only for package @tsparticles/palette-vibrant-tropical diff --git a/palettes/vibrant/tropical/LICENSE b/palettes/vibrant/tropical/LICENSE new file mode 100644 index 00000000000..bdc05f528fa --- /dev/null +++ b/palettes/vibrant/tropical/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/palettes/vibrant/tropical/README.md b/palettes/vibrant/tropical/README.md new file mode 100644 index 00000000000..91f3ec0af9a --- /dev/null +++ b/palettes/vibrant/tropical/README.md @@ -0,0 +1,203 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Tropical Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-tropical/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-tropical) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-tropical.svg)](https://www.npmjs.com/package/@tsparticles/palette-tropical) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-tropical) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/vibrant/tropical/images/sample.png)](https://particles.js.org/samples/palettes/tropical) + +## Colors + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ #1A1000 +
+
+ #3A2200 +
+
+ #6B3D00 +
+
+ #A65A00 +
+
+ #D98A1A +
+
+ #FFC266 +
+
+ #090500 +
+
+ #001A4D +
+
+ #00D9FF +
+
+ #FF006E +
+
+ #FFBE0B +
+
+ #FB5607 +
+
+ #3A86FF +
+
+ #08F7FE +
+
+ #FFA500 +
+
+ #FFEFD7 +
+
+ #000000 +
+
+ #FFFFFF +
+
+ #F5F5F5 +
+
+ #1E1E1E +
+
+ #252525 +
+
+ #E0E0E0 +
+
+ #A0A0A0 +
+
+ #404040 +
+
+ #1D3557 +
+
+ Background
+ #1A1000 +
+ Blend mode: source-over | Fill: true +
+## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadTropicalPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadTropicalPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "tropical", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadTropicalPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/vibrant/tropical/eslint.config.js b/palettes/vibrant/tropical/eslint.config.js new file mode 100644 index 00000000000..4304e66d2b2 --- /dev/null +++ b/palettes/vibrant/tropical/eslint.config.js @@ -0,0 +1,7 @@ +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; +import { defineConfig } from "eslint/config"; + +export default defineConfig([ + tsParticlesESLintConfig, +]); + diff --git a/palettes/vibrant/vibrantTropical/images/sample.png b/palettes/vibrant/tropical/images/sample.png similarity index 100% rename from palettes/vibrant/vibrantTropical/images/sample.png rename to palettes/vibrant/tropical/images/sample.png diff --git a/palettes/vibrant/tropical/package.dist.json b/palettes/vibrant/tropical/package.dist.json new file mode 100644 index 00000000000..20fac4ae508 --- /dev/null +++ b/palettes/vibrant/tropical/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-vibrant-tropical", + "version": "4.0.0-beta.15", + "description": "tsParticles vibrant tropical palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/vibrant/tropical" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/vibrant/tropical/package.json b/palettes/vibrant/tropical/package.json new file mode 100644 index 00000000000..b9e5f0506f0 --- /dev/null +++ b/palettes/vibrant/tropical/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-vibrant-tropical", + "version": "4.0.0-beta.15", + "description": "tsParticles vibrant tropical palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/vibrant/tropical" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/vibrant/tropical/rollup.config.js b/palettes/vibrant/tropical/rollup.config.js new file mode 100644 index 00000000000..4bb6158ae21 --- /dev/null +++ b/palettes/vibrant/tropical/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-tropical", + paletteName: "Tropical Palette", + version, +}); diff --git a/palettes/vibrant/tropical/src/browser.ts b/palettes/vibrant/tropical/src/browser.ts new file mode 100644 index 00000000000..a1e5944d401 --- /dev/null +++ b/palettes/vibrant/tropical/src/browser.ts @@ -0,0 +1,10 @@ +import { loadVibrantTropicalPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadVibrantTropicalPalette?: typeof loadVibrantTropicalPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadVibrantTropicalPalette = loadVibrantTropicalPalette; + +export * from "./index.js"; diff --git a/palettes/vibrant/tropical/src/index.lazy.ts b/palettes/vibrant/tropical/src/index.lazy.ts new file mode 100644 index 00000000000..d2855c7c1ae --- /dev/null +++ b/palettes/vibrant/tropical/src/index.lazy.ts @@ -0,0 +1,11 @@ +import { type Engine } from "@tsparticles/engine/lazy"; +const paletteName = "vibrant-tropical"; +/** + * @param engine - + */ +export async function loadVibrantTropicalPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/vibrant/tropical/src/index.ts b/palettes/vibrant/tropical/src/index.ts new file mode 100644 index 00000000000..38274d4288e --- /dev/null +++ b/palettes/vibrant/tropical/src/index.ts @@ -0,0 +1,11 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; +const paletteName = "vibrant-tropical"; +/** + * @param engine - + */ +export async function loadVibrantTropicalPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/vibrant/vibrantTropical/src/options.ts b/palettes/vibrant/tropical/src/options.ts similarity index 100% rename from palettes/vibrant/vibrantTropical/src/options.ts rename to palettes/vibrant/tropical/src/options.ts diff --git a/palettes/vibrant/tropical/tsconfig.base.json b/palettes/vibrant/tropical/tsconfig.base.json new file mode 100644 index 00000000000..deef1f14976 --- /dev/null +++ b/palettes/vibrant/tropical/tsconfig.base.json @@ -0,0 +1,10 @@ +{ + "extends": "@tsparticles/tsconfig/dist/tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src" + }, + "include": [ + "./src" + ] +} + diff --git a/palettes/vibrant/tropical/tsconfig.browser.json b/palettes/vibrant/tropical/tsconfig.browser.json new file mode 100644 index 00000000000..824ce17c0fd --- /dev/null +++ b/palettes/vibrant/tropical/tsconfig.browser.json @@ -0,0 +1,7 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.browser.json"], + "compilerOptions": { + "outDir": "./dist/browser" + } +} + diff --git a/palettes/vibrant/tropical/tsconfig.json b/palettes/vibrant/tropical/tsconfig.json new file mode 100644 index 00000000000..d29d546208c --- /dev/null +++ b/palettes/vibrant/tropical/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.json"], + "compilerOptions": { + "outDir": "./dist/cjs" + } +} + diff --git a/palettes/vibrant/tropical/tsconfig.module.json b/palettes/vibrant/tropical/tsconfig.module.json new file mode 100644 index 00000000000..030719f2c21 --- /dev/null +++ b/palettes/vibrant/tropical/tsconfig.module.json @@ -0,0 +1,7 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.module.json"], + "compilerOptions": { + "outDir": "./dist/esm" + } +} + diff --git a/palettes/vibrant/tropical/tsconfig.types.json b/palettes/vibrant/tropical/tsconfig.types.json new file mode 100644 index 00000000000..db4045ffaef --- /dev/null +++ b/palettes/vibrant/tropical/tsconfig.types.json @@ -0,0 +1,7 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.types.json"], + "compilerOptions": { + "outDir": "./dist/types" + } +} + diff --git a/palettes/vibrant/tropical/typedoc.json b/palettes/vibrant/tropical/typedoc.json new file mode 100644 index 00000000000..54ef79d97e3 --- /dev/null +++ b/palettes/vibrant/tropical/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Tropical Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/vibrant/vibrant/CHANGELOG.md b/palettes/vibrant/vibrant/CHANGELOG.md deleted file mode 100644 index 840ea023c32..00000000000 --- a/palettes/vibrant/vibrant/CHANGELOG.md +++ /dev/null @@ -1,12 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-vibrant - -# 4.0.0-beta.0 (2026-04-08) - -**Note:** Version bump only for package @tsparticles/palette-vibrant diff --git a/palettes/vibrant/vibrant/README.md b/palettes/vibrant/vibrant/README.md deleted file mode 100644 index 54dbf700ec8..00000000000 --- a/palettes/vibrant/vibrant/README.md +++ /dev/null @@ -1,44 +0,0 @@ -# tsParticles Vibrant Palette - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for vibrant. - -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadVibrantPalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## Install - -```bash -pnpm add @tsparticles/palette-vibrant -``` - -## Usage - -```ts -import { loadBasic } from "@tsparticles/basic"; -import { tsParticles } from "@tsparticles/engine"; -import { loadVibrantPalette } from "@tsparticles/palette-vibrant"; - -await loadBasic(tsParticles); -await loadVibrantPalette(tsParticles); - -await tsParticles.load({ - id: "tsparticles", - options: { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "vibrant", - }, -}); -``` diff --git a/palettes/vibrant/vibrant/package.dist.json b/palettes/vibrant/vibrant/package.dist.json deleted file mode 100644 index 98f3dd612e8..00000000000 --- a/palettes/vibrant/vibrant/package.dist.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "name": "@tsparticles/palette-vibrant", - "version": "4.0.0-beta.12", - "description": "tsParticles vibrant palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/vibrant/vibrant" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "jsdelivr": "tsparticles.palette-vibrant.min.js", - "unpkg": "tsparticles.palette-vibrant.min.js", - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "publishConfig": { - "access": "public" - }, - "type": "module" -} diff --git a/palettes/vibrant/vibrant/package.json b/palettes/vibrant/vibrant/package.json deleted file mode 100644 index e0bb8470055..00000000000 --- a/palettes/vibrant/vibrant/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-vibrant", - "version": "4.0.0-beta.12", - "description": "tsParticles vibrant palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/vibrant/vibrant" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/vibrant/vibrant/src/index.ts b/palettes/vibrant/vibrant/src/index.ts deleted file mode 100644 index 8c5c997e118..00000000000 --- a/palettes/vibrant/vibrant/src/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; -const paletteName = "vibrant"; -/** - * @param engine - - */ -export async function loadVibrantPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/vibrant/vibrant/typedoc.json b/palettes/vibrant/vibrant/typedoc.json deleted file mode 100644 index 66ebc1156b6..00000000000 --- a/palettes/vibrant/vibrant/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Vibrant Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/vibrant/vibrant/webpack.config.js b/palettes/vibrant/vibrant/webpack.config.js deleted file mode 100644 index 62b328c9f78..00000000000 --- a/palettes/vibrant/vibrant/webpack.config.js +++ /dev/null @@ -1,15 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-vibrant", - paletteName: "Vibrant Palette", - version, -}); diff --git a/palettes/vibrant/vibrantElectric/CHANGELOG.md b/palettes/vibrant/vibrantElectric/CHANGELOG.md deleted file mode 100644 index aaf4d246d2f..00000000000 --- a/palettes/vibrant/vibrantElectric/CHANGELOG.md +++ /dev/null @@ -1,12 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-vibrant-electric - -# 4.0.0-beta.0 (2026-04-08) - -**Note:** Version bump only for package @tsparticles/palette-vibrant-electric diff --git a/palettes/vibrant/vibrantElectric/LICENSE b/palettes/vibrant/vibrantElectric/LICENSE deleted file mode 100644 index 8a7e836f792..00000000000 --- a/palettes/vibrant/vibrantElectric/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -MIT License - -Copyright (c) 2020 Matteo Bruni - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - diff --git a/palettes/vibrant/vibrantElectric/README.md b/palettes/vibrant/vibrantElectric/README.md deleted file mode 100644 index 061e9843d96..00000000000 --- a/palettes/vibrant/vibrantElectric/README.md +++ /dev/null @@ -1,44 +0,0 @@ -# tsParticles Vibrant Electric Palette - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for vibrant electric. - -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadVibrantElectricPalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## Install - -```bash -pnpm add @tsparticles/palette-vibrant-electric -``` - -## Usage - -```ts -import { loadBasic } from "@tsparticles/basic"; -import { tsParticles } from "@tsparticles/engine"; -import { loadVibrantElectricPalette } from "@tsparticles/palette-vibrant-electric"; - -await loadBasic(tsParticles); -await loadVibrantElectricPalette(tsParticles); - -await tsParticles.load({ - id: "tsparticles", - options: { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "vibrant-electric", - }, -}); -``` diff --git a/palettes/vibrant/vibrantElectric/package.dist.json b/palettes/vibrant/vibrantElectric/package.dist.json deleted file mode 100644 index 11882eebe9f..00000000000 --- a/palettes/vibrant/vibrantElectric/package.dist.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "name": "@tsparticles/palette-vibrant-electric", - "version": "4.0.0-beta.12", - "description": "tsParticles vibrant electric palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/vibrant/vibrantElectric" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "jsdelivr": "tsparticles.palette-vibrant-electric.min.js", - "unpkg": "tsparticles.palette-vibrant-electric.min.js", - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "publishConfig": { - "access": "public" - }, - "type": "module" -} diff --git a/palettes/vibrant/vibrantElectric/package.json b/palettes/vibrant/vibrantElectric/package.json deleted file mode 100644 index e704b59b7c4..00000000000 --- a/palettes/vibrant/vibrantElectric/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-vibrant-electric", - "version": "4.0.0-beta.12", - "description": "tsParticles vibrant electric palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/vibrant/vibrantElectric" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/vibrant/vibrantElectric/src/index.ts b/palettes/vibrant/vibrantElectric/src/index.ts deleted file mode 100644 index ee3a0b2aa13..00000000000 --- a/palettes/vibrant/vibrantElectric/src/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; -const paletteName = "vibrant-electric"; -/** - * @param engine - - */ -export async function loadVibrantElectricPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/vibrant/vibrantElectric/typedoc.json b/palettes/vibrant/vibrantElectric/typedoc.json deleted file mode 100644 index 4f72ff29668..00000000000 --- a/palettes/vibrant/vibrantElectric/typedoc.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Vibrant Electric Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} - diff --git a/palettes/vibrant/vibrantElectric/webpack.config.js b/palettes/vibrant/vibrantElectric/webpack.config.js deleted file mode 100644 index 4b78c257fe5..00000000000 --- a/palettes/vibrant/vibrantElectric/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-vibrant-electric", - paletteName: "Vibrant Electric Palette", - version, -}); - diff --git a/palettes/vibrant/vibrantNeon/CHANGELOG.md b/palettes/vibrant/vibrantNeon/CHANGELOG.md deleted file mode 100644 index 4b3493951a6..00000000000 --- a/palettes/vibrant/vibrantNeon/CHANGELOG.md +++ /dev/null @@ -1,12 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-vibrant-neon - -# 4.0.0-beta.0 (2026-04-08) - -**Note:** Version bump only for package @tsparticles/palette-vibrant-neon diff --git a/palettes/vibrant/vibrantNeon/LICENSE b/palettes/vibrant/vibrantNeon/LICENSE deleted file mode 100644 index 8a7e836f792..00000000000 --- a/palettes/vibrant/vibrantNeon/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -MIT License - -Copyright (c) 2020 Matteo Bruni - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - diff --git a/palettes/vibrant/vibrantNeon/README.md b/palettes/vibrant/vibrantNeon/README.md deleted file mode 100644 index 050a0b0e2bf..00000000000 --- a/palettes/vibrant/vibrantNeon/README.md +++ /dev/null @@ -1,44 +0,0 @@ -# tsParticles Vibrant Neon Palette - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for vibrant neon. - -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadVibrantNeonPalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## Install - -```bash -pnpm add @tsparticles/palette-vibrant-neon -``` - -## Usage - -```ts -import { loadBasic } from "@tsparticles/basic"; -import { tsParticles } from "@tsparticles/engine"; -import { loadVibrantNeonPalette } from "@tsparticles/palette-vibrant-neon"; - -await loadBasic(tsParticles); -await loadVibrantNeonPalette(tsParticles); - -await tsParticles.load({ - id: "tsparticles", - options: { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "vibrant-neon", - }, -}); -``` diff --git a/palettes/vibrant/vibrantNeon/package.dist.json b/palettes/vibrant/vibrantNeon/package.dist.json deleted file mode 100644 index 896bad2acda..00000000000 --- a/palettes/vibrant/vibrantNeon/package.dist.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "name": "@tsparticles/palette-vibrant-neon", - "version": "4.0.0-beta.12", - "description": "tsParticles vibrant neon palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/vibrant/vibrantNeon" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "jsdelivr": "tsparticles.palette-vibrant-neon.min.js", - "unpkg": "tsparticles.palette-vibrant-neon.min.js", - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "publishConfig": { - "access": "public" - }, - "type": "module" -} diff --git a/palettes/vibrant/vibrantNeon/package.json b/palettes/vibrant/vibrantNeon/package.json deleted file mode 100644 index 10ff39ea716..00000000000 --- a/palettes/vibrant/vibrantNeon/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-vibrant-neon", - "version": "4.0.0-beta.12", - "description": "tsParticles vibrant neon palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/vibrant/vibrantNeon" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/vibrant/vibrantNeon/src/index.ts b/palettes/vibrant/vibrantNeon/src/index.ts deleted file mode 100644 index e3733564b38..00000000000 --- a/palettes/vibrant/vibrantNeon/src/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; -const paletteName = "vibrant-neon"; -/** - * @param engine - - */ -export async function loadVibrantNeonPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/vibrant/vibrantNeon/typedoc.json b/palettes/vibrant/vibrantNeon/typedoc.json deleted file mode 100644 index 441fb688817..00000000000 --- a/palettes/vibrant/vibrantNeon/typedoc.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Vibrant Neon Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} - diff --git a/palettes/vibrant/vibrantNeon/webpack.config.js b/palettes/vibrant/vibrantNeon/webpack.config.js deleted file mode 100644 index 009321c5c4f..00000000000 --- a/palettes/vibrant/vibrantNeon/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-vibrant-neon", - paletteName: "Vibrant Neon Palette", - version, -}); - diff --git a/palettes/vibrant/vibrantRetro/CHANGELOG.md b/palettes/vibrant/vibrantRetro/CHANGELOG.md deleted file mode 100644 index 4d74668108a..00000000000 --- a/palettes/vibrant/vibrantRetro/CHANGELOG.md +++ /dev/null @@ -1,12 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-vibrant-retro - -# 4.0.0-beta.0 (2026-04-08) - -**Note:** Version bump only for package @tsparticles/palette-vibrant-retro diff --git a/palettes/vibrant/vibrantRetro/LICENSE b/palettes/vibrant/vibrantRetro/LICENSE deleted file mode 100644 index 8a7e836f792..00000000000 --- a/palettes/vibrant/vibrantRetro/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -MIT License - -Copyright (c) 2020 Matteo Bruni - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - diff --git a/palettes/vibrant/vibrantRetro/README.md b/palettes/vibrant/vibrantRetro/README.md deleted file mode 100644 index 895df56bfce..00000000000 --- a/palettes/vibrant/vibrantRetro/README.md +++ /dev/null @@ -1,44 +0,0 @@ -# tsParticles Vibrant Retro Palette - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for vibrant retro. - -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadVibrantRetroPalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## Install - -```bash -pnpm add @tsparticles/palette-vibrant-retro -``` - -## Usage - -```ts -import { loadBasic } from "@tsparticles/basic"; -import { tsParticles } from "@tsparticles/engine"; -import { loadVibrantRetroPalette } from "@tsparticles/palette-vibrant-retro"; - -await loadBasic(tsParticles); -await loadVibrantRetroPalette(tsParticles); - -await tsParticles.load({ - id: "tsparticles", - options: { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "vibrant-retro", - }, -}); -``` diff --git a/palettes/vibrant/vibrantRetro/package.dist.json b/palettes/vibrant/vibrantRetro/package.dist.json deleted file mode 100644 index 0547c98819c..00000000000 --- a/palettes/vibrant/vibrantRetro/package.dist.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "name": "@tsparticles/palette-vibrant-retro", - "version": "4.0.0-beta.12", - "description": "tsParticles vibrant retro palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/vibrant/vibrantRetro" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "jsdelivr": "tsparticles.palette-vibrant-retro.min.js", - "unpkg": "tsparticles.palette-vibrant-retro.min.js", - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "publishConfig": { - "access": "public" - }, - "type": "module" -} diff --git a/palettes/vibrant/vibrantRetro/package.json b/palettes/vibrant/vibrantRetro/package.json deleted file mode 100644 index adbb2f81d6b..00000000000 --- a/palettes/vibrant/vibrantRetro/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-vibrant-retro", - "version": "4.0.0-beta.12", - "description": "tsParticles vibrant retro palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/vibrant/vibrantRetro" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/vibrant/vibrantRetro/src/index.ts b/palettes/vibrant/vibrantRetro/src/index.ts deleted file mode 100644 index 64177d1a0e9..00000000000 --- a/palettes/vibrant/vibrantRetro/src/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; -const paletteName = "vibrant-retro"; -/** - * @param engine - - */ -export async function loadVibrantRetroPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/vibrant/vibrantRetro/typedoc.json b/palettes/vibrant/vibrantRetro/typedoc.json deleted file mode 100644 index 40ac1001e81..00000000000 --- a/palettes/vibrant/vibrantRetro/typedoc.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Vibrant Retro Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} - diff --git a/palettes/vibrant/vibrantRetro/webpack.config.js b/palettes/vibrant/vibrantRetro/webpack.config.js deleted file mode 100644 index 5c6b22e70be..00000000000 --- a/palettes/vibrant/vibrantRetro/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-vibrant-retro", - paletteName: "Vibrant Retro Palette", - version, -}); - diff --git a/palettes/vibrant/vibrantTropical/CHANGELOG.md b/palettes/vibrant/vibrantTropical/CHANGELOG.md deleted file mode 100644 index 2ff7c60ede7..00000000000 --- a/palettes/vibrant/vibrantTropical/CHANGELOG.md +++ /dev/null @@ -1,12 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-vibrant-tropical - -# 4.0.0-beta.0 (2026-04-08) - -**Note:** Version bump only for package @tsparticles/palette-vibrant-tropical diff --git a/palettes/vibrant/vibrantTropical/LICENSE b/palettes/vibrant/vibrantTropical/LICENSE deleted file mode 100644 index 8a7e836f792..00000000000 --- a/palettes/vibrant/vibrantTropical/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -MIT License - -Copyright (c) 2020 Matteo Bruni - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - diff --git a/palettes/vibrant/vibrantTropical/README.md b/palettes/vibrant/vibrantTropical/README.md deleted file mode 100644 index 6cf0b7f5746..00000000000 --- a/palettes/vibrant/vibrantTropical/README.md +++ /dev/null @@ -1,44 +0,0 @@ -# tsParticles Vibrant Tropical Palette - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for vibrant tropical. - -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadVibrantTropicalPalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## Install - -```bash -pnpm add @tsparticles/palette-vibrant-tropical -``` - -## Usage - -```ts -import { loadBasic } from "@tsparticles/basic"; -import { tsParticles } from "@tsparticles/engine"; -import { loadVibrantTropicalPalette } from "@tsparticles/palette-vibrant-tropical"; - -await loadBasic(tsParticles); -await loadVibrantTropicalPalette(tsParticles); - -await tsParticles.load({ - id: "tsparticles", - options: { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "vibrant-tropical", - }, -}); -``` diff --git a/palettes/vibrant/vibrantTropical/package.dist.json b/palettes/vibrant/vibrantTropical/package.dist.json deleted file mode 100644 index f75b2a95ccf..00000000000 --- a/palettes/vibrant/vibrantTropical/package.dist.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "name": "@tsparticles/palette-vibrant-tropical", - "version": "4.0.0-beta.12", - "description": "tsParticles vibrant tropical palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/vibrant/vibrantTropical" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "jsdelivr": "tsparticles.palette-vibrant-tropical.min.js", - "unpkg": "tsparticles.palette-vibrant-tropical.min.js", - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "publishConfig": { - "access": "public" - }, - "type": "module" -} diff --git a/palettes/vibrant/vibrantTropical/package.json b/palettes/vibrant/vibrantTropical/package.json deleted file mode 100644 index d1d2da22abe..00000000000 --- a/palettes/vibrant/vibrantTropical/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-vibrant-tropical", - "version": "4.0.0-beta.12", - "description": "tsParticles vibrant tropical palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/vibrant/vibrantTropical" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/vibrant/vibrantTropical/src/index.ts b/palettes/vibrant/vibrantTropical/src/index.ts deleted file mode 100644 index 659abb0ed02..00000000000 --- a/palettes/vibrant/vibrantTropical/src/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; -const paletteName = "vibrant-tropical"; -/** - * @param engine - - */ -export async function loadVibrantTropicalPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/vibrant/vibrantTropical/typedoc.json b/palettes/vibrant/vibrantTropical/typedoc.json deleted file mode 100644 index 0cfab1c8f6a..00000000000 --- a/palettes/vibrant/vibrantTropical/typedoc.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Vibrant Tropical Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} - diff --git a/palettes/vibrant/vibrantTropical/webpack.config.js b/palettes/vibrant/vibrantTropical/webpack.config.js deleted file mode 100644 index 9620db8b896..00000000000 --- a/palettes/vibrant/vibrantTropical/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-vibrant-tropical", - paletteName: "Vibrant Tropical Palette", - version, -}); - diff --git a/palettes/water/deepOcean/CHANGELOG.md b/palettes/water/deepOcean/CHANGELOG.md index a3f10c09e71..d400eb6d5e4 100644 --- a/palettes/water/deepOcean/CHANGELOG.md +++ b/palettes/water/deepOcean/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-deep-ocean + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-deep-ocean diff --git a/palettes/water/deepOcean/README.md b/palettes/water/deepOcean/README.md index 8570633ac68..f9dca3cb369 100644 --- a/palettes/water/deepOcean/README.md +++ b/palettes/water/deepOcean/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Deep Ocean Palette +# tsParticles DeepOcean Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-deep-ocean/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-deep-ocean) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-deep-ocean.svg)](https://www.npmjs.com/package/@tsparticles/palette-deep-ocean) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-deep-ocean)](https://www.npmjs.com/package/@tsparticles/palette-deep-ocean) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-deepOcean/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-deepOcean) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-deepOcean.svg)](https://www.npmjs.com/package/@tsparticles/palette-deepOcean) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-deepOcean) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for deep ocean. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/deepOcean/images/sample.png)](https://particles.js.org/samples/palettes/deep-ocean) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/water/deepOcean/images/sample.png)](https://particles.js.org/samples/palettes/deepOcean) ## Colors @@ -109,7 +109,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -131,7 +131,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "deep-ocean", + palette: "deepOcean", }; await engine.load({ @@ -146,47 +146,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "deep-ocean", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadDeepOceanPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadDeepOceanPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadDeepOceanPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -padeepOcean[Deep Ocean] -end - -e[tsParticles Engine] --> padeepOcean -``` diff --git a/palettes/water/deepOcean/package.dist.json b/palettes/water/deepOcean/package.dist.json index 833613eff29..7dbc9819b88 100644 --- a/palettes/water/deepOcean/package.dist.json +++ b/palettes/water/deepOcean/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-deep-ocean", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles deep ocean palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.deep-ocean.min.js", - "unpkg": "tsparticles.palette.deep-ocean.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/water/deepOcean/package.json b/palettes/water/deepOcean/package.json index 27291ab3b73..ce05fa4fa0b 100644 --- a/palettes/water/deepOcean/package.json +++ b/palettes/water/deepOcean/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-deep-ocean", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles deep ocean palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/water/deepOcean/rollup.config.js b/palettes/water/deepOcean/rollup.config.js new file mode 100644 index 00000000000..25d1c9b9276 --- /dev/null +++ b/palettes/water/deepOcean/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-deepOcean", + paletteName: "DeepOcean Palette", + version, +}); diff --git a/palettes/water/deepOcean/src/browser.ts b/palettes/water/deepOcean/src/browser.ts new file mode 100644 index 00000000000..0a071237af5 --- /dev/null +++ b/palettes/water/deepOcean/src/browser.ts @@ -0,0 +1,10 @@ +import { loadDeepOceanPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadDeepOceanPalette?: typeof loadDeepOceanPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadDeepOceanPalette = loadDeepOceanPalette; + +export * from "./index.js"; diff --git a/palettes/water/deepOcean/src/index.lazy.ts b/palettes/water/deepOcean/src/index.lazy.ts new file mode 100644 index 00000000000..9236e90e16c --- /dev/null +++ b/palettes/water/deepOcean/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "deep-ocean"; + +/** + * @param engine - + */ +export async function loadDeepOceanPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/water/deepOcean/src/index.ts b/palettes/water/deepOcean/src/index.ts index c7d0fcd63a6..25475e38898 100644 --- a/palettes/water/deepOcean/src/index.ts +++ b/palettes/water/deepOcean/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "deep-ocean"; @@ -6,9 +7,7 @@ const paletteName = "deep-ocean"; * @param engine - */ export async function loadDeepOceanPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/water/deepOcean/typedoc.json b/palettes/water/deepOcean/typedoc.json index 897186c5c38..36da9144716 100644 --- a/palettes/water/deepOcean/typedoc.json +++ b/palettes/water/deepOcean/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Deep Ocean Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles DeepOcean Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/water/deepOcean/webpack.config.js b/palettes/water/deepOcean/webpack.config.js deleted file mode 100644 index b041138b6e9..00000000000 --- a/palettes/water/deepOcean/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-deep-ocean", - paletteName: "Deep Ocean Palette", - version, -}); diff --git a/palettes/water/default/.browserslistrc b/palettes/water/default/.browserslistrc new file mode 100644 index 00000000000..9cce1e55dd9 --- /dev/null +++ b/palettes/water/default/.browserslistrc @@ -0,0 +1 @@ +extends @tsparticles/browserslist-config diff --git a/palettes/water/default/CHANGELOG.md b/palettes/water/default/CHANGELOG.md new file mode 100644 index 00000000000..6c326e9f42c --- /dev/null +++ b/palettes/water/default/CHANGELOG.md @@ -0,0 +1,20 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-water + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-water + +# 4.0.0-beta.0 (2026-04-08) + +**Note:** Version bump only for package @tsparticles/palette-water + +# [4.0.0-alpha.5](https://github.com/tsparticles/palettes/compare/v4.0.0-alpha.4...v4.0.0-alpha.5) (2026-03-31) + +**Note:** Version bump only for package @tsparticles/palette-water diff --git a/palettes/water/default/LICENSE b/palettes/water/default/LICENSE new file mode 100644 index 00000000000..bdc05f528fa --- /dev/null +++ b/palettes/water/default/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/palettes/water/default/README.md b/palettes/water/default/README.md new file mode 100644 index 00000000000..bb9f660a988 --- /dev/null +++ b/palettes/water/default/README.md @@ -0,0 +1,130 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Default Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-default/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-default) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-default.svg)](https://www.npmjs.com/package/@tsparticles/palette-default) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-default) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/water/default/images/sample.png)](https://particles.js.org/samples/palettes/default) + +## Colors + + + + + + + + + + + + + + + + + + + + + + +
+
+ #FFFFFF +
+
+ #DDEEFF +
+
+ #AADDFF +
+
+ #55AAFF +
+
+ #0077FF +
+
+ #0044CC +
+
+ #002299 +
+
+ #001166 +
+
+ Background
+ #001428 +
+ Blend mode: source-over | Fill: true +
+ +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadDefaultPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadDefaultPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "default", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadDefaultPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/water/water/eslint.config.js b/palettes/water/default/eslint.config.js similarity index 100% rename from palettes/water/water/eslint.config.js rename to palettes/water/default/eslint.config.js diff --git a/palettes/water/water/images/sample.png b/palettes/water/default/images/sample.png similarity index 100% rename from palettes/water/water/images/sample.png rename to palettes/water/default/images/sample.png diff --git a/palettes/water/water/images/water.png b/palettes/water/default/images/water.png similarity index 100% rename from palettes/water/water/images/water.png rename to palettes/water/default/images/water.png diff --git a/palettes/water/default/package.dist.json b/palettes/water/default/package.dist.json new file mode 100644 index 00000000000..3c18e5dda11 --- /dev/null +++ b/palettes/water/default/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-water", + "version": "4.0.0-beta.15", + "description": "tsParticles water - full palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/water/default" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/water/default/package.json b/palettes/water/default/package.json new file mode 100644 index 00000000000..026232c7388 --- /dev/null +++ b/palettes/water/default/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-water", + "version": "4.0.0-beta.15", + "description": "tsParticles water - full palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/water/default" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/water/default/rollup.config.js b/palettes/water/default/rollup.config.js new file mode 100644 index 00000000000..378de5b5479 --- /dev/null +++ b/palettes/water/default/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-default", + paletteName: "Default Palette", + version, +}); diff --git a/palettes/water/default/src/browser.ts b/palettes/water/default/src/browser.ts new file mode 100644 index 00000000000..a1741e6be1e --- /dev/null +++ b/palettes/water/default/src/browser.ts @@ -0,0 +1,10 @@ +import { loadWaterPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadWaterPalette?: typeof loadWaterPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadWaterPalette = loadWaterPalette; + +export * from "./index.js"; diff --git a/palettes/water/default/src/index.lazy.ts b/palettes/water/default/src/index.lazy.ts new file mode 100644 index 00000000000..b1bafdef964 --- /dev/null +++ b/palettes/water/default/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "water"; + +/** + * @param engine - + */ +export async function loadWaterPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/water/default/src/index.ts b/palettes/water/default/src/index.ts new file mode 100644 index 00000000000..41136ab19e7 --- /dev/null +++ b/palettes/water/default/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "water"; + +/** + * @param engine - + */ +export async function loadWaterPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/water/water/src/options.ts b/palettes/water/default/src/options.ts similarity index 100% rename from palettes/water/water/src/options.ts rename to palettes/water/default/src/options.ts diff --git a/palettes/water/default/tsconfig.base.json b/palettes/water/default/tsconfig.base.json new file mode 100644 index 00000000000..2b489b6aa1c --- /dev/null +++ b/palettes/water/default/tsconfig.base.json @@ -0,0 +1,9 @@ +{ + "extends": "@tsparticles/tsconfig/dist/tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src" + }, + "include": [ + "./src" + ] +} diff --git a/palettes/water/waterSplash/tsconfig.browser.json b/palettes/water/default/tsconfig.browser.json similarity index 100% rename from palettes/water/waterSplash/tsconfig.browser.json rename to palettes/water/default/tsconfig.browser.json diff --git a/palettes/water/waterSplash/tsconfig.json b/palettes/water/default/tsconfig.json similarity index 100% rename from palettes/water/waterSplash/tsconfig.json rename to palettes/water/default/tsconfig.json diff --git a/palettes/water/waterSplash/tsconfig.module.json b/palettes/water/default/tsconfig.module.json similarity index 100% rename from palettes/water/waterSplash/tsconfig.module.json rename to palettes/water/default/tsconfig.module.json diff --git a/palettes/water/waterSplash/tsconfig.types.json b/palettes/water/default/tsconfig.types.json similarity index 100% rename from palettes/water/waterSplash/tsconfig.types.json rename to palettes/water/default/tsconfig.types.json diff --git a/palettes/water/default/typedoc.json b/palettes/water/default/typedoc.json new file mode 100644 index 00000000000..64d1b3874a9 --- /dev/null +++ b/palettes/water/default/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Default Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/water/foamAndBubbles/CHANGELOG.md b/palettes/water/foamAndBubbles/CHANGELOG.md index d8d36137f6c..acd3a8b74f9 100644 --- a/palettes/water/foamAndBubbles/CHANGELOG.md +++ b/palettes/water/foamAndBubbles/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-foam-and-bubbles + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-foam-and-bubbles diff --git a/palettes/water/foamAndBubbles/README.md b/palettes/water/foamAndBubbles/README.md index bd36c782398..67f74a8cad8 100644 --- a/palettes/water/foamAndBubbles/README.md +++ b/palettes/water/foamAndBubbles/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Foam & Bubbles Palette +# tsParticles FoamAndBubbles Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-foam-and-bubbles/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-foam-and-bubbles) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-foam-and-bubbles.svg)](https://www.npmjs.com/package/@tsparticles/palette-foam-and-bubbles) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-foam-and-bubbles)](https://www.npmjs.com/package/@tsparticles/palette-foam-and-bubbles) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-foamAndBubbles/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-foamAndBubbles) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-foamAndBubbles.svg)](https://www.npmjs.com/package/@tsparticles/palette-foamAndBubbles) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-foamAndBubbles) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for foam & bubbles. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/foamAndBubbles/images/sample.png)](https://particles.js.org/samples/palettes/foam-and-bubbles) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/water/foamAndBubbles/images/sample.png)](https://particles.js.org/samples/palettes/foamAndBubbles) ## Colors @@ -75,7 +75,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -97,7 +97,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "foam-and-bubbles", + palette: "foamAndBubbles", }; await engine.load({ @@ -112,47 +112,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "foam-and-bubbles", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadFoamAndBubblesPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadFoamAndBubblesPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadFoamAndBubblesPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -pafoamAndBubbles[Foam & Bubbles] -end - -e[tsParticles Engine] --> pafoamAndBubbles -``` diff --git a/palettes/water/foamAndBubbles/package.dist.json b/palettes/water/foamAndBubbles/package.dist.json index 23173f59230..7c45f301a6d 100644 --- a/palettes/water/foamAndBubbles/package.dist.json +++ b/palettes/water/foamAndBubbles/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-foam-and-bubbles", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles foam & bubbles palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.foam-and-bubbles.min.js", - "unpkg": "tsparticles.palette.foam-and-bubbles.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/water/foamAndBubbles/package.json b/palettes/water/foamAndBubbles/package.json index 734afcda3d0..600e46a1292 100644 --- a/palettes/water/foamAndBubbles/package.json +++ b/palettes/water/foamAndBubbles/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-foam-and-bubbles", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles foam & bubbles palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/water/foamAndBubbles/rollup.config.js b/palettes/water/foamAndBubbles/rollup.config.js new file mode 100644 index 00000000000..5fc4d8fdb88 --- /dev/null +++ b/palettes/water/foamAndBubbles/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-foamAndBubbles", + paletteName: "FoamAndBubbles Palette", + version, +}); diff --git a/palettes/water/foamAndBubbles/src/browser.ts b/palettes/water/foamAndBubbles/src/browser.ts new file mode 100644 index 00000000000..dc5d624c319 --- /dev/null +++ b/palettes/water/foamAndBubbles/src/browser.ts @@ -0,0 +1,10 @@ +import { loadFoamAndBubblesPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadFoamAndBubblesPalette?: typeof loadFoamAndBubblesPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadFoamAndBubblesPalette = loadFoamAndBubblesPalette; + +export * from "./index.js"; diff --git a/palettes/water/foamAndBubbles/src/index.lazy.ts b/palettes/water/foamAndBubbles/src/index.lazy.ts new file mode 100644 index 00000000000..6d1d8074b95 --- /dev/null +++ b/palettes/water/foamAndBubbles/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "foam-and-bubbles"; + +/** + * @param engine - + */ +export async function loadFoamAndBubblesPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/water/foamAndBubbles/src/index.ts b/palettes/water/foamAndBubbles/src/index.ts index 7ced70b865c..7706132c0d8 100644 --- a/palettes/water/foamAndBubbles/src/index.ts +++ b/palettes/water/foamAndBubbles/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "foam-and-bubbles"; @@ -6,9 +7,7 @@ const paletteName = "foam-and-bubbles"; * @param engine - */ export async function loadFoamAndBubblesPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/water/foamAndBubbles/typedoc.json b/palettes/water/foamAndBubbles/typedoc.json index e201aecb1b2..e43441f1176 100644 --- a/palettes/water/foamAndBubbles/typedoc.json +++ b/palettes/water/foamAndBubbles/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Foam & Bubbles Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles FoamAndBubbles Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/water/foamAndBubbles/webpack.config.js b/palettes/water/foamAndBubbles/webpack.config.js deleted file mode 100644 index 26f36213e2a..00000000000 --- a/palettes/water/foamAndBubbles/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-foam-and-bubbles", - paletteName: "Foam & Bubbles Palette", - version, -}); diff --git a/palettes/water/fogCoastal/CHANGELOG.md b/palettes/water/fogCoastal/CHANGELOG.md index debf233ba85..d6cdfd2e7fe 100644 --- a/palettes/water/fogCoastal/CHANGELOG.md +++ b/palettes/water/fogCoastal/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-fog-coastal + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-fog-coastal diff --git a/palettes/water/fogCoastal/README.md b/palettes/water/fogCoastal/README.md index 0ca43da268a..b5a3e1b300b 100644 --- a/palettes/water/fogCoastal/README.md +++ b/palettes/water/fogCoastal/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Fog Coastal Palette +# tsParticles FogCoastal Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-fog-coastal/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-fog-coastal) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-fog-coastal.svg)](https://www.npmjs.com/package/@tsparticles/palette-fog-coastal) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-fog-coastal)](https://www.npmjs.com/package/@tsparticles/palette-fog-coastal) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-fogCoastal/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-fogCoastal) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-fogCoastal.svg)](https://www.npmjs.com/package/@tsparticles/palette-fogCoastal) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-fogCoastal) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for fog - coastal. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/fogCoastal/images/sample.png)](https://particles.js.org/samples/palettes/fog-coastal) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/water/fogCoastal/images/sample.png)](https://particles.js.org/samples/palettes/fogCoastal) ## Colors @@ -69,7 +69,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -91,7 +91,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "fog-coastal", + palette: "fogCoastal", }; await engine.load({ @@ -106,47 +106,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "fog-coastal", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadFogCoastalPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadFogCoastalPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadFogCoastalPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -pafogCoastal[Fog Coastal] -end - -e[tsParticles Engine] --> pafogCoastal -``` diff --git a/palettes/water/fogCoastal/package.dist.json b/palettes/water/fogCoastal/package.dist.json index 32e58e2bb48..179ea3b8ca7 100644 --- a/palettes/water/fogCoastal/package.dist.json +++ b/palettes/water/fogCoastal/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-fog-coastal", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles fog - coastal palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.fog-coastal.min.js", - "unpkg": "tsparticles.palette.fog-coastal.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/water/fogCoastal/package.json b/palettes/water/fogCoastal/package.json index a4a3f7d3c0c..ed8147f3066 100644 --- a/palettes/water/fogCoastal/package.json +++ b/palettes/water/fogCoastal/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-fog-coastal", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles fog - coastal palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/water/fogCoastal/rollup.config.js b/palettes/water/fogCoastal/rollup.config.js new file mode 100644 index 00000000000..d6b178eba35 --- /dev/null +++ b/palettes/water/fogCoastal/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-fogCoastal", + paletteName: "FogCoastal Palette", + version, +}); diff --git a/palettes/water/fogCoastal/src/browser.ts b/palettes/water/fogCoastal/src/browser.ts new file mode 100644 index 00000000000..2668d2d6229 --- /dev/null +++ b/palettes/water/fogCoastal/src/browser.ts @@ -0,0 +1,10 @@ +import { loadFogCoastalPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadFogCoastalPalette?: typeof loadFogCoastalPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadFogCoastalPalette = loadFogCoastalPalette; + +export * from "./index.js"; diff --git a/palettes/water/fogCoastal/src/index.lazy.ts b/palettes/water/fogCoastal/src/index.lazy.ts new file mode 100644 index 00000000000..4680d1cd5d6 --- /dev/null +++ b/palettes/water/fogCoastal/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "fog-coastal"; + +/** + * @param engine - + */ +export async function loadFogCoastalPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/water/fogCoastal/src/index.ts b/palettes/water/fogCoastal/src/index.ts index a073a332d6b..1d4b6260821 100644 --- a/palettes/water/fogCoastal/src/index.ts +++ b/palettes/water/fogCoastal/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "fog-coastal"; @@ -6,9 +7,7 @@ const paletteName = "fog-coastal"; * @param engine - */ export async function loadFogCoastalPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/water/fogCoastal/typedoc.json b/palettes/water/fogCoastal/typedoc.json index 802b49cb3eb..784a392a4be 100644 --- a/palettes/water/fogCoastal/typedoc.json +++ b/palettes/water/fogCoastal/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Fog Coastal Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles FogCoastal Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/water/fogCoastal/webpack.config.js b/palettes/water/fogCoastal/webpack.config.js deleted file mode 100644 index daaad6ab53f..00000000000 --- a/palettes/water/fogCoastal/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-fog-coastal", - paletteName: "Fog Coastal Palette", - version, -}); diff --git a/palettes/water/inkInWater/CHANGELOG.md b/palettes/water/inkInWater/CHANGELOG.md index 409212b4411..aef405cd69a 100644 --- a/palettes/water/inkInWater/CHANGELOG.md +++ b/palettes/water/inkInWater/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-ink-in-water + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-ink-in-water diff --git a/palettes/water/inkInWater/README.md b/palettes/water/inkInWater/README.md index 5c14069a34c..e391a81c967 100644 --- a/palettes/water/inkInWater/README.md +++ b/palettes/water/inkInWater/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Ink in Water Palette +# tsParticles InkInWater Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-ink-in-water/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-ink-in-water) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-ink-in-water.svg)](https://www.npmjs.com/package/@tsparticles/palette-ink-in-water) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-ink-in-water)](https://www.npmjs.com/package/@tsparticles/palette-ink-in-water) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-inkInWater/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-inkInWater) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-inkInWater.svg)](https://www.npmjs.com/package/@tsparticles/palette-inkInWater) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-inkInWater) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for ink in water. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/inkInWater/images/sample.png)](https://particles.js.org/samples/palettes/ink-in-water) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/water/inkInWater/images/sample.png)](https://particles.js.org/samples/palettes/inkInWater) ## Colors @@ -79,7 +79,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -101,7 +101,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "ink-in-water", + palette: "inkInWater", }; await engine.load({ @@ -116,47 +116,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "ink-in-water", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadInkInWaterPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadInkInWaterPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadInkInWaterPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -painkInWater[Ink in Water] -end - -e[tsParticles Engine] --> painkInWater -``` diff --git a/palettes/water/inkInWater/package.dist.json b/palettes/water/inkInWater/package.dist.json index 3c92c49bcc0..102648e8be8 100644 --- a/palettes/water/inkInWater/package.dist.json +++ b/palettes/water/inkInWater/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-ink-in-water", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles ink in water palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.ink-in-water.min.js", - "unpkg": "tsparticles.palette.ink-in-water.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/water/inkInWater/package.json b/palettes/water/inkInWater/package.json index 2c836ed4cda..80081f4138a 100644 --- a/palettes/water/inkInWater/package.json +++ b/palettes/water/inkInWater/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-ink-in-water", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles ink in water palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/water/inkInWater/rollup.config.js b/palettes/water/inkInWater/rollup.config.js new file mode 100644 index 00000000000..e448f4f8d01 --- /dev/null +++ b/palettes/water/inkInWater/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-inkInWater", + paletteName: "InkInWater Palette", + version, +}); diff --git a/palettes/water/inkInWater/src/browser.ts b/palettes/water/inkInWater/src/browser.ts new file mode 100644 index 00000000000..f25ba47fe61 --- /dev/null +++ b/palettes/water/inkInWater/src/browser.ts @@ -0,0 +1,10 @@ +import { loadInkInWaterPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadInkInWaterPalette?: typeof loadInkInWaterPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadInkInWaterPalette = loadInkInWaterPalette; + +export * from "./index.js"; diff --git a/palettes/water/inkInWater/src/index.lazy.ts b/palettes/water/inkInWater/src/index.lazy.ts new file mode 100644 index 00000000000..cfe34b641be --- /dev/null +++ b/palettes/water/inkInWater/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "ink-in-water"; + +/** + * @param engine - + */ +export async function loadInkInWaterPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/water/inkInWater/src/index.ts b/palettes/water/inkInWater/src/index.ts index 452f3e6d532..b6fca4642fe 100644 --- a/palettes/water/inkInWater/src/index.ts +++ b/palettes/water/inkInWater/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "ink-in-water"; @@ -6,9 +7,7 @@ const paletteName = "ink-in-water"; * @param engine - */ export async function loadInkInWaterPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/water/inkInWater/typedoc.json b/palettes/water/inkInWater/typedoc.json index cbb9efebde7..39ab46e0b44 100644 --- a/palettes/water/inkInWater/typedoc.json +++ b/palettes/water/inkInWater/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Ink in Water Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles InkInWater Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/water/inkInWater/webpack.config.js b/palettes/water/inkInWater/webpack.config.js deleted file mode 100644 index 60a63223856..00000000000 --- a/palettes/water/inkInWater/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-ink-in-water", - paletteName: "Ink in Water Palette", - version, -}); diff --git a/palettes/water/lagoon/.browserslistrc b/palettes/water/lagoon/.browserslistrc new file mode 100644 index 00000000000..9cce1e55dd9 --- /dev/null +++ b/palettes/water/lagoon/.browserslistrc @@ -0,0 +1 @@ +extends @tsparticles/browserslist-config diff --git a/palettes/water/lagoon/CHANGELOG.md b/palettes/water/lagoon/CHANGELOG.md new file mode 100644 index 00000000000..66e4fd90bfc --- /dev/null +++ b/palettes/water/lagoon/CHANGELOG.md @@ -0,0 +1,12 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-lagoon + +# [4.0.0-beta.12] + +**Note:** Initial version of package @tsparticles/palette-lagoon diff --git a/palettes/water/lagoon/LICENSE b/palettes/water/lagoon/LICENSE new file mode 100644 index 00000000000..bdc05f528fa --- /dev/null +++ b/palettes/water/lagoon/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/palettes/water/lagoon/README.md b/palettes/water/lagoon/README.md new file mode 100644 index 00000000000..027aecae497 --- /dev/null +++ b/palettes/water/lagoon/README.md @@ -0,0 +1,130 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Lagoon Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-lagoon/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-lagoon) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-lagoon.svg)](https://www.npmjs.com/package/@tsparticles/palette-lagoon) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-lagoon) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/water/lagoon/images/sample.png)](https://particles.js.org/samples/palettes/lagoon) + +## Colors + + + + + + + + + + + + + + + + + + + + + + +
+
+ #E8FFFE +
+
+ #B8FFF5 +
+
+ #72F2E5 +
+
+ #33D6C5 +
+
+ #00B8A9 +
+
+ #008C95 +
+
+ #006C7A +
+
+ #004B5A +
+
+ Background
+ #001a1f +
+ Blend mode: source-over | Fill: true +
+ +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadLagoonPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadLagoonPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "lagoon", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadLagoonPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/water/lagoon/eslint.config.js b/palettes/water/lagoon/eslint.config.js new file mode 100644 index 00000000000..248b4d3dd36 --- /dev/null +++ b/palettes/water/lagoon/eslint.config.js @@ -0,0 +1,6 @@ +import tsParticlesESLintConfig from "@tsparticles/eslint-config"; +import { defineConfig } from "eslint/config"; + +export default defineConfig([ + tsParticlesESLintConfig, +]); diff --git a/palettes/water/lagoon/images/sample.png b/palettes/water/lagoon/images/sample.png new file mode 100644 index 00000000000..4070920f794 Binary files /dev/null and b/palettes/water/lagoon/images/sample.png differ diff --git a/palettes/water/lagoon/package.dist.json b/palettes/water/lagoon/package.dist.json new file mode 100644 index 00000000000..853f5fd1c7b --- /dev/null +++ b/palettes/water/lagoon/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-lagoon", + "version": "4.0.0-beta.15", + "description": "tsParticles lagoon palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/water/lagoon" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/water/lagoon/package.json b/palettes/water/lagoon/package.json new file mode 100644 index 00000000000..8a8a64fbc07 --- /dev/null +++ b/palettes/water/lagoon/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-lagoon", + "version": "4.0.0-beta.15", + "description": "tsParticles lagoon palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/water/lagoon" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/water/lagoon/rollup.config.js b/palettes/water/lagoon/rollup.config.js new file mode 100644 index 00000000000..7ac2547be5c --- /dev/null +++ b/palettes/water/lagoon/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-lagoon", + paletteName: "Lagoon Palette", + version, +}); diff --git a/palettes/water/lagoon/src/browser.ts b/palettes/water/lagoon/src/browser.ts new file mode 100644 index 00000000000..aa3601b2701 --- /dev/null +++ b/palettes/water/lagoon/src/browser.ts @@ -0,0 +1,10 @@ +import { loadLagoonPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadLagoonPalette?: typeof loadLagoonPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadLagoonPalette = loadLagoonPalette; + +export * from "./index.js"; diff --git a/palettes/water/lagoon/src/index.lazy.ts b/palettes/water/lagoon/src/index.lazy.ts new file mode 100644 index 00000000000..867e837863a --- /dev/null +++ b/palettes/water/lagoon/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "lagoon"; + +/** + * @param engine - + */ +export async function loadLagoonPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/water/lagoon/src/index.ts b/palettes/water/lagoon/src/index.ts new file mode 100644 index 00000000000..88a4e268d6e --- /dev/null +++ b/palettes/water/lagoon/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "lagoon"; + +/** + * @param engine - + */ +export async function loadLagoonPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/water/lagoon/src/options.ts b/palettes/water/lagoon/src/options.ts new file mode 100644 index 00000000000..daa84f15b2b --- /dev/null +++ b/palettes/water/lagoon/src/options.ts @@ -0,0 +1,22 @@ +import { type IPalette } from "@tsparticles/engine"; + +export const options: IPalette = { + name: "Lagoon", + background: "#001a1f", + blendMode: "source-over", + colors: { + fill: { + enable: true, + value: [ + "#E8FFFE", + "#B8FFF5", + "#72F2E5", + "#33D6C5", + "#00B8A9", + "#008C95", + "#006C7A", + "#004B5A", + ], + }, + }, +}; diff --git a/palettes/water/lagoon/tsconfig.base.json b/palettes/water/lagoon/tsconfig.base.json new file mode 100644 index 00000000000..2b489b6aa1c --- /dev/null +++ b/palettes/water/lagoon/tsconfig.base.json @@ -0,0 +1,9 @@ +{ + "extends": "@tsparticles/tsconfig/dist/tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src" + }, + "include": [ + "./src" + ] +} diff --git a/palettes/water/lagoon/tsconfig.browser.json b/palettes/water/lagoon/tsconfig.browser.json new file mode 100644 index 00000000000..80d78351a7d --- /dev/null +++ b/palettes/water/lagoon/tsconfig.browser.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.browser.json"], + "compilerOptions": { + "outDir": "./dist/browser" + } +} diff --git a/palettes/water/lagoon/tsconfig.json b/palettes/water/lagoon/tsconfig.json new file mode 100644 index 00000000000..630bf828704 --- /dev/null +++ b/palettes/water/lagoon/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.json"], + "compilerOptions": { + "outDir": "./dist/cjs" + } +} diff --git a/palettes/water/lagoon/tsconfig.module.json b/palettes/water/lagoon/tsconfig.module.json new file mode 100644 index 00000000000..bb5035a8403 --- /dev/null +++ b/palettes/water/lagoon/tsconfig.module.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.module.json"], + "compilerOptions": { + "outDir": "./dist/esm" + } +} diff --git a/palettes/water/lagoon/tsconfig.types.json b/palettes/water/lagoon/tsconfig.types.json new file mode 100644 index 00000000000..570e9e9d8c6 --- /dev/null +++ b/palettes/water/lagoon/tsconfig.types.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.types.json"], + "compilerOptions": { + "outDir": "./dist/types" + } +} diff --git a/palettes/water/lagoon/typedoc.json b/palettes/water/lagoon/typedoc.json new file mode 100644 index 00000000000..cdac46ea1b0 --- /dev/null +++ b/palettes/water/lagoon/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Lagoon Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/water/rain/CHANGELOG.md b/palettes/water/rain/CHANGELOG.md index 349b3de1690..b5a8f6694e9 100644 --- a/palettes/water/rain/CHANGELOG.md +++ b/palettes/water/rain/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-rain + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-rain diff --git a/palettes/water/rain/README.md b/palettes/water/rain/README.md index 6285ebba03e..21227401c7b 100644 --- a/palettes/water/rain/README.md +++ b/palettes/water/rain/README.md @@ -2,9 +2,9 @@ # tsParticles Rain Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-rain/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-rain) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-rain.svg)](https://www.npmjs.com/package/@tsparticles/palette-rain) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-rain)](https://www.npmjs.com/package/@tsparticles/palette-rain) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-rain/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-rain) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-rain.svg)](https://www.npmjs.com/package/@tsparticles/palette-rain) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-rain) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for rain. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/rain/images/sample.png)](https://particles.js.org/samples/palettes/rain) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/water/rain/images/sample.png)](https://particles.js.org/samples/palettes/rain) ## Colors @@ -69,7 +69,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -106,47 +106,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "rain", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadRainPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadRainPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadRainPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -parain[Rain] -end - -e[tsParticles Engine] --> parain -``` diff --git a/palettes/water/rain/package.dist.json b/palettes/water/rain/package.dist.json index 871740827c8..54185d3e00b 100644 --- a/palettes/water/rain/package.dist.json +++ b/palettes/water/rain/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-rain", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles rain palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.rain.min.js", - "unpkg": "tsparticles.palette.rain.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/water/rain/package.json b/palettes/water/rain/package.json index c2de28c125c..677a6245ca3 100644 --- a/palettes/water/rain/package.json +++ b/palettes/water/rain/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-rain", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles rain palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/water/rain/rollup.config.js b/palettes/water/rain/rollup.config.js new file mode 100644 index 00000000000..18c342b5f23 --- /dev/null +++ b/palettes/water/rain/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-rain", + paletteName: "Rain Palette", + version, +}); diff --git a/palettes/water/rain/src/browser.ts b/palettes/water/rain/src/browser.ts new file mode 100644 index 00000000000..7f659682313 --- /dev/null +++ b/palettes/water/rain/src/browser.ts @@ -0,0 +1,10 @@ +import { loadRainPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadRainPalette?: typeof loadRainPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadRainPalette = loadRainPalette; + +export * from "./index.js"; diff --git a/palettes/water/rain/src/index.lazy.ts b/palettes/water/rain/src/index.lazy.ts new file mode 100644 index 00000000000..5d20b08e36b --- /dev/null +++ b/palettes/water/rain/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "rain"; + +/** + * @param engine - + */ +export async function loadRainPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/water/rain/src/index.ts b/palettes/water/rain/src/index.ts index cb88f704f4b..a1925f0ebc3 100644 --- a/palettes/water/rain/src/index.ts +++ b/palettes/water/rain/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "rain"; @@ -6,9 +7,7 @@ const paletteName = "rain"; * @param engine - */ export async function loadRainPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/water/rain/typedoc.json b/palettes/water/rain/typedoc.json index 398e6f75409..04adf4873dd 100644 --- a/palettes/water/rain/typedoc.json +++ b/palettes/water/rain/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Rain Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Rain Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/water/rain/webpack.config.js b/palettes/water/rain/webpack.config.js deleted file mode 100644 index 7a4b9e4003e..00000000000 --- a/palettes/water/rain/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-rain", - paletteName: "Rain Palette", - version, -}); diff --git a/palettes/water/risingBubbles/CHANGELOG.md b/palettes/water/risingBubbles/CHANGELOG.md index 76ca4c0d194..6328b1a6b0f 100644 --- a/palettes/water/risingBubbles/CHANGELOG.md +++ b/palettes/water/risingBubbles/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/palette-rising-bubbles + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/palette-rising-bubbles diff --git a/palettes/water/risingBubbles/README.md b/palettes/water/risingBubbles/README.md index bac28a648ac..c926f82935c 100644 --- a/palettes/water/risingBubbles/README.md +++ b/palettes/water/risingBubbles/README.md @@ -1,10 +1,10 @@ [![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) -# tsParticles Rising Bubbles Palette +# tsParticles RisingBubbles Palette -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-rising-bubbles/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-rising-bubbles) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-rising-bubbles.svg)](https://www.npmjs.com/package/@tsparticles/palette-rising-bubbles) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-rising-bubbles)](https://www.npmjs.com/package/@tsparticles/palette-rising-bubbles) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-risingBubbles/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-risingBubbles) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-risingBubbles.svg)](https://www.npmjs.com/package/@tsparticles/palette-risingBubbles) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-risingBubbles) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) -[tsParticles](https://github.com/tsparticles/tsparticles) palette for rising bubbles. +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. [![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) @@ -12,7 +12,7 @@ ## Sample -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/risingBubbles/images/sample.png)](https://particles.js.org/samples/palettes/rising-bubbles) +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/water/risingBubbles/images/sample.png)](https://particles.js.org/samples/palettes/risingBubbles) ## Colors @@ -65,7 +65,7 @@ A palette defines colors, not complete behavior, so pair it with a runtime packa ```html - + ``` ### Usage @@ -87,7 +87,7 @@ Once the scripts are loaded you can set up `tsParticles` like this: speed: 2, }, }, - palette: "rising-bubbles", + palette: "risingBubbles", }; await engine.load({ @@ -102,47 +102,11 @@ Once the scripts are loaded you can set up `tsParticles` like this: **Important ⚠️** You can override all the options defining the properties like in any standard `tsParticles` installation. -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "rising-bubbles", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - ### Frameworks with a tsParticles component library -Checkout the documentation in the component library repository and call the `loadRisingBubblesPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadRisingBubblesPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly +Checkout the documentation in the component library repository and call the `loadRisingBubblesPalette` function. ## Related docs - Presets and palettes catalog: - Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -parisingBubbles[Rising Bubbles] -end - -e[tsParticles Engine] --> parisingBubbles -``` diff --git a/palettes/water/risingBubbles/package.dist.json b/palettes/water/risingBubbles/package.dist.json index 85de7aa2f1a..fb834500ddf 100644 --- a/palettes/water/risingBubbles/package.dist.json +++ b/palettes/water/risingBubbles/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/palette-rising-bubbles", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles rising bubbles palette", "homepage": "https://particles.js.org", "repository": { @@ -81,8 +81,7 @@ "url": "https://www.buymeacoffee.com/matteobruni" } ], - "jsdelivr": "tsparticles.palette.rising-bubbles.min.js", - "unpkg": "tsparticles.palette.rising-bubbles.min.js", + "sideEffects": false, "browser": "browser/index.js", "main": "cjs/index.js", "module": "esm/index.js", @@ -96,13 +95,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, - "./package.json": "./package.json" + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", "publishConfig": { "access": "public" - }, - "type": "module" + } } diff --git a/palettes/water/risingBubbles/package.json b/palettes/water/risingBubbles/package.json index 49d748c00f6..2e131fac97e 100644 --- a/palettes/water/risingBubbles/package.json +++ b/palettes/water/risingBubbles/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/palette-rising-bubbles", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles rising bubbles palette", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,11 +106,23 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", "dependencies": { "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/palettes/water/risingBubbles/rollup.config.js b/palettes/water/risingBubbles/rollup.config.js new file mode 100644 index 00000000000..aa58680c3c4 --- /dev/null +++ b/palettes/water/risingBubbles/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-risingBubbles", + paletteName: "RisingBubbles Palette", + version, +}); diff --git a/palettes/water/risingBubbles/src/browser.ts b/palettes/water/risingBubbles/src/browser.ts new file mode 100644 index 00000000000..18be78aa52e --- /dev/null +++ b/palettes/water/risingBubbles/src/browser.ts @@ -0,0 +1,10 @@ +import { loadRisingBubblesPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadRisingBubblesPalette?: typeof loadRisingBubblesPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadRisingBubblesPalette = loadRisingBubblesPalette; + +export * from "./index.js"; diff --git a/palettes/water/risingBubbles/src/index.lazy.ts b/palettes/water/risingBubbles/src/index.lazy.ts new file mode 100644 index 00000000000..a9139347e3a --- /dev/null +++ b/palettes/water/risingBubbles/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "rising-bubbles"; + +/** + * @param engine - + */ +export async function loadRisingBubblesPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/water/risingBubbles/src/index.ts b/palettes/water/risingBubbles/src/index.ts index 32d7e5c94dd..579347355fe 100644 --- a/palettes/water/risingBubbles/src/index.ts +++ b/palettes/water/risingBubbles/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; const paletteName = "rising-bubbles"; @@ -6,9 +7,7 @@ const paletteName = "rising-bubbles"; * @param engine - */ export async function loadRisingBubblesPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPalette(paletteName, options); }); } diff --git a/palettes/water/risingBubbles/typedoc.json b/palettes/water/risingBubbles/typedoc.json index f51c89d1c55..4ed1e777a4b 100644 --- a/palettes/water/risingBubbles/typedoc.json +++ b/palettes/water/risingBubbles/typedoc.json @@ -1,15 +1,15 @@ { - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Rising Bubbles Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles RisingBubbles Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/water/risingBubbles/webpack.config.js b/palettes/water/risingBubbles/webpack.config.js deleted file mode 100644 index 80e83c20e59..00000000000 --- a/palettes/water/risingBubbles/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-rising-bubbles", - paletteName: "Rising Bubbles Palette", - version, -}); diff --git a/palettes/water/splash/.browserslistrc b/palettes/water/splash/.browserslistrc new file mode 100644 index 00000000000..9cce1e55dd9 --- /dev/null +++ b/palettes/water/splash/.browserslistrc @@ -0,0 +1 @@ +extends @tsparticles/browserslist-config diff --git a/palettes/water/splash/CHANGELOG.md b/palettes/water/splash/CHANGELOG.md new file mode 100644 index 00000000000..c0d1476f31f --- /dev/null +++ b/palettes/water/splash/CHANGELOG.md @@ -0,0 +1,20 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/palette-water-splash + +# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) + +**Note:** Version bump only for package @tsparticles/palette-water-splash + +# 4.0.0-beta.0 (2026-04-08) + +**Note:** Version bump only for package @tsparticles/palette-water-splash + +# [4.0.0-alpha.5](https://github.com/tsparticles/palettes/compare/v4.0.0-alpha.4...v4.0.0-alpha.5) (2026-03-31) + +**Note:** Version bump only for package @tsparticles/palette-water-splash diff --git a/palettes/water/splash/LICENSE b/palettes/water/splash/LICENSE new file mode 100644 index 00000000000..bdc05f528fa --- /dev/null +++ b/palettes/water/splash/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/palettes/water/splash/README.md b/palettes/water/splash/README.md new file mode 100644 index 00000000000..6b39a230e79 --- /dev/null +++ b/palettes/water/splash/README.md @@ -0,0 +1,122 @@ +[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) + +# tsParticles Splash Palette + +[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-splash/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-splash) [![npmjs](https://badge.fury.io/js/%40tsparticles%2Fpalette-splash.svg)](https://www.npmjs.com/package/@tsparticles/palette-splash) [![npmjs](https://img.shields.io/npm/dt/%40tsparticles%2Fpalette-coloredSmokeAmber)](https://www.npmjs.com/package/@tsparticles/palette-splash) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) + +[tsParticles](https://github.com/tsparticles/tsparticles) palette for colored smoke amber. + +[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) + +[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") + +## Sample + +[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/water/splash/images/sample.png)](https://particles.js.org/samples/palettes/splash) + +## Colors + + + + + + + + + + + + + + + + + + + + +
+
+ #FFFFFF +
+
+ #DDEEFF +
+
+ #AACCEE +
+
+ #6699CC +
+
+ #336699 +
+
+ #224466 +
+
+ Background
+ #001828 +
+ Blend mode: source-over | Fill: true +
+ +## Quick checklist + +1. Install `@tsparticles/engine` (or use the CDN bundle below) +2. Load a base package (for example `@tsparticles/basic`) and call `loadSplashPalette` before `tsParticles.load(...)` +3. Apply the palette plus a minimal particles configuration in your options + +A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. + +## How to use it + +### CDN / Vanilla JS / jQuery + +```html + + +``` + +### Usage + +Once the scripts are loaded you can set up `tsParticles` like this: + +```javascript +(async engine => { + await loadBasic(engine); + await loadSplashPalette(engine); + + const options = { + particles: { + number: { value: 200 }, + shape: { type: "circle" }, + size: { value: { min: 10, max: 15 } }, + move: { + enable: true, + speed: 2, + }, + }, + palette: "splash", + }; + + await engine.load({ + id: "tsparticles", + options, + }); +})(tsParticles); +``` + +#### Customization + +**Important ⚠️** +You can override all the options defining the properties like in any standard `tsParticles` installation. + +### Frameworks with a tsParticles component library + +Checkout the documentation in the component library repository and call the `loadSplashPalette` function. + +## Related docs + +- Presets and palettes catalog: +- Main docs: diff --git a/palettes/water/waterSplash/eslint.config.js b/palettes/water/splash/eslint.config.js similarity index 100% rename from palettes/water/waterSplash/eslint.config.js rename to palettes/water/splash/eslint.config.js diff --git a/palettes/water/waterSplash/images/sample.png b/palettes/water/splash/images/sample.png similarity index 100% rename from palettes/water/waterSplash/images/sample.png rename to palettes/water/splash/images/sample.png diff --git a/palettes/water/splash/package.dist.json b/palettes/water/splash/package.dist.json new file mode 100644 index 00000000000..d9e01e525ba --- /dev/null +++ b/palettes/water/splash/package.dist.json @@ -0,0 +1,117 @@ +{ + "name": "@tsparticles/palette-water-splash", + "version": "4.0.0-beta.15", + "description": "tsParticles water splash palette", + "homepage": "https://particles.js.org", + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/water/splash" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/palettes/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "browser/index.js", + "main": "cjs/index.js", + "module": "esm/index.js", + "types": "types/index.d.ts", + "exports": { + ".": { + "types": "./types/index.d.ts", + "browser": "./browser/index.js", + "import": "./esm/index.js", + "require": "./cjs/index.js", + "umd": "./umd/index.js", + "default": "./cjs/index.js" + }, + "./package.json": "./package.json", + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "umd": "./umd/index.lazy.js", + "default": "./cjs/index.lazy.js" + } + }, + "dependencies": { + "@tsparticles/engine": "4.0.0-beta.15" + }, + "type": "module", + "jsdelivr": "tsparticles.palette-colored-smoke-amber.min.js", + "unpkg": "tsparticles.palette-colored-smoke-amber.min.js", + "publishConfig": { + "access": "public" + } +} diff --git a/palettes/water/splash/package.json b/palettes/water/splash/package.json new file mode 100644 index 00000000000..f5889c286ae --- /dev/null +++ b/palettes/water/splash/package.json @@ -0,0 +1,128 @@ +{ + "name": "@tsparticles/palette-water-splash", + "version": "4.0.0-beta.15", + "description": "tsParticles water splash palette", + "homepage": "https://particles.js.org", + "scripts": { + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", + "prepack": "pnpm run build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "palettes/water/splash" + }, + "keywords": [ + "front-end", + "frontend", + "tsparticles", + "particles.js", + "particlesjs", + "particles", + "particle", + "canvas", + "jsparticles", + "xparticles", + "particles-js", + "particles-bg", + "particles-bg-vue", + "particles-ts", + "particles.ts", + "react-particles-js", + "react-particles.js", + "react-particles", + "react", + "reactjs", + "vue-particles", + "ngx-particles", + "angular-particles", + "particleground", + "vue", + "vuejs", + "preact", + "preactjs", + "jquery", + "angularjs", + "angular", + "typescript", + "javascript", + "animation", + "web", + "html5", + "web-design", + "webdesign", + "css", + "html", + "css3", + "animated", + "background", + "confetti", + "canvas", + "fireworks", + "fireworks-js", + "confetti-js", + "confettijs", + "fireworksjs", + "canvas-confetti", + "tsparticles-palette" + ], + "publishConfig": { + "directory": "dist", + "linkDirectory": true, + "access": "public" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/matteobruni" + }, + { + "type": "github", + "url": "https://github.com/sponsors/tsparticles" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/matteobruni" + } + ], + "sideEffects": false, + "browser": "dist/browser/index.js", + "main": "dist/cjs/index.js", + "module": "dist/esm/index.js", + "types": "dist/types/index.d.ts", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "umd": "./dist/umd/index.js", + "default": "./dist/cjs/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "umd": "./dist/umd/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, + "prettier": "@tsparticles/prettier-config", + "dependencies": { + "@tsparticles/engine": "workspace:*" + }, + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } +} diff --git a/palettes/water/splash/rollup.config.js b/palettes/water/splash/rollup.config.js new file mode 100644 index 00000000000..d9e95bc87be --- /dev/null +++ b/palettes/water/splash/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPalette } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), + version = pkg.version; + +export default loadParticlesPalette({ + dir: __dirname, + moduleName: "palette-splash", + paletteName: "Splash Palette", + version, +}); diff --git a/palettes/water/splash/src/browser.ts b/palettes/water/splash/src/browser.ts new file mode 100644 index 00000000000..598bcde6bb5 --- /dev/null +++ b/palettes/water/splash/src/browser.ts @@ -0,0 +1,10 @@ +import { loadWaterSplashPalette } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadWaterSplashPalette?: typeof loadWaterSplashPalette; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadWaterSplashPalette = loadWaterSplashPalette; + +export * from "./index.js"; diff --git a/palettes/water/splash/src/index.lazy.ts b/palettes/water/splash/src/index.lazy.ts new file mode 100644 index 00000000000..2ec149e5cb1 --- /dev/null +++ b/palettes/water/splash/src/index.lazy.ts @@ -0,0 +1,14 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const paletteName = "splash"; + +/** + * @param engine - + */ +export async function loadSplashPalette(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const { options } = await import("./options.js"); + + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/water/splash/src/index.ts b/palettes/water/splash/src/index.ts new file mode 100644 index 00000000000..ab02550c805 --- /dev/null +++ b/palettes/water/splash/src/index.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine"; +import { options } from "./options.js"; + +const paletteName = "water-splash"; + +/** + * @param engine - + */ +export async function loadWaterSplashPalette(engine: Engine): Promise { + await engine.pluginManager.register(e => { + e.pluginManager.addPalette(paletteName, options); + }); +} diff --git a/palettes/water/waterSplash/src/options.ts b/palettes/water/splash/src/options.ts similarity index 100% rename from palettes/water/waterSplash/src/options.ts rename to palettes/water/splash/src/options.ts diff --git a/palettes/water/splash/tsconfig.base.json b/palettes/water/splash/tsconfig.base.json new file mode 100644 index 00000000000..2b489b6aa1c --- /dev/null +++ b/palettes/water/splash/tsconfig.base.json @@ -0,0 +1,9 @@ +{ + "extends": "@tsparticles/tsconfig/dist/tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src" + }, + "include": [ + "./src" + ] +} diff --git a/palettes/water/splash/tsconfig.browser.json b/palettes/water/splash/tsconfig.browser.json new file mode 100644 index 00000000000..d114ea7d433 --- /dev/null +++ b/palettes/water/splash/tsconfig.browser.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.browser.json"], + "compilerOptions": { + "outDir": "./dist/browser" + } +} diff --git a/palettes/water/splash/tsconfig.json b/palettes/water/splash/tsconfig.json new file mode 100644 index 00000000000..4ebb3ae88eb --- /dev/null +++ b/palettes/water/splash/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.json"], + "compilerOptions": { + "outDir": "./dist/cjs" + } +} diff --git a/palettes/water/splash/tsconfig.module.json b/palettes/water/splash/tsconfig.module.json new file mode 100644 index 00000000000..7faa233aa42 --- /dev/null +++ b/palettes/water/splash/tsconfig.module.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.module.json"], + "compilerOptions": { + "outDir": "./dist/esm" + } +} diff --git a/palettes/water/splash/tsconfig.types.json b/palettes/water/splash/tsconfig.types.json new file mode 100644 index 00000000000..01755624ba5 --- /dev/null +++ b/palettes/water/splash/tsconfig.types.json @@ -0,0 +1,6 @@ +{ + "extends": ["./tsconfig.base.json", "@tsparticles/tsconfig/dist/tsconfig.types.json"], + "compilerOptions": { + "outDir": "./dist/types" + } +} diff --git a/palettes/water/splash/typedoc.json b/palettes/water/splash/typedoc.json new file mode 100644 index 00000000000..f0f8dedd032 --- /dev/null +++ b/palettes/water/splash/typedoc.json @@ -0,0 +1,15 @@ +{ + "includes": "./markdown", + "entryPoints": [ + "./src/" + ], + "entryPointStrategy": "expand", + "name": "tsParticles Splash Palette", + "includeVersion": true, + "hideGenerator": true, + "out": "./docs", + "validation": { + "invalidLink": true, + "notDocumented": true + } +} \ No newline at end of file diff --git a/palettes/water/water/CHANGELOG.md b/palettes/water/water/CHANGELOG.md deleted file mode 100644 index 49b64077e09..00000000000 --- a/palettes/water/water/CHANGELOG.md +++ /dev/null @@ -1,16 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-water - -# 4.0.0-beta.0 (2026-04-08) - -**Note:** Version bump only for package @tsparticles/palette-water - -# [4.0.0-alpha.5](https://github.com/tsparticles/palettes/compare/v4.0.0-alpha.4...v4.0.0-alpha.5) (2026-03-31) - -**Note:** Version bump only for package @tsparticles/palette-water diff --git a/palettes/water/water/README.md b/palettes/water/water/README.md deleted file mode 100644 index bba99069d58..00000000000 --- a/palettes/water/water/README.md +++ /dev/null @@ -1,166 +0,0 @@ -[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) - -# tsParticles Water Full Palette - -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-water/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-water) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-water.svg)](https://www.npmjs.com/package/@tsparticles/palette-water) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-water)](https://www.npmjs.com/package/@tsparticles/palette-water) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for water - full. - -[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) - -[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") - -## Sample - -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/water/images/water.png)](https://particles.js.org/samples/palettes/water) - -## Colors - - - - - - - - - - - - - - - - - - - - - - -
-
- #FFFFFF -
-
- #DDEEFF -
-
- #AADDFF -
-
- #55AAFF -
-
- #0077FF -
-
- #0044CC -
-
- #002299 -
-
- #001166 -
-
- Background
- #001428 -
- Blend mode: source-over | Fill: true -
- -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadWaterPalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## How to use it - -### CDN / Vanilla JS / jQuery - -```html - - -``` - -### Usage - -Once the scripts are loaded you can set up `tsParticles` like this: - -```javascript -(async engine => { - await loadBasic(engine); - await loadWaterPalette(engine); - - const options = { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "water", - }; - - await engine.load({ - id: "tsparticles", - options, - }); -})(tsParticles); -``` - -#### Customization - -**Important ⚠️** -You can override all the options defining the properties like in any standard `tsParticles` installation. - -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "water", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - -### Frameworks with a tsParticles component library - -Checkout the documentation in the component library repository and call the `loadWaterPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadWaterPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly - -## Related docs - -- Presets and palettes catalog: -- Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -pawater[Water Full] -end - -e[tsParticles Engine] --> pawater -``` diff --git a/palettes/water/water/package.dist.json b/palettes/water/water/package.dist.json deleted file mode 100644 index b8f27b3b062..00000000000 --- a/palettes/water/water/package.dist.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "name": "@tsparticles/palette-water", - "version": "4.0.0-beta.12", - "description": "tsParticles water - full palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/water/water" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "jsdelivr": "tsparticles.palette.water.min.js", - "unpkg": "tsparticles.palette.water.min.js", - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "publishConfig": { - "access": "public" - }, - "type": "module" -} diff --git a/palettes/water/water/package.json b/palettes/water/water/package.json deleted file mode 100644 index 4f4b552ec43..00000000000 --- a/palettes/water/water/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-water", - "version": "4.0.0-beta.12", - "description": "tsParticles water - full palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/water/water" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/water/water/src/index.ts b/palettes/water/water/src/index.ts deleted file mode 100644 index 2dabd3c26b5..00000000000 --- a/palettes/water/water/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; - -const paletteName = "water"; - -/** - * @param engine - - */ -export async function loadWaterPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/water/water/typedoc.json b/palettes/water/water/typedoc.json deleted file mode 100644 index 9b6031eb10c..00000000000 --- a/palettes/water/water/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Water Full Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/water/water/webpack.config.js b/palettes/water/water/webpack.config.js deleted file mode 100644 index 9fc3af60567..00000000000 --- a/palettes/water/water/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-water", - paletteName: "Water Full Palette", - version, -}); diff --git a/palettes/water/waterSplash/CHANGELOG.md b/palettes/water/waterSplash/CHANGELOG.md deleted file mode 100644 index 101b92eacbb..00000000000 --- a/palettes/water/waterSplash/CHANGELOG.md +++ /dev/null @@ -1,16 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. - -# [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) - -**Note:** Version bump only for package @tsparticles/palette-water-splash - -# 4.0.0-beta.0 (2026-04-08) - -**Note:** Version bump only for package @tsparticles/palette-water-splash - -# [4.0.0-alpha.5](https://github.com/tsparticles/palettes/compare/v4.0.0-alpha.4...v4.0.0-alpha.5) (2026-03-31) - -**Note:** Version bump only for package @tsparticles/palette-water-splash diff --git a/palettes/water/waterSplash/README.md b/palettes/water/waterSplash/README.md deleted file mode 100644 index cfda3c34827..00000000000 --- a/palettes/water/waterSplash/README.md +++ /dev/null @@ -1,158 +0,0 @@ -[![banner](https://particles.js.org/images/banner3.png)](https://particles.js.org) - -# tsParticles Water Splash Palette - -[![jsDelivr](https://data.jsdelivr.com/v1/package/npm/@tsparticles/palette-water-splash/badge)](https://www.jsdelivr.com/package/npm/@tsparticles/palette-water-splash) [![npmjs](https://badge.fury.io/js/@tsparticles/palette-water-splash.svg)](https://www.npmjs.com/package/@tsparticles/palette-water-splash) [![npmjs](https://img.shields.io/npm/dt/@tsparticles/palette-water-splash)](https://www.npmjs.com/package/@tsparticles/palette-water-splash) [![GitHub Sponsors](https://img.shields.io/github/sponsors/matteobruni)](https://github.com/sponsors/matteobruni) - -[tsParticles](https://github.com/tsparticles/tsparticles) palette for water splash. - -[![Discord](https://particles.js.org/images/discord.png)](https://discord.gg/hACwv45Hme) [![Telegram](https://particles.js.org/images/telegram.png)](https://t.me/tsparticles) - -[![tsParticles Product Hunt](https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=186113&theme=light)](https://www.producthunt.com/posts/tsparticles?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-tsparticles") - -## Sample - -[![demo](https://raw.githubusercontent.com/tsparticles/palettes/main/palettes/waterSplash/images/sample.png)](https://particles.js.org/samples/palettes/water-splash) - -## Colors - - - - - - - - - - - - - - - - - - - - -
-
- #FFFFFF -
-
- #DDEEFF -
-
- #AACCEE -
-
- #6699CC -
-
- #336699 -
-
- #224466 -
-
- Background
- #001828 -
- Blend mode: source-over | Fill: true -
- -## Quick checklist - -1. Install `@tsparticles/engine` (or use the CDN bundle below) -2. Load a base package (for example `@tsparticles/basic`) and call `loadWaterSplashPalette` before `tsParticles.load(...)` -3. Apply the palette plus a minimal particles configuration in your options - -A palette defines colors, not complete behavior, so pair it with a runtime package and particle options. - -## How to use it - -### CDN / Vanilla JS / jQuery - -```html - - -``` - -### Usage - -Once the scripts are loaded you can set up `tsParticles` like this: - -```javascript -(async engine => { - await loadBasic(engine); - await loadWaterSplashPalette(engine); - - const options = { - particles: { - number: { value: 200 }, - shape: { type: "circle" }, - size: { value: { min: 10, max: 15 } }, - move: { - enable: true, - speed: 2, - }, - }, - palette: "water-splash", - }; - - await engine.load({ - id: "tsparticles", - options, - }); -})(tsParticles); -``` - -#### Customization - -**Important ⚠️** -You can override all the options defining the properties like in any standard `tsParticles` installation. - -```javascript -tsParticles.load({ - id: "tsparticles", - options: { - particles: { - shape: { - type: "square", // starting from v2, this require the square shape script - }, - }, - palette: "water-splash", - }, -}); -``` - -Like in the sample above, the circles will be replaced by squares. - -### Frameworks with a tsParticles component library - -Checkout the documentation in the component library repository and call the `loadWaterSplashPalette` function instead of `loadFull`, `loadSlim` or similar functions. - -The options shown above are valid for all the component libraries. - -## Common pitfalls - -- Calling `tsParticles.load(...)` before `loadWaterSplashPalette(...)` -- Verify required peer packages before enabling advanced options -- Change one option group at a time to isolate regressions quickly - -## Related docs - -- Presets and palettes catalog: -- Main docs: - ---- - -```mermaid -flowchart TD - -subgraph pr [Palettes] -pawaterSplash[Water Splash] -end - -e[tsParticles Engine] --> pawaterSplash -``` diff --git a/palettes/water/waterSplash/package.dist.json b/palettes/water/waterSplash/package.dist.json deleted file mode 100644 index c5f1dc6b360..00000000000 --- a/palettes/water/waterSplash/package.dist.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "name": "@tsparticles/palette-water-splash", - "version": "4.0.0-beta.12", - "description": "tsParticles water splash palette", - "homepage": "https://particles.js.org", - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/water/waterSplash" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/palettes/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "jsdelivr": "tsparticles.palette.water-splash.min.js", - "unpkg": "tsparticles.palette.water-splash.min.js", - "browser": "browser/index.js", - "main": "cjs/index.js", - "module": "esm/index.js", - "types": "types/index.d.ts", - "exports": { - ".": { - "types": "./types/index.d.ts", - "browser": "./browser/index.js", - "import": "./esm/index.js", - "require": "./cjs/index.js", - "umd": "./umd/index.js", - "default": "./cjs/index.js" - }, - "./package.json": "./package.json" - }, - "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12" - }, - "publishConfig": { - "access": "public" - }, - "type": "module" -} diff --git a/palettes/water/waterSplash/package.json b/palettes/water/waterSplash/package.json deleted file mode 100644 index 2bcfb61e2cf..00000000000 --- a/palettes/water/waterSplash/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "name": "@tsparticles/palette-water-splash", - "version": "4.0.0-beta.12", - "description": "tsParticles water splash palette", - "homepage": "https://particles.js.org", - "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", - "prepack": "pnpm run build" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/tsparticles/tsparticles.git", - "directory": "palettes/water/waterSplash" - }, - "keywords": [ - "front-end", - "frontend", - "tsparticles", - "particles.js", - "particlesjs", - "particles", - "particle", - "canvas", - "jsparticles", - "xparticles", - "particles-js", - "particles-bg", - "particles-bg-vue", - "particles-ts", - "particles.ts", - "react-particles-js", - "react-particles.js", - "react-particles", - "react", - "reactjs", - "vue-particles", - "ngx-particles", - "angular-particles", - "particleground", - "vue", - "vuejs", - "preact", - "preactjs", - "jquery", - "angularjs", - "angular", - "typescript", - "javascript", - "animation", - "web", - "html5", - "web-design", - "webdesign", - "css", - "html", - "css3", - "animated", - "background", - "confetti", - "canvas", - "fireworks", - "fireworks-js", - "confetti-js", - "confettijs", - "fireworksjs", - "canvas-confetti", - "tsparticles-palette" - ], - "publishConfig": { - "directory": "dist", - "linkDirectory": true, - "access": "public" - }, - "author": "Matteo Bruni ", - "license": "MIT", - "bugs": { - "url": "https://github.com/tsparticles/tsparticles/issues" - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/matteobruni" - }, - { - "type": "github", - "url": "https://github.com/sponsors/tsparticles" - }, - { - "type": "buymeacoffee", - "url": "https://www.buymeacoffee.com/matteobruni" - } - ], - "sideEffects": false, - "browser": "dist/browser/index.js", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.js", - "types": "dist/types/index.d.ts", - "exports": { - ".": { - "types": "./dist/types/index.d.ts", - "browser": "./dist/browser/index.js", - "import": "./dist/esm/index.js", - "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", - "default": "./dist/cjs/index.js" - }, - "./package.json": "./dist/package.json" - }, - "prettier": "@tsparticles/prettier-config", - "dependencies": { - "@tsparticles/engine": "workspace:*" - }, - "type": "module" -} diff --git a/palettes/water/waterSplash/src/index.ts b/palettes/water/waterSplash/src/index.ts deleted file mode 100644 index 9302f4b8fc7..00000000000 --- a/palettes/water/waterSplash/src/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type Engine } from "@tsparticles/engine"; - -const paletteName = "water-splash"; - -/** - * @param engine - - */ -export async function loadWaterSplashPalette(engine: Engine): Promise { - await engine.pluginManager.register(async e => { - const { options } = await import("./options.js"); - - e.pluginManager.addPalette(paletteName, options); - }); -} diff --git a/palettes/water/waterSplash/typedoc.json b/palettes/water/waterSplash/typedoc.json deleted file mode 100644 index d299269db5d..00000000000 --- a/palettes/water/waterSplash/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "includes": "./markdown", - "entryPoints": [ - "./src/" - ], - "entryPointStrategy": "expand", - "name": "tsParticles Water Splash Palette", - "includeVersion": true, - "hideGenerator": true, - "out": "./docs", - "validation": { - "invalidLink": true, - "notDocumented": true - } -} diff --git a/palettes/water/waterSplash/webpack.config.js b/palettes/water/waterSplash/webpack.config.js deleted file mode 100644 index 8dc5c5bfaa1..00000000000 --- a/palettes/water/waterSplash/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPalette } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import { readFile } from "node:fs/promises" -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = JSON.parse(await readFile(rootPkgPath, "utf-8")), - version = pkg.version; - -export default loadParticlesPalette({ - dir: __dirname, - moduleName: "palette-water-splash", - paletteName: "Water Splash Palette", - version, -}); diff --git a/patches/tsup@8.5.1.patch b/patches/tsup@8.5.1.patch new file mode 100644 index 00000000000..53ba5507f2f --- /dev/null +++ b/patches/tsup@8.5.1.patch @@ -0,0 +1,12 @@ +diff --git a/dist/rollup.js b/dist/rollup.js +index e128b61b9558318b9f86dc11d72c31f09a8eb7db..5068f0918d96c62e06ecb7b2113c717da569baae 100644 +--- a/dist/rollup.js ++++ b/dist/rollup.js +@@ -6834,7 +6834,6 @@ var getRollupConfig = async (options) => { + tsconfig: options.tsconfig, + compilerOptions: { + ...compilerOptions, +- baseUrl: compilerOptions.baseUrl || ".", + // Ensure ".d.ts" modules are generated + declaration: true, + // Skip ".js" generation diff --git a/patches/vue-server-renderer@2.7.16.patch b/patches/vue-server-renderer@2.7.16.patch new file mode 100644 index 00000000000..9b0baa0306c --- /dev/null +++ b/patches/vue-server-renderer@2.7.16.patch @@ -0,0 +1,32 @@ +diff --git a/index.js b/index.js +index f3a053cf6b11395a047647114de10dde4076766a..e8ffb005053d278276f20517ea5ffe49fc5f64ed 100644 +--- a/index.js ++++ b/index.js +@@ -1,6 +1,11 @@ ++var vueVersion + try { +- var vueVersion = require('vue').version +-} catch (e) {} ++ // Load vue@2.7.16 from pnpm virtual store to avoid version conflicts with vue@3.x hoisting ++ var _vsrPath = require('path').resolve(__dirname, '../../../vue@2.7.16/node_modules/vue') ++ vueVersion = require(_vsrPath).version ++} catch (e) { ++ try { vueVersion = require('vue').version } catch (e2) {} ++} + + var packageName = require('./package.json').name + var packageVersion = require('./package.json').version +diff --git a/package.json b/package.json +index 0a83dc87620457dbed74a3818eae7c52b7b28460..6a4dbdc8b37f4ba9556d1d6e76f234ee41fa4e86 100644 +--- a/package.json ++++ b/package.json +@@ -31,7 +31,8 @@ + "lodash.uniq": "^4.5.0", + "resolve": "^1.22.0", + "serialize-javascript": "^6.0.0", +- "source-map": "0.5.6" ++ "source-map": "0.5.6", ++ "vue": "2.7.16" + }, + "devDependencies": { + "@types/webpack": "^4.41.32", diff --git a/paths/branches/CHANGELOG.md b/paths/branches/CHANGELOG.md index cb9069dda24..5f032b7fff5 100644 --- a/paths/branches/CHANGELOG.md +++ b/paths/branches/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/path-branches + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/path-branches diff --git a/paths/branches/package.dist.json b/paths/branches/package.dist.json index 470996cfe45..efd06c032bf 100644 --- a/paths/branches/package.dist.json +++ b/paths/branches/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/path-branches", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles branches path", "homepage": "https://particles.js.org", "repository": { @@ -100,11 +100,18 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12", - "@tsparticles/plugin-move": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/plugin-move": "4.0.0-beta.15" }, "type": "module" } diff --git a/paths/branches/package.json b/paths/branches/package.json index 5de946d6864..e47035b45a9 100644 --- a/paths/branches/package.json +++ b/paths/branches/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/path-branches", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles branches path", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -104,6 +104,13 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { @@ -111,6 +118,8 @@ "@tsparticles/plugin-move": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*", "@tsparticles/plugin-move": "workspace:*" }, diff --git a/paths/branches/rollup.config.js b/paths/branches/rollup.config.js new file mode 100644 index 00000000000..7e4f31eaf27 --- /dev/null +++ b/paths/branches/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPath } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPath({ + moduleName: "branches", + pluginName: "Branches", + version, + dir: __dirname, + progress: false, +}); diff --git a/paths/branches/src/browser.ts b/paths/branches/src/browser.ts new file mode 100644 index 00000000000..383478dbe03 --- /dev/null +++ b/paths/branches/src/browser.ts @@ -0,0 +1,10 @@ +import { loadBranchesPath } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadBranchesPath?: typeof loadBranchesPath; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadBranchesPath = loadBranchesPath; + +export * from "./index.js"; diff --git a/paths/branches/src/index.lazy.ts b/paths/branches/src/index.lazy.ts new file mode 100644 index 00000000000..a0fb75d12bc --- /dev/null +++ b/paths/branches/src/index.lazy.ts @@ -0,0 +1,25 @@ +import type { Engine } from "@tsparticles/engine/lazy"; +import type { MoveEngine } from "@tsparticles/plugin-move/lazy"; + +declare const __VERSION__: string; + +export const branchingPathName = "branchesPathGenerator"; + +/** + * @param engine - + */ +export async function loadBranchesPath(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async (e: MoveEngine) => { + const { ensureBaseMoverLoaded } = await import("@tsparticles/plugin-move/lazy"); + + ensureBaseMoverLoaded(e); + + e.pluginManager.addPathGenerator?.(branchingPathName, async container => { + const { BranchesPathGenerator } = await import("./BranchesPathGenerator.js"); + + return new BranchesPathGenerator(container); + }); + }); +} diff --git a/paths/branches/src/index.ts b/paths/branches/src/index.ts index 7294e1d3e6e..5c765658ba9 100644 --- a/paths/branches/src/index.ts +++ b/paths/branches/src/index.ts @@ -1,5 +1,6 @@ +import { type MoveEngine, ensureBaseMoverLoaded } from "@tsparticles/plugin-move"; +import { BranchesPathGenerator } from "./BranchesPathGenerator.js"; import type { Engine } from "@tsparticles/engine"; -import type { MoveEngine } from "@tsparticles/plugin-move"; declare const __VERSION__: string; @@ -11,15 +12,11 @@ export const branchingPathName = "branchesPathGenerator"; export async function loadBranchesPath(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async (e: MoveEngine) => { - const { ensureBaseMoverLoaded } = await import("@tsparticles/plugin-move"); - + await engine.pluginManager.register((e: MoveEngine) => { ensureBaseMoverLoaded(e); - e.pluginManager.addPathGenerator?.(branchingPathName, async container => { - const { BranchesPathGenerator } = await import("./BranchesPathGenerator.js"); - - return new BranchesPathGenerator(container); + e.pluginManager.addPathGenerator?.(branchingPathName, container => { + return Promise.resolve(new BranchesPathGenerator(container)); }); }); } diff --git a/paths/branches/webpack.config.js b/paths/branches/webpack.config.js deleted file mode 100644 index aa3f962dc6c..00000000000 --- a/paths/branches/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPath } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPath({ - moduleName: "branches", - pluginName: "Branches", - version, - dir: __dirname, - progress: false, -}); diff --git a/paths/brownian/CHANGELOG.md b/paths/brownian/CHANGELOG.md index c9cc9b6d56f..3666efa7728 100644 --- a/paths/brownian/CHANGELOG.md +++ b/paths/brownian/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/path-brownian + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/path-brownian diff --git a/paths/brownian/package.dist.json b/paths/brownian/package.dist.json index cb56d2150fa..fbfb9c50458 100644 --- a/paths/brownian/package.dist.json +++ b/paths/brownian/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/path-brownian", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles brownian path", "homepage": "https://particles.js.org", "repository": { @@ -100,11 +100,18 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12", - "@tsparticles/plugin-move": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/plugin-move": "4.0.0-beta.15" }, "type": "module" } diff --git a/paths/brownian/package.json b/paths/brownian/package.json index 8ec20a30be8..e0926b27c38 100644 --- a/paths/brownian/package.json +++ b/paths/brownian/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/path-brownian", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles brownian path", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -104,6 +104,13 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { @@ -111,6 +118,8 @@ "@tsparticles/plugin-move": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*", "@tsparticles/plugin-move": "workspace:*" }, diff --git a/paths/brownian/rollup.config.js b/paths/brownian/rollup.config.js new file mode 100644 index 00000000000..010e667f18a --- /dev/null +++ b/paths/brownian/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPath } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPath({ + moduleName: "brownian", + pluginName: "Brownian", + version, + dir: __dirname, + progress: false, +}); diff --git a/paths/brownian/src/browser.ts b/paths/brownian/src/browser.ts new file mode 100644 index 00000000000..34c4aa74876 --- /dev/null +++ b/paths/brownian/src/browser.ts @@ -0,0 +1,10 @@ +import { loadBrownianPath } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadBrownianPath?: typeof loadBrownianPath; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadBrownianPath = loadBrownianPath; + +export * from "./index.js"; diff --git a/paths/brownian/src/index.lazy.ts b/paths/brownian/src/index.lazy.ts new file mode 100644 index 00000000000..434778bf664 --- /dev/null +++ b/paths/brownian/src/index.lazy.ts @@ -0,0 +1,25 @@ +import type { Engine } from "@tsparticles/engine/lazy"; +import type { MoveEngine } from "@tsparticles/plugin-move/lazy"; + +declare const __VERSION__: string; + +export const brownianPathName = "brownianPathGenerator"; + +/** + * @param engine - + */ +export async function loadBrownianPath(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async (e: MoveEngine) => { + const { ensureBaseMoverLoaded } = await import("@tsparticles/plugin-move/lazy"); + + ensureBaseMoverLoaded(e); + + e.pluginManager.addPathGenerator?.(brownianPathName, async container => { + const { BrownianPathGenerator } = await import("./BrownianPathGenerator.js"); + + return new BrownianPathGenerator(container); + }); + }); +} diff --git a/paths/brownian/src/index.ts b/paths/brownian/src/index.ts index a886127eb41..ae6fb963f98 100644 --- a/paths/brownian/src/index.ts +++ b/paths/brownian/src/index.ts @@ -1,5 +1,6 @@ +import { type MoveEngine, ensureBaseMoverLoaded } from "@tsparticles/plugin-move"; +import { BrownianPathGenerator } from "./BrownianPathGenerator.js"; import type { Engine } from "@tsparticles/engine"; -import type { MoveEngine } from "@tsparticles/plugin-move"; declare const __VERSION__: string; @@ -11,15 +12,11 @@ export const brownianPathName = "brownianPathGenerator"; export async function loadBrownianPath(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async (e: MoveEngine) => { - const { ensureBaseMoverLoaded } = await import("@tsparticles/plugin-move"); - + await engine.pluginManager.register((e: MoveEngine) => { ensureBaseMoverLoaded(e); - e.pluginManager.addPathGenerator?.(brownianPathName, async container => { - const { BrownianPathGenerator } = await import("./BrownianPathGenerator.js"); - - return new BrownianPathGenerator(container); + e.pluginManager.addPathGenerator?.(brownianPathName, container => { + return Promise.resolve(new BrownianPathGenerator(container)); }); }); } diff --git a/paths/brownian/webpack.config.js b/paths/brownian/webpack.config.js deleted file mode 100644 index 3a1d08cb206..00000000000 --- a/paths/brownian/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPath } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPath({ - moduleName: "brownian", - pluginName: "Brownian", - version, - dir: __dirname, - progress: false, -}); diff --git a/paths/curlNoise/CHANGELOG.md b/paths/curlNoise/CHANGELOG.md index 1f15d87b00a..e07143d9613 100644 --- a/paths/curlNoise/CHANGELOG.md +++ b/paths/curlNoise/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/path-curl-noise + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/path-curl-noise diff --git a/paths/curlNoise/package.dist.json b/paths/curlNoise/package.dist.json index e5e8f65be36..2e08f4f6c56 100644 --- a/paths/curlNoise/package.dist.json +++ b/paths/curlNoise/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/path-curl-noise", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles curl noise path", "homepage": "https://particles.js.org", "repository": { @@ -100,12 +100,19 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12", - "@tsparticles/plugin-move": "4.0.0-beta.12", - "@tsparticles/simplex-noise": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/plugin-move": "4.0.0-beta.15", + "@tsparticles/simplex-noise": "4.0.0-beta.15" }, "type": "module" } diff --git a/paths/curlNoise/package.json b/paths/curlNoise/package.json index 1ea1811f543..cb28dd7ead7 100644 --- a/paths/curlNoise/package.json +++ b/paths/curlNoise/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/path-curl-noise", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles curl noise path", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -90,6 +90,13 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { @@ -98,6 +105,8 @@ "@tsparticles/simplex-noise": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*", "@tsparticles/plugin-move": "workspace:*", "@tsparticles/simplex-noise": "workspace:*" diff --git a/paths/curlNoise/rollup.config.js b/paths/curlNoise/rollup.config.js new file mode 100644 index 00000000000..17ed48dab95 --- /dev/null +++ b/paths/curlNoise/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPath } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPath({ + moduleName: "curl.noise", + pluginName: "Curl Noise", + version, + dir: __dirname, + progress: false, +}); diff --git a/paths/curlNoise/src/browser.ts b/paths/curlNoise/src/browser.ts new file mode 100644 index 00000000000..e91fff2676b --- /dev/null +++ b/paths/curlNoise/src/browser.ts @@ -0,0 +1,10 @@ +import { loadCurlNoisePath } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadCurlNoisePath?: typeof loadCurlNoisePath; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadCurlNoisePath = loadCurlNoisePath; + +export * from "./index.js"; diff --git a/paths/curlNoise/src/index.lazy.ts b/paths/curlNoise/src/index.lazy.ts new file mode 100644 index 00000000000..8edfb3322f9 --- /dev/null +++ b/paths/curlNoise/src/index.lazy.ts @@ -0,0 +1,25 @@ +import type { Engine } from "@tsparticles/engine/lazy"; +import type { MoveEngine } from "@tsparticles/plugin-move/lazy"; + +declare const __VERSION__: string; + +export const curlNoisePathName = "curlNoise"; + +/** + * @param engine - + */ +export async function loadCurlNoisePath(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async (e: MoveEngine) => { + const { ensureBaseMoverLoaded } = await import("@tsparticles/plugin-move/lazy"); + + ensureBaseMoverLoaded(e); + + e.pluginManager.addPathGenerator?.(curlNoisePathName, async container => { + const { CurlNoiseGenerator } = await import("./CurlNoiseGenerator.js"); + + return new CurlNoiseGenerator(container); + }); + }); +} diff --git a/paths/curlNoise/src/index.ts b/paths/curlNoise/src/index.ts index 7d97377396f..5e318d2e53a 100644 --- a/paths/curlNoise/src/index.ts +++ b/paths/curlNoise/src/index.ts @@ -1,5 +1,6 @@ +import { type MoveEngine, ensureBaseMoverLoaded } from "@tsparticles/plugin-move"; +import { CurlNoiseGenerator } from "./CurlNoiseGenerator.js"; import { type Engine } from "@tsparticles/engine"; -import { type MoveEngine } from "@tsparticles/plugin-move"; declare const __VERSION__: string; @@ -11,15 +12,11 @@ export const curlNoisePathName = "curlNoise"; export async function loadCurlNoisePath(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async (e: MoveEngine) => { - const { ensureBaseMoverLoaded } = await import("@tsparticles/plugin-move"); - + await engine.pluginManager.register((e: MoveEngine) => { ensureBaseMoverLoaded(e); - e.pluginManager.addPathGenerator?.(curlNoisePathName, async container => { - const { CurlNoiseGenerator } = await import("./CurlNoiseGenerator.js"); - - return new CurlNoiseGenerator(container); + e.pluginManager.addPathGenerator?.(curlNoisePathName, container => { + return Promise.resolve(new CurlNoiseGenerator(container)); }); }); } diff --git a/paths/curlNoise/webpack.config.js b/paths/curlNoise/webpack.config.js deleted file mode 100644 index 4f201d7ce29..00000000000 --- a/paths/curlNoise/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPath } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPath({ - moduleName: "curl.noise", - pluginName: "Curl Noise", - version, - dir: __dirname, - progress: false, -}); diff --git a/paths/curves/CHANGELOG.md b/paths/curves/CHANGELOG.md index e82100cd106..536e4ae1bc2 100644 --- a/paths/curves/CHANGELOG.md +++ b/paths/curves/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/path-curves + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/path-curves diff --git a/paths/curves/package.dist.json b/paths/curves/package.dist.json index bdcfecda22f..b6979c9c794 100644 --- a/paths/curves/package.dist.json +++ b/paths/curves/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/path-curves", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles curves path", "homepage": "https://particles.js.org", "repository": { @@ -100,11 +100,18 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12", - "@tsparticles/plugin-move": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/plugin-move": "4.0.0-beta.15" }, "type": "module" } diff --git a/paths/curves/package.json b/paths/curves/package.json index 991c1c7a370..6d9354a568a 100644 --- a/paths/curves/package.json +++ b/paths/curves/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/path-curves", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles curves path", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -104,6 +104,13 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { @@ -111,6 +118,8 @@ "@tsparticles/plugin-move": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*", "@tsparticles/plugin-move": "workspace:*" }, diff --git a/paths/curves/rollup.config.js b/paths/curves/rollup.config.js new file mode 100644 index 00000000000..27657314956 --- /dev/null +++ b/paths/curves/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPath } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPath({ + moduleName: "curves", + pluginName: "Curves", + version, + dir: __dirname, + progress: false, +}); diff --git a/paths/curves/src/browser.ts b/paths/curves/src/browser.ts new file mode 100644 index 00000000000..78358d0ba96 --- /dev/null +++ b/paths/curves/src/browser.ts @@ -0,0 +1,10 @@ +import { loadCurvesPath } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadCurvesPath?: typeof loadCurvesPath; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadCurvesPath = loadCurvesPath; + +export * from "./index.js"; diff --git a/paths/curves/src/index.lazy.ts b/paths/curves/src/index.lazy.ts new file mode 100644 index 00000000000..2cb59cb5d3f --- /dev/null +++ b/paths/curves/src/index.lazy.ts @@ -0,0 +1,25 @@ +import type { Engine } from "@tsparticles/engine/lazy"; +import type { MoveEngine } from "@tsparticles/plugin-move/lazy"; + +declare const __VERSION__: string; + +export const curvesPathName = "curvesPathGenerator"; + +/** + * @param engine - + */ +export async function loadCurvesPath(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async (e: MoveEngine) => { + const { ensureBaseMoverLoaded } = await import("@tsparticles/plugin-move/lazy"); + + ensureBaseMoverLoaded(e); + + e.pluginManager.addPathGenerator?.(curvesPathName, async container => { + const { CurvesPathGenerator } = await import("./CurvesPathGenerator.js"); + + return new CurvesPathGenerator(container); + }); + }); +} diff --git a/paths/curves/src/index.ts b/paths/curves/src/index.ts index 66887ff6cba..bd62ae85e3b 100644 --- a/paths/curves/src/index.ts +++ b/paths/curves/src/index.ts @@ -1,5 +1,6 @@ +import { type MoveEngine, ensureBaseMoverLoaded } from "@tsparticles/plugin-move"; +import { CurvesPathGenerator } from "./CurvesPathGenerator.js"; import { type Engine } from "@tsparticles/engine"; -import { type MoveEngine } from "@tsparticles/plugin-move"; declare const __VERSION__: string; @@ -11,15 +12,11 @@ export const curvesPathName = "curvesPathGenerator"; export async function loadCurvesPath(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async (e: MoveEngine) => { - const { ensureBaseMoverLoaded } = await import("@tsparticles/plugin-move"); - + await engine.pluginManager.register((e: MoveEngine) => { ensureBaseMoverLoaded(e); - e.pluginManager.addPathGenerator?.(curvesPathName, async container => { - const { CurvesPathGenerator } = await import("./CurvesPathGenerator.js"); - - return new CurvesPathGenerator(container); + e.pluginManager.addPathGenerator?.(curvesPathName, container => { + return Promise.resolve(new CurvesPathGenerator(container)); }); }); } diff --git a/paths/curves/webpack.config.js b/paths/curves/webpack.config.js deleted file mode 100644 index 4aaa3c4def9..00000000000 --- a/paths/curves/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPath } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPath({ - moduleName: "curves", - pluginName: "Curves", - version, - dir: __dirname, - progress: false, -}); diff --git a/paths/fractalNoise/CHANGELOG.md b/paths/fractalNoise/CHANGELOG.md index d5fc0795062..1030666fd89 100644 --- a/paths/fractalNoise/CHANGELOG.md +++ b/paths/fractalNoise/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/path-fractal-noise + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/path-fractal-noise diff --git a/paths/fractalNoise/package.dist.json b/paths/fractalNoise/package.dist.json index ce88398e124..7321367ea70 100644 --- a/paths/fractalNoise/package.dist.json +++ b/paths/fractalNoise/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/path-fractal-noise", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles fractal noise path", "homepage": "https://particles.js.org", "repository": { @@ -100,13 +100,20 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12", - "@tsparticles/fractal-noise": "4.0.0-beta.12", - "@tsparticles/noise-field": "4.0.0-beta.12", - "@tsparticles/plugin-move": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/fractal-noise": "4.0.0-beta.15", + "@tsparticles/noise-field": "4.0.0-beta.15", + "@tsparticles/plugin-move": "4.0.0-beta.15" }, "type": "module" } diff --git a/paths/fractalNoise/package.json b/paths/fractalNoise/package.json index 8d0f42d8e52..aeef51f7787 100644 --- a/paths/fractalNoise/package.json +++ b/paths/fractalNoise/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/path-fractal-noise", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles fractal noise path", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -104,6 +104,13 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { @@ -113,6 +120,8 @@ "@tsparticles/plugin-move": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*", "@tsparticles/fractal-noise": "workspace:*", "@tsparticles/noise-field": "workspace:*", diff --git a/paths/fractalNoise/rollup.config.js b/paths/fractalNoise/rollup.config.js new file mode 100644 index 00000000000..557d9479aa7 --- /dev/null +++ b/paths/fractalNoise/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPath } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPath({ + moduleName: "fractal.noise", + pluginName: "Fractal Noise", + version, + dir: __dirname, + progress: false, +}); diff --git a/paths/fractalNoise/src/browser.ts b/paths/fractalNoise/src/browser.ts new file mode 100644 index 00000000000..b7d35de8785 --- /dev/null +++ b/paths/fractalNoise/src/browser.ts @@ -0,0 +1,10 @@ +import { loadFractalNoisePath } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadFractalNoisePath?: typeof loadFractalNoisePath; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadFractalNoisePath = loadFractalNoisePath; + +export * from "./index.js"; diff --git a/paths/fractalNoise/src/index.lazy.ts b/paths/fractalNoise/src/index.lazy.ts new file mode 100644 index 00000000000..787ad0dbbf2 --- /dev/null +++ b/paths/fractalNoise/src/index.lazy.ts @@ -0,0 +1,25 @@ +import type { Engine } from "@tsparticles/engine/lazy"; +import type { MoveEngine } from "@tsparticles/plugin-move/lazy"; + +declare const __VERSION__: string; + +export const fractalNoisePathName = "fractalNoise"; + +/** + * @param engine - + */ +export async function loadFractalNoisePath(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async (e: MoveEngine) => { + const { ensureBaseMoverLoaded } = await import("@tsparticles/plugin-move/lazy"); + + ensureBaseMoverLoaded(e); + + e.pluginManager.addPathGenerator?.(fractalNoisePathName, async container => { + const { FractalNoiseGenerator } = await import("./FractalNoiseGenerator.js"); + + return new FractalNoiseGenerator(container); + }); + }); +} diff --git a/paths/fractalNoise/src/index.ts b/paths/fractalNoise/src/index.ts index e6be4f7582b..29fc030cd28 100644 --- a/paths/fractalNoise/src/index.ts +++ b/paths/fractalNoise/src/index.ts @@ -1,5 +1,6 @@ +import { type MoveEngine, ensureBaseMoverLoaded } from "@tsparticles/plugin-move"; import { type Engine } from "@tsparticles/engine"; -import { type MoveEngine } from "@tsparticles/plugin-move"; +import { FractalNoiseGenerator } from "./FractalNoiseGenerator.js"; declare const __VERSION__: string; @@ -11,15 +12,11 @@ export const fractalNoisePathName = "fractalNoise"; export async function loadFractalNoisePath(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async (e: MoveEngine) => { - const { ensureBaseMoverLoaded } = await import("@tsparticles/plugin-move"); - + await engine.pluginManager.register((e: MoveEngine) => { ensureBaseMoverLoaded(e); - e.pluginManager.addPathGenerator?.(fractalNoisePathName, async container => { - const { FractalNoiseGenerator } = await import("./FractalNoiseGenerator.js"); - - return new FractalNoiseGenerator(container); + e.pluginManager.addPathGenerator?.(fractalNoisePathName, container => { + return Promise.resolve(new FractalNoiseGenerator(container)); }); }); } diff --git a/paths/fractalNoise/webpack.config.js b/paths/fractalNoise/webpack.config.js deleted file mode 100644 index a0058857e28..00000000000 --- a/paths/fractalNoise/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPath } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPath({ - moduleName: "fractal.noise", - pluginName: "Fractal Noise", - version, - dir: __dirname, - progress: false, -}); diff --git a/paths/grid/CHANGELOG.md b/paths/grid/CHANGELOG.md index 39cbf8a329d..e269274982c 100644 --- a/paths/grid/CHANGELOG.md +++ b/paths/grid/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/path-grid + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/path-grid diff --git a/paths/grid/package.dist.json b/paths/grid/package.dist.json index 87b4263a97e..20bfded8d3b 100644 --- a/paths/grid/package.dist.json +++ b/paths/grid/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/path-grid", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles grid path", "homepage": "https://particles.js.org", "repository": { @@ -100,11 +100,18 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12", - "@tsparticles/plugin-move": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/plugin-move": "4.0.0-beta.15" }, "type": "module" } diff --git a/paths/grid/package.json b/paths/grid/package.json index 44fc45b6013..547450cdfa2 100644 --- a/paths/grid/package.json +++ b/paths/grid/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/path-grid", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles grid path", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -104,6 +104,13 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { @@ -111,6 +118,8 @@ "@tsparticles/plugin-move": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*", "@tsparticles/plugin-move": "workspace:*" }, diff --git a/paths/grid/rollup.config.js b/paths/grid/rollup.config.js new file mode 100644 index 00000000000..6421301bc18 --- /dev/null +++ b/paths/grid/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPath } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPath({ + moduleName: "grid", + pluginName: "Grid Path", + version, + dir: __dirname, + progress: false, +}); diff --git a/paths/grid/src/browser.ts b/paths/grid/src/browser.ts new file mode 100644 index 00000000000..5ef40a0c9e3 --- /dev/null +++ b/paths/grid/src/browser.ts @@ -0,0 +1,10 @@ +import { loadGridPath } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadGridPath?: typeof loadGridPath; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadGridPath = loadGridPath; + +export * from "./index.js"; diff --git a/paths/grid/src/index.lazy.ts b/paths/grid/src/index.lazy.ts new file mode 100644 index 00000000000..3f8cd5eaff1 --- /dev/null +++ b/paths/grid/src/index.lazy.ts @@ -0,0 +1,25 @@ +import type { Engine } from "@tsparticles/engine/lazy"; +import type { MoveEngine } from "@tsparticles/plugin-move/lazy"; + +declare const __VERSION__: string; + +export const gridPathName = "gridPathGenerator"; + +/** + * @param engine - + */ +export async function loadGridPath(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async (e: MoveEngine) => { + const { ensureBaseMoverLoaded } = await import("@tsparticles/plugin-move/lazy"); + + ensureBaseMoverLoaded(e); + + e.pluginManager.addPathGenerator?.(gridPathName, async container => { + const { GridPathGenerator } = await import("./GridPathGenerator.js"); + + return new GridPathGenerator(container); + }); + }); +} diff --git a/paths/grid/src/index.ts b/paths/grid/src/index.ts index 3f396a97779..de83a09a095 100644 --- a/paths/grid/src/index.ts +++ b/paths/grid/src/index.ts @@ -1,5 +1,6 @@ +import { type MoveEngine, ensureBaseMoverLoaded } from "@tsparticles/plugin-move"; import type { Engine } from "@tsparticles/engine"; -import type { MoveEngine } from "@tsparticles/plugin-move"; +import { GridPathGenerator } from "./GridPathGenerator.js"; declare const __VERSION__: string; @@ -11,15 +12,11 @@ export const gridPathName = "gridPathGenerator"; export async function loadGridPath(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async (e: MoveEngine) => { - const { ensureBaseMoverLoaded } = await import("@tsparticles/plugin-move"); - + await engine.pluginManager.register((e: MoveEngine) => { ensureBaseMoverLoaded(e); - e.pluginManager.addPathGenerator?.(gridPathName, async container => { - const { GridPathGenerator } = await import("./GridPathGenerator.js"); - - return new GridPathGenerator(container); + e.pluginManager.addPathGenerator?.(gridPathName, container => { + return Promise.resolve(new GridPathGenerator(container)); }); }); } diff --git a/paths/grid/webpack.config.js b/paths/grid/webpack.config.js deleted file mode 100644 index 41e7c63c4e0..00000000000 --- a/paths/grid/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPath } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPath({ - moduleName: "grid", - pluginName: "Grid Path", - version, - dir: __dirname, - progress: false, -}); diff --git a/paths/levy/CHANGELOG.md b/paths/levy/CHANGELOG.md index a4006190fed..dc9de963d33 100644 --- a/paths/levy/CHANGELOG.md +++ b/paths/levy/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/path-levy + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/path-levy diff --git a/paths/levy/package.dist.json b/paths/levy/package.dist.json index 7f1ffd72e54..5754a1ce85a 100644 --- a/paths/levy/package.dist.json +++ b/paths/levy/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/path-levy", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles levy path", "homepage": "https://particles.js.org", "repository": { @@ -100,11 +100,18 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12", - "@tsparticles/plugin-move": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/plugin-move": "4.0.0-beta.15" }, "type": "module" } diff --git a/paths/levy/package.json b/paths/levy/package.json index 6f12cd1cc0b..8af91a9ad04 100644 --- a/paths/levy/package.json +++ b/paths/levy/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/path-levy", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles levy path", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -104,6 +104,13 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { @@ -111,6 +118,8 @@ "@tsparticles/plugin-move": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*", "@tsparticles/plugin-move": "workspace:*" }, diff --git a/paths/levy/rollup.config.js b/paths/levy/rollup.config.js new file mode 100644 index 00000000000..df37dfa1cbb --- /dev/null +++ b/paths/levy/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPath } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPath({ + moduleName: "levy", + pluginName: "Levy", + version, + dir: __dirname, + progress: false, +}); diff --git a/paths/levy/src/browser.ts b/paths/levy/src/browser.ts new file mode 100644 index 00000000000..c36aa32a855 --- /dev/null +++ b/paths/levy/src/browser.ts @@ -0,0 +1,10 @@ +import { loadLevyPath } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadLevyPath?: typeof loadLevyPath; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadLevyPath = loadLevyPath; + +export * from "./index.js"; diff --git a/paths/levy/src/index.lazy.ts b/paths/levy/src/index.lazy.ts new file mode 100644 index 00000000000..3a9bdaeabd3 --- /dev/null +++ b/paths/levy/src/index.lazy.ts @@ -0,0 +1,25 @@ +import type { Engine } from "@tsparticles/engine/lazy"; +import type { MoveEngine } from "@tsparticles/plugin-move/lazy"; + +declare const __VERSION__: string; + +export const levyPathName = "levyPathGenerator"; + +/** + * @param engine - + */ +export async function loadLevyPath(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async (e: MoveEngine) => { + const { ensureBaseMoverLoaded } = await import("@tsparticles/plugin-move/lazy"); + + ensureBaseMoverLoaded(e); + + e.pluginManager.addPathGenerator?.(levyPathName, async container => { + const { LevyPathGenerator } = await import("./LevyPathGenerator.js"); + + return new LevyPathGenerator(container); + }); + }); +} diff --git a/paths/levy/src/index.ts b/paths/levy/src/index.ts index 24dc5d1f7f8..1f35349d693 100644 --- a/paths/levy/src/index.ts +++ b/paths/levy/src/index.ts @@ -1,5 +1,6 @@ +import { type MoveEngine, ensureBaseMoverLoaded } from "@tsparticles/plugin-move"; import type { Engine } from "@tsparticles/engine"; -import type { MoveEngine } from "@tsparticles/plugin-move"; +import { LevyPathGenerator } from "./LevyPathGenerator.js"; declare const __VERSION__: string; @@ -11,15 +12,11 @@ export const levyPathName = "levyPathGenerator"; export async function loadLevyPath(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async (e: MoveEngine) => { - const { ensureBaseMoverLoaded } = await import("@tsparticles/plugin-move"); - + await engine.pluginManager.register((e: MoveEngine) => { ensureBaseMoverLoaded(e); - e.pluginManager.addPathGenerator?.(levyPathName, async container => { - const { LevyPathGenerator } = await import("./LevyPathGenerator.js"); - - return new LevyPathGenerator(container); + e.pluginManager.addPathGenerator?.(levyPathName, container => { + return Promise.resolve(new LevyPathGenerator(container)); }); }); } diff --git a/paths/levy/webpack.config.js b/paths/levy/webpack.config.js deleted file mode 100644 index 2362096167c..00000000000 --- a/paths/levy/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPath } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPath({ - moduleName: "levy", - pluginName: "Levy", - version, - dir: __dirname, - progress: false, -}); diff --git a/paths/perlinNoise/CHANGELOG.md b/paths/perlinNoise/CHANGELOG.md index bf684e4fbe8..6132038b6e0 100644 --- a/paths/perlinNoise/CHANGELOG.md +++ b/paths/perlinNoise/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/path-perlin-noise + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/path-perlin-noise diff --git a/paths/perlinNoise/package.dist.json b/paths/perlinNoise/package.dist.json index be5ed816b2d..361d6af113c 100644 --- a/paths/perlinNoise/package.dist.json +++ b/paths/perlinNoise/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/path-perlin-noise", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles perlin noise path", "homepage": "https://particles.js.org", "repository": { @@ -100,13 +100,20 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12", - "@tsparticles/noise-field": "4.0.0-beta.12", - "@tsparticles/perlin-noise": "4.0.0-beta.12", - "@tsparticles/plugin-move": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/noise-field": "4.0.0-beta.15", + "@tsparticles/perlin-noise": "4.0.0-beta.15", + "@tsparticles/plugin-move": "4.0.0-beta.15" }, "type": "module" } diff --git a/paths/perlinNoise/package.json b/paths/perlinNoise/package.json index 4d0cd66b5f7..1287b4c9ab4 100644 --- a/paths/perlinNoise/package.json +++ b/paths/perlinNoise/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/path-perlin-noise", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles perlin noise path", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -104,6 +104,13 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { @@ -113,6 +120,8 @@ "@tsparticles/plugin-move": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*", "@tsparticles/noise-field": "workspace:*", "@tsparticles/perlin-noise": "workspace:*", diff --git a/paths/perlinNoise/rollup.config.js b/paths/perlinNoise/rollup.config.js new file mode 100644 index 00000000000..29db724b54d --- /dev/null +++ b/paths/perlinNoise/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPath } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPath({ + moduleName: "perlin.noise", + pluginName: "Perlin Noise", + version, + dir: __dirname, + progress: false, +}); diff --git a/paths/perlinNoise/src/browser.ts b/paths/perlinNoise/src/browser.ts new file mode 100644 index 00000000000..9b1b1ceadc8 --- /dev/null +++ b/paths/perlinNoise/src/browser.ts @@ -0,0 +1,10 @@ +import { loadPerlinNoisePath } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadPerlinNoisePath?: typeof loadPerlinNoisePath; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadPerlinNoisePath = loadPerlinNoisePath; + +export * from "./index.js"; diff --git a/paths/perlinNoise/src/index.lazy.ts b/paths/perlinNoise/src/index.lazy.ts new file mode 100644 index 00000000000..b2c9d48722a --- /dev/null +++ b/paths/perlinNoise/src/index.lazy.ts @@ -0,0 +1,25 @@ +import type { Engine } from "@tsparticles/engine/lazy"; +import type { MoveEngine } from "@tsparticles/plugin-move/lazy"; + +declare const __VERSION__: string; + +export const perlinNoisePathName = "perlinNoise"; + +/** + * @param engine - + */ +export async function loadPerlinNoisePath(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async (e: MoveEngine) => { + const { ensureBaseMoverLoaded } = await import("@tsparticles/plugin-move/lazy"); + + ensureBaseMoverLoaded(e); + + e.pluginManager.addPathGenerator?.(perlinNoisePathName, async container => { + const { PerlinNoiseGenerator } = await import("./PerlinNoiseGenerator.js"); + + return new PerlinNoiseGenerator(container); + }); + }); +} diff --git a/paths/perlinNoise/src/index.ts b/paths/perlinNoise/src/index.ts index 7e638f500af..36c7ff04474 100644 --- a/paths/perlinNoise/src/index.ts +++ b/paths/perlinNoise/src/index.ts @@ -1,5 +1,6 @@ +import { type MoveEngine, ensureBaseMoverLoaded } from "@tsparticles/plugin-move"; import { type Engine } from "@tsparticles/engine"; -import { type MoveEngine } from "@tsparticles/plugin-move"; +import { PerlinNoiseGenerator } from "./PerlinNoiseGenerator.js"; declare const __VERSION__: string; @@ -11,15 +12,11 @@ export const perlinNoisePathName = "perlinNoise"; export async function loadPerlinNoisePath(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async (e: MoveEngine) => { - const { ensureBaseMoverLoaded } = await import("@tsparticles/plugin-move"); - + await engine.pluginManager.register((e: MoveEngine) => { ensureBaseMoverLoaded(e); - e.pluginManager.addPathGenerator?.(perlinNoisePathName, async container => { - const { PerlinNoiseGenerator } = await import("./PerlinNoiseGenerator.js"); - - return new PerlinNoiseGenerator(container); + e.pluginManager.addPathGenerator?.(perlinNoisePathName, container => { + return Promise.resolve(new PerlinNoiseGenerator(container)); }); }); } diff --git a/paths/perlinNoise/webpack.config.js b/paths/perlinNoise/webpack.config.js deleted file mode 100644 index ed77f1843ba..00000000000 --- a/paths/perlinNoise/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPath } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPath({ - moduleName: "perlin.noise", - pluginName: "Perlin Noise", - version, - dir: __dirname, - progress: false, -}); diff --git a/paths/polygon/CHANGELOG.md b/paths/polygon/CHANGELOG.md index fc86675b686..8a6e4235a3c 100644 --- a/paths/polygon/CHANGELOG.md +++ b/paths/polygon/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/path-polygon + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/path-polygon diff --git a/paths/polygon/package.dist.json b/paths/polygon/package.dist.json index 9385d93c790..0d520021bf1 100644 --- a/paths/polygon/package.dist.json +++ b/paths/polygon/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/path-polygon", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles polygon path", "homepage": "https://particles.js.org", "repository": { @@ -100,11 +100,18 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12", - "@tsparticles/plugin-move": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/plugin-move": "4.0.0-beta.15" }, "type": "module" } diff --git a/paths/polygon/package.json b/paths/polygon/package.json index 046ca4408e5..df15ce07822 100644 --- a/paths/polygon/package.json +++ b/paths/polygon/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/path-polygon", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles polygon path", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -104,6 +104,13 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { @@ -111,6 +118,8 @@ "@tsparticles/plugin-move": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*", "@tsparticles/plugin-move": "workspace:*" }, diff --git a/paths/polygon/rollup.config.js b/paths/polygon/rollup.config.js new file mode 100644 index 00000000000..d1f0a0e6352 --- /dev/null +++ b/paths/polygon/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPath } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPath({ + moduleName: "polygon", + pluginName: "Polygon", + version, + dir: __dirname, + progress: false, +}); diff --git a/paths/polygon/src/browser.ts b/paths/polygon/src/browser.ts new file mode 100644 index 00000000000..b44d96608f8 --- /dev/null +++ b/paths/polygon/src/browser.ts @@ -0,0 +1,10 @@ +import { loadPolygonPath } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadPolygonPath?: typeof loadPolygonPath; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadPolygonPath = loadPolygonPath; + +export * from "./index.js"; diff --git a/paths/polygon/src/index.lazy.ts b/paths/polygon/src/index.lazy.ts new file mode 100644 index 00000000000..e9443b051ab --- /dev/null +++ b/paths/polygon/src/index.lazy.ts @@ -0,0 +1,25 @@ +import type { Engine } from "@tsparticles/engine/lazy"; +import type { MoveEngine } from "@tsparticles/plugin-move/lazy"; + +declare const __VERSION__: string; + +export const polygonPathName = "polygonPathGenerator"; + +/** + * @param engine - + */ +export async function loadPolygonPath(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async (e: MoveEngine) => { + const { ensureBaseMoverLoaded } = await import("@tsparticles/plugin-move/lazy"); + + ensureBaseMoverLoaded(e); + + e.pluginManager.addPathGenerator?.(polygonPathName, async container => { + const { PolygonPathGenerator } = await import("./PolygonPathGenerator.js"); + + return new PolygonPathGenerator(container); + }); + }); +} diff --git a/paths/polygon/src/index.ts b/paths/polygon/src/index.ts index c54842fa7b4..8eb702966b0 100644 --- a/paths/polygon/src/index.ts +++ b/paths/polygon/src/index.ts @@ -1,5 +1,6 @@ +import { type MoveEngine, ensureBaseMoverLoaded } from "@tsparticles/plugin-move"; import { type Engine } from "@tsparticles/engine"; -import { type MoveEngine } from "@tsparticles/plugin-move"; +import { PolygonPathGenerator } from "./PolygonPathGenerator.js"; declare const __VERSION__: string; @@ -11,15 +12,11 @@ export const polygonPathName = "polygonPathGenerator"; export async function loadPolygonPath(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async (e: MoveEngine) => { - const { ensureBaseMoverLoaded } = await import("@tsparticles/plugin-move"); - + await engine.pluginManager.register((e: MoveEngine) => { ensureBaseMoverLoaded(e); - e.pluginManager.addPathGenerator?.(polygonPathName, async container => { - const { PolygonPathGenerator } = await import("./PolygonPathGenerator.js"); - - return new PolygonPathGenerator(container); + e.pluginManager.addPathGenerator?.(polygonPathName, container => { + return Promise.resolve(new PolygonPathGenerator(container)); }); }); } diff --git a/paths/polygon/webpack.config.js b/paths/polygon/webpack.config.js deleted file mode 100644 index 09f5077b754..00000000000 --- a/paths/polygon/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPath } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPath({ - moduleName: "polygon", - pluginName: "Polygon", - version, - dir: __dirname, - progress: false, -}); diff --git a/paths/random/CHANGELOG.md b/paths/random/CHANGELOG.md index 65be8c9a1f2..08fad9146e6 100644 --- a/paths/random/CHANGELOG.md +++ b/paths/random/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/path-random + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/path-random diff --git a/paths/random/package.dist.json b/paths/random/package.dist.json index b0d412c3d07..d902a9e37d0 100644 --- a/paths/random/package.dist.json +++ b/paths/random/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/path-random", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles zig zag path", "homepage": "https://particles.js.org", "repository": { @@ -97,11 +97,18 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12", - "@tsparticles/plugin-move": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/plugin-move": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/paths/random/package.json b/paths/random/package.json index 75f4a3592f5..1a0177b75cb 100644 --- a/paths/random/package.json +++ b/paths/random/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/path-random", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles zig zag path", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -104,6 +104,13 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { @@ -111,6 +118,8 @@ "@tsparticles/plugin-move": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*", "@tsparticles/plugin-move": "workspace:*" }, diff --git a/paths/random/rollup.config.js b/paths/random/rollup.config.js new file mode 100644 index 00000000000..7e234a50fde --- /dev/null +++ b/paths/random/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPath } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPath({ + moduleName: "random", + pluginName: "Random", + version, + dir: __dirname, + progress: false, +}); diff --git a/paths/random/src/browser.ts b/paths/random/src/browser.ts new file mode 100644 index 00000000000..1fb9f7f53a2 --- /dev/null +++ b/paths/random/src/browser.ts @@ -0,0 +1,10 @@ +import { loadRandomPath } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadRandomPath?: typeof loadRandomPath; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadRandomPath = loadRandomPath; + +export * from "./index.js"; diff --git a/paths/random/src/index.lazy.ts b/paths/random/src/index.lazy.ts new file mode 100644 index 00000000000..583eff05e35 --- /dev/null +++ b/paths/random/src/index.lazy.ts @@ -0,0 +1,25 @@ +import type { Engine } from "@tsparticles/engine/lazy"; +import type { MoveEngine } from "@tsparticles/plugin-move/lazy"; + +declare const __VERSION__: string; + +export const randomPathName = "randomPathGenerator"; + +/** + * @param engine - + */ +export async function loadRandomPath(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async (e: MoveEngine) => { + const { ensureBaseMoverLoaded } = await import("@tsparticles/plugin-move/lazy"); + + ensureBaseMoverLoaded(e); + + e.pluginManager.addPathGenerator?.(randomPathName, async () => { + const { RandomPathGenerator } = await import("./RandomPathGenerator.js"); + + return new RandomPathGenerator(); + }); + }); +} diff --git a/paths/random/src/index.ts b/paths/random/src/index.ts index e6e242a0357..713105492bb 100644 --- a/paths/random/src/index.ts +++ b/paths/random/src/index.ts @@ -1,5 +1,6 @@ +import { type MoveEngine, ensureBaseMoverLoaded } from "@tsparticles/plugin-move"; import { type Engine } from "@tsparticles/engine"; -import { type MoveEngine } from "@tsparticles/plugin-move"; +import { RandomPathGenerator } from "./RandomPathGenerator.js"; declare const __VERSION__: string; @@ -11,15 +12,11 @@ export const randomPathName = "randomPathGenerator"; export async function loadRandomPath(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async (e: MoveEngine) => { - const { ensureBaseMoverLoaded } = await import("@tsparticles/plugin-move"); - + await engine.pluginManager.register((e: MoveEngine) => { ensureBaseMoverLoaded(e); - e.pluginManager.addPathGenerator?.(randomPathName, async () => { - const { RandomPathGenerator } = await import("./RandomPathGenerator.js"); - - return new RandomPathGenerator(); + e.pluginManager.addPathGenerator?.(randomPathName, () => { + return Promise.resolve(new RandomPathGenerator()); }); }); } diff --git a/paths/random/webpack.config.js b/paths/random/webpack.config.js deleted file mode 100644 index 88110e5ec9d..00000000000 --- a/paths/random/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPath } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPath({ - moduleName: "random", - pluginName: "Random", - version, - dir: __dirname, - progress: false, -}); diff --git a/paths/simplexNoise/CHANGELOG.md b/paths/simplexNoise/CHANGELOG.md index 477692a973c..a8a0ca4c17f 100644 --- a/paths/simplexNoise/CHANGELOG.md +++ b/paths/simplexNoise/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/path-simplex-noise + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/path-simplex-noise diff --git a/paths/simplexNoise/package.dist.json b/paths/simplexNoise/package.dist.json index cc38f4de239..fa02707fb3a 100644 --- a/paths/simplexNoise/package.dist.json +++ b/paths/simplexNoise/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/path-simplex-noise", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles simplex noise path", "homepage": "https://particles.js.org", "repository": { @@ -100,13 +100,20 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12", - "@tsparticles/noise-field": "4.0.0-beta.12", - "@tsparticles/plugin-move": "4.0.0-beta.12", - "@tsparticles/simplex-noise": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/noise-field": "4.0.0-beta.15", + "@tsparticles/plugin-move": "4.0.0-beta.15", + "@tsparticles/simplex-noise": "4.0.0-beta.15" }, "type": "module" } diff --git a/paths/simplexNoise/package.json b/paths/simplexNoise/package.json index 21239a6a6f4..d876f012711 100644 --- a/paths/simplexNoise/package.json +++ b/paths/simplexNoise/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/path-simplex-noise", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles simplex noise path", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -90,6 +90,13 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { @@ -99,6 +106,8 @@ "@tsparticles/simplex-noise": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*", "@tsparticles/noise-field": "workspace:*", "@tsparticles/plugin-move": "workspace:*", diff --git a/paths/simplexNoise/rollup.config.js b/paths/simplexNoise/rollup.config.js new file mode 100644 index 00000000000..f318842c712 --- /dev/null +++ b/paths/simplexNoise/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPath } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPath({ + moduleName: "simplex.noise", + pluginName: "Simplex Noise", + version, + dir: __dirname, + progress: false, +}); diff --git a/paths/simplexNoise/src/browser.ts b/paths/simplexNoise/src/browser.ts new file mode 100644 index 00000000000..67c982a5c8b --- /dev/null +++ b/paths/simplexNoise/src/browser.ts @@ -0,0 +1,10 @@ +import { loadSimplexNoisePath } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadSimplexNoisePath?: typeof loadSimplexNoisePath; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadSimplexNoisePath = loadSimplexNoisePath; + +export * from "./index.js"; diff --git a/paths/simplexNoise/src/index.lazy.ts b/paths/simplexNoise/src/index.lazy.ts new file mode 100644 index 00000000000..11272e46a7b --- /dev/null +++ b/paths/simplexNoise/src/index.lazy.ts @@ -0,0 +1,25 @@ +import type { Engine } from "@tsparticles/engine/lazy"; +import type { MoveEngine } from "@tsparticles/plugin-move/lazy"; + +declare const __VERSION__: string; + +export const simplexNoisePathName = "simplexNoise"; + +/** + * @param engine - + */ +export async function loadSimplexNoisePath(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async (e: MoveEngine) => { + const { ensureBaseMoverLoaded } = await import("@tsparticles/plugin-move/lazy"); + + ensureBaseMoverLoaded(e); + + e.pluginManager.addPathGenerator?.(simplexNoisePathName, async container => { + const { SimplexNoiseGenerator } = await import("./SimplexNoiseGenerator.js"); + + return new SimplexNoiseGenerator(container); + }); + }); +} diff --git a/paths/simplexNoise/src/index.ts b/paths/simplexNoise/src/index.ts index 4f5a52f7aea..31a7b1630f1 100644 --- a/paths/simplexNoise/src/index.ts +++ b/paths/simplexNoise/src/index.ts @@ -1,5 +1,6 @@ +import { type MoveEngine, ensureBaseMoverLoaded } from "@tsparticles/plugin-move"; import { type Engine } from "@tsparticles/engine"; -import { type MoveEngine } from "@tsparticles/plugin-move"; +import { SimplexNoiseGenerator } from "./SimplexNoiseGenerator.js"; declare const __VERSION__: string; @@ -11,15 +12,11 @@ export const simplexNoisePathName = "simplexNoise"; export async function loadSimplexNoisePath(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async (e: MoveEngine) => { - const { ensureBaseMoverLoaded } = await import("@tsparticles/plugin-move"); - + await engine.pluginManager.register((e: MoveEngine) => { ensureBaseMoverLoaded(e); - e.pluginManager.addPathGenerator?.(simplexNoisePathName, async container => { - const { SimplexNoiseGenerator } = await import("./SimplexNoiseGenerator.js"); - - return new SimplexNoiseGenerator(container); + e.pluginManager.addPathGenerator?.(simplexNoisePathName, container => { + return Promise.resolve(new SimplexNoiseGenerator(container)); }); }); } diff --git a/paths/simplexNoise/webpack.config.js b/paths/simplexNoise/webpack.config.js deleted file mode 100644 index 347590307d5..00000000000 --- a/paths/simplexNoise/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPath } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPath({ - moduleName: "simplex.noise", - pluginName: "Simplex Noise", - version, - dir: __dirname, - progress: false, -}); diff --git a/paths/spiral/CHANGELOG.md b/paths/spiral/CHANGELOG.md index 8cd181003b9..be78e6c8e1f 100644 --- a/paths/spiral/CHANGELOG.md +++ b/paths/spiral/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/path-spiral + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/path-spiral diff --git a/paths/spiral/package.dist.json b/paths/spiral/package.dist.json index 8c50a4fe028..11d7783aba7 100644 --- a/paths/spiral/package.dist.json +++ b/paths/spiral/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/path-spiral", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles spiral path", "homepage": "https://particles.js.org", "repository": { @@ -100,11 +100,18 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12", - "@tsparticles/plugin-move": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/plugin-move": "4.0.0-beta.15" }, "type": "module" } diff --git a/paths/spiral/package.json b/paths/spiral/package.json index ff4ca9b57ea..d9bf9d40dc9 100644 --- a/paths/spiral/package.json +++ b/paths/spiral/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/path-spiral", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles spiral path", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -104,6 +104,13 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { @@ -111,6 +118,8 @@ "@tsparticles/plugin-move": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*", "@tsparticles/plugin-move": "workspace:*" }, diff --git a/paths/spiral/rollup.config.js b/paths/spiral/rollup.config.js new file mode 100644 index 00000000000..78589e3a455 --- /dev/null +++ b/paths/spiral/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPath } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPath({ + moduleName: "spiral", + pluginName: "Spiral", + version, + dir: __dirname, + progress: false, +}); diff --git a/paths/spiral/src/browser.ts b/paths/spiral/src/browser.ts new file mode 100644 index 00000000000..6e1bb255870 --- /dev/null +++ b/paths/spiral/src/browser.ts @@ -0,0 +1,10 @@ +import { loadSpiralPath } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadSpiralPath?: typeof loadSpiralPath; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadSpiralPath = loadSpiralPath; + +export * from "./index.js"; diff --git a/paths/spiral/src/index.lazy.ts b/paths/spiral/src/index.lazy.ts new file mode 100644 index 00000000000..1b813bb10ef --- /dev/null +++ b/paths/spiral/src/index.lazy.ts @@ -0,0 +1,25 @@ +import type { Engine } from "@tsparticles/engine/lazy"; +import type { MoveEngine } from "@tsparticles/plugin-move/lazy"; + +declare const __VERSION__: string; + +export const spiralPathName = "spiralPathGenerator"; + +/** + * @param engine - + */ +export async function loadSpiralPath(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async (e: MoveEngine) => { + const { ensureBaseMoverLoaded } = await import("@tsparticles/plugin-move/lazy"); + + ensureBaseMoverLoaded(e); + + e.pluginManager.addPathGenerator?.(spiralPathName, async container => { + const { SpiralPathGenerator } = await import("./SpiralPathGenerator.js"); + + return new SpiralPathGenerator(container); + }); + }); +} diff --git a/paths/spiral/src/index.ts b/paths/spiral/src/index.ts index 36ee53bdf7f..b3015309782 100644 --- a/paths/spiral/src/index.ts +++ b/paths/spiral/src/index.ts @@ -1,5 +1,6 @@ +import { type MoveEngine, ensureBaseMoverLoaded } from "@tsparticles/plugin-move"; import type { Engine } from "@tsparticles/engine"; -import type { MoveEngine } from "@tsparticles/plugin-move"; +import { SpiralPathGenerator } from "./SpiralPathGenerator.js"; declare const __VERSION__: string; @@ -11,15 +12,11 @@ export const spiralPathName = "spiralPathGenerator"; export async function loadSpiralPath(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async (e: MoveEngine) => { - const { ensureBaseMoverLoaded } = await import("@tsparticles/plugin-move"); - + await engine.pluginManager.register((e: MoveEngine) => { ensureBaseMoverLoaded(e); - e.pluginManager.addPathGenerator?.(spiralPathName, async container => { - const { SpiralPathGenerator } = await import("./SpiralPathGenerator.js"); - - return new SpiralPathGenerator(container); + e.pluginManager.addPathGenerator?.(spiralPathName, container => { + return Promise.resolve(new SpiralPathGenerator(container)); }); }); } diff --git a/paths/spiral/webpack.config.js b/paths/spiral/webpack.config.js deleted file mode 100644 index 0cf550bb5cf..00000000000 --- a/paths/spiral/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPath } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPath({ - moduleName: "spiral", - pluginName: "Spiral", - version, - dir: __dirname, - progress: false, -}); diff --git a/paths/svg/CHANGELOG.md b/paths/svg/CHANGELOG.md index 5f77b03943e..3e911c0d241 100644 --- a/paths/svg/CHANGELOG.md +++ b/paths/svg/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/path-svg + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/path-svg diff --git a/paths/svg/package.dist.json b/paths/svg/package.dist.json index 073980ce76a..9acb4cd5d3c 100644 --- a/paths/svg/package.dist.json +++ b/paths/svg/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/path-svg", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles svg path", "homepage": "https://particles.js.org", "repository": { @@ -97,11 +97,18 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12", - "@tsparticles/plugin-move": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/plugin-move": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/paths/svg/package.json b/paths/svg/package.json index d089ae78e52..852d44223b2 100644 --- a/paths/svg/package.json +++ b/paths/svg/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/path-svg", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles svg path", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -104,6 +104,13 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { @@ -111,6 +118,8 @@ "@tsparticles/plugin-move": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*", "@tsparticles/plugin-move": "workspace:*" }, diff --git a/paths/svg/rollup.config.js b/paths/svg/rollup.config.js new file mode 100644 index 00000000000..c12875132f3 --- /dev/null +++ b/paths/svg/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPath } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPath({ + moduleName: "svg", + pluginName: "SVG", + version, + dir: __dirname, + progress: false, +}); diff --git a/paths/svg/src/browser.ts b/paths/svg/src/browser.ts new file mode 100644 index 00000000000..eca81d1e414 --- /dev/null +++ b/paths/svg/src/browser.ts @@ -0,0 +1,10 @@ +import { loadSVGPath } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadSVGPath?: typeof loadSVGPath; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadSVGPath = loadSVGPath; + +export * from "./index.js"; diff --git a/paths/svg/src/index.lazy.ts b/paths/svg/src/index.lazy.ts new file mode 100644 index 00000000000..de3c6d12a50 --- /dev/null +++ b/paths/svg/src/index.lazy.ts @@ -0,0 +1,25 @@ +import type { Engine } from "@tsparticles/engine/lazy"; +import type { MoveEngine } from "@tsparticles/plugin-move/lazy"; + +declare const __VERSION__: string; + +export const svgPathName = "svgPathGenerator"; + +/** + * @param engine - + */ +export async function loadSVGPath(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async (e: MoveEngine) => { + const { ensureBaseMoverLoaded } = await import("@tsparticles/plugin-move/lazy"); + + ensureBaseMoverLoaded(e); + + e.pluginManager.addPathGenerator?.(svgPathName, async container => { + const { SVGPathGenerator } = await import("./SVGPathGenerator.js"); + + return new SVGPathGenerator(container); + }); + }); +} diff --git a/paths/svg/src/index.ts b/paths/svg/src/index.ts index 5f3ba5157f0..d2e449070a8 100644 --- a/paths/svg/src/index.ts +++ b/paths/svg/src/index.ts @@ -1,5 +1,6 @@ +import { type MoveEngine, ensureBaseMoverLoaded } from "@tsparticles/plugin-move"; import { type Engine } from "@tsparticles/engine"; -import { type MoveEngine } from "@tsparticles/plugin-move"; +import { SVGPathGenerator } from "./SVGPathGenerator.js"; declare const __VERSION__: string; @@ -11,15 +12,11 @@ export const svgPathName = "svgPathGenerator"; export async function loadSVGPath(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async (e: MoveEngine) => { - const { ensureBaseMoverLoaded } = await import("@tsparticles/plugin-move"); - + await engine.pluginManager.register((e: MoveEngine) => { ensureBaseMoverLoaded(e); - e.pluginManager.addPathGenerator?.(svgPathName, async container => { - const { SVGPathGenerator } = await import("./SVGPathGenerator.js"); - - return new SVGPathGenerator(container); + e.pluginManager.addPathGenerator?.(svgPathName, container => { + return Promise.resolve(new SVGPathGenerator(container)); }); }); } diff --git a/paths/svg/webpack.config.js b/paths/svg/webpack.config.js deleted file mode 100644 index 2aa879ca09d..00000000000 --- a/paths/svg/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPath } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPath({ - moduleName: "svg", - pluginName: "SVG", - version, - dir: __dirname, - progress: false, -}); diff --git a/paths/zigzag/CHANGELOG.md b/paths/zigzag/CHANGELOG.md index 08a85fee704..b65c53b27a0 100644 --- a/paths/zigzag/CHANGELOG.md +++ b/paths/zigzag/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/path-zig-zag + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/path-zig-zag diff --git a/paths/zigzag/package.dist.json b/paths/zigzag/package.dist.json index 8d771701ecb..27c741d1740 100644 --- a/paths/zigzag/package.dist.json +++ b/paths/zigzag/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/path-zig-zag", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles zig zag path", "homepage": "https://particles.js.org", "repository": { @@ -97,11 +97,18 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12", - "@tsparticles/plugin-move": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/plugin-move": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/paths/zigzag/package.json b/paths/zigzag/package.json index 1ad5f0868d8..66e7aa4a7f6 100644 --- a/paths/zigzag/package.json +++ b/paths/zigzag/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/path-zig-zag", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles zig zag path", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -104,6 +104,13 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { @@ -111,6 +118,8 @@ "@tsparticles/plugin-move": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*", "@tsparticles/plugin-move": "workspace:*" }, diff --git a/paths/zigzag/rollup.config.js b/paths/zigzag/rollup.config.js new file mode 100644 index 00000000000..d5306d3bbcd --- /dev/null +++ b/paths/zigzag/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPath } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPath({ + moduleName: "zigzag", + pluginName: "Zig Zag", + version, + dir: __dirname, + progress: false, +}); diff --git a/paths/zigzag/src/browser.ts b/paths/zigzag/src/browser.ts new file mode 100644 index 00000000000..4c02d360f00 --- /dev/null +++ b/paths/zigzag/src/browser.ts @@ -0,0 +1,10 @@ +import { loadZigZagPath } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadZigZagPath?: typeof loadZigZagPath; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadZigZagPath = loadZigZagPath; + +export * from "./index.js"; diff --git a/paths/zigzag/src/index.lazy.ts b/paths/zigzag/src/index.lazy.ts new file mode 100644 index 00000000000..6447a996519 --- /dev/null +++ b/paths/zigzag/src/index.lazy.ts @@ -0,0 +1,25 @@ +import type { Engine } from "@tsparticles/engine/lazy"; +import type { MoveEngine } from "@tsparticles/plugin-move/lazy"; + +declare const __VERSION__: string; + +export const zigZagPathName = "zigZagPathGenerator"; + +/** + * @param engine - + */ +export async function loadZigZagPath(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async (e: MoveEngine) => { + const { ensureBaseMoverLoaded } = await import("@tsparticles/plugin-move/lazy"); + + ensureBaseMoverLoaded(e); + + e.pluginManager.addPathGenerator?.(zigZagPathName, async container => { + const { ZigZagPathGenerator } = await import("./ZigZagPathGenerator.js"); + + return new ZigZagPathGenerator(container); + }); + }); +} diff --git a/paths/zigzag/src/index.ts b/paths/zigzag/src/index.ts index 9840d55d553..0e44b18c0f9 100644 --- a/paths/zigzag/src/index.ts +++ b/paths/zigzag/src/index.ts @@ -1,5 +1,6 @@ +import { type MoveEngine, ensureBaseMoverLoaded } from "@tsparticles/plugin-move"; import { type Engine } from "@tsparticles/engine"; -import { type MoveEngine } from "@tsparticles/plugin-move"; +import { ZigZagPathGenerator } from "./ZigZagPathGenerator.js"; declare const __VERSION__: string; @@ -11,15 +12,11 @@ export const zigZagPathName = "zigZagPathGenerator"; export async function loadZigZagPath(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async (e: MoveEngine) => { - const { ensureBaseMoverLoaded } = await import("@tsparticles/plugin-move"); - + await engine.pluginManager.register((e: MoveEngine) => { ensureBaseMoverLoaded(e); - e.pluginManager.addPathGenerator?.(zigZagPathName, async container => { - const { ZigZagPathGenerator } = await import("./ZigZagPathGenerator.js"); - - return new ZigZagPathGenerator(container); + e.pluginManager.addPathGenerator?.(zigZagPathName, container => { + return Promise.resolve(new ZigZagPathGenerator(container)); }); }); } diff --git a/paths/zigzag/webpack.config.js b/paths/zigzag/webpack.config.js deleted file mode 100644 index ead0e53d135..00000000000 --- a/paths/zigzag/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPath } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPath({ - moduleName: "zigzag", - pluginName: "Zig Zag", - version, - dir: __dirname, - progress: false, -}); diff --git a/plugins/absorbers/CHANGELOG.md b/plugins/absorbers/CHANGELOG.md index c3144f7f94e..5b393d18254 100644 --- a/plugins/absorbers/CHANGELOG.md +++ b/plugins/absorbers/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/plugin-absorbers + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/plugin-absorbers diff --git a/plugins/absorbers/package.dist.json b/plugins/absorbers/package.dist.json index 22339632f81..82b45084683 100644 --- a/plugins/absorbers/package.dist.json +++ b/plugins/absorbers/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/plugin-absorbers", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles absorbers plugin", "homepage": "https://particles.js.org", "repository": { @@ -82,6 +82,13 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./interaction": { "types": "./types/interaction.d.ts", "browser": "./browser/interaction.js", @@ -89,6 +96,13 @@ "require": "./cjs/interaction.js", "default": "./esm/interaction.js" }, + "./interaction/lazy": { + "types": "./types/interaction.lazy.d.ts", + "browser": "./browser/interaction.lazy.js", + "import": "./esm/interaction.lazy.js", + "require": "./cjs/interaction.lazy.js", + "default": "./esm/interaction.lazy.js" + }, "./plugin": { "types": "./types/plugin.d.ts", "browser": "./browser/plugin.js", @@ -96,11 +110,18 @@ "require": "./cjs/plugin.js", "default": "./esm/plugin.js" }, + "./plugin/lazy": { + "types": "./types/plugin.lazy.d.ts", + "browser": "./browser/plugin.lazy.js", + "import": "./esm/plugin.lazy.js", + "require": "./cjs/plugin.lazy.js", + "default": "./esm/plugin.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12", - "@tsparticles/plugin-interactivity": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/plugin-interactivity": "4.0.0-beta.15" }, "peerDependenciesMeta": { "@tsparticles/plugin-interactivity": { diff --git a/plugins/absorbers/package.json b/plugins/absorbers/package.json index ecf7aaa1399..c509a128d04 100644 --- a/plugins/absorbers/package.json +++ b/plugins/absorbers/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/plugin-absorbers", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles absorbers plugin", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -89,6 +89,13 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./interaction": { "types": "./dist/types/interaction.d.ts", "browser": "./dist/browser/interaction.js", @@ -96,6 +103,13 @@ "require": "./dist/cjs/interaction.js", "default": "./dist/esm/interaction.js" }, + "./interaction/lazy": { + "types": "./dist/types/interaction.lazy.d.ts", + "browser": "./dist/browser/interaction.lazy.js", + "import": "./dist/esm/interaction.lazy.js", + "require": "./dist/cjs/interaction.lazy.js", + "default": "./dist/esm/interaction.lazy.js" + }, "./plugin": { "types": "./dist/types/plugin.d.ts", "browser": "./dist/browser/plugin.js", @@ -103,6 +117,13 @@ "require": "./dist/cjs/plugin.js", "default": "./dist/esm/plugin.js" }, + "./plugin/lazy": { + "types": "./dist/types/plugin.lazy.d.ts", + "browser": "./dist/browser/plugin.lazy.js", + "import": "./dist/esm/plugin.lazy.js", + "require": "./dist/cjs/plugin.lazy.js", + "default": "./dist/esm/plugin.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { @@ -110,6 +131,8 @@ "@tsparticles/plugin-interactivity": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*", "@tsparticles/plugin-interactivity": "workspace:*" }, diff --git a/plugins/absorbers/rollup.config.js b/plugins/absorbers/rollup.config.js new file mode 100644 index 00000000000..15d5f3106cd --- /dev/null +++ b/plugins/absorbers/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPlugin } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPlugin({ + moduleName: "absorbers", + pluginName: "Absorbers", + version, + dir: __dirname, + progress: false, +}); diff --git a/plugins/absorbers/src/browser.ts b/plugins/absorbers/src/browser.ts new file mode 100644 index 00000000000..f293f1e1449 --- /dev/null +++ b/plugins/absorbers/src/browser.ts @@ -0,0 +1,10 @@ +import { loadAbsorbersPlugin } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadAbsorbersPlugin?: typeof loadAbsorbersPlugin; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadAbsorbersPlugin = loadAbsorbersPlugin; + +export * from "./index.js"; diff --git a/plugins/absorbers/src/getAbsorbersInstancesManager.ts b/plugins/absorbers/src/getAbsorbersInstancesManager.ts index 3edec44f48b..46128185e06 100644 --- a/plugins/absorbers/src/getAbsorbersInstancesManager.ts +++ b/plugins/absorbers/src/getAbsorbersInstancesManager.ts @@ -1,7 +1,7 @@ +import type { Engine, PluginManager } from "@tsparticles/engine"; import type { AbsorbersInstancesManager } from "./AbsorbersInstancesManager.js"; -import type { Engine } from "@tsparticles/engine"; -const instancesManagers = new WeakMap>(); +const instancesManagers = new WeakMap>(); /** * @param e - The engine instance whose plugin manager will be used to resolve the absorbers manager. @@ -17,6 +17,7 @@ export function getAbsorbersInstancesManager(e: Engine): Promise new AbsorbersInstancesManager(pluginManager)) .catch((error: unknown) => { instancesManagers.delete(pluginManager); + throw error; }); diff --git a/plugins/absorbers/src/index.lazy.ts b/plugins/absorbers/src/index.lazy.ts new file mode 100644 index 00000000000..dea7d7b9fe1 --- /dev/null +++ b/plugins/absorbers/src/index.lazy.ts @@ -0,0 +1,13 @@ +import { type Engine } from "@tsparticles/engine/lazy"; +import { loadAbsorbersInteraction } from "./interaction.lazy.js"; +import { loadAbsorbersPluginSimple } from "./plugin.lazy.js"; + +/** + * @param engine - + */ +export async function loadAbsorbersPlugin(engine: Engine): Promise { + await loadAbsorbersPluginSimple(engine); + await loadAbsorbersInteraction(engine); +} + +export type * from "./AbsorberContainer.js"; diff --git a/plugins/absorbers/src/index.ts b/plugins/absorbers/src/index.ts index 5dbca68d483..ff1b43cc1c4 100644 --- a/plugins/absorbers/src/index.ts +++ b/plugins/absorbers/src/index.ts @@ -2,8 +2,6 @@ import { type Engine } from "@tsparticles/engine"; import { loadAbsorbersInteraction } from "./interaction.js"; import { loadAbsorbersPluginSimple } from "./plugin.js"; -declare const __VERSION__: string; - /** * @param engine - */ diff --git a/plugins/absorbers/src/interaction.lazy.ts b/plugins/absorbers/src/interaction.lazy.ts new file mode 100644 index 00000000000..2a2acef3bb6 --- /dev/null +++ b/plugins/absorbers/src/interaction.lazy.ts @@ -0,0 +1,34 @@ +import type { AbsorberContainer } from "./AbsorberContainer.js"; +import { type Engine } from "@tsparticles/engine/lazy"; +import type { InteractivityEngine } from "@tsparticles/plugin-interactivity/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadAbsorbersInteraction(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async (e: InteractivityEngine) => { + const [ + { ensureInteractivityPluginLoaded }, + { getAbsorbersInstancesManager }, + ] = await Promise.all([ + import("@tsparticles/plugin-interactivity/lazy"), + import("./getAbsorbersInstancesManager.js"), + ]), + pluginManager = e.pluginManager, + instancesManager = await getAbsorbersInstancesManager(e); + + ensureInteractivityPluginLoaded(e); + + pluginManager.addInteractor?.("externalAbsorbers", async container => { + const { AbsorbersInteractor } = await import("./AbsorbersInteractor.js"); + + return new AbsorbersInteractor(container as AbsorberContainer, instancesManager); + }); + }); +} + +export type * from "./AbsorberContainer.js"; diff --git a/plugins/absorbers/src/interaction.ts b/plugins/absorbers/src/interaction.ts index 498cbf17cd0..f4d9ea9f981 100644 --- a/plugins/absorbers/src/interaction.ts +++ b/plugins/absorbers/src/interaction.ts @@ -1,6 +1,8 @@ +import { type InteractivityEngine, ensureInteractivityPluginLoaded } from "@tsparticles/plugin-interactivity"; import type { AbsorberContainer } from "./AbsorberContainer.js"; +import { AbsorbersInteractor } from "./AbsorbersInteractor.js"; import { type Engine } from "@tsparticles/engine"; -import type { InteractivityEngine } from "@tsparticles/plugin-interactivity"; +import { getAbsorbersInstancesManager } from "./getAbsorbersInstancesManager.js"; declare const __VERSION__: string; @@ -11,22 +13,13 @@ export async function loadAbsorbersInteraction(engine: Engine): Promise { engine.checkVersion(__VERSION__); await engine.pluginManager.register(async (e: InteractivityEngine) => { - const [ - { ensureInteractivityPluginLoaded }, - { getAbsorbersInstancesManager }, - ] = await Promise.all([ - import("@tsparticles/plugin-interactivity"), - import("./getAbsorbersInstancesManager.js"), - ]), - pluginManager = e.pluginManager, + const pluginManager = e.pluginManager, instancesManager = await getAbsorbersInstancesManager(e); ensureInteractivityPluginLoaded(e); - pluginManager.addInteractor?.("externalAbsorbers", async container => { - const { AbsorbersInteractor } = await import("./AbsorbersInteractor.js"); - - return new AbsorbersInteractor(container as AbsorberContainer, instancesManager); + pluginManager.addInteractor?.("externalAbsorbers", container => { + return Promise.resolve(new AbsorbersInteractor(container as AbsorberContainer, instancesManager)); }); }); } diff --git a/plugins/absorbers/src/plugin.lazy.ts b/plugins/absorbers/src/plugin.lazy.ts new file mode 100644 index 00000000000..99930af272b --- /dev/null +++ b/plugins/absorbers/src/plugin.lazy.ts @@ -0,0 +1,26 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadAbsorbersPluginSimple(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async (e: Engine) => { + const [ + { getAbsorbersInstancesManager }, + { AbsorbersPlugin }, + ] = await Promise.all([ + import("./getAbsorbersInstancesManager.js"), + import("./AbsorbersPlugin.js"), + ]), + pluginManager = e.pluginManager, + instancesManager = await getAbsorbersInstancesManager(e); + + pluginManager.addPlugin(new AbsorbersPlugin(instancesManager)); + }); +} + +export type * from "./AbsorberContainer.js"; diff --git a/plugins/absorbers/src/plugin.ts b/plugins/absorbers/src/plugin.ts index 100d4bf266b..ffc9f5d1321 100644 --- a/plugins/absorbers/src/plugin.ts +++ b/plugins/absorbers/src/plugin.ts @@ -1,4 +1,6 @@ +import { AbsorbersPlugin } from "./AbsorbersPlugin.js"; import { type Engine } from "@tsparticles/engine"; +import { getAbsorbersInstancesManager } from "./getAbsorbersInstancesManager.js"; declare const __VERSION__: string; @@ -9,14 +11,7 @@ export async function loadAbsorbersPluginSimple(engine: Engine): Promise { engine.checkVersion(__VERSION__); await engine.pluginManager.register(async (e: Engine) => { - const [ - { getAbsorbersInstancesManager }, - { AbsorbersPlugin }, - ] = await Promise.all([ - import("./getAbsorbersInstancesManager.js"), - import("./AbsorbersPlugin.js"), - ]), - pluginManager = e.pluginManager, + const pluginManager = e.pluginManager, instancesManager = await getAbsorbersInstancesManager(e); pluginManager.addPlugin(new AbsorbersPlugin(instancesManager)); diff --git a/plugins/absorbers/webpack.config.js b/plugins/absorbers/webpack.config.js deleted file mode 100644 index 4e3993f95b8..00000000000 --- a/plugins/absorbers/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPlugin } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPlugin({ - moduleName: "absorbers", - pluginName: "Absorbers", - version, - dir: __dirname, - progress: false, -}); diff --git a/plugins/backgroundMask/CHANGELOG.md b/plugins/backgroundMask/CHANGELOG.md index 551807cf168..455c3b069a2 100644 --- a/plugins/backgroundMask/CHANGELOG.md +++ b/plugins/backgroundMask/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/plugin-background-mask + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/plugin-background-mask diff --git a/plugins/backgroundMask/package.dist.json b/plugins/backgroundMask/package.dist.json index 38917b73eac..f2b2f8a72bf 100644 --- a/plugins/backgroundMask/package.dist.json +++ b/plugins/backgroundMask/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/plugin-background-mask", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles background mask plugin", "homepage": "https://particles.js.org", "repository": { @@ -82,10 +82,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/plugins/backgroundMask/package.json b/plugins/backgroundMask/package.json index 2cf59ed83f4..b1473b66caf 100644 --- a/plugins/backgroundMask/package.json +++ b/plugins/backgroundMask/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/plugin-background-mask", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles background mask plugin", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -89,12 +89,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/plugins/backgroundMask/rollup.config.js b/plugins/backgroundMask/rollup.config.js new file mode 100644 index 00000000000..3785b2b8f8b --- /dev/null +++ b/plugins/backgroundMask/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPlugin } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPlugin({ + moduleName: "background-mask", + pluginName: "Background Mask", + version, + dir: __dirname, + progress: false, +}); diff --git a/plugins/backgroundMask/src/browser.ts b/plugins/backgroundMask/src/browser.ts new file mode 100644 index 00000000000..6d1a363cff7 --- /dev/null +++ b/plugins/backgroundMask/src/browser.ts @@ -0,0 +1,10 @@ +import { loadBackgroundMaskPlugin } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadBackgroundMaskPlugin?: typeof loadBackgroundMaskPlugin; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadBackgroundMaskPlugin = loadBackgroundMaskPlugin; + +export * from "./index.js"; diff --git a/plugins/backgroundMask/src/index.lazy.ts b/plugins/backgroundMask/src/index.lazy.ts new file mode 100644 index 00000000000..d1ba566399a --- /dev/null +++ b/plugins/backgroundMask/src/index.lazy.ts @@ -0,0 +1,16 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - The engine instance + */ +export async function loadBackgroundMaskPlugin(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { BackgroundMaskPlugin } = await import("./BackgroundMaskPlugin.js"); + + e.pluginManager.addPlugin(new BackgroundMaskPlugin(e.pluginManager)); + }); +} diff --git a/plugins/backgroundMask/src/index.ts b/plugins/backgroundMask/src/index.ts index 715b9228620..b0715adba26 100644 --- a/plugins/backgroundMask/src/index.ts +++ b/plugins/backgroundMask/src/index.ts @@ -1,3 +1,4 @@ +import { BackgroundMaskPlugin } from "./BackgroundMaskPlugin.js"; import { type Engine } from "@tsparticles/engine"; declare const __VERSION__: string; @@ -8,9 +9,7 @@ declare const __VERSION__: string; export async function loadBackgroundMaskPlugin(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async e => { - const { BackgroundMaskPlugin } = await import("./BackgroundMaskPlugin.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPlugin(new BackgroundMaskPlugin(e.pluginManager)); }); } diff --git a/plugins/backgroundMask/webpack.config.js b/plugins/backgroundMask/webpack.config.js deleted file mode 100644 index f87c09a5db2..00000000000 --- a/plugins/backgroundMask/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPlugin } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPlugin({ - moduleName: "background-mask", - pluginName: "Background Mask", - version, - dir: __dirname, - progress: false, -}); diff --git a/plugins/blend/CHANGELOG.md b/plugins/blend/CHANGELOG.md index cc83113fe41..4d919ad906e 100644 --- a/plugins/blend/CHANGELOG.md +++ b/plugins/blend/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/plugin-blend + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/plugin-blend diff --git a/plugins/blend/package.dist.json b/plugins/blend/package.dist.json index 180a3e0396b..aeab71e9493 100644 --- a/plugins/blend/package.dist.json +++ b/plugins/blend/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/plugin-blend", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles blend plugin", "homepage": "https://particles.js.org", "repository": { @@ -82,10 +82,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/plugins/blend/package.json b/plugins/blend/package.json index 18e437e6e87..32f8607ad19 100644 --- a/plugins/blend/package.json +++ b/plugins/blend/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/plugin-blend", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles blend plugin", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -89,12 +89,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/plugins/blend/rollup.config.js b/plugins/blend/rollup.config.js new file mode 100644 index 00000000000..704d5ea16bc --- /dev/null +++ b/plugins/blend/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPlugin } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPlugin({ + moduleName: "blend", + pluginName: "Blend", + version, + dir: __dirname, + progress: false, +}); diff --git a/plugins/blend/src/browser.ts b/plugins/blend/src/browser.ts new file mode 100644 index 00000000000..b46c8fdb8bb --- /dev/null +++ b/plugins/blend/src/browser.ts @@ -0,0 +1,10 @@ +import { loadBlendPlugin } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadBlendPlugin?: typeof loadBlendPlugin; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadBlendPlugin = loadBlendPlugin; + +export * from "./index.js"; diff --git a/plugins/blend/src/index.lazy.ts b/plugins/blend/src/index.lazy.ts new file mode 100644 index 00000000000..7fc5478ff23 --- /dev/null +++ b/plugins/blend/src/index.lazy.ts @@ -0,0 +1,16 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - The engine instance + */ +export async function loadBlendPlugin(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { BlendPlugin } = await import("./BlendPlugin.js"); + + e.pluginManager.addPlugin(new BlendPlugin()); + }); +} diff --git a/plugins/blend/src/index.ts b/plugins/blend/src/index.ts index 28e66e24d49..5111b44f0cd 100644 --- a/plugins/blend/src/index.ts +++ b/plugins/blend/src/index.ts @@ -1,3 +1,4 @@ +import { BlendPlugin } from "./BlendPlugin.js"; import { type Engine } from "@tsparticles/engine"; declare const __VERSION__: string; @@ -8,9 +9,7 @@ declare const __VERSION__: string; export async function loadBlendPlugin(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async e => { - const { BlendPlugin } = await import("./BlendPlugin.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPlugin(new BlendPlugin()); }); } diff --git a/plugins/blend/webpack.config.js b/plugins/blend/webpack.config.js deleted file mode 100644 index ca4f3fe9fca..00000000000 --- a/plugins/blend/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPlugin } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPlugin({ - moduleName: "blend", - pluginName: "Blend", - version, - dir: __dirname, - progress: false, -}); diff --git a/plugins/canvasMask/CHANGELOG.md b/plugins/canvasMask/CHANGELOG.md index 5c2d2661253..c34cc82bcf7 100644 --- a/plugins/canvasMask/CHANGELOG.md +++ b/plugins/canvasMask/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/plugin-canvas-mask + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/plugin-canvas-mask diff --git a/plugins/canvasMask/package.dist.json b/plugins/canvasMask/package.dist.json index 99b96b8fa89..84f90ec90b7 100644 --- a/plugins/canvasMask/package.dist.json +++ b/plugins/canvasMask/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/plugin-canvas-mask", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles canvas mask plugin", "homepage": "https://particles.js.org", "repository": { @@ -82,11 +82,18 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/canvas-utils": "4.0.0-beta.12", - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/canvas-utils": "4.0.0-beta.15", + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/plugins/canvasMask/package.json b/plugins/canvasMask/package.json index 4dcaf5a2286..62b2c5806af 100644 --- a/plugins/canvasMask/package.json +++ b/plugins/canvasMask/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/plugin-canvas-mask", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles canvas mask plugin", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -89,6 +89,13 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { @@ -97,6 +104,8 @@ }, "devDependencies": { "@tsparticles/canvas-utils": "workspace:*", + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/plugins/canvasMask/rollup.config.js b/plugins/canvasMask/rollup.config.js new file mode 100644 index 00000000000..871f0dd2584 --- /dev/null +++ b/plugins/canvasMask/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPlugin } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPlugin({ + moduleName: "canvas-mask", + pluginName: "Canvas Mask", + version, + dir: __dirname, + progress: false, +}); diff --git a/plugins/canvasMask/src/browser.ts b/plugins/canvasMask/src/browser.ts new file mode 100644 index 00000000000..b56155fa0f9 --- /dev/null +++ b/plugins/canvasMask/src/browser.ts @@ -0,0 +1,10 @@ +import { loadCanvasMaskPlugin } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadCanvasMaskPlugin?: typeof loadCanvasMaskPlugin; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadCanvasMaskPlugin = loadCanvasMaskPlugin; + +export * from "./index.js"; diff --git a/plugins/canvasMask/src/index.lazy.ts b/plugins/canvasMask/src/index.lazy.ts new file mode 100644 index 00000000000..e1ee0113b2b --- /dev/null +++ b/plugins/canvasMask/src/index.lazy.ts @@ -0,0 +1,16 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadCanvasMaskPlugin(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { CanvasMaskPlugin } = await import("./CanvasMaskPlugin.js"); + + e.pluginManager.addPlugin(new CanvasMaskPlugin()); + }); +} diff --git a/plugins/canvasMask/src/index.ts b/plugins/canvasMask/src/index.ts index b6b19c30a97..9aeb4e26142 100644 --- a/plugins/canvasMask/src/index.ts +++ b/plugins/canvasMask/src/index.ts @@ -1,3 +1,4 @@ +import { CanvasMaskPlugin } from "./CanvasMaskPlugin.js"; import { type Engine } from "@tsparticles/engine"; declare const __VERSION__: string; @@ -8,9 +9,7 @@ declare const __VERSION__: string; export async function loadCanvasMaskPlugin(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async e => { - const { CanvasMaskPlugin } = await import("./CanvasMaskPlugin.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPlugin(new CanvasMaskPlugin()); }); } diff --git a/plugins/canvasMask/webpack.config.js b/plugins/canvasMask/webpack.config.js deleted file mode 100644 index 061d461c8cb..00000000000 --- a/plugins/canvasMask/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPlugin } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPlugin({ - moduleName: "canvas-mask", - pluginName: "Canvas Mask", - version, - dir: __dirname, - progress: false, -}); diff --git a/plugins/colors/hex/CHANGELOG.md b/plugins/colors/hex/CHANGELOG.md index 097bdb9d362..816bf337d47 100644 --- a/plugins/colors/hex/CHANGELOG.md +++ b/plugins/colors/hex/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/plugin-hex-color + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/plugin-hex-color diff --git a/plugins/colors/hex/package.dist.json b/plugins/colors/hex/package.dist.json index afdd0ae3e76..90ec0d41f06 100644 --- a/plugins/colors/hex/package.dist.json +++ b/plugins/colors/hex/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/plugin-hex-color", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles hex color plugin", "homepage": "https://particles.js.org", "repository": { @@ -96,10 +96,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/plugins/colors/hex/package.json b/plugins/colors/hex/package.json index 0e7da57bc86..55259d033eb 100644 --- a/plugins/colors/hex/package.json +++ b/plugins/colors/hex/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/plugin-hex-color", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles hex color plugin", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -103,12 +103,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/plugins/colors/hex/rollup.config.js b/plugins/colors/hex/rollup.config.js new file mode 100644 index 00000000000..c8fd454ed92 --- /dev/null +++ b/plugins/colors/hex/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPlugin } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPlugin({ + moduleName: "hexColor", + pluginName: "Hex Color", + version, + dir: __dirname, + progress: false, +}); diff --git a/plugins/colors/hex/src/browser.ts b/plugins/colors/hex/src/browser.ts new file mode 100644 index 00000000000..1199f183d7b --- /dev/null +++ b/plugins/colors/hex/src/browser.ts @@ -0,0 +1,10 @@ +import { loadHexColorPlugin } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadHexColorPlugin?: typeof loadHexColorPlugin; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadHexColorPlugin = loadHexColorPlugin; + +export * from "./index.js"; diff --git a/plugins/colors/hex/src/index.lazy.ts b/plugins/colors/hex/src/index.lazy.ts new file mode 100644 index 00000000000..e2aad70e91c --- /dev/null +++ b/plugins/colors/hex/src/index.lazy.ts @@ -0,0 +1,17 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * This function is used to load the hex color plugin + * @param engine - The engine that will use the plugin + */ +export async function loadHexColorPlugin(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { HexColorManager } = await import("./HexColorManager.js"); + + e.pluginManager.addColorManager("hex", new HexColorManager()); + }); +} diff --git a/plugins/colors/hex/src/index.ts b/plugins/colors/hex/src/index.ts index e25b525ab6c..1fdd6238bb6 100644 --- a/plugins/colors/hex/src/index.ts +++ b/plugins/colors/hex/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { HexColorManager } from "./HexColorManager.js"; declare const __VERSION__: string; @@ -9,9 +10,7 @@ declare const __VERSION__: string; export async function loadHexColorPlugin(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async e => { - const { HexColorManager } = await import("./HexColorManager.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addColorManager("hex", new HexColorManager()); }); } diff --git a/plugins/colors/hex/webpack.config.js b/plugins/colors/hex/webpack.config.js deleted file mode 100644 index 64477825c4c..00000000000 --- a/plugins/colors/hex/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPlugin } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPlugin({ - moduleName: "hexColor", - pluginName: "Hex Color", - version, - dir: __dirname, - progress: false, -}); diff --git a/plugins/colors/hsl/CHANGELOG.md b/plugins/colors/hsl/CHANGELOG.md index da90f5a93c0..86b0d1b6232 100644 --- a/plugins/colors/hsl/CHANGELOG.md +++ b/plugins/colors/hsl/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/plugin-hsl-color + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/plugin-hsl-color diff --git a/plugins/colors/hsl/package.dist.json b/plugins/colors/hsl/package.dist.json index bed74fe4726..5631689a236 100644 --- a/plugins/colors/hsl/package.dist.json +++ b/plugins/colors/hsl/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/plugin-hsl-color", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles HSL color plugin", "homepage": "https://particles.js.org", "repository": { @@ -96,10 +96,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/plugins/colors/hsl/package.json b/plugins/colors/hsl/package.json index ec7b7f5a306..8e49820daa0 100644 --- a/plugins/colors/hsl/package.json +++ b/plugins/colors/hsl/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/plugin-hsl-color", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles HSL color plugin", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -103,12 +103,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/plugins/colors/hsl/rollup.config.js b/plugins/colors/hsl/rollup.config.js new file mode 100644 index 00000000000..88ef596873a --- /dev/null +++ b/plugins/colors/hsl/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPlugin } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPlugin({ + moduleName: "hslColor", + pluginName: "HSL Color", + version, + dir: __dirname, + progress: false, +}); diff --git a/plugins/colors/hsl/src/browser.ts b/plugins/colors/hsl/src/browser.ts new file mode 100644 index 00000000000..c1047474a02 --- /dev/null +++ b/plugins/colors/hsl/src/browser.ts @@ -0,0 +1,10 @@ +import { loadHslColorPlugin } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadHslColorPlugin?: typeof loadHslColorPlugin; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadHslColorPlugin = loadHslColorPlugin; + +export * from "./index.js"; diff --git a/plugins/colors/hsl/src/index.lazy.ts b/plugins/colors/hsl/src/index.lazy.ts new file mode 100644 index 00000000000..e8eaeedebe4 --- /dev/null +++ b/plugins/colors/hsl/src/index.lazy.ts @@ -0,0 +1,17 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * This function is used to load the HSL color plugin + * @param engine - The engine that will use the plugin + */ +export async function loadHslColorPlugin(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { HslColorManager } = await import("./HslColorManager.js"); + + e.pluginManager.addColorManager("hsl", new HslColorManager()); + }); +} diff --git a/plugins/colors/hsl/src/index.ts b/plugins/colors/hsl/src/index.ts index 73e4c4ef6e1..15e9b170807 100644 --- a/plugins/colors/hsl/src/index.ts +++ b/plugins/colors/hsl/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { HslColorManager } from "./HslColorManager.js"; declare const __VERSION__: string; @@ -9,9 +10,7 @@ declare const __VERSION__: string; export async function loadHslColorPlugin(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async e => { - const { HslColorManager } = await import("./HslColorManager.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addColorManager("hsl", new HslColorManager()); }); } diff --git a/plugins/colors/hsl/webpack.config.js b/plugins/colors/hsl/webpack.config.js deleted file mode 100644 index 84402b30dee..00000000000 --- a/plugins/colors/hsl/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPlugin } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPlugin({ - moduleName: "hslColor", - pluginName: "HSL Color", - version, - dir: __dirname, - progress: false, -}); diff --git a/plugins/colors/hsv/CHANGELOG.md b/plugins/colors/hsv/CHANGELOG.md index 1a0a9409287..4418d7b84b1 100644 --- a/plugins/colors/hsv/CHANGELOG.md +++ b/plugins/colors/hsv/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/plugin-hsv-color + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/plugin-hsv-color diff --git a/plugins/colors/hsv/package.dist.json b/plugins/colors/hsv/package.dist.json index 20bc48af632..7b3fc3784f4 100644 --- a/plugins/colors/hsv/package.dist.json +++ b/plugins/colors/hsv/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/plugin-hsv-color", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles HSV color plugin", "homepage": "https://particles.js.org", "repository": { @@ -96,10 +96,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/plugins/colors/hsv/package.json b/plugins/colors/hsv/package.json index aaaf0e92607..178086ce5e9 100644 --- a/plugins/colors/hsv/package.json +++ b/plugins/colors/hsv/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/plugin-hsv-color", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles HSV color plugin", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -103,12 +103,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/plugins/colors/hsv/rollup.config.js b/plugins/colors/hsv/rollup.config.js new file mode 100644 index 00000000000..66d5f0ccc22 --- /dev/null +++ b/plugins/colors/hsv/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPlugin } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPlugin({ + moduleName: "hsvColor", + pluginName: "HSV Color", + version, + dir: __dirname, + progress: false, +}); diff --git a/plugins/colors/hsv/src/browser.ts b/plugins/colors/hsv/src/browser.ts new file mode 100644 index 00000000000..7f4ffb946ae --- /dev/null +++ b/plugins/colors/hsv/src/browser.ts @@ -0,0 +1,10 @@ +import { loadHsvColorPlugin } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadHsvColorPlugin?: typeof loadHsvColorPlugin; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadHsvColorPlugin = loadHsvColorPlugin; + +export * from "./index.js"; diff --git a/plugins/colors/hsv/src/index.lazy.ts b/plugins/colors/hsv/src/index.lazy.ts new file mode 100644 index 00000000000..1ffd4475a70 --- /dev/null +++ b/plugins/colors/hsv/src/index.lazy.ts @@ -0,0 +1,17 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * This function is used to load the HSV color plugin lazily + * @param engine - The engine that will use the plugin + */ +export async function loadHsvColorPlugin(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { HsvColorManager } = await import("./HsvColorManager.js"); + + e.pluginManager.addColorManager("hsv", new HsvColorManager()); + }); +} diff --git a/plugins/colors/hsv/src/index.ts b/plugins/colors/hsv/src/index.ts index 642f29b771a..712c8820b2c 100644 --- a/plugins/colors/hsv/src/index.ts +++ b/plugins/colors/hsv/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { HsvColorManager } from "./HsvColorManager.js"; declare const __VERSION__: string; @@ -9,9 +10,7 @@ declare const __VERSION__: string; export async function loadHsvColorPlugin(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async e => { - const { HsvColorManager } = await import("./HsvColorManager.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addColorManager("hsv", new HsvColorManager()); }); } diff --git a/plugins/colors/hsv/webpack.config.js b/plugins/colors/hsv/webpack.config.js deleted file mode 100644 index d703f645466..00000000000 --- a/plugins/colors/hsv/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPlugin } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPlugin({ - moduleName: "hsvColor", - pluginName: "HSV Color", - version, - dir: __dirname, - progress: false, -}); diff --git a/plugins/colors/hwb/CHANGELOG.md b/plugins/colors/hwb/CHANGELOG.md index ae5858d6f2e..747530f569c 100644 --- a/plugins/colors/hwb/CHANGELOG.md +++ b/plugins/colors/hwb/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/plugin-hwb-color + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/plugin-hwb-color diff --git a/plugins/colors/hwb/package.dist.json b/plugins/colors/hwb/package.dist.json index daf097c8851..757bf2270b3 100644 --- a/plugins/colors/hwb/package.dist.json +++ b/plugins/colors/hwb/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/plugin-hwb-color", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles HWB color plugin", "homepage": "https://particles.js.org", "repository": { @@ -96,10 +96,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/plugins/colors/hwb/package.json b/plugins/colors/hwb/package.json index 8b49424d687..c791652ad7a 100644 --- a/plugins/colors/hwb/package.json +++ b/plugins/colors/hwb/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/plugin-hwb-color", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles HWB color plugin", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -103,12 +103,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/plugins/colors/hwb/rollup.config.js b/plugins/colors/hwb/rollup.config.js new file mode 100644 index 00000000000..ee025b51183 --- /dev/null +++ b/plugins/colors/hwb/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPlugin } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPlugin({ + moduleName: "hwbColor", + pluginName: "HWB Color", + version, + dir: __dirname, + progress: false, +}); diff --git a/plugins/colors/hwb/src/browser.ts b/plugins/colors/hwb/src/browser.ts new file mode 100644 index 00000000000..86e93a7a79b --- /dev/null +++ b/plugins/colors/hwb/src/browser.ts @@ -0,0 +1,10 @@ +import { loadHwbColorPlugin } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadHwbColorPlugin?: typeof loadHwbColorPlugin; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadHwbColorPlugin = loadHwbColorPlugin; + +export * from "./index.js"; diff --git a/plugins/colors/hwb/src/index.lazy.ts b/plugins/colors/hwb/src/index.lazy.ts new file mode 100644 index 00000000000..bae6b044f73 --- /dev/null +++ b/plugins/colors/hwb/src/index.lazy.ts @@ -0,0 +1,17 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * This function is used to load the HWB color plugin lazily + * @param engine - The engine that will use the plugin + */ +export async function loadHwbColorPlugin(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { HwbColorManager } = await import("./HwbColorManager.js"); + + e.pluginManager.addColorManager("hwb", new HwbColorManager()); + }); +} diff --git a/plugins/colors/hwb/src/index.ts b/plugins/colors/hwb/src/index.ts index ad2a02a545a..53598ae3503 100644 --- a/plugins/colors/hwb/src/index.ts +++ b/plugins/colors/hwb/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { HwbColorManager } from "./HwbColorManager.js"; declare const __VERSION__: string; @@ -9,9 +10,7 @@ declare const __VERSION__: string; export async function loadHwbColorPlugin(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async e => { - const { HwbColorManager } = await import("./HwbColorManager.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addColorManager("hwb", new HwbColorManager()); }); } diff --git a/plugins/colors/hwb/webpack.config.js b/plugins/colors/hwb/webpack.config.js deleted file mode 100644 index 3cbdc8aaeb8..00000000000 --- a/plugins/colors/hwb/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPlugin } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPlugin({ - moduleName: "hwbColor", - pluginName: "HWB Color", - version, - dir: __dirname, - progress: false, -}); diff --git a/plugins/colors/lab/CHANGELOG.md b/plugins/colors/lab/CHANGELOG.md index 978db6e2c97..c6b3b5cd41f 100644 --- a/plugins/colors/lab/CHANGELOG.md +++ b/plugins/colors/lab/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/plugin-lab-color + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/plugin-lab-color diff --git a/plugins/colors/lab/package.dist.json b/plugins/colors/lab/package.dist.json index 82f4e28eb7e..fd84210052f 100644 --- a/plugins/colors/lab/package.dist.json +++ b/plugins/colors/lab/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/plugin-lab-color", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles LAB color plugin", "homepage": "https://particles.js.org", "repository": { @@ -96,10 +96,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/plugins/colors/lab/package.json b/plugins/colors/lab/package.json index 4cefa981d2f..9dad0852e39 100644 --- a/plugins/colors/lab/package.json +++ b/plugins/colors/lab/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/plugin-lab-color", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles LAB color plugin", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -103,12 +103,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/plugins/colors/lab/rollup.config.js b/plugins/colors/lab/rollup.config.js new file mode 100644 index 00000000000..ee93bde6bf9 --- /dev/null +++ b/plugins/colors/lab/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPlugin } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPlugin({ + moduleName: "labColor", + pluginName: "LAB Color", + version, + dir: __dirname, + progress: false, +}); diff --git a/plugins/colors/lab/src/browser.ts b/plugins/colors/lab/src/browser.ts new file mode 100644 index 00000000000..970b606600a --- /dev/null +++ b/plugins/colors/lab/src/browser.ts @@ -0,0 +1,10 @@ +import { loadLabColorPlugin } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadLabColorPlugin?: typeof loadLabColorPlugin; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadLabColorPlugin = loadLabColorPlugin; + +export * from "./index.js"; diff --git a/plugins/colors/lab/src/index.lazy.ts b/plugins/colors/lab/src/index.lazy.ts new file mode 100644 index 00000000000..9362848cfce --- /dev/null +++ b/plugins/colors/lab/src/index.lazy.ts @@ -0,0 +1,17 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * This function is used to load the Lab color plugin lazily + * @param engine - The engine, used to add the color manager + */ +export async function loadLabColorPlugin(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { LabColorManager } = await import("./LabColorManager.js"); + + e.pluginManager.addColorManager("lab", new LabColorManager()); + }); +} diff --git a/plugins/colors/lab/src/index.ts b/plugins/colors/lab/src/index.ts index c5f4a50272a..ea29626664f 100644 --- a/plugins/colors/lab/src/index.ts +++ b/plugins/colors/lab/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { LabColorManager } from "./LabColorManager.js"; declare const __VERSION__: string; @@ -9,9 +10,7 @@ declare const __VERSION__: string; export async function loadLabColorPlugin(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async e => { - const { LabColorManager } = await import("./LabColorManager.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addColorManager("lab", new LabColorManager()); }); } diff --git a/plugins/colors/lab/webpack.config.js b/plugins/colors/lab/webpack.config.js deleted file mode 100644 index c616d2fc013..00000000000 --- a/plugins/colors/lab/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPlugin } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPlugin({ - moduleName: "labColor", - pluginName: "LAB Color", - version, - dir: __dirname, - progress: false, -}); diff --git a/plugins/colors/lch/CHANGELOG.md b/plugins/colors/lch/CHANGELOG.md index a98afc1d55e..fae6e517d2e 100644 --- a/plugins/colors/lch/CHANGELOG.md +++ b/plugins/colors/lch/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/plugin-lch-color + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/plugin-lch-color diff --git a/plugins/colors/lch/package.dist.json b/plugins/colors/lch/package.dist.json index cf62b8396a0..b5ae000c402 100644 --- a/plugins/colors/lch/package.dist.json +++ b/plugins/colors/lch/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/plugin-lch-color", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles LCH color plugin", "homepage": "https://particles.js.org", "repository": { @@ -96,10 +96,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/plugins/colors/lch/package.json b/plugins/colors/lch/package.json index efd3de479de..323870d0701 100644 --- a/plugins/colors/lch/package.json +++ b/plugins/colors/lch/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/plugin-lch-color", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles LCH color plugin", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -103,12 +103,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/plugins/colors/lch/rollup.config.js b/plugins/colors/lch/rollup.config.js new file mode 100644 index 00000000000..7539e402cea --- /dev/null +++ b/plugins/colors/lch/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPlugin } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPlugin({ + moduleName: "lchColor", + pluginName: "LCH Color", + version, + dir: __dirname, + progress: false, +}); diff --git a/plugins/colors/lch/src/browser.ts b/plugins/colors/lch/src/browser.ts new file mode 100644 index 00000000000..9c4354d87e7 --- /dev/null +++ b/plugins/colors/lch/src/browser.ts @@ -0,0 +1,10 @@ +import { loadLchColorPlugin } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadLchColorPlugin?: typeof loadLchColorPlugin; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadLchColorPlugin = loadLchColorPlugin; + +export * from "./index.js"; diff --git a/plugins/colors/lch/src/index.lazy.ts b/plugins/colors/lch/src/index.lazy.ts new file mode 100644 index 00000000000..b3cf5f168d8 --- /dev/null +++ b/plugins/colors/lch/src/index.lazy.ts @@ -0,0 +1,17 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * This function is used to load the Lch color plugin lazily + * @param engine - The engine, used to add the color manager + */ +export async function loadLchColorPlugin(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { LchColorManager } = await import("./LchColorManager.js"); + + e.pluginManager.addColorManager("lch", new LchColorManager()); + }); +} diff --git a/plugins/colors/lch/src/index.ts b/plugins/colors/lch/src/index.ts index 08340412d87..d29d2bb1d4b 100644 --- a/plugins/colors/lch/src/index.ts +++ b/plugins/colors/lch/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { LchColorManager } from "./LchColorManager.js"; declare const __VERSION__: string; @@ -9,9 +10,7 @@ declare const __VERSION__: string; export async function loadLchColorPlugin(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async e => { - const { LchColorManager } = await import("./LchColorManager.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addColorManager("lch", new LchColorManager()); }); } diff --git a/plugins/colors/lch/webpack.config.js b/plugins/colors/lch/webpack.config.js deleted file mode 100644 index c49f6a08015..00000000000 --- a/plugins/colors/lch/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPlugin } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPlugin({ - moduleName: "lchColor", - pluginName: "LCH Color", - version, - dir: __dirname, - progress: false, -}); diff --git a/plugins/colors/named/CHANGELOG.md b/plugins/colors/named/CHANGELOG.md index de26e9deacf..d52da43946e 100644 --- a/plugins/colors/named/CHANGELOG.md +++ b/plugins/colors/named/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/plugin-named-color + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/plugin-named-color diff --git a/plugins/colors/named/package.dist.json b/plugins/colors/named/package.dist.json index 001f0b3863c..cb44c6a5d7d 100644 --- a/plugins/colors/named/package.dist.json +++ b/plugins/colors/named/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/plugin-named-color", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles named color plugin", "homepage": "https://particles.js.org", "repository": { @@ -96,10 +96,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/plugins/colors/named/package.json b/plugins/colors/named/package.json index 55a2558c611..fde8bf77af3 100644 --- a/plugins/colors/named/package.json +++ b/plugins/colors/named/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/plugin-named-color", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles named color plugin", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -103,12 +103,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/plugins/colors/named/rollup.config.js b/plugins/colors/named/rollup.config.js new file mode 100644 index 00000000000..ab307588729 --- /dev/null +++ b/plugins/colors/named/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPlugin } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPlugin({ + moduleName: "namedColor", + pluginName: "Named Color", + version, + dir: __dirname, + progress: false, +}); diff --git a/plugins/colors/named/src/browser.ts b/plugins/colors/named/src/browser.ts new file mode 100644 index 00000000000..95b50806070 --- /dev/null +++ b/plugins/colors/named/src/browser.ts @@ -0,0 +1,10 @@ +import { loadNamedColorPlugin } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadNamedColorPlugin?: typeof loadNamedColorPlugin; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadNamedColorPlugin = loadNamedColorPlugin; + +export * from "./index.js"; diff --git a/plugins/colors/named/src/index.lazy.ts b/plugins/colors/named/src/index.lazy.ts new file mode 100644 index 00000000000..d162ba496a7 --- /dev/null +++ b/plugins/colors/named/src/index.lazy.ts @@ -0,0 +1,17 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * This function is used to load the named color plugin lazily + * @param engine - The engine, used to add the plugin + */ +export async function loadNamedColorPlugin(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { NamedColorManager } = await import("./NamedColorManager.js"); + + e.pluginManager.addColorManager("named", new NamedColorManager()); + }); +} diff --git a/plugins/colors/named/src/index.ts b/plugins/colors/named/src/index.ts index d0159bdef00..1b6b6240fa3 100644 --- a/plugins/colors/named/src/index.ts +++ b/plugins/colors/named/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { NamedColorManager } from "./NamedColorManager.js"; declare const __VERSION__: string; @@ -9,9 +10,7 @@ declare const __VERSION__: string; export async function loadNamedColorPlugin(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async e => { - const { NamedColorManager } = await import("./NamedColorManager.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addColorManager("named", new NamedColorManager()); }); } diff --git a/plugins/colors/named/webpack.config.js b/plugins/colors/named/webpack.config.js deleted file mode 100644 index 46c611e0b99..00000000000 --- a/plugins/colors/named/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPlugin } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPlugin({ - moduleName: "namedColor", - pluginName: "Named Color", - version, - dir: __dirname, - progress: false, -}); diff --git a/plugins/colors/oklab/CHANGELOG.md b/plugins/colors/oklab/CHANGELOG.md index 85601cd7399..c9e28741595 100644 --- a/plugins/colors/oklab/CHANGELOG.md +++ b/plugins/colors/oklab/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/plugin-oklab-color + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/plugin-oklab-color diff --git a/plugins/colors/oklab/package.dist.json b/plugins/colors/oklab/package.dist.json index 57d205ac8ad..f56c07ab884 100644 --- a/plugins/colors/oklab/package.dist.json +++ b/plugins/colors/oklab/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/plugin-oklab-color", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles OKLAB color plugin", "homepage": "https://particles.js.org", "repository": { @@ -96,10 +96,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/plugins/colors/oklab/package.json b/plugins/colors/oklab/package.json index a0ae69ea750..784e78552ba 100644 --- a/plugins/colors/oklab/package.json +++ b/plugins/colors/oklab/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/plugin-oklab-color", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles OKLAB color plugin", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -103,12 +103,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/plugins/colors/oklab/rollup.config.js b/plugins/colors/oklab/rollup.config.js new file mode 100644 index 00000000000..f04a3e3031a --- /dev/null +++ b/plugins/colors/oklab/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPlugin } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPlugin({ + moduleName: "oklabColor", + pluginName: "OKLAB Color", + version, + dir: __dirname, + progress: false, +}); diff --git a/plugins/colors/oklab/src/browser.ts b/plugins/colors/oklab/src/browser.ts new file mode 100644 index 00000000000..d68cf4bc599 --- /dev/null +++ b/plugins/colors/oklab/src/browser.ts @@ -0,0 +1,10 @@ +import { loadOklabColorPlugin } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadOklabColorPlugin?: typeof loadOklabColorPlugin; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadOklabColorPlugin = loadOklabColorPlugin; + +export * from "./index.js"; diff --git a/plugins/colors/oklab/src/index.lazy.ts b/plugins/colors/oklab/src/index.lazy.ts new file mode 100644 index 00000000000..d1d59330e33 --- /dev/null +++ b/plugins/colors/oklab/src/index.lazy.ts @@ -0,0 +1,17 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * This function is used to load the Oklab color plugin lazily + * @param engine - The engine, used to add the color manager + */ +export async function loadOklabColorPlugin(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { OklabColorManager } = await import("./OklabColorManager.js"); + + e.pluginManager.addColorManager("oklab", new OklabColorManager()); + }); +} diff --git a/plugins/colors/oklab/src/index.ts b/plugins/colors/oklab/src/index.ts index 23b43a98d1c..fcff561ae46 100644 --- a/plugins/colors/oklab/src/index.ts +++ b/plugins/colors/oklab/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { OklabColorManager } from "./OklabColorManager.js"; declare const __VERSION__: string; @@ -9,9 +10,7 @@ declare const __VERSION__: string; export async function loadOklabColorPlugin(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async e => { - const { OklabColorManager } = await import("./OklabColorManager.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addColorManager("oklab", new OklabColorManager()); }); } diff --git a/plugins/colors/oklab/webpack.config.js b/plugins/colors/oklab/webpack.config.js deleted file mode 100644 index 4447259cbb8..00000000000 --- a/plugins/colors/oklab/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPlugin } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPlugin({ - moduleName: "oklabColor", - pluginName: "OKLAB Color", - version, - dir: __dirname, - progress: false, -}); diff --git a/plugins/colors/oklch/CHANGELOG.md b/plugins/colors/oklch/CHANGELOG.md index ee8a4ea4c75..5146262b761 100644 --- a/plugins/colors/oklch/CHANGELOG.md +++ b/plugins/colors/oklch/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/plugin-oklch-color + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/plugin-oklch-color diff --git a/plugins/colors/oklch/package.dist.json b/plugins/colors/oklch/package.dist.json index 0c2c16e6efe..decf101aba6 100644 --- a/plugins/colors/oklch/package.dist.json +++ b/plugins/colors/oklch/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/plugin-oklch-color", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles OKLCH color plugin", "homepage": "https://particles.js.org", "repository": { @@ -96,10 +96,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/plugins/colors/oklch/package.json b/plugins/colors/oklch/package.json index e9068fa827e..c11cee2e9a8 100644 --- a/plugins/colors/oklch/package.json +++ b/plugins/colors/oklch/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/plugin-oklch-color", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles OKLCH color plugin", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -103,12 +103,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/plugins/colors/oklch/rollup.config.js b/plugins/colors/oklch/rollup.config.js new file mode 100644 index 00000000000..0693e7c1f2f --- /dev/null +++ b/plugins/colors/oklch/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPlugin } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPlugin({ + moduleName: "oklchColor", + pluginName: "OKLCH Color", + version, + dir: __dirname, + progress: false, +}); diff --git a/plugins/colors/oklch/src/browser.ts b/plugins/colors/oklch/src/browser.ts new file mode 100644 index 00000000000..7eb38cbe1c9 --- /dev/null +++ b/plugins/colors/oklch/src/browser.ts @@ -0,0 +1,10 @@ +import { loadOklchColorPlugin } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadOklchColorPlugin?: typeof loadOklchColorPlugin; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadOklchColorPlugin = loadOklchColorPlugin; + +export * from "./index.js"; diff --git a/plugins/colors/oklch/src/index.lazy.ts b/plugins/colors/oklch/src/index.lazy.ts new file mode 100644 index 00000000000..761a7cdefd2 --- /dev/null +++ b/plugins/colors/oklch/src/index.lazy.ts @@ -0,0 +1,17 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * This function is used to load the Oklch color plugin lazily + * @param engine - The engine, used to add the color manager + */ +export async function loadOklchColorPlugin(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { OklchColorManager } = await import("./OklchColorManager.js"); + + e.pluginManager.addColorManager("oklch", new OklchColorManager()); + }); +} diff --git a/plugins/colors/oklch/src/index.ts b/plugins/colors/oklch/src/index.ts index 06af323f66a..48ea1320eb7 100644 --- a/plugins/colors/oklch/src/index.ts +++ b/plugins/colors/oklch/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { OklchColorManager } from "./OklchColorManager.js"; declare const __VERSION__: string; @@ -9,9 +10,7 @@ declare const __VERSION__: string; export async function loadOklchColorPlugin(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async e => { - const { OklchColorManager } = await import("./OklchColorManager.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addColorManager("oklch", new OklchColorManager()); }); } diff --git a/plugins/colors/oklch/webpack.config.js b/plugins/colors/oklch/webpack.config.js deleted file mode 100644 index 2493957b863..00000000000 --- a/plugins/colors/oklch/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPlugin } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPlugin({ - moduleName: "oklchColor", - pluginName: "OKLCH Color", - version, - dir: __dirname, - progress: false, -}); diff --git a/plugins/colors/rgb/CHANGELOG.md b/plugins/colors/rgb/CHANGELOG.md index 7e1b1c910f8..ac25fa9d569 100644 --- a/plugins/colors/rgb/CHANGELOG.md +++ b/plugins/colors/rgb/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/plugin-rgb-color + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/plugin-rgb-color diff --git a/plugins/colors/rgb/package.dist.json b/plugins/colors/rgb/package.dist.json index 36f3f1562c7..da89db4639b 100644 --- a/plugins/colors/rgb/package.dist.json +++ b/plugins/colors/rgb/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/plugin-rgb-color", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles RGB color plugin", "homepage": "https://particles.js.org", "repository": { @@ -96,10 +96,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/plugins/colors/rgb/package.json b/plugins/colors/rgb/package.json index 56fba089886..ae3b24f080b 100644 --- a/plugins/colors/rgb/package.json +++ b/plugins/colors/rgb/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/plugin-rgb-color", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles RGB color plugin", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -103,12 +103,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/plugins/colors/rgb/rollup.config.js b/plugins/colors/rgb/rollup.config.js new file mode 100644 index 00000000000..f8f95fe809b --- /dev/null +++ b/plugins/colors/rgb/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPlugin } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPlugin({ + moduleName: "rgbColor", + pluginName: "RGB Color", + version, + dir: __dirname, + progress: false, +}); diff --git a/plugins/colors/rgb/src/browser.ts b/plugins/colors/rgb/src/browser.ts new file mode 100644 index 00000000000..953ea5bd0f3 --- /dev/null +++ b/plugins/colors/rgb/src/browser.ts @@ -0,0 +1,10 @@ +import { loadRgbColorPlugin } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadRgbColorPlugin?: typeof loadRgbColorPlugin; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadRgbColorPlugin = loadRgbColorPlugin; + +export * from "./index.js"; diff --git a/plugins/colors/rgb/src/index.lazy.ts b/plugins/colors/rgb/src/index.lazy.ts new file mode 100644 index 00000000000..ba28f0d9a8e --- /dev/null +++ b/plugins/colors/rgb/src/index.lazy.ts @@ -0,0 +1,17 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * This function is used to load the RGB color plugin + * @param engine - The engine that will use the plugin + */ +export async function loadRgbColorPlugin(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { RgbColorManager } = await import("./RgbColorManager.js"); + + e.pluginManager.addColorManager("rgb", new RgbColorManager()); + }); +} diff --git a/plugins/colors/rgb/src/index.ts b/plugins/colors/rgb/src/index.ts index 7e2f8b1f1fa..809ce9c2778 100644 --- a/plugins/colors/rgb/src/index.ts +++ b/plugins/colors/rgb/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { RgbColorManager } from "./RgbColorManager.js"; declare const __VERSION__: string; @@ -9,9 +10,7 @@ declare const __VERSION__: string; export async function loadRgbColorPlugin(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async e => { - const { RgbColorManager } = await import("./RgbColorManager.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addColorManager("rgb", new RgbColorManager()); }); } diff --git a/plugins/colors/rgb/webpack.config.js b/plugins/colors/rgb/webpack.config.js deleted file mode 100644 index be3647e87fc..00000000000 --- a/plugins/colors/rgb/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPlugin } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPlugin({ - moduleName: "rgbColor", - pluginName: "RGB Color", - version, - dir: __dirname, - progress: false, -}); diff --git a/plugins/easings/back/CHANGELOG.md b/plugins/easings/back/CHANGELOG.md index cecadaba42b..8dafd08e84e 100644 --- a/plugins/easings/back/CHANGELOG.md +++ b/plugins/easings/back/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/plugin-easing-back + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/plugin-easing-back diff --git a/plugins/easings/back/package.dist.json b/plugins/easings/back/package.dist.json index 37541fb6fe2..841fceef510 100644 --- a/plugins/easings/back/package.dist.json +++ b/plugins/easings/back/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/plugin-easing-back", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles easing back plugin", "homepage": "https://particles.js.org", "repository": { @@ -96,10 +96,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/plugins/easings/back/package.json b/plugins/easings/back/package.json index 8378cc9958a..0fc243b323a 100644 --- a/plugins/easings/back/package.json +++ b/plugins/easings/back/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/plugin-easing-back", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles easing back plugin", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -103,12 +103,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/plugins/easings/back/rollup.config.js b/plugins/easings/back/rollup.config.js new file mode 100644 index 00000000000..37d66a78f3c --- /dev/null +++ b/plugins/easings/back/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPluginEasing } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPluginEasing({ + moduleName: "back", + pluginName: "Back", + version, + dir: __dirname, + progress: false, +}); diff --git a/plugins/easings/back/src/browser.ts b/plugins/easings/back/src/browser.ts new file mode 100644 index 00000000000..55a8b18f394 --- /dev/null +++ b/plugins/easings/back/src/browser.ts @@ -0,0 +1,10 @@ +import { loadEasingBackPlugin } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadEasingBackPlugin?: typeof loadEasingBackPlugin; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadEasingBackPlugin = loadEasingBackPlugin; + +export * from "./index.js"; diff --git a/plugins/easings/back/src/index.lazy.ts b/plugins/easings/back/src/index.lazy.ts new file mode 100644 index 00000000000..bd82d783a40 --- /dev/null +++ b/plugins/easings/back/src/index.lazy.ts @@ -0,0 +1,18 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadEasingBackPlugin(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { easingsFunctions } = await import("./easingsFunctions.js"); + + for (const [easing, easingFn] of easingsFunctions) { + e.pluginManager.addEasing(easing, easingFn); + } + }); +} diff --git a/plugins/easings/back/src/index.ts b/plugins/easings/back/src/index.ts index af797b1aacb..9a0c914fb32 100644 --- a/plugins/easings/back/src/index.ts +++ b/plugins/easings/back/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { easingsFunctions } from "./easingsFunctions.js"; declare const __VERSION__: string; @@ -8,9 +9,7 @@ declare const __VERSION__: string; export async function loadEasingBackPlugin(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async e => { - const { easingsFunctions } = await import("./easingsFunctions.js"); - + await engine.pluginManager.register(e => { for (const [easing, easingFn] of easingsFunctions) { e.pluginManager.addEasing(easing, easingFn); } diff --git a/plugins/easings/back/webpack.config.js b/plugins/easings/back/webpack.config.js deleted file mode 100644 index 54c90a12953..00000000000 --- a/plugins/easings/back/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPluginEasing } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPluginEasing({ - moduleName: "back", - pluginName: "Back", - version, - dir: __dirname, - progress: false, -}); diff --git a/plugins/easings/bounce/CHANGELOG.md b/plugins/easings/bounce/CHANGELOG.md index d29f8cdb045..c26595de0e3 100644 --- a/plugins/easings/bounce/CHANGELOG.md +++ b/plugins/easings/bounce/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/plugin-easing-bounce + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/plugin-easing-bounce diff --git a/plugins/easings/bounce/package.dist.json b/plugins/easings/bounce/package.dist.json index 95b24c8bd14..f45cc896780 100644 --- a/plugins/easings/bounce/package.dist.json +++ b/plugins/easings/bounce/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/plugin-easing-bounce", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles easing bounce plugin", "homepage": "https://particles.js.org", "repository": { @@ -96,10 +96,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/plugins/easings/bounce/package.json b/plugins/easings/bounce/package.json index adb636b8829..ee69fb4e61b 100644 --- a/plugins/easings/bounce/package.json +++ b/plugins/easings/bounce/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/plugin-easing-bounce", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles easing bounce plugin", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -103,12 +103,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/plugins/easings/bounce/rollup.config.js b/plugins/easings/bounce/rollup.config.js new file mode 100644 index 00000000000..622d0f7efb4 --- /dev/null +++ b/plugins/easings/bounce/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPluginEasing } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPluginEasing({ + moduleName: "bounce", + pluginName: "Bounce", + version, + dir: __dirname, + progress: false, +}); diff --git a/plugins/easings/bounce/src/browser.ts b/plugins/easings/bounce/src/browser.ts new file mode 100644 index 00000000000..b93dee0ac5c --- /dev/null +++ b/plugins/easings/bounce/src/browser.ts @@ -0,0 +1,10 @@ +import { loadEasingBouncePlugin } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadEasingBouncePlugin?: typeof loadEasingBouncePlugin; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadEasingBouncePlugin = loadEasingBouncePlugin; + +export * from "./index.js"; diff --git a/plugins/easings/bounce/src/index.lazy.ts b/plugins/easings/bounce/src/index.lazy.ts new file mode 100644 index 00000000000..ffe4627cc2c --- /dev/null +++ b/plugins/easings/bounce/src/index.lazy.ts @@ -0,0 +1,18 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadEasingBouncePlugin(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { easingsFunctions } = await import("./easingsFunctions.js"); + + for (const [easing, easingFn] of easingsFunctions) { + e.pluginManager.addEasing(easing, easingFn); + } + }); +} diff --git a/plugins/easings/bounce/src/index.ts b/plugins/easings/bounce/src/index.ts index 6f307d1cfc2..a617cf70ef0 100644 --- a/plugins/easings/bounce/src/index.ts +++ b/plugins/easings/bounce/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { easingsFunctions } from "./easingsFunctions.js"; declare const __VERSION__: string; @@ -8,9 +9,7 @@ declare const __VERSION__: string; export async function loadEasingBouncePlugin(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async e => { - const { easingsFunctions } = await import("./easingsFunctions.js"); - + await engine.pluginManager.register(e => { for (const [easing, easingFn] of easingsFunctions) { e.pluginManager.addEasing(easing, easingFn); } diff --git a/plugins/easings/bounce/webpack.config.js b/plugins/easings/bounce/webpack.config.js deleted file mode 100644 index 7221d2d9d70..00000000000 --- a/plugins/easings/bounce/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPluginEasing } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPluginEasing({ - moduleName: "bounce", - pluginName: "Bounce", - version, - dir: __dirname, - progress: false, -}); diff --git a/plugins/easings/circ/CHANGELOG.md b/plugins/easings/circ/CHANGELOG.md index 76a72956d52..8b5357df747 100644 --- a/plugins/easings/circ/CHANGELOG.md +++ b/plugins/easings/circ/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/plugin-easing-circ + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/plugin-easing-circ diff --git a/plugins/easings/circ/package.dist.json b/plugins/easings/circ/package.dist.json index 3f536723aa9..877a9707731 100644 --- a/plugins/easings/circ/package.dist.json +++ b/plugins/easings/circ/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/plugin-easing-circ", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles easing circ plugin", "homepage": "https://particles.js.org", "repository": { @@ -96,10 +96,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/plugins/easings/circ/package.json b/plugins/easings/circ/package.json index 0c09cf9d10a..64e942d6778 100644 --- a/plugins/easings/circ/package.json +++ b/plugins/easings/circ/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/plugin-easing-circ", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles easing circ plugin", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -103,12 +103,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/plugins/easings/circ/rollup.config.js b/plugins/easings/circ/rollup.config.js new file mode 100644 index 00000000000..f2e9c799ed8 --- /dev/null +++ b/plugins/easings/circ/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPluginEasing } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPluginEasing({ + moduleName: "circ", + pluginName: "Circ", + version, + dir: __dirname, + progress: false, +}); diff --git a/plugins/easings/circ/src/browser.ts b/plugins/easings/circ/src/browser.ts new file mode 100644 index 00000000000..b918c54b5c9 --- /dev/null +++ b/plugins/easings/circ/src/browser.ts @@ -0,0 +1,10 @@ +import { loadEasingCircPlugin } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadEasingCircPlugin?: typeof loadEasingCircPlugin; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadEasingCircPlugin = loadEasingCircPlugin; + +export * from "./index.js"; diff --git a/plugins/easings/circ/src/index.lazy.ts b/plugins/easings/circ/src/index.lazy.ts new file mode 100644 index 00000000000..e890241fbd8 --- /dev/null +++ b/plugins/easings/circ/src/index.lazy.ts @@ -0,0 +1,18 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadEasingCircPlugin(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { easingsFunctions } = await import("./easingsFunctions.js"); + + for (const [easing, easingFn] of easingsFunctions) { + e.pluginManager.addEasing(easing, easingFn); + } + }); +} diff --git a/plugins/easings/circ/src/index.ts b/plugins/easings/circ/src/index.ts index 795398003b6..457ff2dd35d 100644 --- a/plugins/easings/circ/src/index.ts +++ b/plugins/easings/circ/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { easingsFunctions } from "./easingsFunctions.js"; declare const __VERSION__: string; @@ -8,9 +9,7 @@ declare const __VERSION__: string; export async function loadEasingCircPlugin(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async e => { - const { easingsFunctions } = await import("./easingsFunctions.js"); - + await engine.pluginManager.register(e => { for (const [easing, easingFn] of easingsFunctions) { e.pluginManager.addEasing(easing, easingFn); } diff --git a/plugins/easings/circ/webpack.config.js b/plugins/easings/circ/webpack.config.js deleted file mode 100644 index 2f24dff7e42..00000000000 --- a/plugins/easings/circ/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPluginEasing } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPluginEasing({ - moduleName: "circ", - pluginName: "Circ", - version, - dir: __dirname, - progress: false, -}); diff --git a/plugins/easings/cubic/CHANGELOG.md b/plugins/easings/cubic/CHANGELOG.md index ff06a70dc38..4a37d3cd693 100644 --- a/plugins/easings/cubic/CHANGELOG.md +++ b/plugins/easings/cubic/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/plugin-easing-cubic + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/plugin-easing-cubic diff --git a/plugins/easings/cubic/package.dist.json b/plugins/easings/cubic/package.dist.json index ecd07f21194..a919f5f061d 100644 --- a/plugins/easings/cubic/package.dist.json +++ b/plugins/easings/cubic/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/plugin-easing-cubic", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles easing cubic plugin", "homepage": "https://particles.js.org", "repository": { @@ -96,10 +96,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/plugins/easings/cubic/package.json b/plugins/easings/cubic/package.json index 17e73cf2883..7c3a122dffc 100644 --- a/plugins/easings/cubic/package.json +++ b/plugins/easings/cubic/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/plugin-easing-cubic", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles easing cubic plugin", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -103,12 +103,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/plugins/easings/cubic/rollup.config.js b/plugins/easings/cubic/rollup.config.js new file mode 100644 index 00000000000..600566c8e54 --- /dev/null +++ b/plugins/easings/cubic/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPluginEasing } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPluginEasing({ + moduleName: "cubic", + pluginName: "Cubic", + version, + dir: __dirname, + progress: false, +}); diff --git a/plugins/easings/cubic/src/browser.ts b/plugins/easings/cubic/src/browser.ts new file mode 100644 index 00000000000..8ee3e1448c0 --- /dev/null +++ b/plugins/easings/cubic/src/browser.ts @@ -0,0 +1,10 @@ +import { loadEasingCubicPlugin } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadEasingCubicPlugin?: typeof loadEasingCubicPlugin; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadEasingCubicPlugin = loadEasingCubicPlugin; + +export * from "./index.js"; diff --git a/plugins/easings/cubic/src/index.lazy.ts b/plugins/easings/cubic/src/index.lazy.ts new file mode 100644 index 00000000000..4fc44303bfc --- /dev/null +++ b/plugins/easings/cubic/src/index.lazy.ts @@ -0,0 +1,18 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadEasingCubicPlugin(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { easingsFunctions } = await import("./easingsFunctions.js"); + + for (const [easing, easingFn] of easingsFunctions) { + e.pluginManager.addEasing(easing, easingFn); + } + }); +} diff --git a/plugins/easings/cubic/src/index.ts b/plugins/easings/cubic/src/index.ts index 34ce9ab33fa..a7ab60b2ca3 100644 --- a/plugins/easings/cubic/src/index.ts +++ b/plugins/easings/cubic/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { easingsFunctions } from "./easingsFunctions.js"; declare const __VERSION__: string; @@ -8,9 +9,7 @@ declare const __VERSION__: string; export async function loadEasingCubicPlugin(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async e => { - const { easingsFunctions } = await import("./easingsFunctions.js"); - + await engine.pluginManager.register(e => { for (const [easing, easingFn] of easingsFunctions) { e.pluginManager.addEasing(easing, easingFn); } diff --git a/plugins/easings/cubic/webpack.config.js b/plugins/easings/cubic/webpack.config.js deleted file mode 100644 index 4613c1e6616..00000000000 --- a/plugins/easings/cubic/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPluginEasing } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPluginEasing({ - moduleName: "cubic", - pluginName: "Cubic", - version, - dir: __dirname, - progress: false, -}); diff --git a/plugins/easings/elastic/CHANGELOG.md b/plugins/easings/elastic/CHANGELOG.md index 8843623956f..3b4cb1c7220 100644 --- a/plugins/easings/elastic/CHANGELOG.md +++ b/plugins/easings/elastic/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/plugin-easing-elastic + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/plugin-easing-elastic diff --git a/plugins/easings/elastic/package.dist.json b/plugins/easings/elastic/package.dist.json index 9d100d1a703..961fef0e1d1 100644 --- a/plugins/easings/elastic/package.dist.json +++ b/plugins/easings/elastic/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/plugin-easing-elastic", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles easing elastic plugin", "homepage": "https://particles.js.org", "repository": { @@ -96,10 +96,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/plugins/easings/elastic/package.json b/plugins/easings/elastic/package.json index c9bf3a30a00..61e111377de 100644 --- a/plugins/easings/elastic/package.json +++ b/plugins/easings/elastic/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/plugin-easing-elastic", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles easing elastic plugin", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -103,12 +103,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/plugins/easings/elastic/rollup.config.js b/plugins/easings/elastic/rollup.config.js new file mode 100644 index 00000000000..6b6e667fc20 --- /dev/null +++ b/plugins/easings/elastic/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPluginEasing } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPluginEasing({ + moduleName: "elastic", + pluginName: "Elastic", + version, + dir: __dirname, + progress: false, +}); diff --git a/plugins/easings/elastic/src/browser.ts b/plugins/easings/elastic/src/browser.ts new file mode 100644 index 00000000000..566db1a3bcf --- /dev/null +++ b/plugins/easings/elastic/src/browser.ts @@ -0,0 +1,10 @@ +import { loadEasingElasticPlugin } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadEasingElasticPlugin?: typeof loadEasingElasticPlugin; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadEasingElasticPlugin = loadEasingElasticPlugin; + +export * from "./index.js"; diff --git a/plugins/easings/elastic/src/index.lazy.ts b/plugins/easings/elastic/src/index.lazy.ts new file mode 100644 index 00000000000..4eac42fff43 --- /dev/null +++ b/plugins/easings/elastic/src/index.lazy.ts @@ -0,0 +1,18 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadEasingElasticPlugin(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { easingsFunctions } = await import("./easingsFunctions.js"); + + for (const [easing, easingFn] of easingsFunctions) { + e.pluginManager.addEasing(easing, easingFn); + } + }); +} diff --git a/plugins/easings/elastic/src/index.ts b/plugins/easings/elastic/src/index.ts index 77464358c48..3399c2960c8 100644 --- a/plugins/easings/elastic/src/index.ts +++ b/plugins/easings/elastic/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { easingsFunctions } from "./easingsFunctions.js"; declare const __VERSION__: string; @@ -8,9 +9,7 @@ declare const __VERSION__: string; export async function loadEasingElasticPlugin(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async e => { - const { easingsFunctions } = await import("./easingsFunctions.js"); - + await engine.pluginManager.register(e => { for (const [easing, easingFn] of easingsFunctions) { e.pluginManager.addEasing(easing, easingFn); } diff --git a/plugins/easings/elastic/webpack.config.js b/plugins/easings/elastic/webpack.config.js deleted file mode 100644 index 5cd5768c4b8..00000000000 --- a/plugins/easings/elastic/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPluginEasing } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPluginEasing({ - moduleName: "elastic", - pluginName: "Elastic", - version, - dir: __dirname, - progress: false, -}); diff --git a/plugins/easings/expo/CHANGELOG.md b/plugins/easings/expo/CHANGELOG.md index 27dc38ecf17..9b3cfdfe0b3 100644 --- a/plugins/easings/expo/CHANGELOG.md +++ b/plugins/easings/expo/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/plugin-easing-expo + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/plugin-easing-expo diff --git a/plugins/easings/expo/package.dist.json b/plugins/easings/expo/package.dist.json index 95e3fdef688..0e108a2443b 100644 --- a/plugins/easings/expo/package.dist.json +++ b/plugins/easings/expo/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/plugin-easing-expo", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles easing expo plugin", "homepage": "https://particles.js.org", "repository": { @@ -96,10 +96,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/plugins/easings/expo/package.json b/plugins/easings/expo/package.json index dc9dd038a9f..03125372626 100644 --- a/plugins/easings/expo/package.json +++ b/plugins/easings/expo/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/plugin-easing-expo", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles easing expo plugin", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -103,12 +103,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/plugins/easings/expo/rollup.config.js b/plugins/easings/expo/rollup.config.js new file mode 100644 index 00000000000..d34db37f5f8 --- /dev/null +++ b/plugins/easings/expo/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPluginEasing } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPluginEasing({ + moduleName: "expo", + pluginName: "Expo", + version, + dir: __dirname, + progress: false, +}); diff --git a/plugins/easings/expo/src/browser.ts b/plugins/easings/expo/src/browser.ts new file mode 100644 index 00000000000..ab23ba286ab --- /dev/null +++ b/plugins/easings/expo/src/browser.ts @@ -0,0 +1,10 @@ +import { loadEasingExpoPlugin } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadEasingExpoPlugin?: typeof loadEasingExpoPlugin; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadEasingExpoPlugin = loadEasingExpoPlugin; + +export * from "./index.js"; diff --git a/plugins/easings/expo/src/index.lazy.ts b/plugins/easings/expo/src/index.lazy.ts new file mode 100644 index 00000000000..8bd2d4cff72 --- /dev/null +++ b/plugins/easings/expo/src/index.lazy.ts @@ -0,0 +1,18 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadEasingExpoPlugin(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { easingsFunctions } = await import("./easingsFunctions.js"); + + for (const [easing, easingFn] of easingsFunctions) { + e.pluginManager.addEasing(easing, easingFn); + } + }); +} diff --git a/plugins/easings/expo/src/index.ts b/plugins/easings/expo/src/index.ts index 9ef85b342c7..cee59db49f6 100644 --- a/plugins/easings/expo/src/index.ts +++ b/plugins/easings/expo/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { easingsFunctions } from "./easingsFunctions.js"; declare const __VERSION__: string; @@ -8,9 +9,7 @@ declare const __VERSION__: string; export async function loadEasingExpoPlugin(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async e => { - const { easingsFunctions } = await import("./easingsFunctions.js"); - + await engine.pluginManager.register(e => { for (const [easing, easingFn] of easingsFunctions) { e.pluginManager.addEasing(easing, easingFn); } diff --git a/plugins/easings/expo/webpack.config.js b/plugins/easings/expo/webpack.config.js deleted file mode 100644 index be2268041ec..00000000000 --- a/plugins/easings/expo/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPluginEasing } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPluginEasing({ - moduleName: "expo", - pluginName: "Expo", - version, - dir: __dirname, - progress: false, -}); diff --git a/plugins/easings/gaussian/CHANGELOG.md b/plugins/easings/gaussian/CHANGELOG.md index dbc84499c03..88ca2f489bb 100644 --- a/plugins/easings/gaussian/CHANGELOG.md +++ b/plugins/easings/gaussian/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/plugin-easing-gaussian + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/plugin-easing-gaussian diff --git a/plugins/easings/gaussian/package.dist.json b/plugins/easings/gaussian/package.dist.json index af3d6931a27..80a2f735a57 100644 --- a/plugins/easings/gaussian/package.dist.json +++ b/plugins/easings/gaussian/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/plugin-easing-gaussian", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles easing gaussian plugin", "homepage": "https://particles.js.org", "repository": { @@ -96,10 +96,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "devDependencies": { "@tsparticles/engine": "workspace:*" diff --git a/plugins/easings/gaussian/package.json b/plugins/easings/gaussian/package.json index efff2e0bdb3..5236fd275b8 100644 --- a/plugins/easings/gaussian/package.json +++ b/plugins/easings/gaussian/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/plugin-easing-gaussian", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles easing gaussian plugin", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -103,6 +103,13 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { @@ -113,5 +120,9 @@ "directory": "dist", "linkDirectory": true }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/plugins/easings/gaussian/rollup.config.js b/plugins/easings/gaussian/rollup.config.js new file mode 100644 index 00000000000..c112cb92c1d --- /dev/null +++ b/plugins/easings/gaussian/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPluginEasing } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPluginEasing({ + moduleName: "gaussian", + pluginName: "Gaussian", + version, + dir: __dirname, + progress: false, +}); diff --git a/plugins/easings/gaussian/src/browser.ts b/plugins/easings/gaussian/src/browser.ts new file mode 100644 index 00000000000..43915be8b04 --- /dev/null +++ b/plugins/easings/gaussian/src/browser.ts @@ -0,0 +1,10 @@ +import { loadEasingGaussianPlugin } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadEasingGaussianPlugin?: typeof loadEasingGaussianPlugin; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadEasingGaussianPlugin = loadEasingGaussianPlugin; + +export * from "./index.js"; diff --git a/plugins/easings/gaussian/src/index.lazy.ts b/plugins/easings/gaussian/src/index.lazy.ts new file mode 100644 index 00000000000..430bd0b0d43 --- /dev/null +++ b/plugins/easings/gaussian/src/index.lazy.ts @@ -0,0 +1,18 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadEasingGaussianPlugin(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { easingsFunctions } = await import("./easingsFunctions.js"); + + for (const [easing, easingFn] of easingsFunctions) { + e.pluginManager.addEasing(easing, easingFn); + } + }); +} diff --git a/plugins/easings/gaussian/src/index.ts b/plugins/easings/gaussian/src/index.ts index 8bb4c6235f3..fea44e30466 100644 --- a/plugins/easings/gaussian/src/index.ts +++ b/plugins/easings/gaussian/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { easingsFunctions } from "./easingsFunctions.js"; declare const __VERSION__: string; @@ -8,9 +9,7 @@ declare const __VERSION__: string; export async function loadEasingGaussianPlugin(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async e => { - const { easingsFunctions } = await import("./easingsFunctions.js"); - + await engine.pluginManager.register(e => { for (const [easing, easingFn] of easingsFunctions) { e.pluginManager.addEasing(easing, easingFn); } diff --git a/plugins/easings/gaussian/webpack.config.js b/plugins/easings/gaussian/webpack.config.js deleted file mode 100644 index 8049584d223..00000000000 --- a/plugins/easings/gaussian/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPluginEasing } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPluginEasing({ - moduleName: "gaussian", - pluginName: "Gaussian", - version, - dir: __dirname, - progress: false, -}); diff --git a/plugins/easings/linear/CHANGELOG.md b/plugins/easings/linear/CHANGELOG.md index 3d41c73a3cc..e45befdb246 100644 --- a/plugins/easings/linear/CHANGELOG.md +++ b/plugins/easings/linear/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/plugin-easing-linear + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/plugin-easing-linear diff --git a/plugins/easings/linear/package.dist.json b/plugins/easings/linear/package.dist.json index 1ed97bfc4d5..5a7dca3b98e 100644 --- a/plugins/easings/linear/package.dist.json +++ b/plugins/easings/linear/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/plugin-easing-linear", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles easing linear plugin", "homepage": "https://particles.js.org", "repository": { @@ -96,10 +96,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "devDependencies": { "@tsparticles/engine": "workspace:*" diff --git a/plugins/easings/linear/package.json b/plugins/easings/linear/package.json index d5962024c19..a0770577522 100644 --- a/plugins/easings/linear/package.json +++ b/plugins/easings/linear/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/plugin-easing-linear", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles easing linear plugin", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -103,6 +103,13 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { @@ -113,5 +120,9 @@ "directory": "dist", "linkDirectory": true }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/plugins/easings/linear/rollup.config.js b/plugins/easings/linear/rollup.config.js new file mode 100644 index 00000000000..facbfe90ad0 --- /dev/null +++ b/plugins/easings/linear/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPluginEasing } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPluginEasing({ + moduleName: "linear", + pluginName: "Linear", + version, + dir: __dirname, + progress: false, +}); diff --git a/plugins/easings/linear/src/browser.ts b/plugins/easings/linear/src/browser.ts new file mode 100644 index 00000000000..5e30b95c77d --- /dev/null +++ b/plugins/easings/linear/src/browser.ts @@ -0,0 +1,10 @@ +import { loadEasingLinearPlugin } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadEasingLinearPlugin?: typeof loadEasingLinearPlugin; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadEasingLinearPlugin = loadEasingLinearPlugin; + +export * from "./index.js"; diff --git a/plugins/easings/linear/src/index.lazy.ts b/plugins/easings/linear/src/index.lazy.ts new file mode 100644 index 00000000000..60ef1d5e417 --- /dev/null +++ b/plugins/easings/linear/src/index.lazy.ts @@ -0,0 +1,18 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadEasingLinearPlugin(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { easingsFunctions } = await import("./easingsFunctions.js"); + + for (const [easing, easingFn] of easingsFunctions) { + e.pluginManager.addEasing(easing, easingFn); + } + }); +} diff --git a/plugins/easings/linear/src/index.ts b/plugins/easings/linear/src/index.ts index 97e67641785..d19340aa154 100644 --- a/plugins/easings/linear/src/index.ts +++ b/plugins/easings/linear/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { easingsFunctions } from "./easingsFunctions.js"; declare const __VERSION__: string; @@ -8,9 +9,7 @@ declare const __VERSION__: string; export async function loadEasingLinearPlugin(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async e => { - const { easingsFunctions } = await import("./easingsFunctions.js"); - + await engine.pluginManager.register(e => { for (const [easing, easingFn] of easingsFunctions) { e.pluginManager.addEasing(easing, easingFn); } diff --git a/plugins/easings/linear/webpack.config.js b/plugins/easings/linear/webpack.config.js deleted file mode 100644 index 83918ba6da6..00000000000 --- a/plugins/easings/linear/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPluginEasing } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPluginEasing({ - moduleName: "linear", - pluginName: "Linear", - version, - dir: __dirname, - progress: false, -}); diff --git a/plugins/easings/quad/CHANGELOG.md b/plugins/easings/quad/CHANGELOG.md index cc854726938..d6ee8c7f506 100644 --- a/plugins/easings/quad/CHANGELOG.md +++ b/plugins/easings/quad/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/plugin-easing-quad + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/plugin-easing-quad diff --git a/plugins/easings/quad/package.dist.json b/plugins/easings/quad/package.dist.json index 3d4032b8508..23fe4de358a 100644 --- a/plugins/easings/quad/package.dist.json +++ b/plugins/easings/quad/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/plugin-easing-quad", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles easing quad plugin", "homepage": "https://particles.js.org", "repository": { @@ -96,10 +96,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "devDependencies": { "@tsparticles/engine": "workspace:*" diff --git a/plugins/easings/quad/package.json b/plugins/easings/quad/package.json index a9a532c39e6..c2218a3f2e4 100644 --- a/plugins/easings/quad/package.json +++ b/plugins/easings/quad/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/plugin-easing-quad", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles easing quad plugin", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -103,6 +103,13 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { @@ -113,5 +120,9 @@ "directory": "dist", "linkDirectory": true }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/plugins/easings/quad/rollup.config.js b/plugins/easings/quad/rollup.config.js new file mode 100644 index 00000000000..9107f1b1bb7 --- /dev/null +++ b/plugins/easings/quad/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPluginEasing } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPluginEasing({ + moduleName: "quad", + pluginName: "Quad", + version, + dir: __dirname, + progress: false, +}); diff --git a/plugins/easings/quad/src/browser.ts b/plugins/easings/quad/src/browser.ts new file mode 100644 index 00000000000..500749e7630 --- /dev/null +++ b/plugins/easings/quad/src/browser.ts @@ -0,0 +1,10 @@ +import { loadEasingQuadPlugin } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadEasingQuadPlugin?: typeof loadEasingQuadPlugin; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadEasingQuadPlugin = loadEasingQuadPlugin; + +export * from "./index.js"; diff --git a/plugins/easings/quad/src/index.lazy.ts b/plugins/easings/quad/src/index.lazy.ts new file mode 100644 index 00000000000..9f78e91a7b3 --- /dev/null +++ b/plugins/easings/quad/src/index.lazy.ts @@ -0,0 +1,18 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadEasingQuadPlugin(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { easingsFunctions } = await import("./easingsFunctions.js"); + + for (const [easing, easingFn] of easingsFunctions) { + e.pluginManager.addEasing(easing, easingFn); + } + }); +} diff --git a/plugins/easings/quad/src/index.ts b/plugins/easings/quad/src/index.ts index cceb1a96e30..652e127d534 100644 --- a/plugins/easings/quad/src/index.ts +++ b/plugins/easings/quad/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { easingsFunctions } from "./easingsFunctions.js"; declare const __VERSION__: string; @@ -8,9 +9,7 @@ declare const __VERSION__: string; export async function loadEasingQuadPlugin(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async e => { - const { easingsFunctions } = await import("./easingsFunctions.js"); - + await engine.pluginManager.register(e => { for (const [easing, easingFn] of easingsFunctions) { e.pluginManager.addEasing(easing, easingFn); } diff --git a/plugins/easings/quad/webpack.config.js b/plugins/easings/quad/webpack.config.js deleted file mode 100644 index 0b377c43d2d..00000000000 --- a/plugins/easings/quad/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPluginEasing } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPluginEasing({ - moduleName: "quad", - pluginName: "Quad", - version, - dir: __dirname, - progress: false, -}); diff --git a/plugins/easings/quart/CHANGELOG.md b/plugins/easings/quart/CHANGELOG.md index 25b4a4fccff..4d3f313b052 100644 --- a/plugins/easings/quart/CHANGELOG.md +++ b/plugins/easings/quart/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/plugin-easing-quart + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/plugin-easing-quart diff --git a/plugins/easings/quart/package.dist.json b/plugins/easings/quart/package.dist.json index f547e097c45..6eebd625b6b 100644 --- a/plugins/easings/quart/package.dist.json +++ b/plugins/easings/quart/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/plugin-easing-quart", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles easing quart plugin", "homepage": "https://particles.js.org", "repository": { @@ -96,10 +96,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/plugins/easings/quart/package.json b/plugins/easings/quart/package.json index 22eed912530..fde29b1183a 100644 --- a/plugins/easings/quart/package.json +++ b/plugins/easings/quart/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/plugin-easing-quart", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles easing quart plugin", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -103,12 +103,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/plugins/easings/quart/rollup.config.js b/plugins/easings/quart/rollup.config.js new file mode 100644 index 00000000000..4c797add66a --- /dev/null +++ b/plugins/easings/quart/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPluginEasing } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPluginEasing({ + moduleName: "quart", + pluginName: "Quart", + version, + dir: __dirname, + progress: false, +}); diff --git a/plugins/easings/quart/src/browser.ts b/plugins/easings/quart/src/browser.ts new file mode 100644 index 00000000000..1932e725a20 --- /dev/null +++ b/plugins/easings/quart/src/browser.ts @@ -0,0 +1,10 @@ +import { loadEasingQuartPlugin } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadEasingQuartPlugin?: typeof loadEasingQuartPlugin; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadEasingQuartPlugin = loadEasingQuartPlugin; + +export * from "./index.js"; diff --git a/plugins/easings/quart/src/index.lazy.ts b/plugins/easings/quart/src/index.lazy.ts new file mode 100644 index 00000000000..ff83933a5c1 --- /dev/null +++ b/plugins/easings/quart/src/index.lazy.ts @@ -0,0 +1,18 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadEasingQuartPlugin(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { easingsFunctions } = await import("./easingsFunctions.js"); + + for (const [easing, easingFn] of easingsFunctions) { + e.pluginManager.addEasing(easing, easingFn); + } + }); +} diff --git a/plugins/easings/quart/src/index.ts b/plugins/easings/quart/src/index.ts index f4b7ed25b1e..cec4127e692 100644 --- a/plugins/easings/quart/src/index.ts +++ b/plugins/easings/quart/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { easingsFunctions } from "./easingsFunctions.js"; declare const __VERSION__: string; @@ -8,9 +9,7 @@ declare const __VERSION__: string; export async function loadEasingQuartPlugin(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async e => { - const { easingsFunctions } = await import("./easingsFunctions.js"); - + await engine.pluginManager.register(e => { for (const [easing, easingFn] of easingsFunctions) { e.pluginManager.addEasing(easing, easingFn); } diff --git a/plugins/easings/quart/webpack.config.js b/plugins/easings/quart/webpack.config.js deleted file mode 100644 index d23f582f726..00000000000 --- a/plugins/easings/quart/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPluginEasing } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPluginEasing({ - moduleName: "quart", - pluginName: "Quart", - version, - dir: __dirname, - progress: false, -}); diff --git a/plugins/easings/quint/CHANGELOG.md b/plugins/easings/quint/CHANGELOG.md index 2c88b60ecaf..dc93f81616b 100644 --- a/plugins/easings/quint/CHANGELOG.md +++ b/plugins/easings/quint/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/plugin-easing-quint + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/plugin-easing-quint diff --git a/plugins/easings/quint/package.dist.json b/plugins/easings/quint/package.dist.json index 003fb52592e..af9e880f90c 100644 --- a/plugins/easings/quint/package.dist.json +++ b/plugins/easings/quint/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/plugin-easing-quint", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles easing quint plugin", "homepage": "https://particles.js.org", "repository": { @@ -96,10 +96,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/plugins/easings/quint/package.json b/plugins/easings/quint/package.json index b7f88693863..5f2277e981d 100644 --- a/plugins/easings/quint/package.json +++ b/plugins/easings/quint/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/plugin-easing-quint", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles easing quint plugin", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -103,12 +103,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/plugins/easings/quint/rollup.config.js b/plugins/easings/quint/rollup.config.js new file mode 100644 index 00000000000..3e9a80469cc --- /dev/null +++ b/plugins/easings/quint/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPluginEasing } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPluginEasing({ + moduleName: "quint", + pluginName: "Quint", + version, + dir: __dirname, + progress: false, +}); diff --git a/plugins/easings/quint/src/browser.ts b/plugins/easings/quint/src/browser.ts new file mode 100644 index 00000000000..63e019aca3f --- /dev/null +++ b/plugins/easings/quint/src/browser.ts @@ -0,0 +1,10 @@ +import { loadEasingQuintPlugin } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadEasingQuintPlugin?: typeof loadEasingQuintPlugin; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadEasingQuintPlugin = loadEasingQuintPlugin; + +export * from "./index.js"; diff --git a/plugins/easings/quint/src/index.lazy.ts b/plugins/easings/quint/src/index.lazy.ts new file mode 100644 index 00000000000..53ff492be62 --- /dev/null +++ b/plugins/easings/quint/src/index.lazy.ts @@ -0,0 +1,18 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadEasingQuintPlugin(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { easingsFunctions } = await import("./easingsFunctions.js"); + + for (const [easing, easingFn] of easingsFunctions) { + e.pluginManager.addEasing(easing, easingFn); + } + }); +} diff --git a/plugins/easings/quint/src/index.ts b/plugins/easings/quint/src/index.ts index c6de60c4fd3..d63867a6133 100644 --- a/plugins/easings/quint/src/index.ts +++ b/plugins/easings/quint/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { easingsFunctions } from "./easingsFunctions.js"; declare const __VERSION__: string; @@ -8,9 +9,7 @@ declare const __VERSION__: string; export async function loadEasingQuintPlugin(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async e => { - const { easingsFunctions } = await import("./easingsFunctions.js"); - + await engine.pluginManager.register(e => { for (const [easing, easingFn] of easingsFunctions) { e.pluginManager.addEasing(easing, easingFn); } diff --git a/plugins/easings/quint/webpack.config.js b/plugins/easings/quint/webpack.config.js deleted file mode 100644 index d7f9947da10..00000000000 --- a/plugins/easings/quint/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPluginEasing } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPluginEasing({ - moduleName: "quint", - pluginName: "Quint", - version, - dir: __dirname, - progress: false, -}); diff --git a/plugins/easings/sigmoid/CHANGELOG.md b/plugins/easings/sigmoid/CHANGELOG.md index a2644607a14..d03f0fd591d 100644 --- a/plugins/easings/sigmoid/CHANGELOG.md +++ b/plugins/easings/sigmoid/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/plugin-easing-sigmoid + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/plugin-easing-sigmoid diff --git a/plugins/easings/sigmoid/package.dist.json b/plugins/easings/sigmoid/package.dist.json index 6999a7d233a..2ab3183b14a 100644 --- a/plugins/easings/sigmoid/package.dist.json +++ b/plugins/easings/sigmoid/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/plugin-easing-sigmoid", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles easing sigmoid plugin", "homepage": "https://particles.js.org", "repository": { @@ -96,10 +96,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/plugins/easings/sigmoid/package.json b/plugins/easings/sigmoid/package.json index 1cf2f99c213..87f592f311b 100644 --- a/plugins/easings/sigmoid/package.json +++ b/plugins/easings/sigmoid/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/plugin-easing-sigmoid", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles easing sigmoid plugin", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -103,12 +103,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/plugins/easings/sigmoid/rollup.config.js b/plugins/easings/sigmoid/rollup.config.js new file mode 100644 index 00000000000..2770ad882da --- /dev/null +++ b/plugins/easings/sigmoid/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPluginEasing } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPluginEasing({ + moduleName: "sigmoid", + pluginName: "Sigmoid", + version, + dir: __dirname, + progress: false, +}); diff --git a/plugins/easings/sigmoid/src/browser.ts b/plugins/easings/sigmoid/src/browser.ts new file mode 100644 index 00000000000..4af065feb8a --- /dev/null +++ b/plugins/easings/sigmoid/src/browser.ts @@ -0,0 +1,10 @@ +import { loadEasingSigmoidPlugin } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadEasingSigmoidPlugin?: typeof loadEasingSigmoidPlugin; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadEasingSigmoidPlugin = loadEasingSigmoidPlugin; + +export * from "./index.js"; diff --git a/plugins/easings/sigmoid/src/index.lazy.ts b/plugins/easings/sigmoid/src/index.lazy.ts new file mode 100644 index 00000000000..22589fbd8db --- /dev/null +++ b/plugins/easings/sigmoid/src/index.lazy.ts @@ -0,0 +1,18 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadEasingSigmoidPlugin(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { easingsFunctions } = await import("./easingsFunctions.js"); + + for (const [easing, easingFn] of easingsFunctions) { + e.pluginManager.addEasing(easing, easingFn); + } + }); +} diff --git a/plugins/easings/sigmoid/src/index.ts b/plugins/easings/sigmoid/src/index.ts index 0d91a0c0c0e..38582da604e 100644 --- a/plugins/easings/sigmoid/src/index.ts +++ b/plugins/easings/sigmoid/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { easingsFunctions } from "./easingsFunctions.js"; declare const __VERSION__: string; @@ -8,9 +9,7 @@ declare const __VERSION__: string; export async function loadEasingSigmoidPlugin(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async e => { - const { easingsFunctions } = await import("./easingsFunctions.js"); - + await engine.pluginManager.register(e => { for (const [easing, easingFn] of easingsFunctions) { e.pluginManager.addEasing(easing, easingFn); } diff --git a/plugins/easings/sigmoid/webpack.config.js b/plugins/easings/sigmoid/webpack.config.js deleted file mode 100644 index fb2856c04f7..00000000000 --- a/plugins/easings/sigmoid/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPluginEasing } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPluginEasing({ - moduleName: "sigmoid", - pluginName: "Sigmoid", - version, - dir: __dirname, - progress: false, -}); diff --git a/plugins/easings/sine/CHANGELOG.md b/plugins/easings/sine/CHANGELOG.md index ea77e966ef5..12498838fa8 100644 --- a/plugins/easings/sine/CHANGELOG.md +++ b/plugins/easings/sine/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/plugin-easing-sine + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/plugin-easing-sine diff --git a/plugins/easings/sine/package.dist.json b/plugins/easings/sine/package.dist.json index 9b197d917c1..e21a26f0df4 100644 --- a/plugins/easings/sine/package.dist.json +++ b/plugins/easings/sine/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/plugin-easing-sine", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles easing sine plugin", "homepage": "https://particles.js.org", "repository": { @@ -96,10 +96,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/plugins/easings/sine/package.json b/plugins/easings/sine/package.json index 7c3a83f71aa..9b502531c6a 100644 --- a/plugins/easings/sine/package.json +++ b/plugins/easings/sine/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/plugin-easing-sine", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles easing sine plugin", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -103,12 +103,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/plugins/easings/sine/rollup.config.js b/plugins/easings/sine/rollup.config.js new file mode 100644 index 00000000000..c1a95358900 --- /dev/null +++ b/plugins/easings/sine/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPluginEasing } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPluginEasing({ + moduleName: "sine", + pluginName: "Sine", + version, + dir: __dirname, + progress: false, +}); diff --git a/plugins/easings/sine/src/browser.ts b/plugins/easings/sine/src/browser.ts new file mode 100644 index 00000000000..07fec7920ef --- /dev/null +++ b/plugins/easings/sine/src/browser.ts @@ -0,0 +1,10 @@ +import { loadEasingSinePlugin } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadEasingSinePlugin?: typeof loadEasingSinePlugin; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadEasingSinePlugin = loadEasingSinePlugin; + +export * from "./index.js"; diff --git a/plugins/easings/sine/src/index.lazy.ts b/plugins/easings/sine/src/index.lazy.ts new file mode 100644 index 00000000000..22e4ab8b7fc --- /dev/null +++ b/plugins/easings/sine/src/index.lazy.ts @@ -0,0 +1,18 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadEasingSinePlugin(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { easingsFunctions } = await import("./easingsFunctions.js"); + + for (const [easing, easingFn] of easingsFunctions) { + e.pluginManager.addEasing(easing, easingFn); + } + }); +} diff --git a/plugins/easings/sine/src/index.ts b/plugins/easings/sine/src/index.ts index df8abd797fa..58ef9c34f92 100644 --- a/plugins/easings/sine/src/index.ts +++ b/plugins/easings/sine/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { easingsFunctions } from "./easingsFunctions.js"; declare const __VERSION__: string; @@ -8,9 +9,7 @@ declare const __VERSION__: string; export async function loadEasingSinePlugin(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async e => { - const { easingsFunctions } = await import("./easingsFunctions.js"); - + await engine.pluginManager.register(e => { for (const [easing, easingFn] of easingsFunctions) { e.pluginManager.addEasing(easing, easingFn); } diff --git a/plugins/easings/sine/webpack.config.js b/plugins/easings/sine/webpack.config.js deleted file mode 100644 index 6e4c134fd13..00000000000 --- a/plugins/easings/sine/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPluginEasing } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPluginEasing({ - moduleName: "sine", - pluginName: "Sine", - version, - dir: __dirname, - progress: false, -}); diff --git a/plugins/easings/smoothstep/CHANGELOG.md b/plugins/easings/smoothstep/CHANGELOG.md index 977cb09a607..13f0c11990d 100644 --- a/plugins/easings/smoothstep/CHANGELOG.md +++ b/plugins/easings/smoothstep/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/plugin-easing-smoothstep + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/plugin-easing-smoothstep diff --git a/plugins/easings/smoothstep/package.dist.json b/plugins/easings/smoothstep/package.dist.json index 4b4757685e9..cbb0d6aa69f 100644 --- a/plugins/easings/smoothstep/package.dist.json +++ b/plugins/easings/smoothstep/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/plugin-easing-smoothstep", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles easing smoothstep plugin", "homepage": "https://particles.js.org", "repository": { @@ -96,10 +96,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/plugins/easings/smoothstep/package.json b/plugins/easings/smoothstep/package.json index d3f1e2e7c6a..42183544004 100644 --- a/plugins/easings/smoothstep/package.json +++ b/plugins/easings/smoothstep/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/plugin-easing-smoothstep", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles easing smoothstep plugin", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -103,12 +103,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/plugins/easings/smoothstep/rollup.config.js b/plugins/easings/smoothstep/rollup.config.js new file mode 100644 index 00000000000..29141e4bcf7 --- /dev/null +++ b/plugins/easings/smoothstep/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPluginEasing } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPluginEasing({ + moduleName: "smoothstep", + pluginName: "Smoothstep", + version, + dir: __dirname, + progress: false, +}); diff --git a/plugins/easings/smoothstep/src/browser.ts b/plugins/easings/smoothstep/src/browser.ts new file mode 100644 index 00000000000..eea1bcc2fb9 --- /dev/null +++ b/plugins/easings/smoothstep/src/browser.ts @@ -0,0 +1,10 @@ +import { loadEasingSmoothstepPlugin } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadEasingSmoothstepPlugin?: typeof loadEasingSmoothstepPlugin; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadEasingSmoothstepPlugin = loadEasingSmoothstepPlugin; + +export * from "./index.js"; diff --git a/plugins/easings/smoothstep/src/index.lazy.ts b/plugins/easings/smoothstep/src/index.lazy.ts new file mode 100644 index 00000000000..737a79570c1 --- /dev/null +++ b/plugins/easings/smoothstep/src/index.lazy.ts @@ -0,0 +1,18 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadEasingSmoothstepPlugin(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { easingsFunctions } = await import("./easingsFunctions.js"); + + for (const [easing, easingFn] of easingsFunctions) { + e.pluginManager.addEasing(easing, easingFn); + } + }); +} diff --git a/plugins/easings/smoothstep/src/index.ts b/plugins/easings/smoothstep/src/index.ts index 1b36ffaf509..3fd3529615a 100644 --- a/plugins/easings/smoothstep/src/index.ts +++ b/plugins/easings/smoothstep/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { easingsFunctions } from "./easingsFunctions.js"; declare const __VERSION__: string; @@ -8,9 +9,7 @@ declare const __VERSION__: string; export async function loadEasingSmoothstepPlugin(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async e => { - const { easingsFunctions } = await import("./easingsFunctions.js"); - + await engine.pluginManager.register(e => { for (const [easing, easingFn] of easingsFunctions) { e.pluginManager.addEasing(easing, easingFn); } diff --git a/plugins/easings/smoothstep/webpack.config.js b/plugins/easings/smoothstep/webpack.config.js deleted file mode 100644 index 4c115be6a7b..00000000000 --- a/plugins/easings/smoothstep/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPluginEasing } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPluginEasing({ - moduleName: "smoothstep", - pluginName: "Smoothstep", - version, - dir: __dirname, - progress: false, -}); diff --git a/plugins/emitters/CHANGELOG.md b/plugins/emitters/CHANGELOG.md index 367136f4b90..7982be636f8 100644 --- a/plugins/emitters/CHANGELOG.md +++ b/plugins/emitters/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/plugin-emitters + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/plugin-emitters diff --git a/plugins/emitters/package.dist.json b/plugins/emitters/package.dist.json index 95b7adf4548..21903c1d7e6 100644 --- a/plugins/emitters/package.dist.json +++ b/plugins/emitters/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/plugin-emitters", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles emitters plugin", "homepage": "https://particles.js.org", "repository": { @@ -82,6 +82,13 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./interaction": { "types": "./types/interaction.d.ts", "browser": "./browser/interaction.js", @@ -89,6 +96,13 @@ "require": "./cjs/interaction.js", "default": "./esm/interaction.js" }, + "./interaction/lazy": { + "types": "./types/interaction.lazy.d.ts", + "browser": "./browser/interaction.lazy.js", + "import": "./esm/interaction.lazy.js", + "require": "./cjs/interaction.lazy.js", + "default": "./esm/interaction.lazy.js" + }, "./plugin": { "types": "./types/plugin.d.ts", "browser": "./browser/plugin.js", @@ -96,11 +110,18 @@ "require": "./cjs/plugin.js", "default": "./esm/plugin.js" }, + "./plugin/lazy": { + "types": "./types/plugin.lazy.d.ts", + "browser": "./browser/plugin.lazy.js", + "import": "./esm/plugin.lazy.js", + "require": "./cjs/plugin.lazy.js", + "default": "./esm/plugin.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12", - "@tsparticles/plugin-interactivity": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/plugin-interactivity": "4.0.0-beta.15" }, "peerDependenciesMeta": { "@tsparticles/plugin-interactivity": { diff --git a/plugins/emitters/package.json b/plugins/emitters/package.json index f8bba533270..599194d2dc1 100644 --- a/plugins/emitters/package.json +++ b/plugins/emitters/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/plugin-emitters", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles emitters plugin", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -89,6 +89,13 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./interaction": { "types": "./dist/types/interaction.d.ts", "browser": "./dist/browser/interaction.js", @@ -96,6 +103,13 @@ "require": "./dist/cjs/interaction.js", "default": "./dist/esm/interaction.js" }, + "./interaction/lazy": { + "types": "./dist/types/interaction.lazy.d.ts", + "browser": "./dist/browser/interaction.lazy.js", + "import": "./dist/esm/interaction.lazy.js", + "require": "./dist/cjs/interaction.lazy.js", + "default": "./dist/esm/interaction.lazy.js" + }, "./plugin": { "types": "./dist/types/plugin.d.ts", "browser": "./dist/browser/plugin.js", @@ -103,6 +117,13 @@ "require": "./dist/cjs/plugin.js", "default": "./dist/esm/plugin.js" }, + "./plugin/lazy": { + "types": "./dist/types/plugin.lazy.d.ts", + "browser": "./dist/browser/plugin.lazy.js", + "import": "./dist/esm/plugin.lazy.js", + "require": "./dist/cjs/plugin.lazy.js", + "default": "./dist/esm/plugin.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { @@ -110,6 +131,8 @@ "@tsparticles/plugin-interactivity": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*", "@tsparticles/plugin-interactivity": "workspace:*" }, diff --git a/plugins/emitters/rollup.config.js b/plugins/emitters/rollup.config.js new file mode 100644 index 00000000000..26d031f614e --- /dev/null +++ b/plugins/emitters/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPlugin } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPlugin({ + moduleName: "emitters", + pluginName: "Emitters", + version, + dir: __dirname, + progress: false, +}); diff --git a/plugins/emitters/src/EmitterInstance.ts b/plugins/emitters/src/EmitterInstance.ts index ff0c5060273..c10bfa121b8 100644 --- a/plugins/emitters/src/EmitterInstance.ts +++ b/plugins/emitters/src/EmitterInstance.ts @@ -442,7 +442,7 @@ export class EmitterInstance { private _emitParticles(quantity: number): void { const singleParticlesOptions = (itemFromSingleOrMultiple(this._particlesOptions) ?? {}) as RecursivePartial, - fillHslAnimation = this.options.spawn.fill?.color.animation, + fillHslAnimation = this.options.spawn.fill?.color?.animation, fillEnabled = this.options.spawn.fill?.enable ?? !!this.options.spawn.fill?.color, fillOpacity = this.options.spawn.fill?.opacity === undefined diff --git a/plugins/emitters/src/EmittersInteractor.ts b/plugins/emitters/src/EmittersInteractor.ts index e93fd721eb4..c3ba8d47043 100644 --- a/plugins/emitters/src/EmittersInteractor.ts +++ b/plugins/emitters/src/EmittersInteractor.ts @@ -1,4 +1,4 @@ -import type { EmitterModeOptions, IEmitterDataModeOptions, IEmitterModeOptions } from "./types.js"; +import type { EmitterModeOptions, IEmitterModeOptions } from "./types.js"; import { ExternalInteractorBase, type IInteractivityData, @@ -141,7 +141,7 @@ export class EmittersInteractor extends ExternalInteractorBase options.emitters.value.push(tmp); } } else if ("value" in source.emitters) { - const emitterModeOptions = source.emitters as RecursivePartial; + const emitterModeOptions = source.emitters; options.emitters.random.enable = emitterModeOptions.random?.enable ?? options.emitters.random.enable; options.emitters.random.count = emitterModeOptions.random?.count ?? options.emitters.random.count; diff --git a/plugins/emitters/src/addEmittersShapesManager.ts b/plugins/emitters/src/addEmittersShapesManager.ts index fdbde6de797..1e274981fa2 100644 --- a/plugins/emitters/src/addEmittersShapesManager.ts +++ b/plugins/emitters/src/addEmittersShapesManager.ts @@ -3,7 +3,7 @@ import type { IEmitterShapeGenerator } from "./IEmitterShapeGenerator.js"; /** * - * @param e + * @param e - */ export async function addEmittersShapesManager(e: EmittersEngine): Promise { const { ShapeManager } = await import("./ShapeManager.js"), diff --git a/plugins/emitters/src/browser.ts b/plugins/emitters/src/browser.ts new file mode 100644 index 00000000000..b44aee7b838 --- /dev/null +++ b/plugins/emitters/src/browser.ts @@ -0,0 +1,10 @@ +import { loadEmittersPlugin } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadEmittersPlugin?: typeof loadEmittersPlugin; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadEmittersPlugin = loadEmittersPlugin; + +export * from "./index.js"; diff --git a/plugins/emitters/src/getEmittersInstancesManager.ts b/plugins/emitters/src/getEmittersInstancesManager.ts index 0d4447a3cf3..6e00eaf2ea1 100644 --- a/plugins/emitters/src/getEmittersInstancesManager.ts +++ b/plugins/emitters/src/getEmittersInstancesManager.ts @@ -1,7 +1,7 @@ +import type { Engine, PluginManager } from "@tsparticles/engine"; import type { EmittersInstancesManager } from "./EmittersInstancesManager.js"; -import type { Engine } from "@tsparticles/engine"; -const instancesManagers = new WeakMap>(); +const instancesManagers = new WeakMap>(); /** * @param e - The engine instance providing the plugin manager. @@ -17,6 +17,7 @@ export function getEmittersInstancesManager(e: Engine): Promise new EmittersInstancesManager(pluginManager)) .catch((error: unknown) => { instancesManagers.delete(pluginManager); + throw error; }); diff --git a/plugins/emitters/src/index.lazy.ts b/plugins/emitters/src/index.lazy.ts new file mode 100644 index 00000000000..3b6677cb2e3 --- /dev/null +++ b/plugins/emitters/src/index.lazy.ts @@ -0,0 +1,20 @@ +import type { EmittersEngine } from "./EmittersEngine.js"; +import { loadEmittersInteraction } from "./interaction.lazy.js"; +import { loadEmittersPluginSimple } from "./plugin.lazy.js"; + +/** + * @param engine - The [[EmittersEngine]] instance to load the plugin into + */ +export async function loadEmittersPlugin(engine: EmittersEngine): Promise { + await loadEmittersPluginSimple(engine); + await loadEmittersInteraction(engine); +} + +export * from "./ensureEmittersPluginLoaded.js"; +export type * from "./EmitterContainer.js"; +export * from "./EmitterShapeBase.js"; +export type * from "./EmittersEngine.js"; +export type * from "./IEmitterShape.js"; +export type * from "./IEmitterShapeGenerator.js"; +export * from "./Enums/EmitterClickMode.js"; +export type * from "./IRandomPositionData.js"; diff --git a/plugins/emitters/src/index.ts b/plugins/emitters/src/index.ts index 5625c442a11..d4815c1ef28 100644 --- a/plugins/emitters/src/index.ts +++ b/plugins/emitters/src/index.ts @@ -2,8 +2,6 @@ import type { EmittersEngine } from "./EmittersEngine.js"; import { loadEmittersInteraction } from "./interaction.js"; import { loadEmittersPluginSimple } from "./plugin.js"; -declare const __VERSION__: string; - /** * @param engine - The [[EmittersEngine]] instance to load the plugin into */ diff --git a/plugins/emitters/src/interaction.lazy.ts b/plugins/emitters/src/interaction.lazy.ts new file mode 100644 index 00000000000..7e4190f1a5f --- /dev/null +++ b/plugins/emitters/src/interaction.lazy.ts @@ -0,0 +1,42 @@ +import type { EmitterContainer } from "./EmitterContainer.js"; +import type { EmittersEngine } from "./EmittersEngine.js"; + +declare const __VERSION__: string; + +/** + * @param engine - The [[EmittersEngine]] instance to load the plugin into + */ +export async function loadEmittersInteraction(engine: EmittersEngine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async (e: EmittersEngine) => { + const [ + { ensureInteractivityPluginLoaded }, + { addEmittersShapesManager }, + { getEmittersInstancesManager }, + ] = await Promise.all([ + import("@tsparticles/plugin-interactivity/lazy"), + import("./addEmittersShapesManager.js"), + import("./getEmittersInstancesManager.js"), + ]), + instancesManager = await getEmittersInstancesManager(e); + + ensureInteractivityPluginLoaded(e); + + await addEmittersShapesManager(e); + + e.pluginManager.addInteractor?.("externalEmitters", async container => { + const { EmittersInteractor } = await import("./EmittersInteractor.js"); + + return new EmittersInteractor(instancesManager, container as EmitterContainer); + }); + }); +} + +export type * from "./EmitterContainer.js"; +export * from "./EmitterShapeBase.js"; +export type * from "./EmittersEngine.js"; +export type * from "./IEmitterShape.js"; +export type * from "./IEmitterShapeGenerator.js"; +export * from "./Enums/EmitterClickMode.js"; +export type * from "./IRandomPositionData.js"; diff --git a/plugins/emitters/src/interaction.ts b/plugins/emitters/src/interaction.ts index 4c805b6a992..2f1835f37ad 100644 --- a/plugins/emitters/src/interaction.ts +++ b/plugins/emitters/src/interaction.ts @@ -1,5 +1,9 @@ import type { EmitterContainer } from "./EmitterContainer.js"; import type { EmittersEngine } from "./EmittersEngine.js"; +import { EmittersInteractor } from "./EmittersInteractor.js"; +import { addEmittersShapesManager } from "./addEmittersShapesManager.js"; +import { ensureInteractivityPluginLoaded } from "@tsparticles/plugin-interactivity"; +import { getEmittersInstancesManager } from "./getEmittersInstancesManager.js"; declare const __VERSION__: string; @@ -10,25 +14,14 @@ export async function loadEmittersInteraction(engine: EmittersEngine): Promise { - const [ - { ensureInteractivityPluginLoaded }, - { addEmittersShapesManager }, - { getEmittersInstancesManager }, - ] = await Promise.all([ - import("@tsparticles/plugin-interactivity"), - import("./addEmittersShapesManager.js"), - import("./getEmittersInstancesManager.js"), - ]), - instancesManager = await getEmittersInstancesManager(e); + const instancesManager = await getEmittersInstancesManager(e); ensureInteractivityPluginLoaded(e); await addEmittersShapesManager(e); - e.pluginManager.addInteractor?.("externalEmitters", async container => { - const { EmittersInteractor } = await import("./EmittersInteractor.js"); - - return new EmittersInteractor(instancesManager, container as EmitterContainer); + e.pluginManager.addInteractor?.("externalEmitters", container => { + return Promise.resolve(new EmittersInteractor(instancesManager, container as EmitterContainer)); }); }); } diff --git a/plugins/emitters/src/plugin.lazy.ts b/plugins/emitters/src/plugin.lazy.ts new file mode 100644 index 00000000000..5d3c143eca0 --- /dev/null +++ b/plugins/emitters/src/plugin.lazy.ts @@ -0,0 +1,35 @@ +import type { EmittersEngine } from "./EmittersEngine.js"; + +declare const __VERSION__: string; + +/** + * @param engine - The [[EmittersEngine]] instance to load the plugin into + */ +export async function loadEmittersPluginSimple(engine: EmittersEngine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async (e: EmittersEngine) => { + const [ + { addEmittersShapesManager }, + { getEmittersInstancesManager }, + { EmittersPlugin }, + ] = await Promise.all([ + import("./addEmittersShapesManager.js"), + import("./getEmittersInstancesManager.js"), + import("./EmittersPlugin.js"), + ]), + instancesManager = await getEmittersInstancesManager(e); + + await addEmittersShapesManager(e); + + e.pluginManager.addPlugin(new EmittersPlugin(instancesManager)); + }); +} + +export type * from "./EmitterContainer.js"; +export * from "./EmitterShapeBase.js"; +export type * from "./EmittersEngine.js"; +export type * from "./IEmitterShape.js"; +export type * from "./IEmitterShapeGenerator.js"; +export * from "./Enums/EmitterClickMode.js"; +export type * from "./IRandomPositionData.js"; diff --git a/plugins/emitters/src/plugin.ts b/plugins/emitters/src/plugin.ts index 5d3c143eca0..0e5a8b2ace7 100644 --- a/plugins/emitters/src/plugin.ts +++ b/plugins/emitters/src/plugin.ts @@ -1,4 +1,7 @@ import type { EmittersEngine } from "./EmittersEngine.js"; +import { EmittersPlugin } from "./EmittersPlugin.js"; +import { addEmittersShapesManager } from "./addEmittersShapesManager.js"; +import { getEmittersInstancesManager } from "./getEmittersInstancesManager.js"; declare const __VERSION__: string; @@ -9,16 +12,7 @@ export async function loadEmittersPluginSimple(engine: EmittersEngine): Promise< engine.checkVersion(__VERSION__); await engine.pluginManager.register(async (e: EmittersEngine) => { - const [ - { addEmittersShapesManager }, - { getEmittersInstancesManager }, - { EmittersPlugin }, - ] = await Promise.all([ - import("./addEmittersShapesManager.js"), - import("./getEmittersInstancesManager.js"), - import("./EmittersPlugin.js"), - ]), - instancesManager = await getEmittersInstancesManager(e); + const instancesManager = await getEmittersInstancesManager(e); await addEmittersShapesManager(e); diff --git a/plugins/emitters/webpack.config.js b/plugins/emitters/webpack.config.js deleted file mode 100644 index eda7e3f453f..00000000000 --- a/plugins/emitters/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPlugin } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPlugin({ - moduleName: "emitters", - pluginName: "Emitters", - version, - dir: __dirname, - progress: false, -}); diff --git a/plugins/emittersShapes/canvas/CHANGELOG.md b/plugins/emittersShapes/canvas/CHANGELOG.md index ff052b759d3..e1d7f433727 100644 --- a/plugins/emittersShapes/canvas/CHANGELOG.md +++ b/plugins/emittersShapes/canvas/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/plugin-emitters-shape-canvas + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/plugin-emitters-shape-canvas diff --git a/plugins/emittersShapes/canvas/package.dist.json b/plugins/emittersShapes/canvas/package.dist.json index 9b4d4e4b8bc..397c0257c0d 100644 --- a/plugins/emittersShapes/canvas/package.dist.json +++ b/plugins/emittersShapes/canvas/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/plugin-emitters-shape-canvas", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles emitters shape canvas plugin", "homepage": "https://particles.js.org", "repository": { @@ -96,12 +96,19 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/canvas-utils": "4.0.0-beta.12", - "@tsparticles/engine": "4.0.0-beta.12", - "@tsparticles/plugin-emitters": "4.0.0-beta.12" + "@tsparticles/canvas-utils": "4.0.0-beta.15", + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/plugin-emitters": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/plugins/emittersShapes/canvas/package.json b/plugins/emittersShapes/canvas/package.json index b3402fd7143..e633e20c923 100644 --- a/plugins/emittersShapes/canvas/package.json +++ b/plugins/emittersShapes/canvas/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/plugin-emitters-shape-canvas", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles emitters shape canvas plugin", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -103,6 +103,13 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { @@ -112,6 +119,8 @@ }, "devDependencies": { "@tsparticles/canvas-utils": "workspace:*", + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*", "@tsparticles/plugin-emitters": "workspace:*" }, diff --git a/plugins/emittersShapes/canvas/rollup.config.js b/plugins/emittersShapes/canvas/rollup.config.js new file mode 100644 index 00000000000..ddb7cdf7401 --- /dev/null +++ b/plugins/emittersShapes/canvas/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPluginEmittersShape } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPluginEmittersShape({ + moduleName: "canvas", + pluginName: "Canvas", + version, + dir: __dirname, + progress: false, +}); diff --git a/plugins/emittersShapes/canvas/src/browser.ts b/plugins/emittersShapes/canvas/src/browser.ts new file mode 100644 index 00000000000..85da16f65c7 --- /dev/null +++ b/plugins/emittersShapes/canvas/src/browser.ts @@ -0,0 +1,10 @@ +import { loadEmittersShapeCanvas } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadEmittersShapeCanvas?: typeof loadEmittersShapeCanvas; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadEmittersShapeCanvas = loadEmittersShapeCanvas; + +export * from "./index.js"; diff --git a/plugins/emittersShapes/canvas/src/index.lazy.ts b/plugins/emittersShapes/canvas/src/index.lazy.ts new file mode 100644 index 00000000000..2848029bc44 --- /dev/null +++ b/plugins/emittersShapes/canvas/src/index.lazy.ts @@ -0,0 +1,21 @@ +import type { EmittersEngine } from "@tsparticles/plugin-emitters/lazy"; +import type { Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadEmittersShapeCanvas(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async (e: EmittersEngine) => { + const { ensureEmittersPluginLoaded } = await import("@tsparticles/plugin-emitters/lazy"); + + ensureEmittersPluginLoaded(e); + + const { EmittersCanvasShapeGenerator } = await import("./EmittersCanvasShapeGenerator.js"); + + e.pluginManager.addEmitterShapeGenerator?.("canvas", new EmittersCanvasShapeGenerator()); + }); +} diff --git a/plugins/emittersShapes/canvas/src/index.ts b/plugins/emittersShapes/canvas/src/index.ts index 6dc123f3da1..fd83f97a5e5 100644 --- a/plugins/emittersShapes/canvas/src/index.ts +++ b/plugins/emittersShapes/canvas/src/index.ts @@ -1,4 +1,5 @@ -import type { EmittersEngine } from "@tsparticles/plugin-emitters"; +import { type EmittersEngine, ensureEmittersPluginLoaded } from "@tsparticles/plugin-emitters"; +import { EmittersCanvasShapeGenerator } from "./EmittersCanvasShapeGenerator.js"; import type { Engine } from "@tsparticles/engine"; declare const __VERSION__: string; @@ -9,13 +10,9 @@ declare const __VERSION__: string; export async function loadEmittersShapeCanvas(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async (e: EmittersEngine) => { - const { ensureEmittersPluginLoaded } = await import("@tsparticles/plugin-emitters"); - + await engine.pluginManager.register((e: EmittersEngine) => { ensureEmittersPluginLoaded(e); - const { EmittersCanvasShapeGenerator } = await import("./EmittersCanvasShapeGenerator.js"); - e.pluginManager.addEmitterShapeGenerator?.("canvas", new EmittersCanvasShapeGenerator()); }); } diff --git a/plugins/emittersShapes/canvas/webpack.config.js b/plugins/emittersShapes/canvas/webpack.config.js deleted file mode 100644 index ef47bf563c8..00000000000 --- a/plugins/emittersShapes/canvas/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPluginEmittersShape } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPluginEmittersShape({ - moduleName: "canvas", - pluginName: "Canvas", - version, - dir: __dirname, - progress: false, -}); diff --git a/plugins/emittersShapes/circle/CHANGELOG.md b/plugins/emittersShapes/circle/CHANGELOG.md index d233b8d357e..d68eefc69be 100644 --- a/plugins/emittersShapes/circle/CHANGELOG.md +++ b/plugins/emittersShapes/circle/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/plugin-emitters-shape-circle + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/plugin-emitters-shape-circle diff --git a/plugins/emittersShapes/circle/package.dist.json b/plugins/emittersShapes/circle/package.dist.json index a415a32a55d..1f7fca4bf55 100644 --- a/plugins/emittersShapes/circle/package.dist.json +++ b/plugins/emittersShapes/circle/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/plugin-emitters-shape-circle", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles emitters shape circle plugin", "homepage": "https://particles.js.org", "repository": { @@ -96,11 +96,18 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12", - "@tsparticles/plugin-emitters": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/plugin-emitters": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/plugins/emittersShapes/circle/package.json b/plugins/emittersShapes/circle/package.json index 89c7a649555..d5e1666a46c 100644 --- a/plugins/emittersShapes/circle/package.json +++ b/plugins/emittersShapes/circle/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/plugin-emitters-shape-circle", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles emitters shape circle plugin", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -103,6 +103,13 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { @@ -110,6 +117,8 @@ "@tsparticles/plugin-emitters": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*", "@tsparticles/plugin-emitters": "workspace:*" }, diff --git a/plugins/emittersShapes/circle/rollup.config.js b/plugins/emittersShapes/circle/rollup.config.js new file mode 100644 index 00000000000..697c396dc74 --- /dev/null +++ b/plugins/emittersShapes/circle/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPluginEmittersShape } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPluginEmittersShape({ + moduleName: "circle", + pluginName: "Circle", + version, + dir: __dirname, + progress: false, +}); diff --git a/plugins/emittersShapes/circle/src/browser.ts b/plugins/emittersShapes/circle/src/browser.ts new file mode 100644 index 00000000000..3cafb508d77 --- /dev/null +++ b/plugins/emittersShapes/circle/src/browser.ts @@ -0,0 +1,10 @@ +import { loadEmittersShapeCircle } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadEmittersShapeCircle?: typeof loadEmittersShapeCircle; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadEmittersShapeCircle = loadEmittersShapeCircle; + +export * from "./index.js"; diff --git a/plugins/emittersShapes/circle/src/index.lazy.ts b/plugins/emittersShapes/circle/src/index.lazy.ts new file mode 100644 index 00000000000..aa1394d7f0c --- /dev/null +++ b/plugins/emittersShapes/circle/src/index.lazy.ts @@ -0,0 +1,21 @@ +import type { EmittersEngine } from "@tsparticles/plugin-emitters/lazy"; +import type { Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadEmittersShapeCircle(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async (e: EmittersEngine) => { + const { ensureEmittersPluginLoaded } = await import("@tsparticles/plugin-emitters/lazy"); + + ensureEmittersPluginLoaded(e); + + const { EmittersCircleShapeGenerator } = await import("./EmittersCircleShapeGenerator.js"); + + e.pluginManager.addEmitterShapeGenerator?.("circle", new EmittersCircleShapeGenerator()); + }); +} diff --git a/plugins/emittersShapes/circle/src/index.ts b/plugins/emittersShapes/circle/src/index.ts index 467bdc078f6..047764ff113 100644 --- a/plugins/emittersShapes/circle/src/index.ts +++ b/plugins/emittersShapes/circle/src/index.ts @@ -1,4 +1,5 @@ -import type { EmittersEngine } from "@tsparticles/plugin-emitters"; +import { type EmittersEngine, ensureEmittersPluginLoaded } from "@tsparticles/plugin-emitters"; +import { EmittersCircleShapeGenerator } from "./EmittersCircleShapeGenerator.js"; import type { Engine } from "@tsparticles/engine"; declare const __VERSION__: string; @@ -9,13 +10,9 @@ declare const __VERSION__: string; export async function loadEmittersShapeCircle(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async (e: EmittersEngine) => { - const { ensureEmittersPluginLoaded } = await import("@tsparticles/plugin-emitters"); - + await engine.pluginManager.register((e: EmittersEngine) => { ensureEmittersPluginLoaded(e); - const { EmittersCircleShapeGenerator } = await import("./EmittersCircleShapeGenerator.js"); - e.pluginManager.addEmitterShapeGenerator?.("circle", new EmittersCircleShapeGenerator()); }); } diff --git a/plugins/emittersShapes/circle/webpack.config.js b/plugins/emittersShapes/circle/webpack.config.js deleted file mode 100644 index 769253e7947..00000000000 --- a/plugins/emittersShapes/circle/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPluginEmittersShape } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPluginEmittersShape({ - moduleName: "circle", - pluginName: "Circle", - version, - dir: __dirname, - progress: false, -}); diff --git a/plugins/emittersShapes/path/CHANGELOG.md b/plugins/emittersShapes/path/CHANGELOG.md index 2a543a0c99f..fe5fc97befd 100644 --- a/plugins/emittersShapes/path/CHANGELOG.md +++ b/plugins/emittersShapes/path/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/plugin-emitters-shape-path + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/plugin-emitters-shape-path diff --git a/plugins/emittersShapes/path/package.dist.json b/plugins/emittersShapes/path/package.dist.json index 7414bdd8406..10cd615777d 100644 --- a/plugins/emittersShapes/path/package.dist.json +++ b/plugins/emittersShapes/path/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/plugin-emitters-shape-path", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles emitters shape path plugin", "homepage": "https://particles.js.org", "repository": { @@ -96,11 +96,18 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12", - "@tsparticles/plugin-emitters": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/plugin-emitters": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/plugins/emittersShapes/path/package.json b/plugins/emittersShapes/path/package.json index 92c4ffc1127..c810cff081b 100644 --- a/plugins/emittersShapes/path/package.json +++ b/plugins/emittersShapes/path/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/plugin-emitters-shape-path", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles emitters shape path plugin", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -103,6 +103,13 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { @@ -110,6 +117,8 @@ "@tsparticles/plugin-emitters": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*", "@tsparticles/plugin-emitters": "workspace:*" }, diff --git a/plugins/emittersShapes/path/rollup.config.js b/plugins/emittersShapes/path/rollup.config.js new file mode 100644 index 00000000000..3602038159b --- /dev/null +++ b/plugins/emittersShapes/path/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPluginEmittersShape } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPluginEmittersShape({ + moduleName: "path", + pluginName: "Path", + version, + dir: __dirname, + progress: false, +}); diff --git a/plugins/emittersShapes/path/src/browser.ts b/plugins/emittersShapes/path/src/browser.ts new file mode 100644 index 00000000000..1218b415f12 --- /dev/null +++ b/plugins/emittersShapes/path/src/browser.ts @@ -0,0 +1,10 @@ +import { loadEmittersShapePath } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadEmittersShapePath?: typeof loadEmittersShapePath; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadEmittersShapePath = loadEmittersShapePath; + +export * from "./index.js"; diff --git a/plugins/emittersShapes/path/src/index.lazy.ts b/plugins/emittersShapes/path/src/index.lazy.ts new file mode 100644 index 00000000000..356ea91ef24 --- /dev/null +++ b/plugins/emittersShapes/path/src/index.lazy.ts @@ -0,0 +1,21 @@ +import type { EmittersEngine } from "@tsparticles/plugin-emitters/lazy"; +import type { Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadEmittersShapePath(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async (e: EmittersEngine) => { + const { ensureEmittersPluginLoaded } = await import("@tsparticles/plugin-emitters/lazy"); + + ensureEmittersPluginLoaded(e); + + const { EmittersPathShapeGenerator } = await import("./EmittersPathShapeGenerator.js"); + + e.pluginManager.addEmitterShapeGenerator?.("path", new EmittersPathShapeGenerator()); + }); +} diff --git a/plugins/emittersShapes/path/src/index.ts b/plugins/emittersShapes/path/src/index.ts index 84367cd756f..165d31563e2 100644 --- a/plugins/emittersShapes/path/src/index.ts +++ b/plugins/emittersShapes/path/src/index.ts @@ -1,4 +1,5 @@ -import type { EmittersEngine } from "@tsparticles/plugin-emitters"; +import { type EmittersEngine, ensureEmittersPluginLoaded } from "@tsparticles/plugin-emitters"; +import { EmittersPathShapeGenerator } from "./EmittersPathShapeGenerator.js"; import type { Engine } from "@tsparticles/engine"; declare const __VERSION__: string; @@ -10,13 +11,9 @@ declare const __VERSION__: string; export async function loadEmittersShapePath(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async (e: EmittersEngine) => { - const { ensureEmittersPluginLoaded } = await import("@tsparticles/plugin-emitters"); - + await engine.pluginManager.register((e: EmittersEngine) => { ensureEmittersPluginLoaded(e); - const { EmittersPathShapeGenerator } = await import("./EmittersPathShapeGenerator.js"); - e.pluginManager.addEmitterShapeGenerator?.("path", new EmittersPathShapeGenerator()); }); } diff --git a/plugins/emittersShapes/path/webpack.config.js b/plugins/emittersShapes/path/webpack.config.js deleted file mode 100644 index cf96f15bcd0..00000000000 --- a/plugins/emittersShapes/path/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPluginEmittersShape } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPluginEmittersShape({ - moduleName: "path", - pluginName: "Path", - version, - dir: __dirname, - progress: false, -}); diff --git a/plugins/emittersShapes/polygon/CHANGELOG.md b/plugins/emittersShapes/polygon/CHANGELOG.md index a20d33472ce..a368d8f60e1 100644 --- a/plugins/emittersShapes/polygon/CHANGELOG.md +++ b/plugins/emittersShapes/polygon/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/plugin-emitters-shape-polygon + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/plugin-emitters-shape-polygon diff --git a/plugins/emittersShapes/polygon/package.dist.json b/plugins/emittersShapes/polygon/package.dist.json index 573446ee6ff..c3cde3e5ce5 100644 --- a/plugins/emittersShapes/polygon/package.dist.json +++ b/plugins/emittersShapes/polygon/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/plugin-emitters-shape-polygon", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles emitters shape polygon plugin", "homepage": "https://particles.js.org", "repository": { @@ -96,11 +96,18 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12", - "@tsparticles/plugin-emitters": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/plugin-emitters": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/plugins/emittersShapes/polygon/package.json b/plugins/emittersShapes/polygon/package.json index cbaa006e24b..eb4d56c8add 100644 --- a/plugins/emittersShapes/polygon/package.json +++ b/plugins/emittersShapes/polygon/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/plugin-emitters-shape-polygon", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles emitters shape polygon plugin", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -103,6 +103,13 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { @@ -110,6 +117,8 @@ "@tsparticles/plugin-emitters": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*", "@tsparticles/plugin-emitters": "workspace:*" }, diff --git a/plugins/emittersShapes/polygon/rollup.config.js b/plugins/emittersShapes/polygon/rollup.config.js new file mode 100644 index 00000000000..a903de8a4c2 --- /dev/null +++ b/plugins/emittersShapes/polygon/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPluginEmittersShape } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPluginEmittersShape({ + moduleName: "polygon", + pluginName: "Polygon", + version, + dir: __dirname, + progress: false, +}); diff --git a/plugins/emittersShapes/polygon/src/browser.ts b/plugins/emittersShapes/polygon/src/browser.ts new file mode 100644 index 00000000000..094f709eae8 --- /dev/null +++ b/plugins/emittersShapes/polygon/src/browser.ts @@ -0,0 +1,10 @@ +import { loadEmittersShapePolygon } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadEmittersShapePolygon?: typeof loadEmittersShapePolygon; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadEmittersShapePolygon = loadEmittersShapePolygon; + +export * from "./index.js"; diff --git a/plugins/emittersShapes/polygon/src/index.lazy.ts b/plugins/emittersShapes/polygon/src/index.lazy.ts new file mode 100644 index 00000000000..b2c8cd858c7 --- /dev/null +++ b/plugins/emittersShapes/polygon/src/index.lazy.ts @@ -0,0 +1,21 @@ +import type { EmittersEngine } from "@tsparticles/plugin-emitters/lazy"; +import type { Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadEmittersShapePolygon(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async (e: EmittersEngine) => { + const { ensureEmittersPluginLoaded } = await import("@tsparticles/plugin-emitters/lazy"); + + ensureEmittersPluginLoaded(e); + + const { EmittersPolygonShapeGenerator } = await import("./EmittersPolygonShapeGenerator.js"); + + e.pluginManager.addEmitterShapeGenerator?.("polygon", new EmittersPolygonShapeGenerator()); + }); +} diff --git a/plugins/emittersShapes/polygon/src/index.ts b/plugins/emittersShapes/polygon/src/index.ts index 9141f57d2c3..f607e5c1065 100644 --- a/plugins/emittersShapes/polygon/src/index.ts +++ b/plugins/emittersShapes/polygon/src/index.ts @@ -1,4 +1,5 @@ -import type { EmittersEngine } from "@tsparticles/plugin-emitters"; +import { type EmittersEngine, ensureEmittersPluginLoaded } from "@tsparticles/plugin-emitters"; +import { EmittersPolygonShapeGenerator } from "./EmittersPolygonShapeGenerator.js"; import type { Engine } from "@tsparticles/engine"; declare const __VERSION__: string; @@ -9,13 +10,9 @@ declare const __VERSION__: string; export async function loadEmittersShapePolygon(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async (e: EmittersEngine) => { - const { ensureEmittersPluginLoaded } = await import("@tsparticles/plugin-emitters"); - + await engine.pluginManager.register((e: EmittersEngine) => { ensureEmittersPluginLoaded(e); - const { EmittersPolygonShapeGenerator } = await import("./EmittersPolygonShapeGenerator.js"); - e.pluginManager.addEmitterShapeGenerator?.("polygon", new EmittersPolygonShapeGenerator()); }); } diff --git a/plugins/emittersShapes/polygon/webpack.config.js b/plugins/emittersShapes/polygon/webpack.config.js deleted file mode 100644 index 018a34f2937..00000000000 --- a/plugins/emittersShapes/polygon/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPluginEmittersShape } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPluginEmittersShape({ - moduleName: "polygon", - pluginName: "Polygon", - version, - dir: __dirname, - progress: false, -}); diff --git a/plugins/emittersShapes/square/CHANGELOG.md b/plugins/emittersShapes/square/CHANGELOG.md index 4e30d1b70f5..7726aa93abe 100644 --- a/plugins/emittersShapes/square/CHANGELOG.md +++ b/plugins/emittersShapes/square/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/plugin-emitters-shape-square + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/plugin-emitters-shape-square diff --git a/plugins/emittersShapes/square/package.dist.json b/plugins/emittersShapes/square/package.dist.json index 9c32d8aea9e..e81402e5786 100644 --- a/plugins/emittersShapes/square/package.dist.json +++ b/plugins/emittersShapes/square/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/plugin-emitters-shape-square", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles emitters shape square plugin", "homepage": "https://particles.js.org", "repository": { @@ -96,11 +96,18 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12", - "@tsparticles/plugin-emitters": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/plugin-emitters": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/plugins/emittersShapes/square/package.json b/plugins/emittersShapes/square/package.json index 4d58520d27b..00129169423 100644 --- a/plugins/emittersShapes/square/package.json +++ b/plugins/emittersShapes/square/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/plugin-emitters-shape-square", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles emitters shape square plugin", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -103,6 +103,13 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { @@ -110,6 +117,8 @@ "@tsparticles/plugin-emitters": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*", "@tsparticles/plugin-emitters": "workspace:*" }, diff --git a/plugins/emittersShapes/square/rollup.config.js b/plugins/emittersShapes/square/rollup.config.js new file mode 100644 index 00000000000..291040accaf --- /dev/null +++ b/plugins/emittersShapes/square/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPluginEmittersShape } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPluginEmittersShape({ + moduleName: "square", + pluginName: "Square", + version, + dir: __dirname, + progress: false, +}); diff --git a/plugins/emittersShapes/square/src/EmittersSquareShape.ts b/plugins/emittersShapes/square/src/EmittersSquareShape.ts index 67185f8a4e5..9592e763b43 100644 --- a/plugins/emittersShapes/square/src/EmittersSquareShape.ts +++ b/plugins/emittersShapes/square/src/EmittersSquareShape.ts @@ -19,6 +19,14 @@ function randomSquareCoordinate(position: number, offset: number): number { return position + offset * (getRandom() - half); } +/** + * @param sides - + * @returns the number of sides + */ +function getRandomSize(sides: number): Sides { + return Math.floor(getRandom() * sides); +} + export class EmittersSquareShape extends EmitterShapeBase { // eslint-disable-next-line @typescript-eslint/no-useless-constructor constructor(position: ICoordinates, size: IDimension, fill: boolean, options: unknown) { @@ -44,7 +52,7 @@ export class EmittersSquareShape extends EmitterShapeBase { } else { const halfW = size.width * half, halfH = size.height * half, - side = Math.floor(getRandom() * sides) as Sides, + side = getRandomSize(sides), v = (getRandom() - half) * double; switch (side) { diff --git a/plugins/emittersShapes/square/src/browser.ts b/plugins/emittersShapes/square/src/browser.ts new file mode 100644 index 00000000000..9eba95d03ed --- /dev/null +++ b/plugins/emittersShapes/square/src/browser.ts @@ -0,0 +1,10 @@ +import { loadEmittersShapeSquare } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadEmittersShapeSquare?: typeof loadEmittersShapeSquare; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadEmittersShapeSquare = loadEmittersShapeSquare; + +export * from "./index.js"; diff --git a/plugins/emittersShapes/square/src/index.lazy.ts b/plugins/emittersShapes/square/src/index.lazy.ts new file mode 100644 index 00000000000..346f6f93c7f --- /dev/null +++ b/plugins/emittersShapes/square/src/index.lazy.ts @@ -0,0 +1,21 @@ +import type { EmittersEngine } from "@tsparticles/plugin-emitters/lazy"; +import type { Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadEmittersShapeSquare(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async (e: EmittersEngine) => { + const { ensureEmittersPluginLoaded } = await import("@tsparticles/plugin-emitters/lazy"); + + ensureEmittersPluginLoaded(e); + + const { EmittersSquareShapeGenerator } = await import("./EmittersSquareShapeGenerator.js"); + + e.pluginManager.addEmitterShapeGenerator?.("square", new EmittersSquareShapeGenerator()); + }); +} diff --git a/plugins/emittersShapes/square/src/index.ts b/plugins/emittersShapes/square/src/index.ts index d1e61c5e45e..e63ac81d98b 100644 --- a/plugins/emittersShapes/square/src/index.ts +++ b/plugins/emittersShapes/square/src/index.ts @@ -1,4 +1,5 @@ -import type { EmittersEngine } from "@tsparticles/plugin-emitters"; +import { type EmittersEngine, ensureEmittersPluginLoaded } from "@tsparticles/plugin-emitters"; +import { EmittersSquareShapeGenerator } from "./EmittersSquareShapeGenerator.js"; import type { Engine } from "@tsparticles/engine"; declare const __VERSION__: string; @@ -9,13 +10,9 @@ declare const __VERSION__: string; export async function loadEmittersShapeSquare(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async (e: EmittersEngine) => { - const { ensureEmittersPluginLoaded } = await import("@tsparticles/plugin-emitters"); - + await engine.pluginManager.register((e: EmittersEngine) => { ensureEmittersPluginLoaded(e); - const { EmittersSquareShapeGenerator } = await import("./EmittersSquareShapeGenerator.js"); - e.pluginManager.addEmitterShapeGenerator?.("square", new EmittersSquareShapeGenerator()); }); } diff --git a/plugins/emittersShapes/square/webpack.config.js b/plugins/emittersShapes/square/webpack.config.js deleted file mode 100644 index 558e12cb830..00000000000 --- a/plugins/emittersShapes/square/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPluginEmittersShape } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPluginEmittersShape({ - moduleName: "square", - pluginName: "Square", - version, - dir: __dirname, - progress: false, -}); diff --git a/plugins/exports/image/CHANGELOG.md b/plugins/exports/image/CHANGELOG.md index 55a166b7194..380a2ef0684 100644 --- a/plugins/exports/image/CHANGELOG.md +++ b/plugins/exports/image/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/plugin-export-image + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/plugin-export-image diff --git a/plugins/exports/image/package.dist.json b/plugins/exports/image/package.dist.json index ac4318f0a0a..24c9404a3c1 100644 --- a/plugins/exports/image/package.dist.json +++ b/plugins/exports/image/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/plugin-export-image", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles export image plugin", "homepage": "https://particles.js.org", "repository": { @@ -96,10 +96,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/plugins/exports/image/package.json b/plugins/exports/image/package.json index 7e2162635f9..a638d0f0e0b 100644 --- a/plugins/exports/image/package.json +++ b/plugins/exports/image/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/plugin-export-image", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles export image plugin", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -103,12 +103,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/plugins/exports/image/rollup.config.js b/plugins/exports/image/rollup.config.js new file mode 100644 index 00000000000..d56b64cd07b --- /dev/null +++ b/plugins/exports/image/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPluginExport } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPluginExport({ + moduleName: "image", + pluginName: "Image", + version, + dir: __dirname, + progress: false, +}); diff --git a/plugins/exports/image/src/browser.ts b/plugins/exports/image/src/browser.ts new file mode 100644 index 00000000000..5fbd7dc097a --- /dev/null +++ b/plugins/exports/image/src/browser.ts @@ -0,0 +1,10 @@ +import { loadExportImagePlugin } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadExportImagePlugin?: typeof loadExportImagePlugin; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadExportImagePlugin = loadExportImagePlugin; + +export * from "./index.js"; diff --git a/plugins/exports/image/src/index.lazy.ts b/plugins/exports/image/src/index.lazy.ts new file mode 100644 index 00000000000..c983e9b75dc --- /dev/null +++ b/plugins/exports/image/src/index.lazy.ts @@ -0,0 +1,16 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadExportImagePlugin(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { ExportImagePlugin } = await import("./ExportImagePlugin.js"); + + e.pluginManager.addPlugin(new ExportImagePlugin()); + }); +} diff --git a/plugins/exports/image/src/index.ts b/plugins/exports/image/src/index.ts index 66f4d90991a..116a13471ab 100644 --- a/plugins/exports/image/src/index.ts +++ b/plugins/exports/image/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { ExportImagePlugin } from "./ExportImagePlugin.js"; declare const __VERSION__: string; @@ -8,9 +9,7 @@ declare const __VERSION__: string; export async function loadExportImagePlugin(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async e => { - const { ExportImagePlugin } = await import("./ExportImagePlugin.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPlugin(new ExportImagePlugin()); }); } diff --git a/plugins/exports/image/webpack.config.js b/plugins/exports/image/webpack.config.js deleted file mode 100644 index 6df30f6b0cd..00000000000 --- a/plugins/exports/image/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPluginExport } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPluginExport({ - moduleName: "image", - pluginName: "Image", - version, - dir: __dirname, - progress: false, -}); diff --git a/plugins/exports/json/CHANGELOG.md b/plugins/exports/json/CHANGELOG.md index 1f016173a3a..99351a74501 100644 --- a/plugins/exports/json/CHANGELOG.md +++ b/plugins/exports/json/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/plugin-export-json + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/plugin-export-json diff --git a/plugins/exports/json/package.dist.json b/plugins/exports/json/package.dist.json index 5a125e44d63..ce9eca221fe 100644 --- a/plugins/exports/json/package.dist.json +++ b/plugins/exports/json/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/plugin-export-json", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles export json plugin", "homepage": "https://particles.js.org", "repository": { @@ -96,10 +96,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/plugins/exports/json/package.json b/plugins/exports/json/package.json index bb4efce8a12..28cf59200ed 100644 --- a/plugins/exports/json/package.json +++ b/plugins/exports/json/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/plugin-export-json", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles export json plugin", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -103,12 +103,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/plugins/exports/json/rollup.config.js b/plugins/exports/json/rollup.config.js new file mode 100644 index 00000000000..702b059abdb --- /dev/null +++ b/plugins/exports/json/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPluginExport } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPluginExport({ + moduleName: "json", + pluginName: "JSON", + version, + dir: __dirname, + progress: false, +}); diff --git a/plugins/exports/json/src/browser.ts b/plugins/exports/json/src/browser.ts new file mode 100644 index 00000000000..ce5c1b5f744 --- /dev/null +++ b/plugins/exports/json/src/browser.ts @@ -0,0 +1,10 @@ +import { loadExportJSONPlugin } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadExportJSONPlugin?: typeof loadExportJSONPlugin; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadExportJSONPlugin = loadExportJSONPlugin; + +export * from "./index.js"; diff --git a/plugins/exports/json/src/index.lazy.ts b/plugins/exports/json/src/index.lazy.ts new file mode 100644 index 00000000000..0fc8ab9e063 --- /dev/null +++ b/plugins/exports/json/src/index.lazy.ts @@ -0,0 +1,16 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadExportJSONPlugin(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { ExportJSONPlugin } = await import("./ExportJSONPlugin.js"); + + e.pluginManager.addPlugin(new ExportJSONPlugin()); + }); +} diff --git a/plugins/exports/json/src/index.ts b/plugins/exports/json/src/index.ts index 99285d6c225..3b9494d0f40 100644 --- a/plugins/exports/json/src/index.ts +++ b/plugins/exports/json/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { ExportJSONPlugin } from "./ExportJSONPlugin.js"; declare const __VERSION__: string; @@ -8,9 +9,7 @@ declare const __VERSION__: string; export async function loadExportJSONPlugin(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async e => { - const { ExportJSONPlugin } = await import("./ExportJSONPlugin.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPlugin(new ExportJSONPlugin()); }); } diff --git a/plugins/exports/json/webpack.config.js b/plugins/exports/json/webpack.config.js deleted file mode 100644 index b8be2be0be6..00000000000 --- a/plugins/exports/json/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPluginExport } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPluginExport({ - moduleName: "json", - pluginName: "JSON", - version, - dir: __dirname, - progress: false, -}); diff --git a/plugins/exports/video/CHANGELOG.md b/plugins/exports/video/CHANGELOG.md index 680114952dd..ae32d600f25 100644 --- a/plugins/exports/video/CHANGELOG.md +++ b/plugins/exports/video/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/plugin-export-video + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/plugin-export-video diff --git a/plugins/exports/video/package.dist.json b/plugins/exports/video/package.dist.json index 9b068dd2137..5d1d29f5f1e 100644 --- a/plugins/exports/video/package.dist.json +++ b/plugins/exports/video/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/plugin-export-video", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles export video plugin", "homepage": "https://particles.js.org", "repository": { @@ -96,10 +96,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/plugins/exports/video/package.json b/plugins/exports/video/package.json index 77cd88e4860..c9ccd183ec7 100644 --- a/plugins/exports/video/package.json +++ b/plugins/exports/video/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/plugin-export-video", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles export video plugin", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -103,12 +103,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/plugins/exports/video/rollup.config.js b/plugins/exports/video/rollup.config.js new file mode 100644 index 00000000000..ecd48147961 --- /dev/null +++ b/plugins/exports/video/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPluginExport } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPluginExport({ + moduleName: "video", + pluginName: "Video", + version, + dir: __dirname, + progress: false, +}); diff --git a/plugins/exports/video/src/ExportVideoPluginInstance.ts b/plugins/exports/video/src/ExportVideoPluginInstance.ts index 16f9bc745df..e3483c2c629 100644 --- a/plugins/exports/video/src/ExportVideoPluginInstance.ts +++ b/plugins/exports/video/src/ExportVideoPluginInstance.ts @@ -70,7 +70,7 @@ export class ExportVideoPluginInstance implements IContainerPlugin { switch (type) { case "video": res.supported = true; - res.blob = await this._exportVideo(data as IExportVideoData); + res.blob = await this._exportVideo(data); break; } diff --git a/plugins/exports/video/src/browser.ts b/plugins/exports/video/src/browser.ts new file mode 100644 index 00000000000..44b7f81c075 --- /dev/null +++ b/plugins/exports/video/src/browser.ts @@ -0,0 +1,10 @@ +import { loadExportVideoPlugin } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadExportVideoPlugin?: typeof loadExportVideoPlugin; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadExportVideoPlugin = loadExportVideoPlugin; + +export * from "./index.js"; diff --git a/plugins/exports/video/src/index.lazy.ts b/plugins/exports/video/src/index.lazy.ts new file mode 100644 index 00000000000..d9420ea7b24 --- /dev/null +++ b/plugins/exports/video/src/index.lazy.ts @@ -0,0 +1,16 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadExportVideoPlugin(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { ExportVideoPlugin } = await import("./ExportVideoPlugin.js"); + + e.pluginManager.addPlugin(new ExportVideoPlugin()); + }); +} diff --git a/plugins/exports/video/src/index.ts b/plugins/exports/video/src/index.ts index 179690ed941..a1b90d069e6 100644 --- a/plugins/exports/video/src/index.ts +++ b/plugins/exports/video/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { ExportVideoPlugin } from "./ExportVideoPlugin.js"; declare const __VERSION__: string; @@ -8,9 +9,7 @@ declare const __VERSION__: string; export async function loadExportVideoPlugin(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async e => { - const { ExportVideoPlugin } = await import("./ExportVideoPlugin.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPlugin(new ExportVideoPlugin()); }); } diff --git a/plugins/exports/video/webpack.config.js b/plugins/exports/video/webpack.config.js deleted file mode 100644 index 8980a6e3e96..00000000000 --- a/plugins/exports/video/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPluginExport } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPluginExport({ - moduleName: "video", - pluginName: "Video", - version, - dir: __dirname, - progress: false, -}); diff --git a/plugins/infection/CHANGELOG.md b/plugins/infection/CHANGELOG.md index 01312140158..fffc41b275a 100644 --- a/plugins/infection/CHANGELOG.md +++ b/plugins/infection/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/plugin-infection + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/plugin-infection diff --git a/plugins/infection/package.dist.json b/plugins/infection/package.dist.json index edbbb626ab1..68908e67aee 100644 --- a/plugins/infection/package.dist.json +++ b/plugins/infection/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/plugin-infection", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles infection plugin", "homepage": "https://particles.js.org", "repository": { @@ -96,11 +96,18 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12", - "@tsparticles/plugin-interactivity": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/plugin-interactivity": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/plugins/infection/package.json b/plugins/infection/package.json index 9809e0d63e9..b2706d423e2 100644 --- a/plugins/infection/package.json +++ b/plugins/infection/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/plugin-infection", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles infection plugin", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -103,6 +103,13 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { @@ -110,6 +117,8 @@ "@tsparticles/plugin-interactivity": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*", "@tsparticles/plugin-interactivity": "workspace:*" }, diff --git a/plugins/infection/rollup.config.js b/plugins/infection/rollup.config.js new file mode 100644 index 00000000000..15bf2c8cf25 --- /dev/null +++ b/plugins/infection/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPlugin } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPlugin({ + moduleName: "infection", + pluginName: "Infection", + version, + dir: __dirname, + progress: false, +}); diff --git a/plugins/infection/src/browser.ts b/plugins/infection/src/browser.ts new file mode 100644 index 00000000000..cd2c69384d6 --- /dev/null +++ b/plugins/infection/src/browser.ts @@ -0,0 +1,10 @@ +import { loadInfectionPlugin } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadInfectionPlugin?: typeof loadInfectionPlugin; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadInfectionPlugin = loadInfectionPlugin; + +export * from "./index.js"; diff --git a/plugins/infection/src/index.lazy.ts b/plugins/infection/src/index.lazy.ts new file mode 100644 index 00000000000..ee1fb5d8c1c --- /dev/null +++ b/plugins/infection/src/index.lazy.ts @@ -0,0 +1,35 @@ +import { type Engine } from "@tsparticles/engine/lazy"; +import type { InfectableContainer } from "./Types.js"; +import type { InteractivityEngine } from "@tsparticles/plugin-interactivity/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadInfectionPlugin(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async (e: InteractivityEngine) => { + const [ + { ensureInteractivityPluginLoaded }, + { InfectionPlugin }, + ] = await Promise.all([ + import("@tsparticles/plugin-interactivity/lazy"), + import("./InfectionPlugin.js"), + ]); + + ensureInteractivityPluginLoaded(e); + + e.pluginManager.addPlugin(new InfectionPlugin()); + + e.pluginManager.addInteractor?.("particlesInfection", async (container: InfectableContainer) => { + const { ParticlesInfecter } = await import("./ParticlesInfecter.js"); + + return new ParticlesInfecter(container); + }); + }); +} + +export type * from "./Options/Interfaces/IInfection.js"; +export type * from "./Options/Interfaces/IInfectionStage.js"; diff --git a/plugins/infection/src/index.ts b/plugins/infection/src/index.ts index 3ce985e7501..0f846640a46 100644 --- a/plugins/infection/src/index.ts +++ b/plugins/infection/src/index.ts @@ -1,5 +1,8 @@ +import { type InteractivityEngine, ensureInteractivityPluginLoaded } from "@tsparticles/plugin-interactivity"; import { type Engine } from "@tsparticles/engine"; -import type { InteractivityEngine } from "@tsparticles/plugin-interactivity"; +import type { InfectableContainer } from "./Types.js"; +import { InfectionPlugin } from "./InfectionPlugin.js"; +import { ParticlesInfecter } from "./ParticlesInfecter.js"; declare const __VERSION__: string; @@ -9,23 +12,13 @@ declare const __VERSION__: string; export async function loadInfectionPlugin(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async (e: InteractivityEngine) => { - const [ - { ensureInteractivityPluginLoaded }, - { InfectionPlugin }, - ] = await Promise.all([ - import("@tsparticles/plugin-interactivity"), - import("./InfectionPlugin.js"), - ]); - + await engine.pluginManager.register((e: InteractivityEngine) => { ensureInteractivityPluginLoaded(e); e.pluginManager.addPlugin(new InfectionPlugin()); - e.pluginManager.addInteractor?.("particlesInfection", async container => { - const { ParticlesInfecter } = await import("./ParticlesInfecter.js"); - - return new ParticlesInfecter(container); + e.pluginManager.addInteractor?.("particlesInfection", (container: InfectableContainer) => { + return Promise.resolve(new ParticlesInfecter(container)); }); }); } diff --git a/plugins/infection/webpack.config.js b/plugins/infection/webpack.config.js deleted file mode 100644 index 16ef395572d..00000000000 --- a/plugins/infection/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPlugin } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPlugin({ - moduleName: "infection", - pluginName: "Infection", - version, - dir: __dirname, - progress: false, -}); diff --git a/plugins/interactivity/CHANGELOG.md b/plugins/interactivity/CHANGELOG.md index fe28bba6f61..925c0dadc40 100644 --- a/plugins/interactivity/CHANGELOG.md +++ b/plugins/interactivity/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/plugin-interactivity + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/plugin-interactivity diff --git a/plugins/interactivity/package.dist.json b/plugins/interactivity/package.dist.json index b185122f515..8907eb5b806 100644 --- a/plugins/interactivity/package.dist.json +++ b/plugins/interactivity/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/plugin-interactivity", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles interactivity sickness plugin", "homepage": "https://particles.js.org", "repository": { @@ -82,10 +82,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/plugins/interactivity/package.json b/plugins/interactivity/package.json index bc1b3d3a1c7..1afc50c49ca 100644 --- a/plugins/interactivity/package.json +++ b/plugins/interactivity/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/plugin-interactivity", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles interactivity sickness plugin", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -89,12 +89,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/plugins/interactivity/rollup.config.js b/plugins/interactivity/rollup.config.js new file mode 100644 index 00000000000..957671cc626 --- /dev/null +++ b/plugins/interactivity/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPlugin } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPlugin({ + moduleName: "interactivity", + pluginName: "Interactivity", + version, + dir: __dirname, + progress: false, +}); diff --git a/plugins/interactivity/src/browser.ts b/plugins/interactivity/src/browser.ts new file mode 100644 index 00000000000..c3d45af61be --- /dev/null +++ b/plugins/interactivity/src/browser.ts @@ -0,0 +1,10 @@ +import { loadInteractivityPlugin } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadInteractivityPlugin?: typeof loadInteractivityPlugin; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadInteractivityPlugin = loadInteractivityPlugin; + +export * from "./index.js"; diff --git a/plugins/interactivity/src/index.lazy.ts b/plugins/interactivity/src/index.lazy.ts new file mode 100644 index 00000000000..ccf87357552 --- /dev/null +++ b/plugins/interactivity/src/index.lazy.ts @@ -0,0 +1,98 @@ +import { type Container, type Engine, type Particle, getItemsFromInitializer } from "@tsparticles/engine/lazy"; +import { type InteractivityContainer, type InteractivityEngine, type InteractorInitializer } from "./types.js"; +import { type IInteractor } from "./Interfaces/IInteractor.js"; + +declare const __VERSION__: string; + +/** + * @param engine - The engine instance + */ +export async function loadInteractivityPlugin(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const interactivityEngine = e as InteractivityEngine, + interactivityPluginManager = interactivityEngine.pluginManager, + { InteractivityPlugin } = await import("./InteractivityPlugin.js"); + + interactivityPluginManager.addPlugin(new InteractivityPlugin(interactivityPluginManager)); + + interactivityPluginManager.initializers.interactors ??= new Map(); + interactivityPluginManager.interactors ??= new Map(); + + /** + * Adds an interaction manager to the current collection + * @param name - the interaction manager name + * @param interactorInitializer - the interaction manager initializer + */ + interactivityPluginManager.addInteractor = (name: string, interactorInitializer: InteractorInitializer): void => { + interactivityPluginManager.initializers.interactors ??= new Map(); + + interactivityPluginManager.initializers.interactors.set(name, interactorInitializer); + }; + + /** + * Returns all the container interaction managers + * @param container - the container used to check which interaction managers are compatible + * @param force - if true reloads the interaction managers collection for the given container + * @returns the array of interaction managers for the given container + */ + interactivityPluginManager.getInteractors = async (container: Container, force = false): Promise => { + interactivityPluginManager.interactors ??= new Map(); + interactivityPluginManager.initializers.interactors ??= new Map(); + + return getItemsFromInitializer( + container, + interactivityPluginManager.interactors, + interactivityPluginManager.initializers.interactors, + force, + ); + }; + + /** + * Adds another click handler to all the loaded {@link Container} objects. + * @param callback - The function called after the click event is fired + */ + interactivityPluginManager.setOnClickHandler = (callback: (e: Event, particles?: Particle[]) => void): void => { + const { items } = interactivityEngine; + + if (!items.length) { + throw new Error("Click handlers can only be set after calling tsParticles.load()"); + } + + items.forEach(item => { + const interactivityContainer = item as InteractivityContainer; + + interactivityContainer.addClickHandler?.(callback); + }); + }; + }); +} + +/** + * @param e - + */ +export function ensureInteractivityPluginLoaded(e: InteractivityEngine): void { + if (!e.pluginManager.addInteractor) { + throw new Error("tsParticles Interactivity Plugin is not loaded"); + } +} + +export * from "./BaseClasses/ExternalInteractorBase.js"; +export * from "./BaseClasses/ParticlesInteractorBase.js"; +export type * from "./Interfaces/IExternalInteractor.js"; +export type * from "./Interfaces/IInteractivityData.js"; +export type * from "./Interfaces/IInteractor.js"; +export type * from "./Interfaces/IParticleInteractorBase.js"; +export type * from "./Interfaces/IParticlesInteractor.js"; +export * from "./InteractivityConstants.js"; +export * from "./Enums/DivType.js"; +export * from "./Enums/InteractivityDetect.js"; +export * from "./Enums/InteractorType.js"; +export type * from "./types.js"; +export * from "./utils.js"; +export type * from "./Options/Interfaces/Events/IDivEvent.js"; +export type * from "./Options/Interfaces/Modes/IModes.js"; +export type * from "./Options/Interfaces/Modes/IModeDiv.js"; +export * from "./Options/Classes/Events/DivEvent.js"; +export * from "./Options/Classes/Modes/Modes.js"; diff --git a/plugins/interactivity/src/index.ts b/plugins/interactivity/src/index.ts index 0f4ccaa3365..3bf2f5fd61c 100644 --- a/plugins/interactivity/src/index.ts +++ b/plugins/interactivity/src/index.ts @@ -1,6 +1,7 @@ import { type Container, type Engine, type Particle, getItemsFromInitializer } from "@tsparticles/engine"; import { type InteractivityContainer, type InteractivityEngine, type InteractorInitializer } from "./types.js"; import { type IInteractor } from "./Interfaces/IInteractor.js"; +import { InteractivityPlugin } from "./InteractivityPlugin.js"; declare const __VERSION__: string; @@ -10,10 +11,9 @@ declare const __VERSION__: string; export async function loadInteractivityPlugin(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async e => { + await engine.pluginManager.register(e => { const interactivityEngine = e as InteractivityEngine, - interactivityPluginManager = interactivityEngine.pluginManager, - { InteractivityPlugin } = await import("./InteractivityPlugin.js"); + interactivityPluginManager = interactivityEngine.pluginManager; interactivityPluginManager.addPlugin(new InteractivityPlugin(interactivityPluginManager)); diff --git a/plugins/interactivity/webpack.config.js b/plugins/interactivity/webpack.config.js deleted file mode 100644 index 578f16bd010..00000000000 --- a/plugins/interactivity/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPlugin } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPlugin({ - moduleName: "interactivity", - pluginName: "Interactivity", - version, - dir: __dirname, - progress: false, -}); diff --git a/plugins/manualParticles/CHANGELOG.md b/plugins/manualParticles/CHANGELOG.md index 7934c47155b..26e67dc6cdf 100644 --- a/plugins/manualParticles/CHANGELOG.md +++ b/plugins/manualParticles/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/plugin-manual-particles + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/plugin-manual-particles diff --git a/plugins/manualParticles/package.dist.json b/plugins/manualParticles/package.dist.json index 5dbeefb4cd8..2e6a9d6f382 100644 --- a/plugins/manualParticles/package.dist.json +++ b/plugins/manualParticles/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/plugin-manual-particles", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles manual particles plugin", "homepage": "https://particles.js.org", "repository": { @@ -82,10 +82,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/plugins/manualParticles/package.json b/plugins/manualParticles/package.json index 81b4cad87e1..32cfac2bacc 100644 --- a/plugins/manualParticles/package.json +++ b/plugins/manualParticles/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/plugin-manual-particles", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles manual particles plugin", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -89,12 +89,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/plugins/manualParticles/rollup.config.js b/plugins/manualParticles/rollup.config.js new file mode 100644 index 00000000000..263d0bdd357 --- /dev/null +++ b/plugins/manualParticles/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPlugin } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPlugin({ + moduleName: "manualParticles", + pluginName: "Manual Particles", + version, + dir: __dirname, + progress: false, +}); diff --git a/plugins/manualParticles/src/browser.ts b/plugins/manualParticles/src/browser.ts new file mode 100644 index 00000000000..ccdd0ce7501 --- /dev/null +++ b/plugins/manualParticles/src/browser.ts @@ -0,0 +1,10 @@ +import { loadManualParticlesPlugin } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadManualParticlesPlugin?: typeof loadManualParticlesPlugin; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadManualParticlesPlugin = loadManualParticlesPlugin; + +export * from "./index.js"; diff --git a/plugins/manualParticles/src/index.lazy.ts b/plugins/manualParticles/src/index.lazy.ts new file mode 100644 index 00000000000..e288f4ef064 --- /dev/null +++ b/plugins/manualParticles/src/index.lazy.ts @@ -0,0 +1,16 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - The engine instance + */ +export async function loadManualParticlesPlugin(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { ManualParticlesPlugin } = await import("./ManualParticlesPlugin.js"); + + e.pluginManager.addPlugin(new ManualParticlesPlugin()); + }); +} diff --git a/plugins/manualParticles/src/index.ts b/plugins/manualParticles/src/index.ts index 01a407873eb..0c829f0627b 100644 --- a/plugins/manualParticles/src/index.ts +++ b/plugins/manualParticles/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { ManualParticlesPlugin } from "./ManualParticlesPlugin.js"; declare const __VERSION__: string; @@ -8,9 +9,7 @@ declare const __VERSION__: string; export async function loadManualParticlesPlugin(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async e => { - const { ManualParticlesPlugin } = await import("./ManualParticlesPlugin.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPlugin(new ManualParticlesPlugin()); }); } diff --git a/plugins/manualParticles/webpack.config.js b/plugins/manualParticles/webpack.config.js deleted file mode 100644 index 1c75ee0c19a..00000000000 --- a/plugins/manualParticles/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPlugin } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPlugin({ - moduleName: "manualParticles", - pluginName: "Manual Particles", - version, - dir: __dirname, - progress: false, -}); diff --git a/plugins/motion/CHANGELOG.md b/plugins/motion/CHANGELOG.md index 22ed5f2bf93..51419df45c5 100644 --- a/plugins/motion/CHANGELOG.md +++ b/plugins/motion/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/plugin-motion + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/plugin-motion diff --git a/plugins/motion/package.dist.json b/plugins/motion/package.dist.json index f933d17c236..2d39c5dfd8a 100644 --- a/plugins/motion/package.dist.json +++ b/plugins/motion/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/plugin-motion", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles motion sickness plugin", "homepage": "https://particles.js.org", "repository": { @@ -82,10 +82,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/plugins/motion/package.json b/plugins/motion/package.json index d8303a5603b..6f65b13bd4c 100644 --- a/plugins/motion/package.json +++ b/plugins/motion/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/plugin-motion", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles motion sickness plugin", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -89,12 +89,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/plugins/motion/rollup.config.js b/plugins/motion/rollup.config.js new file mode 100644 index 00000000000..e84f34eb622 --- /dev/null +++ b/plugins/motion/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPlugin } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPlugin({ + moduleName: "motion", + pluginName: "Motion", + version, + dir: __dirname, + progress: false, +}); diff --git a/plugins/motion/src/browser.ts b/plugins/motion/src/browser.ts new file mode 100644 index 00000000000..446a23c4334 --- /dev/null +++ b/plugins/motion/src/browser.ts @@ -0,0 +1,10 @@ +import { loadMotionPlugin } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadMotionPlugin?: typeof loadMotionPlugin; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadMotionPlugin = loadMotionPlugin; + +export * from "./index.js"; diff --git a/plugins/motion/src/index.lazy.ts b/plugins/motion/src/index.lazy.ts new file mode 100644 index 00000000000..12ce2add7c4 --- /dev/null +++ b/plugins/motion/src/index.lazy.ts @@ -0,0 +1,16 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - The engine instance + */ +export async function loadMotionPlugin(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { MotionPlugin } = await import("./MotionPlugin.js"); + + e.pluginManager.addPlugin(new MotionPlugin()); + }); +} diff --git a/plugins/motion/src/index.ts b/plugins/motion/src/index.ts index 1a86290c0ed..b73e4a1d053 100644 --- a/plugins/motion/src/index.ts +++ b/plugins/motion/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { MotionPlugin } from "./MotionPlugin.js"; declare const __VERSION__: string; @@ -8,9 +9,7 @@ declare const __VERSION__: string; export async function loadMotionPlugin(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async e => { - const { MotionPlugin } = await import("./MotionPlugin.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPlugin(new MotionPlugin()); }); } diff --git a/plugins/motion/webpack.config.js b/plugins/motion/webpack.config.js deleted file mode 100644 index 67317b85f62..00000000000 --- a/plugins/motion/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPlugin } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPlugin({ - moduleName: "motion", - pluginName: "Motion", - version, - dir: __dirname, - progress: false, -}); diff --git a/plugins/move/CHANGELOG.md b/plugins/move/CHANGELOG.md index 34ff0762ef0..e1b1fd4b048 100644 --- a/plugins/move/CHANGELOG.md +++ b/plugins/move/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/plugin-move + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/plugin-move diff --git a/plugins/move/package.dist.json b/plugins/move/package.dist.json index 478e8ed1721..8d2993d8086 100644 --- a/plugins/move/package.dist.json +++ b/plugins/move/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/plugin-move", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles Move plugin", "homepage": "https://particles.js.org", "repository": { @@ -82,10 +82,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/plugins/move/package.json b/plugins/move/package.json index c8857a532f1..00705e084fc 100644 --- a/plugins/move/package.json +++ b/plugins/move/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/plugin-move", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles Move plugin", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -89,12 +89,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/plugins/move/rollup.config.js b/plugins/move/rollup.config.js new file mode 100644 index 00000000000..7df931f1e83 --- /dev/null +++ b/plugins/move/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPlugin } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPlugin({ + moduleName: "move", + pluginName: "Move", + version, + dir: __dirname, + progress: false, +}); diff --git a/plugins/move/src/browser.ts b/plugins/move/src/browser.ts new file mode 100644 index 00000000000..c7c5ee73536 --- /dev/null +++ b/plugins/move/src/browser.ts @@ -0,0 +1,10 @@ +import { loadMovePlugin } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadMovePlugin?: typeof loadMovePlugin; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadMovePlugin = loadMovePlugin; + +export * from "./index.js"; diff --git a/plugins/move/src/index.lazy.ts b/plugins/move/src/index.lazy.ts new file mode 100644 index 00000000000..63aa1ce4383 --- /dev/null +++ b/plugins/move/src/index.lazy.ts @@ -0,0 +1,62 @@ +import { type Container, type Engine, getItemMapFromInitializer } from "@tsparticles/engine/lazy"; +import type { MoveEngine, PathGeneratorInitializer } from "./Types.js"; +import type { IMovePathGenerator } from "./IMovePathGenerator.js"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadMovePlugin(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const moveEngine = e as MoveEngine, + movePluginManager = moveEngine.pluginManager; + + movePluginManager.initializers.pathGenerators ??= new Map(); + movePluginManager.pathGenerators ??= new Map>(); + + /** + * addPathGenerator adds a named path generator to tsParticles, this can be called by options + * @param name - the path generator name + * @param generator - the path generator object + */ + movePluginManager.addPathGenerator = (name: string, generator: PathGeneratorInitializer): void => { + movePluginManager.initializers.pathGenerators ??= new Map(); + + movePluginManager.initializers.pathGenerators.set(name, generator); + }; + + movePluginManager.getPathGenerators = async ( + container: Container, + force = false, + ): Promise> => { + movePluginManager.initializers.pathGenerators ??= new Map(); + movePluginManager.pathGenerators ??= new Map>(); + + return getItemMapFromInitializer( + container, + movePluginManager.pathGenerators, + movePluginManager.initializers.pathGenerators, + force, + ); + }; + + const { MovePlugin } = await import("./MovePlugin.js"); + + e.pluginManager.addPlugin(new MovePlugin(e.pluginManager)); + }); +} + +/** + * @param e - + */ +export function ensureBaseMoverLoaded(e: MoveEngine): void { + if (!e.pluginManager.addPathGenerator) { + throw new Error("tsParticles Base Mover is not loaded"); + } +} + +export type * from "./IMovePathGenerator.js"; +export type * from "./Types.js"; diff --git a/plugins/move/src/index.ts b/plugins/move/src/index.ts index 7f766081fd9..c35b4527124 100644 --- a/plugins/move/src/index.ts +++ b/plugins/move/src/index.ts @@ -1,6 +1,7 @@ import { type Container, type Engine, getItemMapFromInitializer } from "@tsparticles/engine"; import type { MoveEngine, PathGeneratorInitializer } from "./Types.js"; import type { IMovePathGenerator } from "./IMovePathGenerator.js"; +import { MovePlugin } from "./MovePlugin.js"; declare const __VERSION__: string; @@ -10,7 +11,7 @@ declare const __VERSION__: string; export async function loadMovePlugin(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async e => { + await engine.pluginManager.register(e => { const moveEngine = e as MoveEngine, movePluginManager = moveEngine.pluginManager; @@ -43,8 +44,6 @@ export async function loadMovePlugin(engine: Engine): Promise { ); }; - const { MovePlugin } = await import("./MovePlugin.js"); - e.pluginManager.addPlugin(new MovePlugin(e.pluginManager)); }); } diff --git a/plugins/move/webpack.config.js b/plugins/move/webpack.config.js deleted file mode 100644 index a3dc498424c..00000000000 --- a/plugins/move/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPlugin } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPlugin({ - moduleName: "move", - pluginName: "Move", - version, - dir: __dirname, - progress: false, -}); diff --git a/plugins/poisson/CHANGELOG.md b/plugins/poisson/CHANGELOG.md index c8339596b13..4259344ebb7 100644 --- a/plugins/poisson/CHANGELOG.md +++ b/plugins/poisson/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/plugin-poisson-disc + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/plugin-poisson-disc diff --git a/plugins/poisson/package.dist.json b/plugins/poisson/package.dist.json index 61c7b28f777..a5dde40f0d4 100644 --- a/plugins/poisson/package.dist.json +++ b/plugins/poisson/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/plugin-poisson-disc", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles poisson disc plugin", "homepage": "https://particles.js.org", "repository": { @@ -81,10 +81,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/plugins/poisson/package.json b/plugins/poisson/package.json index 83566d9d552..5a447346685 100644 --- a/plugins/poisson/package.json +++ b/plugins/poisson/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/plugin-poisson-disc", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles poisson disc plugin", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -76,10 +76,29 @@ "module": "dist/esm/index.js", "types": "dist/types/index.d.ts", "prettier": "@tsparticles/prettier-config", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "default": "./dist/esm/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/plugins/poisson/rollup.config.js b/plugins/poisson/rollup.config.js new file mode 100644 index 00000000000..9c3d41585ca --- /dev/null +++ b/plugins/poisson/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPlugin } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPlugin({ + moduleName: "poisson", + pluginName: "Poisson Disc", + version, + dir: __dirname, + progress: false, +}); diff --git a/plugins/poisson/src/browser.ts b/plugins/poisson/src/browser.ts new file mode 100644 index 00000000000..768664d2f39 --- /dev/null +++ b/plugins/poisson/src/browser.ts @@ -0,0 +1,10 @@ +import { loadPoissonDiscPlugin } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadPoissonDiscPlugin?: typeof loadPoissonDiscPlugin; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadPoissonDiscPlugin = loadPoissonDiscPlugin; + +export * from "./index.js"; diff --git a/plugins/poisson/src/index.lazy.ts b/plugins/poisson/src/index.lazy.ts new file mode 100644 index 00000000000..a6bedec50c0 --- /dev/null +++ b/plugins/poisson/src/index.lazy.ts @@ -0,0 +1,16 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - The engine to add the plugin to + */ +export async function loadPoissonDiscPlugin(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { PoissonDiscPlugin } = await import("./PoissonDiscPlugin.js"); + + e.pluginManager.addPlugin(new PoissonDiscPlugin()); + }); +} diff --git a/plugins/poisson/src/index.ts b/plugins/poisson/src/index.ts index 9bd34804e8b..266b4aa2a0f 100644 --- a/plugins/poisson/src/index.ts +++ b/plugins/poisson/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { PoissonDiscPlugin } from "./PoissonDiscPlugin.js"; declare const __VERSION__: string; @@ -8,9 +9,7 @@ declare const __VERSION__: string; export async function loadPoissonDiscPlugin(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async e => { - const { PoissonDiscPlugin } = await import("./PoissonDiscPlugin.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPlugin(new PoissonDiscPlugin()); }); } diff --git a/plugins/poisson/webpack.config.js b/plugins/poisson/webpack.config.js deleted file mode 100644 index 920ae356640..00000000000 --- a/plugins/poisson/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPlugin } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPlugin({ - moduleName: "poisson", - pluginName: "Poisson Disc", - version, - dir: __dirname, - progress: false, -}); diff --git a/plugins/polygonMask/CHANGELOG.md b/plugins/polygonMask/CHANGELOG.md index 509e0dab9e5..838f220d2db 100644 --- a/plugins/polygonMask/CHANGELOG.md +++ b/plugins/polygonMask/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/plugin-polygon-mask + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/plugin-polygon-mask diff --git a/plugins/polygonMask/package.dist.json b/plugins/polygonMask/package.dist.json index a817f36f535..0f482fb4639 100644 --- a/plugins/polygonMask/package.dist.json +++ b/plugins/polygonMask/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/plugin-polygon-mask", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles polygon mask plugin", "homepage": "https://particles.js.org", "repository": { @@ -84,10 +84,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/plugins/polygonMask/package.json b/plugins/polygonMask/package.json index c81f9cdda25..be3be39bde5 100644 --- a/plugins/polygonMask/package.json +++ b/plugins/polygonMask/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/plugin-polygon-mask", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles polygon mask plugin", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -83,8 +83,27 @@ "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "browser": "./dist/browser/index.js", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js", + "default": "./dist/esm/index.js" + }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, + "./package.json": "./dist/package.json" + }, "publishConfig": { "access": "public", "directory": "dist", diff --git a/plugins/polygonMask/rollup.config.js b/plugins/polygonMask/rollup.config.js new file mode 100644 index 00000000000..ad3b33abc12 --- /dev/null +++ b/plugins/polygonMask/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPlugin } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPlugin({ + moduleName: "polygon-mask", + pluginName: "Polygon Mask", + version, + dir: __dirname, + progress: false, +}); diff --git a/plugins/polygonMask/src/browser.ts b/plugins/polygonMask/src/browser.ts new file mode 100644 index 00000000000..4d6039a7214 --- /dev/null +++ b/plugins/polygonMask/src/browser.ts @@ -0,0 +1,10 @@ +import { loadPolygonMaskPlugin } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadPolygonMaskPlugin?: typeof loadPolygonMaskPlugin; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadPolygonMaskPlugin = loadPolygonMaskPlugin; + +export * from "./index.js"; diff --git a/plugins/polygonMask/src/index.lazy.ts b/plugins/polygonMask/src/index.lazy.ts new file mode 100644 index 00000000000..918f753de4c --- /dev/null +++ b/plugins/polygonMask/src/index.lazy.ts @@ -0,0 +1,20 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - The engine to add the plugin to + */ +export async function loadPolygonMaskPlugin(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { PolygonMaskPlugin } = await import("./PolygonMaskPlugin.js"); + + e.pluginManager.addPlugin(new PolygonMaskPlugin(e.pluginManager)); + }); +} + +export * from "./Enums/PolygonMaskInlineArrangement.js"; +export * from "./Enums/PolygonMaskMoveType.js"; +export * from "./Enums/PolygonMaskType.js"; diff --git a/plugins/polygonMask/src/index.ts b/plugins/polygonMask/src/index.ts index 7ccb373bb9b..fb226d01cbe 100644 --- a/plugins/polygonMask/src/index.ts +++ b/plugins/polygonMask/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { PolygonMaskPlugin } from "./PolygonMaskPlugin.js"; declare const __VERSION__: string; @@ -8,9 +9,7 @@ declare const __VERSION__: string; export async function loadPolygonMaskPlugin(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async e => { - const { PolygonMaskPlugin } = await import("./PolygonMaskPlugin.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPlugin(new PolygonMaskPlugin(e.pluginManager)); }); } diff --git a/plugins/polygonMask/webpack.config.js b/plugins/polygonMask/webpack.config.js deleted file mode 100644 index 07fda7711bf..00000000000 --- a/plugins/polygonMask/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPlugin } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPlugin({ - moduleName: "polygon-mask", - pluginName: "Polygon Mask", - version, - dir: __dirname, - progress: false, -}); diff --git a/plugins/responsive/CHANGELOG.md b/plugins/responsive/CHANGELOG.md index 4dbae301603..92b9127d0cb 100644 --- a/plugins/responsive/CHANGELOG.md +++ b/plugins/responsive/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/plugin-responsive + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/plugin-responsive diff --git a/plugins/responsive/package.dist.json b/plugins/responsive/package.dist.json index 8276a7138e1..6cb877202fd 100644 --- a/plugins/responsive/package.dist.json +++ b/plugins/responsive/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/plugin-responsive", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles responsive plugin", "homepage": "https://particles.js.org", "repository": { @@ -82,10 +82,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/plugins/responsive/package.json b/plugins/responsive/package.json index ba5f16af111..87851605689 100644 --- a/plugins/responsive/package.json +++ b/plugins/responsive/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/plugin-responsive", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles responsive plugin", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -89,12 +89,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/plugins/responsive/rollup.config.js b/plugins/responsive/rollup.config.js new file mode 100644 index 00000000000..8c3c5572bc4 --- /dev/null +++ b/plugins/responsive/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPlugin } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPlugin({ + moduleName: "responsive", + pluginName: "Responsive", + version, + dir: __dirname, + progress: false, +}); diff --git a/plugins/responsive/src/browser.ts b/plugins/responsive/src/browser.ts new file mode 100644 index 00000000000..1ea6d672e86 --- /dev/null +++ b/plugins/responsive/src/browser.ts @@ -0,0 +1,10 @@ +import { loadResponsivePlugin } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadResponsivePlugin?: typeof loadResponsivePlugin; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadResponsivePlugin = loadResponsivePlugin; + +export * from "./index.js"; diff --git a/plugins/responsive/src/index.lazy.ts b/plugins/responsive/src/index.lazy.ts new file mode 100644 index 00000000000..c69f084b678 --- /dev/null +++ b/plugins/responsive/src/index.lazy.ts @@ -0,0 +1,16 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - The engine instance + */ +export async function loadResponsivePlugin(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { ResponsivePlugin } = await import("./ResponsivePlugin.js"); + + e.pluginManager.addPlugin(new ResponsivePlugin()); + }); +} diff --git a/plugins/responsive/src/index.ts b/plugins/responsive/src/index.ts index 974a7b2f454..1001c616b61 100644 --- a/plugins/responsive/src/index.ts +++ b/plugins/responsive/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { ResponsivePlugin } from "./ResponsivePlugin.js"; declare const __VERSION__: string; @@ -8,9 +9,7 @@ declare const __VERSION__: string; export async function loadResponsivePlugin(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async e => { - const { ResponsivePlugin } = await import("./ResponsivePlugin.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPlugin(new ResponsivePlugin()); }); } diff --git a/plugins/responsive/webpack.config.js b/plugins/responsive/webpack.config.js deleted file mode 100644 index 45bd0ad5d8d..00000000000 --- a/plugins/responsive/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPlugin } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPlugin({ - moduleName: "responsive", - pluginName: "Responsive", - version, - dir: __dirname, - progress: false, -}); diff --git a/plugins/sounds/CHANGELOG.md b/plugins/sounds/CHANGELOG.md index 2dac51fa863..a7f5f34c7ad 100644 --- a/plugins/sounds/CHANGELOG.md +++ b/plugins/sounds/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/plugin-sounds + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/plugin-sounds diff --git a/plugins/sounds/package.dist.json b/plugins/sounds/package.dist.json index 7eb880a1aa8..ac9e1393b20 100644 --- a/plugins/sounds/package.dist.json +++ b/plugins/sounds/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/plugin-sounds", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles sounds plugin", "homepage": "https://particles.js.org", "repository": { @@ -82,10 +82,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/plugins/sounds/package.json b/plugins/sounds/package.json index a8cdad3fec3..1ef34107873 100644 --- a/plugins/sounds/package.json +++ b/plugins/sounds/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/plugin-sounds", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles sounds plugin", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -89,12 +89,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/plugins/sounds/rollup.config.js b/plugins/sounds/rollup.config.js new file mode 100644 index 00000000000..b6c551ed10b --- /dev/null +++ b/plugins/sounds/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPlugin } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPlugin({ + moduleName: "sounds", + pluginName: "Sounds", + version, + dir: __dirname, + progress: false, +}); diff --git a/plugins/sounds/src/browser.ts b/plugins/sounds/src/browser.ts new file mode 100644 index 00000000000..dbbfb0d6e2c --- /dev/null +++ b/plugins/sounds/src/browser.ts @@ -0,0 +1,10 @@ +import { loadSoundsPlugin } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadSoundsPlugin?: typeof loadSoundsPlugin; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadSoundsPlugin = loadSoundsPlugin; + +export * from "./index.js"; diff --git a/plugins/sounds/src/index.lazy.ts b/plugins/sounds/src/index.lazy.ts new file mode 100644 index 00000000000..7b447fcdc2f --- /dev/null +++ b/plugins/sounds/src/index.lazy.ts @@ -0,0 +1,16 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadSoundsPlugin(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { SoundsPlugin } = await import("./SoundsPlugin.js"); + + e.pluginManager.addPlugin(new SoundsPlugin(e)); + }); +} diff --git a/plugins/sounds/src/index.ts b/plugins/sounds/src/index.ts index d1cfb210a03..de9470d477c 100644 --- a/plugins/sounds/src/index.ts +++ b/plugins/sounds/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { SoundsPlugin } from "./SoundsPlugin.js"; declare const __VERSION__: string; @@ -8,9 +9,7 @@ declare const __VERSION__: string; export async function loadSoundsPlugin(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async e => { - const { SoundsPlugin } = await import("./SoundsPlugin.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPlugin(new SoundsPlugin(e)); }); } diff --git a/plugins/sounds/webpack.config.js b/plugins/sounds/webpack.config.js deleted file mode 100644 index d9693df3d8d..00000000000 --- a/plugins/sounds/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPlugin } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPlugin({ - moduleName: "sounds", - pluginName: "Sounds", - version, - dir: __dirname, - progress: false, -}); diff --git a/plugins/themes/CHANGELOG.md b/plugins/themes/CHANGELOG.md index 31c5d154423..e8268e8141c 100644 --- a/plugins/themes/CHANGELOG.md +++ b/plugins/themes/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/plugin-themes + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/plugin-themes diff --git a/plugins/themes/package.dist.json b/plugins/themes/package.dist.json index 733e7c55cb7..346ad53b33b 100644 --- a/plugins/themes/package.dist.json +++ b/plugins/themes/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/plugin-themes", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles themes plugin", "homepage": "https://particles.js.org", "repository": { @@ -82,10 +82,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/plugins/themes/package.json b/plugins/themes/package.json index 6f436dc5fc0..255f86d3178 100644 --- a/plugins/themes/package.json +++ b/plugins/themes/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/plugin-themes", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles themes plugin", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -89,12 +89,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/plugins/themes/rollup.config.js b/plugins/themes/rollup.config.js new file mode 100644 index 00000000000..b054c459b75 --- /dev/null +++ b/plugins/themes/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPlugin } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPlugin({ + moduleName: "themes", + pluginName: "Themes", + version, + dir: __dirname, + progress: false, +}); diff --git a/plugins/themes/src/browser.ts b/plugins/themes/src/browser.ts new file mode 100644 index 00000000000..7a1bea762e3 --- /dev/null +++ b/plugins/themes/src/browser.ts @@ -0,0 +1,10 @@ +import { loadThemesPlugin } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadThemesPlugin?: typeof loadThemesPlugin; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadThemesPlugin = loadThemesPlugin; + +export * from "./index.js"; diff --git a/plugins/themes/src/index.lazy.ts b/plugins/themes/src/index.lazy.ts new file mode 100644 index 00000000000..85321523e44 --- /dev/null +++ b/plugins/themes/src/index.lazy.ts @@ -0,0 +1,16 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - The engine instance + */ +export async function loadThemesPlugin(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { ThemesPlugin } = await import("./ThemesPlugin.js"); + + e.pluginManager.addPlugin(new ThemesPlugin()); + }); +} diff --git a/plugins/themes/src/index.ts b/plugins/themes/src/index.ts index 8090853c0ec..deb6577ac99 100644 --- a/plugins/themes/src/index.ts +++ b/plugins/themes/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { ThemesPlugin } from "./ThemesPlugin.js"; declare const __VERSION__: string; @@ -8,9 +9,7 @@ declare const __VERSION__: string; export async function loadThemesPlugin(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async e => { - const { ThemesPlugin } = await import("./ThemesPlugin.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPlugin(new ThemesPlugin()); }); } diff --git a/plugins/themes/webpack.config.js b/plugins/themes/webpack.config.js deleted file mode 100644 index a8a6c63a3f6..00000000000 --- a/plugins/themes/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPlugin } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPlugin({ - moduleName: "themes", - pluginName: "Themes", - version, - dir: __dirname, - progress: false, -}); diff --git a/plugins/trail/CHANGELOG.md b/plugins/trail/CHANGELOG.md index be65d8413dc..f123ecc7691 100644 --- a/plugins/trail/CHANGELOG.md +++ b/plugins/trail/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/plugin-trail + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/plugin-trail diff --git a/plugins/trail/package.dist.json b/plugins/trail/package.dist.json index 9f37269bad5..b106d3b823c 100644 --- a/plugins/trail/package.dist.json +++ b/plugins/trail/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/plugin-trail", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles trail plugin", "homepage": "https://particles.js.org", "repository": { @@ -82,10 +82,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/plugins/trail/package.json b/plugins/trail/package.json index d368f49c82f..2ac13b54da8 100644 --- a/plugins/trail/package.json +++ b/plugins/trail/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/plugin-trail", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles trail plugin", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -89,12 +89,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/plugins/trail/rollup.config.js b/plugins/trail/rollup.config.js new file mode 100644 index 00000000000..2edddbdc5ff --- /dev/null +++ b/plugins/trail/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPlugin } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPlugin({ + moduleName: "trail", + pluginName: "Trail", + version, + dir: __dirname, + progress: false, +}); diff --git a/plugins/trail/src/browser.ts b/plugins/trail/src/browser.ts new file mode 100644 index 00000000000..1bfce70bcd8 --- /dev/null +++ b/plugins/trail/src/browser.ts @@ -0,0 +1,10 @@ +import { loadTrailPlugin } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadTrailPlugin?: typeof loadTrailPlugin; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadTrailPlugin = loadTrailPlugin; + +export * from "./index.js"; diff --git a/plugins/trail/src/index.lazy.ts b/plugins/trail/src/index.lazy.ts new file mode 100644 index 00000000000..01d792edf32 --- /dev/null +++ b/plugins/trail/src/index.lazy.ts @@ -0,0 +1,16 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - The engine instance + */ +export async function loadTrailPlugin(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { TrailPlugin } = await import("./TrailPlugin.js"); + + e.pluginManager.addPlugin(new TrailPlugin(e.pluginManager)); + }); +} diff --git a/plugins/trail/src/index.ts b/plugins/trail/src/index.ts index 39ac8987f6b..f2bb7a165cb 100644 --- a/plugins/trail/src/index.ts +++ b/plugins/trail/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { TrailPlugin } from "./TrailPlugin.js"; declare const __VERSION__: string; @@ -8,9 +9,7 @@ declare const __VERSION__: string; export async function loadTrailPlugin(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async e => { - const { TrailPlugin } = await import("./TrailPlugin.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPlugin(new TrailPlugin(e.pluginManager)); }); } diff --git a/plugins/trail/webpack.config.js b/plugins/trail/webpack.config.js deleted file mode 100644 index e55da6bb965..00000000000 --- a/plugins/trail/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPlugin } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPlugin({ - moduleName: "trail", - pluginName: "Trail", - version, - dir: __dirname, - progress: false, -}); diff --git a/plugins/zoom/CHANGELOG.md b/plugins/zoom/CHANGELOG.md index 7fd7b236e48..70c9a52f12c 100644 --- a/plugins/zoom/CHANGELOG.md +++ b/plugins/zoom/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/plugin-zoom + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/plugin-zoom diff --git a/plugins/zoom/package.dist.json b/plugins/zoom/package.dist.json index ffc0b4c7e32..270501cae66 100644 --- a/plugins/zoom/package.dist.json +++ b/plugins/zoom/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/plugin-zoom", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles zoom plugin", "homepage": "https://particles.js.org", "repository": { @@ -82,10 +82,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/plugins/zoom/package.json b/plugins/zoom/package.json index 7c2bc83f292..a01a983d237 100644 --- a/plugins/zoom/package.json +++ b/plugins/zoom/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/plugin-zoom", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles zoom plugin", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -89,12 +89,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/plugins/zoom/rollup.config.js b/plugins/zoom/rollup.config.js new file mode 100644 index 00000000000..286e60fba83 --- /dev/null +++ b/plugins/zoom/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPlugin } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPlugin({ + moduleName: "zoom", + pluginName: "Zoom", + version, + dir: __dirname, + progress: false, +}); diff --git a/plugins/zoom/src/ZoomEventListeners.ts b/plugins/zoom/src/ZoomEventListeners.ts index b8bdfd38046..35c87076e2b 100644 --- a/plugins/zoom/src/ZoomEventListeners.ts +++ b/plugins/zoom/src/ZoomEventListeners.ts @@ -33,8 +33,8 @@ export class ZoomEventListeners { * @param container - the calling container */ constructor(private readonly container: ZoomContainer) { - this._gestureScale = defaultZoom as number; - this._touchDistance = initialTouchDistance as number; + this._gestureScale = defaultZoom; + this._touchDistance = initialTouchDistance; this._handlers = { gestureStart: (e: Event): void => { this._handleGestureStart(e); @@ -154,7 +154,7 @@ export class ZoomEventListeners { event.preventDefault(); - this._gestureScale = defaultZoom as number; + this._gestureScale = defaultZoom; }; /** @@ -185,7 +185,7 @@ export class ZoomEventListeners { event.preventDefault(); - this._gestureScale = defaultZoom as number; + this._gestureScale = defaultZoom; }; /** @@ -238,7 +238,7 @@ export class ZoomEventListeners { * @param event - the touch event */ private readonly _handleTouchEnd = (): void => { - this._touchDistance = initialTouchDistance as number; + this._touchDistance = initialTouchDistance; }; /** diff --git a/plugins/zoom/src/browser.ts b/plugins/zoom/src/browser.ts new file mode 100644 index 00000000000..6706589797e --- /dev/null +++ b/plugins/zoom/src/browser.ts @@ -0,0 +1,10 @@ +import { loadZoomPlugin } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadZoomPlugin?: typeof loadZoomPlugin; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadZoomPlugin = loadZoomPlugin; + +export * from "./index.js"; diff --git a/plugins/zoom/src/index.lazy.ts b/plugins/zoom/src/index.lazy.ts new file mode 100644 index 00000000000..017ba457c39 --- /dev/null +++ b/plugins/zoom/src/index.lazy.ts @@ -0,0 +1,32 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +export type { IZoom } from "./Options/Interfaces/IZoom.js"; +export type { IZoomOptions, ZoomContainer, ZoomOptions } from "./types.js"; +export { Zoom } from "./Options/Classes/Zoom.js"; +export { + initialTouchDistance, + maxZoom, + minZoom, + touchCenterDivisor, + touchPointIndexFirst, + touchPointIndexSecond, + touchPointsCount, + zoomGestureFactor, + zoomInFactor, + zoomOutFactor, +} from "./Utils/Constants.js"; + +/** + * @param engine - The engine instance + */ +export async function loadZoomPlugin(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { ZoomPlugin } = await import("./ZoomPlugin.js"); + + e.pluginManager.addPlugin(new ZoomPlugin()); + }); +} diff --git a/plugins/zoom/src/index.ts b/plugins/zoom/src/index.ts index d39a75b3e54..e0be66264c6 100644 --- a/plugins/zoom/src/index.ts +++ b/plugins/zoom/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { ZoomPlugin } from "./ZoomPlugin.js"; declare const __VERSION__: string; @@ -24,9 +25,7 @@ export { export async function loadZoomPlugin(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async e => { - const { ZoomPlugin } = await import("./ZoomPlugin.js"); - + await engine.pluginManager.register(e => { e.pluginManager.addPlugin(new ZoomPlugin()); }); } diff --git a/plugins/zoom/webpack.config.js b/plugins/zoom/webpack.config.js deleted file mode 100644 index 8781351f4f3..00000000000 --- a/plugins/zoom/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPlugin } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPlugin({ - moduleName: "zoom", - pluginName: "Zoom", - version, - dir: __dirname, - progress: false, -}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e827ecd9bd4..77b0a3d0471 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,50 +4,61 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false -packageExtensionsChecksum: sha256-v5ZfLWq9CY/vwgRNxsw+VvXL9Al9oWsyJYTYvJ4efGE= +patchedDependencies: + tsup@8.5.1: ce9dbc714c187cea78868f1e68c1a0e5097ddbceb7e976a564d94f2291b5bcb9 + vue-server-renderer@2.7.16: 7374e4bf5b7956d7097feec494aaea43bf8f6a02e2b64e8a3cc57e19c2f65132 importers: .: devDependencies: "@commitlint/cli": - specifier: ^20.5.0 - version: 20.5.0(@types/node@25.6.0)(conventional-commits-parser@6.3.0)(typescript@6.0.2) + specifier: ^21.0.0 + version: 21.0.0(@types/node@25.6.2)(conventional-commits-parser@6.3.0)(typescript@6.0.3) "@commitlint/config-conventional": - specifier: ^20.5.0 - version: 20.5.0 + specifier: ^21.0.0 + version: 21.0.0 "@nx/devkit": - specifier: ^22.6.5 - version: 22.6.5(nx@22.6.5(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.26)(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.26)) + specifier: ^22.7.1 + version: 22.7.1(nx@22.7.1(@swc-node/register@1.11.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@swc/core@1.15.33)(@swc/types@0.1.26)(typescript@6.0.3))(@swc/core@1.15.33)) + "@nx/js": + specifier: ^22.7.1 + version: 22.7.1(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@swc/core@1.15.33)(@swc/types@0.1.26)(typescript@6.0.3))(@swc/core@1.15.33)(nx@22.7.1(@swc-node/register@1.11.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@swc/core@1.15.33)(@swc/types@0.1.26)(typescript@6.0.3))(@swc/core@1.15.33)) "@swc-node/register": specifier: ^1.11.1 - version: 1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.26)(@swc/types@0.1.26)(typescript@6.0.2) + version: 1.11.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@swc/core@1.15.33)(@swc/types@0.1.26)(typescript@6.0.3) "@swc/core": - specifier: ^1.15.26 - version: 1.15.26 + specifier: ^1.15.33 + version: 1.15.33 "@tsparticles/browserslist-config": - specifier: ^3.4.7 - version: 3.4.7(browserslist@4.28.2) - "@tsparticles/cli": - specifier: ^3.4.6 - version: 3.4.6(@types/eslint@9.6.1)(jiti@2.6.1)(webpack-cli@7.0.2)(webpack-dev-server@5.2.3) + specifier: workspace:^ + version: link:cli/utils/browserslist-config + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:cli/packages/cli-build + "@tsparticles/cli-nx-plugin": + specifier: workspace:^ + version: link:cli/packages/nx-plugin "@tsparticles/depcruise-config": - specifier: ^3.4.7 - version: 3.4.7(dependency-cruiser@17.3.10) + specifier: workspace:^ + version: link:cli/utils/depcruise-config "@tsparticles/eslint-config": - specifier: ^3.4.7 - version: 3.4.7(@types/eslint@9.6.1)(eslint@10.2.0(jiti@2.6.1)) + specifier: workspace:^ + version: link:cli/utils/eslint-config "@tsparticles/prettier-config": - specifier: ^3.4.7 - version: 3.4.7(prettier@3.8.3) + specifier: workspace:^ + version: link:cli/utils/prettier-config + "@tsparticles/rollup-plugin": + specifier: workspace:^ + version: link:cli/utils/rollup-plugin "@tsparticles/tsconfig": - specifier: ^3.4.7 - version: 3.4.7(typescript@6.0.2) + specifier: workspace:^ + version: link:cli/utils/tsconfig "@tsparticles/webpack-plugin": - specifier: ^3.4.7 - version: 3.4.7(@types/eslint@9.6.1)(jiti@2.6.1)(webpack-dev-server@5.2.3) + specifier: workspace:^ + version: link:cli/utils/webpack-config "@types/node": - specifier: ^25.6.0 - version: 25.6.0 + specifier: ^25.6.2 + version: 25.6.2 "@types/webpack-env": specifier: ^1.18.8 version: 1.18.8 @@ -61,23 +72,23 @@ importers: specifier: ^10.1.0 version: 10.1.0 eslint: - specifier: ^10.2.0 - version: 10.2.0(jiti@2.6.1) + specifier: ^10.3.0 + version: 10.3.0(jiti@2.7.0) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@10.2.0(jiti@2.6.1)) + version: 10.1.8(eslint@10.3.0(jiti@2.7.0)) eslint-plugin-jsdoc: specifier: ^62.9.0 - version: 62.9.0(eslint@10.2.0(jiti@2.6.1)) + version: 62.9.0(eslint@10.3.0(jiti@2.7.0)) eslint-plugin-prettier: specifier: ^5.5.5 - version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.2.0(jiti@2.6.1)))(eslint@10.2.0(jiti@2.6.1))(prettier@3.8.3) + version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.3.0(jiti@2.7.0)))(eslint@10.3.0(jiti@2.7.0))(prettier@3.8.3) eslint-plugin-tsdoc: specifier: ^0.5.2 - version: 0.5.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) + version: 0.5.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) fs-extra: - specifier: ^11.3.4 - version: 11.3.4 + specifier: ^11.3.5 + version: 11.3.5 gh-pages: specifier: ^6.3.0 version: 6.3.0 @@ -86,10 +97,10 @@ importers: version: 9.1.7 lerna: specifier: ^9.0.7 - version: 9.0.7(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.26)(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.26)(@types/node@25.6.0)(babel-plugin-macros@3.1.0) + version: 9.0.7(@swc-node/register@1.11.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@swc/core@1.15.33)(@swc/types@0.1.26)(typescript@6.0.3))(@swc/core@1.15.33)(@types/node@25.6.2)(babel-plugin-macros@3.1.0) nx: - specifier: ^22.6.5 - version: 22.6.5(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.26)(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.26) + specifier: ^22.7.1 + version: 22.7.1(@swc-node/register@1.11.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@swc/core@1.15.33)(@swc/types@0.1.26)(typescript@6.0.3))(@swc/core@1.15.33) nx-cloud: specifier: ^19.1.3 version: 19.1.3 @@ -97,8 +108,11 @@ importers: specifier: ^3.8.3 version: 3.8.3 prettier-plugin-multiline-arrays: - specifier: ^4.1.5 - version: 4.1.5(prettier@3.8.3) + specifier: ^4.1.8 + version: 4.1.8(prettier@3.8.3) + puppeteer: + specifier: ^24.43.0 + version: 24.43.0(typescript@6.0.3) rimraf: specifier: ^6.1.3 version: 6.1.3 @@ -107,52 +121,52 @@ importers: version: 0.5.21 swc-loader: specifier: ^0.2.7 - version: 0.2.7(@swc/core@1.15.26)(webpack@5.106.1) + version: 0.2.7(@swc/core@1.15.33)(webpack@5.106.2) terser-webpack-plugin: - specifier: ^5.4.0 - version: 5.4.0(@swc/core@1.15.26)(webpack@5.106.1) + specifier: ^5.6.0 + version: 5.6.0(@swc/core@1.15.33)(webpack@5.106.2) ts-json-schema-generator: specifier: ^2.9.0 version: 2.9.0 ts-node: specifier: ^10.9.2 - version: 10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@6.0.2) + version: 10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3) typedoc: specifier: ^0.28.19 - version: 0.28.19(typescript@6.0.2) + version: 0.28.19(typescript@6.0.3) typedoc-plugin-clarity: specifier: ^1.6.0 - version: 1.6.0(typedoc@0.28.19(typescript@6.0.2)) + version: 1.6.0(typedoc@0.28.19(typescript@6.0.3)) typedoc-plugin-coverage: specifier: ^4.0.3 - version: 4.0.3(typedoc@0.28.19(typescript@6.0.2)) + version: 4.0.3(typedoc@0.28.19(typescript@6.0.3)) typedoc-plugin-google-ads: specifier: ^1.6.0 - version: 1.6.0(typedoc@0.28.19(typescript@6.0.2)) + version: 1.6.0(typedoc@0.28.19(typescript@6.0.3)) typedoc-plugin-keywords: specifier: ^1.6.0 - version: 1.6.0(typedoc@0.28.19(typescript@6.0.2)) + version: 1.6.0(typedoc@0.28.19(typescript@6.0.3)) typedoc-plugin-mdn-links: specifier: ^5.1.1 - version: 5.1.1(typedoc@0.28.19(typescript@6.0.2)) + version: 5.1.1(typedoc@0.28.19(typescript@6.0.3)) typedoc-plugin-missing-exports: specifier: ^4.1.3 - version: 4.1.3(typedoc@0.28.19(typescript@6.0.2)) + version: 4.1.3(typedoc@0.28.19(typescript@6.0.3)) typescript: - specifier: ^6.0.2 - version: 6.0.2 + specifier: ^6.0.3 + version: 6.0.3 typescript-eslint: - specifier: ^8.58.2 - version: 8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) + specifier: ^8.59.2 + version: 8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) webpack: - specifier: ^5.106.1 - version: 5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2) + specifier: ^5.106.2 + version: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) webpack-bundle-analyzer: specifier: ^5.3.0 version: 5.3.0 webpack-cli: specifier: ^7.0.2 - version: 7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1) + version: 7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2) yargs: specifier: ^18.0.0 version: 18.0.0 @@ -393,6 +407,13 @@ importers: tsparticles: specifier: workspace:* version: link:../full/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build publishDirectory: dist bundles/basic: @@ -427,6 +448,13 @@ importers: "@tsparticles/updater-size": specifier: workspace:* version: link:../../updaters/size/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build publishDirectory: dist bundles/confetti: @@ -479,6 +507,13 @@ importers: "@tsparticles/updater-wobble": specifier: workspace:* version: link:../../updaters/wobble/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build publishDirectory: dist bundles/fireworks: @@ -516,6 +551,13 @@ importers: "@tsparticles/updater-rotate": specifier: workspace:* version: link:../../updaters/rotate/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build publishDirectory: dist bundles/full: @@ -562,6 +604,39 @@ importers: "@tsparticles/updater-wobble": specifier: workspace:* version: link:../../updaters/wobble/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build + publishDirectory: dist + + bundles/particles: + dependencies: + "@tsparticles/basic": + specifier: workspace:* + version: link:../basic/dist + "@tsparticles/engine": + specifier: workspace:* + version: link:../../engine/dist + "@tsparticles/interaction-particles-collisions": + specifier: workspace:* + version: link:../../interactions/particles/collisions/dist + "@tsparticles/interaction-particles-links": + specifier: workspace:* + version: link:../../interactions/particles/links/dist + "@tsparticles/plugin-interactivity": + specifier: workspace:* + version: link:../../plugins/interactivity/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build publishDirectory: dist bundles/pjs: @@ -576,6 +651,12 @@ importers: specifier: workspace:* version: link:../full/dist devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/plugin-interactivity": specifier: workspace:* version: link:../../plugins/interactivity/dist @@ -667,191 +748,2488 @@ importers: "@tsparticles/updater-rotate": specifier: workspace:* version: link:../../updaters/rotate/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build publishDirectory: dist - demo/angular: + cli/commands/build: dependencies: - "@angular/animations": - specifier: ~21.2.8 - version: 21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)) - "@angular/common": - specifier: ~21.2.8 - version: 21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) - "@angular/compiler": - specifier: ~21.2.8 - version: 21.2.8 - "@angular/core": - specifier: ~21.2.8 - version: 21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1) - "@angular/forms": - specifier: ~21.2.8 - version: 21.2.8(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) - "@angular/platform-browser": - specifier: ~21.2.8 - version: 21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)) - "@angular/platform-browser-dynamic": - specifier: ~21.2.8 - version: 21.2.8(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))) - "@angular/router": - specifier: ~21.2.8 - version: 21.2.8(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) - "@tsparticles/angular": - specifier: workspace:^ - version: link:../../wrappers/angular/dist/ng-particles - "@tsparticles/basic": - specifier: workspace:^ - version: link:../../bundles/basic/dist - "@tsparticles/canvas-utils": - specifier: workspace:^ - version: link:../../utils/canvasUtils/dist - "@tsparticles/confetti": - specifier: workspace:^ - version: link:../../bundles/confetti/dist - "@tsparticles/configs": - specifier: workspace:^ - version: link:../../utils/configs/dist - "@tsparticles/effect-trail": - specifier: workspace:^ - version: link:../../effects/trail/dist - "@tsparticles/engine": - specifier: workspace:^ - version: link:../../engine/dist - "@tsparticles/fireworks": - specifier: workspace:^ - version: link:../../bundles/fireworks/dist - "@tsparticles/interaction-external-attract": - specifier: workspace:^ - version: link:../../interactions/external/attract/dist - "@tsparticles/interaction-external-bounce": - specifier: workspace:^ - version: link:../../interactions/external/bounce/dist - "@tsparticles/interaction-external-bubble": - specifier: workspace:^ - version: link:../../interactions/external/bubble/dist - "@tsparticles/interaction-external-connect": - specifier: workspace:^ - version: link:../../interactions/external/connect/dist - "@tsparticles/interaction-external-destroy": + "@swc/core": + specifier: ^1.15.33 + version: 1.15.33 + "@tsparticles/cli-command-build-bundle-rollup": specifier: workspace:^ - version: link:../../interactions/external/destroy/dist - "@tsparticles/interaction-external-drag": + version: link:../build-bundle-rollup + "@tsparticles/cli-command-build-bundle-webpack": specifier: workspace:^ - version: link:../../interactions/external/drag/dist - "@tsparticles/interaction-external-grab": + version: link:../build-bundle-webpack + "@tsparticles/cli-command-build-circular-deps": specifier: workspace:^ - version: link:../../interactions/external/grab/dist - "@tsparticles/interaction-external-parallax": + version: link:../build-circular-deps + "@tsparticles/cli-command-build-clear": specifier: workspace:^ - version: link:../../interactions/external/parallax/dist - "@tsparticles/interaction-external-pause": + version: link:../build-clear + "@tsparticles/cli-command-build-distfiles": specifier: workspace:^ - version: link:../../interactions/external/pause/dist - "@tsparticles/interaction-external-push": + version: link:../build-distfiles + "@tsparticles/cli-command-build-diststats": specifier: workspace:^ - version: link:../../interactions/external/push/dist - "@tsparticles/interaction-external-remove": + version: link:../build-diststats + "@tsparticles/cli-command-build-eslint": specifier: workspace:^ - version: link:../../interactions/external/remove/dist - "@tsparticles/interaction-external-repulse": + version: link:../build-eslint + "@tsparticles/cli-command-build-prettier": specifier: workspace:^ - version: link:../../interactions/external/repulse/dist - "@tsparticles/interaction-external-slow": + version: link:../build-prettier + "@tsparticles/cli-command-build-tsc": specifier: workspace:^ - version: link:../../interactions/external/slow/dist - "@tsparticles/interaction-external-trail": + version: link:../build-tsc + "@tsparticles/depcruise-config": specifier: workspace:^ - version: link:../../interactions/external/trail/dist - "@tsparticles/interaction-particles-attract": + version: link:../../utils/depcruise-config + "@tsparticles/eslint-config": specifier: workspace:^ - version: link:../../interactions/particles/attract/dist - "@tsparticles/interaction-particles-collisions": + version: link:../../utils/eslint-config + "@tsparticles/prettier-config": specifier: workspace:^ - version: link:../../interactions/particles/collisions/dist - "@tsparticles/interaction-particles-links": + version: link:../../utils/prettier-config + "@tsparticles/tsconfig": specifier: workspace:^ - version: link:../../interactions/particles/links/dist - "@tsparticles/path-utils": + version: link:../../utils/tsconfig + "@tsparticles/webpack-plugin": specifier: workspace:^ - version: link:../../utils/pathUtils/dist - "@tsparticles/pjs": + version: link:../../utils/webpack-config + dependency-cruiser: + specifier: ^17.4.0 + version: 17.4.0 + eslint: + specifier: ^10.3.0 + version: 10.3.0(jiti@2.7.0) + eslint-config-prettier: + specifier: ^10.1.8 + version: 10.1.8(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-jsdoc: + specifier: ^62.9.0 + version: 62.9.0(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-prettier: + specifier: ^5.5.5 + version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.3.0(jiti@2.7.0)))(eslint@10.3.0(jiti@2.7.0))(prettier@3.8.3) + eslint-plugin-tsdoc: + specifier: ^0.5.2 + version: 0.5.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + klaw: + specifier: ^4.1.0 + version: 4.1.0 + lookpath: + specifier: ^1.2.3 + version: 1.2.3 + path-scurry: + specifier: ^2.0.2 + version: 2.0.2 + prettier: + specifier: ^3.8.3 + version: 3.8.3 + prettier-plugin-multiline-arrays: + specifier: ^4.1.8 + version: 4.1.8(prettier@3.8.3) + prompts: + specifier: ^2.4.2 + version: 2.4.2 + rimraf: + specifier: ^6.1.3 + version: 6.1.3 + swc-loader: + specifier: ^0.2.7 + version: 0.2.7(@swc/core@1.15.33)(webpack@5.106.2) + typescript: + specifier: ^6.0.3 + version: 6.0.3 + typescript-eslint: + specifier: ^8.59.2 + version: 8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + webpack: + specifier: ^5.106.2 + version: 5.106.2(@swc/core@1.15.33)(esbuild@0.27.7)(webpack-cli@7.0.2) + devDependencies: + "@types/estree": + specifier: ^1.0.9 + version: 1.0.9 + "@types/klaw": + specifier: ^3.0.7 + version: 3.0.7 + "@types/node": + specifier: ^25.6.2 + version: 25.6.2 + "@types/prompts": + specifier: ^2.4.9 + version: 2.4.9 + "@types/webpack-env": + specifier: ^1.18.8 + version: 1.18.8 + browserslist: + specifier: ^4.28.2 + version: 4.28.2 + commander: + specifier: ^14.0.3 + version: 14.0.3 + copyfiles: + specifier: ^2.4.1 + version: 2.4.1 + cross-env: + specifier: ^10.1.0 + version: 10.1.0 + terser-webpack-plugin: + specifier: ^5.5.0 + version: 5.5.0(@swc/core@1.15.33)(esbuild@0.27.7)(webpack@5.106.2) + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3) + vitest: + specifier: ^4.1.5 + version: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@25.6.2)(jsdom@29.0.2(canvas@3.2.3))(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) + webpack-bundle-analyzer: + specifier: ^5.3.0 + version: 5.3.0 + webpack-cli: + specifier: ^7.0.2 + version: 7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2) + + cli/commands/build-bundle-rollup: + dependencies: + "@swc/core": + specifier: ^1.15.33 + version: 1.15.33 + "@tsparticles/depcruise-config": specifier: workspace:^ - version: link:../../bundles/pjs/dist - "@tsparticles/plugin-absorbers": + version: link:../../utils/depcruise-config + "@tsparticles/eslint-config": specifier: workspace:^ - version: link:../../plugins/absorbers/dist - "@tsparticles/plugin-blend": + version: link:../../utils/eslint-config + "@tsparticles/prettier-config": specifier: workspace:^ - version: link:../../plugins/blend/dist - "@tsparticles/plugin-easing-quad": + version: link:../../utils/prettier-config + "@tsparticles/rollup-plugin": specifier: workspace:^ - version: link:../../plugins/easings/quad/dist - "@tsparticles/plugin-emitters": + version: link:../../utils/rollup-plugin + "@tsparticles/tsconfig": specifier: workspace:^ - version: link:../../plugins/emitters/dist - "@tsparticles/plugin-emitters-shape-circle": + version: link:../../utils/tsconfig + dependency-cruiser: + specifier: ^17.4.0 + version: 17.4.0 + eslint: + specifier: ^10.3.0 + version: 10.3.0(jiti@2.7.0) + eslint-config-prettier: + specifier: ^10.1.8 + version: 10.1.8(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-jsdoc: + specifier: ^62.9.0 + version: 62.9.0(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-prettier: + specifier: ^5.5.5 + version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.3.0(jiti@2.7.0)))(eslint@10.3.0(jiti@2.7.0))(prettier@3.8.3) + eslint-plugin-tsdoc: + specifier: ^0.5.2 + version: 0.5.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + klaw: + specifier: ^4.1.0 + version: 4.1.0 + lookpath: + specifier: ^1.2.3 + version: 1.2.3 + path-scurry: + specifier: ^2.0.2 + version: 2.0.2 + prettier: + specifier: ^3.8.3 + version: 3.8.3 + prettier-plugin-multiline-arrays: + specifier: ^4.1.8 + version: 4.1.8(prettier@3.8.3) + prompts: + specifier: ^2.4.2 + version: 2.4.2 + rimraf: + specifier: ^6.1.3 + version: 6.1.3 + rollup: + specifier: ^4.60.3 + version: 4.60.3 + swc-loader: + specifier: ^0.2.7 + version: 0.2.7(@swc/core@1.15.33)(webpack@5.106.2) + typescript: + specifier: ^6.0.3 + version: 6.0.3 + typescript-eslint: + specifier: ^8.59.2 + version: 8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + devDependencies: + "@types/estree": + specifier: ^1.0.9 + version: 1.0.9 + "@types/klaw": + specifier: ^3.0.7 + version: 3.0.7 + "@types/node": + specifier: ^25.6.2 + version: 25.6.2 + "@types/prompts": + specifier: ^2.4.9 + version: 2.4.9 + browserslist: + specifier: ^4.28.2 + version: 4.28.2 + commander: + specifier: ^14.0.3 + version: 14.0.3 + copyfiles: + specifier: ^2.4.1 + version: 2.4.1 + cross-env: + specifier: ^10.1.0 + version: 10.1.0 + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3) + vitest: + specifier: ^4.1.5 + version: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@25.6.2)(jsdom@29.0.2(canvas@3.2.3))(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) + + cli/commands/build-bundle-webpack: + dependencies: + "@swc/core": + specifier: ^1.15.33 + version: 1.15.33 + "@tsparticles/depcruise-config": specifier: workspace:^ - version: link:../../plugins/emittersShapes/circle/dist - "@tsparticles/plugin-emitters-shape-square": + version: link:../../utils/depcruise-config + "@tsparticles/eslint-config": specifier: workspace:^ - version: link:../../plugins/emittersShapes/square/dist - "@tsparticles/plugin-hex-color": + version: link:../../utils/eslint-config + "@tsparticles/prettier-config": specifier: workspace:^ - version: link:../../plugins/colors/hex/dist - "@tsparticles/plugin-hsl-color": + version: link:../../utils/prettier-config + "@tsparticles/tsconfig": specifier: workspace:^ - version: link:../../plugins/colors/hsl/dist - "@tsparticles/plugin-interactivity": + version: link:../../utils/tsconfig + "@tsparticles/webpack-plugin": specifier: workspace:^ - version: link:../../plugins/interactivity/dist - "@tsparticles/plugin-motion": + version: link:../../utils/webpack-config + dependency-cruiser: + specifier: ^17.4.0 + version: 17.4.0 + eslint: + specifier: ^10.3.0 + version: 10.3.0(jiti@2.7.0) + eslint-config-prettier: + specifier: ^10.1.8 + version: 10.1.8(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-jsdoc: + specifier: ^62.9.0 + version: 62.9.0(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-prettier: + specifier: ^5.5.5 + version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.3.0(jiti@2.7.0)))(eslint@10.3.0(jiti@2.7.0))(prettier@3.8.3) + eslint-plugin-tsdoc: + specifier: ^0.5.2 + version: 0.5.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + klaw: + specifier: ^4.1.0 + version: 4.1.0 + lookpath: + specifier: ^1.2.3 + version: 1.2.3 + path-scurry: + specifier: ^2.0.2 + version: 2.0.2 + prettier: + specifier: ^3.8.3 + version: 3.8.3 + prettier-plugin-multiline-arrays: + specifier: ^4.1.8 + version: 4.1.8(prettier@3.8.3) + prompts: + specifier: ^2.4.2 + version: 2.4.2 + rimraf: + specifier: ^6.1.3 + version: 6.1.3 + swc-loader: + specifier: ^0.2.7 + version: 0.2.7(@swc/core@1.15.33)(webpack@5.106.2) + typescript: + specifier: ^6.0.3 + version: 6.0.3 + typescript-eslint: + specifier: ^8.59.2 + version: 8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + webpack: + specifier: ^5.106.2 + version: 5.106.2(@swc/core@1.15.33)(esbuild@0.27.7)(webpack-cli@7.0.2) + devDependencies: + "@types/estree": + specifier: ^1.0.9 + version: 1.0.9 + "@types/klaw": + specifier: ^3.0.7 + version: 3.0.7 + "@types/node": + specifier: ^25.6.2 + version: 25.6.2 + "@types/prompts": + specifier: ^2.4.9 + version: 2.4.9 + "@types/webpack-env": + specifier: ^1.18.8 + version: 1.18.8 + browserslist: + specifier: ^4.28.2 + version: 4.28.2 + commander: + specifier: ^14.0.3 + version: 14.0.3 + copyfiles: + specifier: ^2.4.1 + version: 2.4.1 + cross-env: + specifier: ^10.1.0 + version: 10.1.0 + terser-webpack-plugin: + specifier: ^5.5.0 + version: 5.5.0(@swc/core@1.15.33)(esbuild@0.27.7)(webpack@5.106.2) + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3) + vitest: + specifier: ^4.1.5 + version: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@25.6.2)(jsdom@29.0.2(canvas@3.2.3))(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) + webpack-bundle-analyzer: + specifier: ^5.3.0 + version: 5.3.0 + webpack-cli: + specifier: ^7.0.2 + version: 7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2) + + cli/commands/build-circular-deps: + dependencies: + "@swc/core": + specifier: ^1.15.33 + version: 1.15.33 + "@tsparticles/depcruise-config": specifier: workspace:^ - version: link:../../plugins/motion/dist - "@tsparticles/plugin-move": + version: link:../../utils/depcruise-config + "@tsparticles/eslint-config": specifier: workspace:^ - version: link:../../plugins/move/dist - "@tsparticles/plugin-polygon-mask": + version: link:../../utils/eslint-config + "@tsparticles/prettier-config": specifier: workspace:^ - version: link:../../plugins/polygonMask/dist - "@tsparticles/plugin-rgb-color": + version: link:../../utils/prettier-config + "@tsparticles/tsconfig": specifier: workspace:^ - version: link:../../plugins/colors/rgb/dist - "@tsparticles/plugin-sounds": + version: link:../../utils/tsconfig + dependency-cruiser: + specifier: ^17.4.0 + version: 17.4.0 + eslint: + specifier: ^10.3.0 + version: 10.3.0(jiti@2.7.0) + eslint-config-prettier: + specifier: ^10.1.8 + version: 10.1.8(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-jsdoc: + specifier: ^62.9.0 + version: 62.9.0(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-prettier: + specifier: ^5.5.5 + version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.3.0(jiti@2.7.0)))(eslint@10.3.0(jiti@2.7.0))(prettier@3.8.3) + eslint-plugin-tsdoc: + specifier: ^0.5.2 + version: 0.5.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + klaw: + specifier: ^4.1.0 + version: 4.1.0 + lookpath: + specifier: ^1.2.3 + version: 1.2.3 + path-scurry: + specifier: ^2.0.2 + version: 2.0.2 + prettier: + specifier: ^3.8.3 + version: 3.8.3 + prettier-plugin-multiline-arrays: + specifier: ^4.1.8 + version: 4.1.8(prettier@3.8.3) + prompts: + specifier: ^2.4.2 + version: 2.4.2 + rimraf: + specifier: ^6.1.3 + version: 6.1.3 + swc-loader: + specifier: ^0.2.7 + version: 0.2.7(@swc/core@1.15.33)(webpack@5.106.2) + typescript: + specifier: ^6.0.3 + version: 6.0.3 + typescript-eslint: + specifier: ^8.59.2 + version: 8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + devDependencies: + "@types/estree": + specifier: ^1.0.9 + version: 1.0.9 + "@types/klaw": + specifier: ^3.0.7 + version: 3.0.7 + "@types/node": + specifier: ^25.6.2 + version: 25.6.2 + "@types/prompts": + specifier: ^2.4.9 + version: 2.4.9 + browserslist: + specifier: ^4.28.2 + version: 4.28.2 + commander: + specifier: ^14.0.3 + version: 14.0.3 + copyfiles: + specifier: ^2.4.1 + version: 2.4.1 + cross-env: + specifier: ^10.1.0 + version: 10.1.0 + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3) + + cli/commands/build-clear: + dependencies: + "@swc/core": + specifier: ^1.15.33 + version: 1.15.33 + "@tsparticles/depcruise-config": specifier: workspace:^ - version: link:../../plugins/sounds/dist - "@tsparticles/shape-cards": + version: link:../../utils/depcruise-config + "@tsparticles/eslint-config": specifier: workspace:^ - version: link:../../shapes/cards/dist - "@tsparticles/shape-circle": + version: link:../../utils/eslint-config + "@tsparticles/prettier-config": specifier: workspace:^ - version: link:../../shapes/circle/dist - "@tsparticles/shape-emoji": + version: link:../../utils/prettier-config + "@tsparticles/tsconfig": specifier: workspace:^ - version: link:../../shapes/emoji/dist - "@tsparticles/shape-heart": + version: link:../../utils/tsconfig + dependency-cruiser: + specifier: ^17.4.0 + version: 17.4.0 + eslint: + specifier: ^10.3.0 + version: 10.3.0(jiti@2.7.0) + eslint-config-prettier: + specifier: ^10.1.8 + version: 10.1.8(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-jsdoc: + specifier: ^62.9.0 + version: 62.9.0(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-prettier: + specifier: ^5.5.5 + version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.3.0(jiti@2.7.0)))(eslint@10.3.0(jiti@2.7.0))(prettier@3.8.3) + eslint-plugin-tsdoc: + specifier: ^0.5.2 + version: 0.5.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + klaw: + specifier: ^4.1.0 + version: 4.1.0 + lookpath: + specifier: ^1.2.3 + version: 1.2.3 + path-scurry: + specifier: ^2.0.2 + version: 2.0.2 + prettier: + specifier: ^3.8.3 + version: 3.8.3 + prettier-plugin-multiline-arrays: + specifier: ^4.1.8 + version: 4.1.8(prettier@3.8.3) + prompts: + specifier: ^2.4.2 + version: 2.4.2 + rimraf: + specifier: ^6.1.3 + version: 6.1.3 + swc-loader: + specifier: ^0.2.7 + version: 0.2.7(@swc/core@1.15.33)(webpack@5.106.2) + typescript: + specifier: ^6.0.3 + version: 6.0.3 + typescript-eslint: + specifier: ^8.59.2 + version: 8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + devDependencies: + "@types/estree": + specifier: ^1.0.9 + version: 1.0.9 + "@types/klaw": + specifier: ^3.0.7 + version: 3.0.7 + "@types/node": + specifier: ^25.6.2 + version: 25.6.2 + "@types/prompts": + specifier: ^2.4.9 + version: 2.4.9 + browserslist: + specifier: ^4.28.2 + version: 4.28.2 + commander: + specifier: ^14.0.3 + version: 14.0.3 + copyfiles: + specifier: ^2.4.1 + version: 2.4.1 + cross-env: + specifier: ^10.1.0 + version: 10.1.0 + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3) + + cli/commands/build-distfiles: + dependencies: + "@swc/core": + specifier: ^1.15.33 + version: 1.15.33 + "@tsparticles/depcruise-config": specifier: workspace:^ - version: link:../../shapes/heart/dist - "@tsparticles/shape-image": + version: link:../../utils/depcruise-config + "@tsparticles/eslint-config": specifier: workspace:^ - version: link:../../shapes/image/dist - "@tsparticles/shape-line": + version: link:../../utils/eslint-config + "@tsparticles/prettier-config": specifier: workspace:^ - version: link:../../shapes/line/dist - "@tsparticles/shape-polygon": + version: link:../../utils/prettier-config + "@tsparticles/tsconfig": specifier: workspace:^ - version: link:../../shapes/polygon/dist - "@tsparticles/shape-square": + version: link:../../utils/tsconfig + dependency-cruiser: + specifier: ^17.4.0 + version: 17.4.0 + eslint: + specifier: ^10.3.0 + version: 10.3.0(jiti@2.7.0) + eslint-config-prettier: + specifier: ^10.1.8 + version: 10.1.8(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-jsdoc: + specifier: ^62.9.0 + version: 62.9.0(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-prettier: + specifier: ^5.5.5 + version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.3.0(jiti@2.7.0)))(eslint@10.3.0(jiti@2.7.0))(prettier@3.8.3) + eslint-plugin-tsdoc: + specifier: ^0.5.2 + version: 0.5.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + klaw: + specifier: ^4.1.0 + version: 4.1.0 + lookpath: + specifier: ^1.2.3 + version: 1.2.3 + path-scurry: + specifier: ^2.0.2 + version: 2.0.2 + prettier: + specifier: ^3.8.3 + version: 3.8.3 + prettier-plugin-multiline-arrays: + specifier: ^4.1.8 + version: 4.1.8(prettier@3.8.3) + prompts: + specifier: ^2.4.2 + version: 2.4.2 + rimraf: + specifier: ^6.1.3 + version: 6.1.3 + swc-loader: + specifier: ^0.2.7 + version: 0.2.7(@swc/core@1.15.33)(webpack@5.106.2) + typescript: + specifier: ^6.0.3 + version: 6.0.3 + typescript-eslint: + specifier: ^8.59.2 + version: 8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + devDependencies: + "@types/estree": + specifier: ^1.0.9 + version: 1.0.9 + "@types/klaw": + specifier: ^3.0.7 + version: 3.0.7 + "@types/node": + specifier: ^25.6.2 + version: 25.6.2 + "@types/prompts": + specifier: ^2.4.9 + version: 2.4.9 + browserslist: + specifier: ^4.28.2 + version: 4.28.2 + commander: + specifier: ^14.0.3 + version: 14.0.3 + copyfiles: + specifier: ^2.4.1 + version: 2.4.1 + cross-env: + specifier: ^10.1.0 + version: 10.1.0 + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3) + + cli/commands/build-diststats: + dependencies: + "@swc/core": + specifier: ^1.15.33 + version: 1.15.33 + "@tsparticles/depcruise-config": specifier: workspace:^ - version: link:../../shapes/square/dist - "@tsparticles/shape-star": + version: link:../../utils/depcruise-config + "@tsparticles/eslint-config": specifier: workspace:^ - version: link:../../shapes/star/dist - "@tsparticles/shape-text": + version: link:../../utils/eslint-config + "@tsparticles/prettier-config": specifier: workspace:^ - version: link:../../shapes/text/dist - "@tsparticles/slim": + version: link:../../utils/prettier-config + "@tsparticles/tsconfig": specifier: workspace:^ - version: link:../../bundles/slim/dist - "@tsparticles/updater-destroy": + version: link:../../utils/tsconfig + dependency-cruiser: + specifier: ^17.4.0 + version: 17.4.0 + eslint: + specifier: ^10.3.0 + version: 10.3.0(jiti@2.7.0) + eslint-config-prettier: + specifier: ^10.1.8 + version: 10.1.8(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-jsdoc: + specifier: ^62.9.0 + version: 62.9.0(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-prettier: + specifier: ^5.5.5 + version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.3.0(jiti@2.7.0)))(eslint@10.3.0(jiti@2.7.0))(prettier@3.8.3) + eslint-plugin-tsdoc: + specifier: ^0.5.2 + version: 0.5.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + klaw: + specifier: ^4.1.0 + version: 4.1.0 + lookpath: + specifier: ^1.2.3 + version: 1.2.3 + path-scurry: + specifier: ^2.0.2 + version: 2.0.2 + prettier: + specifier: ^3.8.3 + version: 3.8.3 + prettier-plugin-multiline-arrays: + specifier: ^4.1.8 + version: 4.1.8(prettier@3.8.3) + rimraf: + specifier: ^6.1.3 + version: 6.1.3 + swc-loader: + specifier: ^0.2.7 + version: 0.2.7(@swc/core@1.15.33)(webpack@5.106.2) + typescript: + specifier: ^6.0.3 + version: 6.0.3 + typescript-eslint: + specifier: ^8.59.2 + version: 8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + devDependencies: + "@types/estree": + specifier: ^1.0.9 + version: 1.0.9 + "@types/klaw": + specifier: ^3.0.7 + version: 3.0.7 + "@types/node": + specifier: ^25.6.2 + version: 25.6.2 + browserslist: + specifier: ^4.28.2 + version: 4.28.2 + copyfiles: + specifier: ^2.4.1 + version: 2.4.1 + cross-env: + specifier: ^10.1.0 + version: 10.1.0 + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3) + + cli/commands/build-eslint: + dependencies: + "@swc/core": + specifier: ^1.15.33 + version: 1.15.33 + "@tsparticles/depcruise-config": + specifier: workspace:^ + version: link:../../utils/depcruise-config + "@tsparticles/eslint-config": + specifier: workspace:^ + version: link:../../utils/eslint-config + "@tsparticles/prettier-config": + specifier: workspace:^ + version: link:../../utils/prettier-config + "@tsparticles/tsconfig": + specifier: workspace:^ + version: link:../../utils/tsconfig + dependency-cruiser: + specifier: ^17.4.0 + version: 17.4.0 + eslint-config-prettier: + specifier: ^10.1.8 + version: 10.1.8(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-jsdoc: + specifier: ^62.9.0 + version: 62.9.0(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-prettier: + specifier: ^5.5.5 + version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.3.0(jiti@2.7.0)))(eslint@10.3.0(jiti@2.7.0))(prettier@3.8.3) + eslint-plugin-tsdoc: + specifier: ^0.5.2 + version: 0.5.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + klaw: + specifier: ^4.1.0 + version: 4.1.0 + lookpath: + specifier: ^1.2.3 + version: 1.2.3 + path-scurry: + specifier: ^2.0.2 + version: 2.0.2 + prettier: + specifier: ^3.8.3 + version: 3.8.3 + prettier-plugin-multiline-arrays: + specifier: ^4.1.8 + version: 4.1.8(prettier@3.8.3) + prompts: + specifier: ^2.4.2 + version: 2.4.2 + rimraf: + specifier: ^6.1.3 + version: 6.1.3 + swc-loader: + specifier: ^0.2.7 + version: 0.2.7(@swc/core@1.15.33)(webpack@5.106.2) + typescript: + specifier: ^6.0.3 + version: 6.0.3 + typescript-eslint: + specifier: ^8.59.2 + version: 8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + devDependencies: + "@types/estree": + specifier: ^1.0.9 + version: 1.0.9 + "@types/klaw": + specifier: ^3.0.7 + version: 3.0.7 + "@types/node": + specifier: ^25.6.2 + version: 25.6.2 + "@types/prompts": + specifier: ^2.4.9 + version: 2.4.9 + browserslist: + specifier: ^4.28.2 + version: 4.28.2 + commander: + specifier: ^14.0.3 + version: 14.0.3 + copyfiles: + specifier: ^2.4.1 + version: 2.4.1 + cross-env: + specifier: ^10.1.0 + version: 10.1.0 + eslint: + specifier: ^10.3.0 + version: 10.3.0(jiti@2.7.0) + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3) + + cli/commands/build-prettier: + dependencies: + "@swc/core": + specifier: ^1.15.33 + version: 1.15.33 + "@tsparticles/depcruise-config": + specifier: workspace:^ + version: link:../../utils/depcruise-config + "@tsparticles/eslint-config": + specifier: workspace:^ + version: link:../../utils/eslint-config + "@tsparticles/prettier-config": + specifier: workspace:^ + version: link:../../utils/prettier-config + "@tsparticles/tsconfig": + specifier: workspace:^ + version: link:../../utils/tsconfig + dependency-cruiser: + specifier: ^17.4.0 + version: 17.4.0 + eslint: + specifier: ^10.3.0 + version: 10.3.0(jiti@2.7.0) + eslint-config-prettier: + specifier: ^10.1.8 + version: 10.1.8(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-jsdoc: + specifier: ^62.9.0 + version: 62.9.0(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-prettier: + specifier: ^5.5.5 + version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.3.0(jiti@2.7.0)))(eslint@10.3.0(jiti@2.7.0))(prettier@3.8.3) + eslint-plugin-tsdoc: + specifier: ^0.5.2 + version: 0.5.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + klaw: + specifier: ^4.1.0 + version: 4.1.0 + lookpath: + specifier: ^1.2.3 + version: 1.2.3 + path-scurry: + specifier: ^2.0.2 + version: 2.0.2 + prettier-plugin-multiline-arrays: + specifier: ^4.1.8 + version: 4.1.8(prettier@3.8.3) + prompts: + specifier: ^2.4.2 + version: 2.4.2 + rimraf: + specifier: ^6.1.3 + version: 6.1.3 + swc-loader: + specifier: ^0.2.7 + version: 0.2.7(@swc/core@1.15.33)(webpack@5.106.2) + typescript: + specifier: ^6.0.3 + version: 6.0.3 + typescript-eslint: + specifier: ^8.59.2 + version: 8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + devDependencies: + "@types/estree": + specifier: ^1.0.9 + version: 1.0.9 + "@types/klaw": + specifier: ^3.0.7 + version: 3.0.7 + "@types/node": + specifier: ^25.6.2 + version: 25.6.2 + "@types/prompts": + specifier: ^2.4.9 + version: 2.4.9 + browserslist: + specifier: ^4.28.2 + version: 4.28.2 + commander: + specifier: ^14.0.3 + version: 14.0.3 + copyfiles: + specifier: ^2.4.1 + version: 2.4.1 + cross-env: + specifier: ^10.1.0 + version: 10.1.0 + prettier: + specifier: ^3.8.3 + version: 3.8.3 + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3) + + cli/commands/build-tsc: + dependencies: + "@swc/core": + specifier: ^1.15.33 + version: 1.15.33 + "@tsparticles/depcruise-config": + specifier: workspace:^ + version: link:../../utils/depcruise-config + "@tsparticles/eslint-config": + specifier: workspace:^ + version: link:../../utils/eslint-config + "@tsparticles/prettier-config": + specifier: workspace:^ + version: link:../../utils/prettier-config + "@tsparticles/tsconfig": + specifier: workspace:^ + version: link:../../utils/tsconfig + dependency-cruiser: + specifier: ^17.4.0 + version: 17.4.0 + eslint: + specifier: ^10.3.0 + version: 10.3.0(jiti@2.7.0) + eslint-config-prettier: + specifier: ^10.1.8 + version: 10.1.8(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-jsdoc: + specifier: ^62.9.0 + version: 62.9.0(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-prettier: + specifier: ^5.5.5 + version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.3.0(jiti@2.7.0)))(eslint@10.3.0(jiti@2.7.0))(prettier@3.8.3) + eslint-plugin-tsdoc: + specifier: ^0.5.2 + version: 0.5.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + klaw: + specifier: ^4.1.0 + version: 4.1.0 + lookpath: + specifier: ^1.2.3 + version: 1.2.3 + path-scurry: + specifier: ^2.0.2 + version: 2.0.2 + prettier: + specifier: ^3.8.3 + version: 3.8.3 + prettier-plugin-multiline-arrays: + specifier: ^4.1.8 + version: 4.1.8(prettier@3.8.3) + prompts: + specifier: ^2.4.2 + version: 2.4.2 + rimraf: + specifier: ^6.1.3 + version: 6.1.3 + swc-loader: + specifier: ^0.2.7 + version: 0.2.7(@swc/core@1.15.33)(webpack@5.106.2) + typescript-eslint: + specifier: ^8.59.2 + version: 8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + devDependencies: + "@types/estree": + specifier: ^1.0.9 + version: 1.0.9 + "@types/klaw": + specifier: ^3.0.7 + version: 3.0.7 + "@types/node": + specifier: ^25.6.2 + version: 25.6.2 + "@types/prompts": + specifier: ^2.4.9 + version: 2.4.9 + browserslist: + specifier: ^4.28.2 + version: 4.28.2 + commander: + specifier: ^14.0.3 + version: 14.0.3 + copyfiles: + specifier: ^2.4.1 + version: 2.4.1 + cross-env: + specifier: ^10.1.0 + version: 10.1.0 + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3) + typescript: + specifier: ^6.0.3 + version: 6.0.3 + + cli/commands/create: + dependencies: + "@tsparticles/cli-command-create-bundle": + specifier: workspace:^ + version: link:../create-bundle + "@tsparticles/cli-command-create-effect": + specifier: workspace:^ + version: link:../create-effect + "@tsparticles/cli-command-create-interaction": + specifier: workspace:^ + version: link:../create-interaction + "@tsparticles/cli-command-create-palette": + specifier: workspace:^ + version: link:../create-palette + "@tsparticles/cli-command-create-path": + specifier: workspace:^ + version: link:../create-path + "@tsparticles/cli-command-create-plugin": + specifier: workspace:^ + version: link:../create-plugin + "@tsparticles/cli-command-create-preset": + specifier: workspace:^ + version: link:../create-preset + "@tsparticles/cli-command-create-shape": + specifier: workspace:^ + version: link:../create-shape + "@tsparticles/cli-command-create-updater": + specifier: workspace:^ + version: link:../create-updater + "@tsparticles/cli-create-utils": + specifier: workspace:^ + version: link:../create-utils + "@tsparticles/depcruise-config": + specifier: workspace:^ + version: link:../../utils/depcruise-config + "@tsparticles/eslint-config": + specifier: workspace:^ + version: link:../../utils/eslint-config + "@tsparticles/prettier-config": + specifier: workspace:^ + version: link:../../utils/prettier-config + "@tsparticles/tsconfig": + specifier: workspace:^ + version: link:../../utils/tsconfig + dependency-cruiser: + specifier: ^17.4.0 + version: 17.4.0 + eslint: + specifier: ^10.3.0 + version: 10.3.0(jiti@2.7.0) + eslint-config-prettier: + specifier: ^10.1.8 + version: 10.1.8(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-jsdoc: + specifier: ^62.9.0 + version: 62.9.0(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-prettier: + specifier: ^5.5.5 + version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.3.0(jiti@2.7.0)))(eslint@10.3.0(jiti@2.7.0))(prettier@3.8.3) + eslint-plugin-tsdoc: + specifier: ^0.5.2 + version: 0.5.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + prettier: + specifier: ^3.8.3 + version: 3.8.3 + rimraf: + specifier: ^6.1.3 + version: 6.1.3 + typescript: + specifier: ^6.0.3 + version: 6.0.3 + typescript-eslint: + specifier: ^8.59.2 + version: 8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + devDependencies: + "@types/estree": + specifier: ^1.0.9 + version: 1.0.9 + "@types/klaw": + specifier: ^3.0.7 + version: 3.0.7 + "@types/node": + specifier: ^25.6.2 + version: 25.6.2 + "@types/prompts": + specifier: ^2.4.9 + version: 2.4.9 + "@types/webpack-env": + specifier: ^1.18.8 + version: 1.18.8 + browserslist: + specifier: ^4.28.2 + version: 4.28.2 + commander: + specifier: ^14.0.3 + version: 14.0.3 + copyfiles: + specifier: ^2.4.1 + version: 2.4.1 + cross-env: + specifier: ^10.1.0 + version: 10.1.0 + terser-webpack-plugin: + specifier: ^5.5.0 + version: 5.5.0(@swc/core@1.15.33)(esbuild@0.27.7)(webpack@5.106.2) + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3) + vitest: + specifier: ^4.1.5 + version: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@25.6.2)(jsdom@29.0.2(canvas@3.2.3))(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) + webpack-bundle-analyzer: + specifier: ^5.3.0 + version: 5.3.0 + webpack-cli: + specifier: ^7.0.2 + version: 7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2) + + cli/commands/create-bundle: + dependencies: + "@tsparticles/cli-create-utils": + specifier: workspace:^ + version: link:../create-utils + "@tsparticles/depcruise-config": + specifier: workspace:^ + version: link:../../utils/depcruise-config + "@tsparticles/eslint-config": + specifier: workspace:^ + version: link:../../utils/eslint-config + "@tsparticles/prettier-config": + specifier: workspace:^ + version: link:../../utils/prettier-config + "@tsparticles/tsconfig": + specifier: workspace:^ + version: link:../../utils/tsconfig + dependency-cruiser: + specifier: ^17.4.0 + version: 17.4.0 + eslint: + specifier: ^10.3.0 + version: 10.3.0(jiti@2.7.0) + eslint-config-prettier: + specifier: ^10.1.8 + version: 10.1.8(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-jsdoc: + specifier: ^62.9.0 + version: 62.9.0(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-prettier: + specifier: ^5.5.5 + version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.3.0(jiti@2.7.0)))(eslint@10.3.0(jiti@2.7.0))(prettier@3.8.3) + eslint-plugin-tsdoc: + specifier: ^0.5.2 + version: 0.5.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + prettier: + specifier: ^3.8.3 + version: 3.8.3 + prettier-plugin-multiline-arrays: + specifier: ^4.1.8 + version: 4.1.8(prettier@3.8.3) + devDependencies: + "@types/estree": + specifier: ^1.0.9 + version: 1.0.9 + "@types/node": + specifier: ^25.6.2 + version: 25.6.2 + browserslist: + specifier: ^4.28.2 + version: 4.28.2 + commander: + specifier: ^14.0.3 + version: 14.0.3 + copyfiles: + specifier: ^2.4.1 + version: 2.4.1 + cross-env: + specifier: ^10.1.0 + version: 10.1.0 + rimraf: + specifier: ^6.1.3 + version: 6.1.3 + terser-webpack-plugin: + specifier: ^5.5.0 + version: 5.5.0(@swc/core@1.15.33)(webpack@5.106.2) + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3) + typescript: + specifier: ^6.0.3 + version: 6.0.3 + webpack-bundle-analyzer: + specifier: ^5.3.0 + version: 5.3.0 + webpack-cli: + specifier: ^7.0.2 + version: 7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2) + + cli/commands/create-effect: + dependencies: + "@tsparticles/cli-create-utils": + specifier: workspace:^ + version: link:../create-utils + "@tsparticles/depcruise-config": + specifier: workspace:^ + version: link:../../utils/depcruise-config + "@tsparticles/eslint-config": + specifier: workspace:^ + version: link:../../utils/eslint-config + "@tsparticles/prettier-config": + specifier: workspace:^ + version: link:../../utils/prettier-config + "@tsparticles/tsconfig": + specifier: workspace:^ + version: link:../../utils/tsconfig + dependency-cruiser: + specifier: ^17.4.0 + version: 17.4.0 + eslint: + specifier: ^10.3.0 + version: 10.3.0(jiti@2.7.0) + eslint-config-prettier: + specifier: ^10.1.8 + version: 10.1.8(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-jsdoc: + specifier: ^62.9.0 + version: 62.9.0(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-prettier: + specifier: ^5.5.5 + version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.3.0(jiti@2.7.0)))(eslint@10.3.0(jiti@2.7.0))(prettier@3.8.3) + eslint-plugin-tsdoc: + specifier: ^0.5.2 + version: 0.5.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + prettier: + specifier: ^3.8.3 + version: 3.8.3 + prettier-plugin-multiline-arrays: + specifier: ^4.1.8 + version: 4.1.8(prettier@3.8.3) + devDependencies: + "@types/estree": + specifier: ^1.0.9 + version: 1.0.9 + "@types/node": + specifier: ^25.6.2 + version: 25.6.2 + browserslist: + specifier: ^4.28.2 + version: 4.28.2 + commander: + specifier: ^14.0.3 + version: 14.0.3 + copyfiles: + specifier: ^2.4.1 + version: 2.4.1 + cross-env: + specifier: ^10.1.0 + version: 10.1.0 + rimraf: + specifier: ^6.1.3 + version: 6.1.3 + terser-webpack-plugin: + specifier: ^5.5.0 + version: 5.5.0(@swc/core@1.15.33)(webpack@5.106.2) + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3) + typescript: + specifier: ^6.0.3 + version: 6.0.3 + webpack-bundle-analyzer: + specifier: ^5.3.0 + version: 5.3.0 + webpack-cli: + specifier: ^7.0.2 + version: 7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2) + + cli/commands/create-interaction: + dependencies: + "@tsparticles/cli-create-utils": + specifier: workspace:^ + version: link:../create-utils + "@tsparticles/depcruise-config": + specifier: workspace:^ + version: link:../../utils/depcruise-config + "@tsparticles/eslint-config": + specifier: workspace:^ + version: link:../../utils/eslint-config + "@tsparticles/prettier-config": + specifier: workspace:^ + version: link:../../utils/prettier-config + "@tsparticles/tsconfig": + specifier: workspace:^ + version: link:../../utils/tsconfig + dependency-cruiser: + specifier: ^17.4.0 + version: 17.4.0 + eslint: + specifier: ^10.3.0 + version: 10.3.0(jiti@2.7.0) + eslint-config-prettier: + specifier: ^10.1.8 + version: 10.1.8(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-jsdoc: + specifier: ^62.9.0 + version: 62.9.0(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-prettier: + specifier: ^5.5.5 + version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.3.0(jiti@2.7.0)))(eslint@10.3.0(jiti@2.7.0))(prettier@3.8.3) + eslint-plugin-tsdoc: + specifier: ^0.5.2 + version: 0.5.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + prettier: + specifier: ^3.8.3 + version: 3.8.3 + prettier-plugin-multiline-arrays: + specifier: ^4.1.8 + version: 4.1.8(prettier@3.8.3) + devDependencies: + "@types/estree": + specifier: ^1.0.9 + version: 1.0.9 + "@types/node": + specifier: ^25.6.2 + version: 25.6.2 + browserslist: + specifier: ^4.28.2 + version: 4.28.2 + commander: + specifier: ^14.0.3 + version: 14.0.3 + copyfiles: + specifier: ^2.4.1 + version: 2.4.1 + cross-env: + specifier: ^10.1.0 + version: 10.1.0 + rimraf: + specifier: ^6.1.3 + version: 6.1.3 + terser-webpack-plugin: + specifier: ^5.5.0 + version: 5.5.0(@swc/core@1.15.33)(webpack@5.106.2) + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3) + typescript: + specifier: ^6.0.3 + version: 6.0.3 + webpack-bundle-analyzer: + specifier: ^5.3.0 + version: 5.3.0 + webpack-cli: + specifier: ^7.0.2 + version: 7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2) + + cli/commands/create-palette: + dependencies: + "@tsparticles/cli-create-utils": + specifier: workspace:^ + version: link:../create-utils + "@tsparticles/depcruise-config": + specifier: workspace:^ + version: link:../../utils/depcruise-config + "@tsparticles/eslint-config": + specifier: workspace:^ + version: link:../../utils/eslint-config + "@tsparticles/prettier-config": + specifier: workspace:^ + version: link:../../utils/prettier-config + "@tsparticles/tsconfig": + specifier: workspace:^ + version: link:../../utils/tsconfig + dependency-cruiser: + specifier: ^17.4.0 + version: 17.4.0 + eslint: + specifier: ^10.3.0 + version: 10.3.0(jiti@2.7.0) + eslint-config-prettier: + specifier: ^10.1.8 + version: 10.1.8(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-jsdoc: + specifier: ^62.9.0 + version: 62.9.0(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-prettier: + specifier: ^5.5.5 + version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.3.0(jiti@2.7.0)))(eslint@10.3.0(jiti@2.7.0))(prettier@3.8.3) + eslint-plugin-tsdoc: + specifier: ^0.5.2 + version: 0.5.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + prettier: + specifier: ^3.8.3 + version: 3.8.3 + prettier-plugin-multiline-arrays: + specifier: ^4.1.8 + version: 4.1.8(prettier@3.8.3) + devDependencies: + "@types/estree": + specifier: ^1.0.9 + version: 1.0.9 + "@types/node": + specifier: ^25.6.2 + version: 25.6.2 + browserslist: + specifier: ^4.28.2 + version: 4.28.2 + commander: + specifier: ^14.0.3 + version: 14.0.3 + copyfiles: + specifier: ^2.4.1 + version: 2.4.1 + cross-env: + specifier: ^10.1.0 + version: 10.1.0 + rimraf: + specifier: ^6.1.3 + version: 6.1.3 + terser-webpack-plugin: + specifier: ^5.5.0 + version: 5.5.0(@swc/core@1.15.33)(webpack@5.106.2) + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3) + typescript: + specifier: ^6.0.3 + version: 6.0.3 + webpack-bundle-analyzer: + specifier: ^5.3.0 + version: 5.3.0 + webpack-cli: + specifier: ^7.0.2 + version: 7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2) + + cli/commands/create-path: + dependencies: + "@tsparticles/cli-create-utils": + specifier: workspace:^ + version: link:../create-utils + "@tsparticles/depcruise-config": + specifier: workspace:^ + version: link:../../utils/depcruise-config + "@tsparticles/eslint-config": + specifier: workspace:^ + version: link:../../utils/eslint-config + "@tsparticles/prettier-config": + specifier: workspace:^ + version: link:../../utils/prettier-config + "@tsparticles/tsconfig": + specifier: workspace:^ + version: link:../../utils/tsconfig + dependency-cruiser: + specifier: ^17.4.0 + version: 17.4.0 + eslint: + specifier: ^10.3.0 + version: 10.3.0(jiti@2.7.0) + eslint-config-prettier: + specifier: ^10.1.8 + version: 10.1.8(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-jsdoc: + specifier: ^62.9.0 + version: 62.9.0(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-prettier: + specifier: ^5.5.5 + version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.3.0(jiti@2.7.0)))(eslint@10.3.0(jiti@2.7.0))(prettier@3.8.3) + eslint-plugin-tsdoc: + specifier: ^0.5.2 + version: 0.5.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + prettier: + specifier: ^3.8.3 + version: 3.8.3 + prettier-plugin-multiline-arrays: + specifier: ^4.1.8 + version: 4.1.8(prettier@3.8.3) + devDependencies: + "@types/estree": + specifier: ^1.0.9 + version: 1.0.9 + "@types/node": + specifier: ^25.6.2 + version: 25.6.2 + browserslist: + specifier: ^4.28.2 + version: 4.28.2 + commander: + specifier: ^14.0.3 + version: 14.0.3 + copyfiles: + specifier: ^2.4.1 + version: 2.4.1 + cross-env: + specifier: ^10.1.0 + version: 10.1.0 + rimraf: + specifier: ^6.1.3 + version: 6.1.3 + terser-webpack-plugin: + specifier: ^5.5.0 + version: 5.5.0(@swc/core@1.15.33)(webpack@5.106.2) + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3) + typescript: + specifier: ^6.0.3 + version: 6.0.3 + webpack-bundle-analyzer: + specifier: ^5.3.0 + version: 5.3.0 + webpack-cli: + specifier: ^7.0.2 + version: 7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2) + + cli/commands/create-plugin: + dependencies: + "@tsparticles/cli-create-utils": + specifier: workspace:^ + version: link:../create-utils + "@tsparticles/depcruise-config": + specifier: workspace:^ + version: link:../../utils/depcruise-config + "@tsparticles/eslint-config": + specifier: workspace:^ + version: link:../../utils/eslint-config + "@tsparticles/prettier-config": + specifier: workspace:^ + version: link:../../utils/prettier-config + "@tsparticles/tsconfig": + specifier: workspace:^ + version: link:../../utils/tsconfig + dependency-cruiser: + specifier: ^17.4.0 + version: 17.4.0 + eslint: + specifier: ^10.3.0 + version: 10.3.0(jiti@2.7.0) + eslint-config-prettier: + specifier: ^10.1.8 + version: 10.1.8(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-jsdoc: + specifier: ^62.9.0 + version: 62.9.0(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-prettier: + specifier: ^5.5.5 + version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.3.0(jiti@2.7.0)))(eslint@10.3.0(jiti@2.7.0))(prettier@3.8.3) + eslint-plugin-tsdoc: + specifier: ^0.5.2 + version: 0.5.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + prettier: + specifier: ^3.8.3 + version: 3.8.3 + prettier-plugin-multiline-arrays: + specifier: ^4.1.8 + version: 4.1.8(prettier@3.8.3) + devDependencies: + "@types/estree": + specifier: ^1.0.9 + version: 1.0.9 + "@types/node": + specifier: ^25.6.2 + version: 25.6.2 + browserslist: + specifier: ^4.28.2 + version: 4.28.2 + commander: + specifier: ^14.0.3 + version: 14.0.3 + copyfiles: + specifier: ^2.4.1 + version: 2.4.1 + cross-env: + specifier: ^10.1.0 + version: 10.1.0 + rimraf: + specifier: ^6.1.3 + version: 6.1.3 + terser-webpack-plugin: + specifier: ^5.5.0 + version: 5.5.0(@swc/core@1.15.33)(webpack@5.106.2) + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3) + typescript: + specifier: ^6.0.3 + version: 6.0.3 + webpack-bundle-analyzer: + specifier: ^5.3.0 + version: 5.3.0 + webpack-cli: + specifier: ^7.0.2 + version: 7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2) + + cli/commands/create-preset: + dependencies: + "@tsparticles/cli-create-utils": + specifier: workspace:^ + version: link:../create-utils + "@tsparticles/depcruise-config": + specifier: workspace:^ + version: link:../../utils/depcruise-config + "@tsparticles/eslint-config": + specifier: workspace:^ + version: link:../../utils/eslint-config + "@tsparticles/prettier-config": + specifier: workspace:^ + version: link:../../utils/prettier-config + "@tsparticles/tsconfig": + specifier: workspace:^ + version: link:../../utils/tsconfig + dependency-cruiser: + specifier: ^17.4.0 + version: 17.4.0 + eslint: + specifier: ^10.3.0 + version: 10.3.0(jiti@2.7.0) + eslint-config-prettier: + specifier: ^10.1.8 + version: 10.1.8(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-jsdoc: + specifier: ^62.9.0 + version: 62.9.0(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-prettier: + specifier: ^5.5.5 + version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.3.0(jiti@2.7.0)))(eslint@10.3.0(jiti@2.7.0))(prettier@3.8.3) + eslint-plugin-tsdoc: + specifier: ^0.5.2 + version: 0.5.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + prettier: + specifier: ^3.8.3 + version: 3.8.3 + prettier-plugin-multiline-arrays: + specifier: ^4.1.8 + version: 4.1.8(prettier@3.8.3) + devDependencies: + "@types/estree": + specifier: ^1.0.9 + version: 1.0.9 + "@types/node": + specifier: ^25.6.2 + version: 25.6.2 + browserslist: + specifier: ^4.28.2 + version: 4.28.2 + commander: + specifier: ^14.0.3 + version: 14.0.3 + copyfiles: + specifier: ^2.4.1 + version: 2.4.1 + cross-env: + specifier: ^10.1.0 + version: 10.1.0 + rimraf: + specifier: ^6.1.3 + version: 6.1.3 + terser-webpack-plugin: + specifier: ^5.5.0 + version: 5.5.0(@swc/core@1.15.33)(webpack@5.106.2) + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3) + typescript: + specifier: ^6.0.3 + version: 6.0.3 + webpack-bundle-analyzer: + specifier: ^5.3.0 + version: 5.3.0 + webpack-cli: + specifier: ^7.0.2 + version: 7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2) + + cli/commands/create-shape: + dependencies: + "@tsparticles/cli-create-utils": + specifier: workspace:^ + version: link:../create-utils + "@tsparticles/depcruise-config": + specifier: workspace:^ + version: link:../../utils/depcruise-config + "@tsparticles/eslint-config": + specifier: workspace:^ + version: link:../../utils/eslint-config + "@tsparticles/prettier-config": + specifier: workspace:^ + version: link:../../utils/prettier-config + "@tsparticles/tsconfig": + specifier: workspace:^ + version: link:../../utils/tsconfig + dependency-cruiser: + specifier: ^17.4.0 + version: 17.4.0 + eslint: + specifier: ^10.3.0 + version: 10.3.0(jiti@2.7.0) + eslint-config-prettier: + specifier: ^10.1.8 + version: 10.1.8(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-jsdoc: + specifier: ^62.9.0 + version: 62.9.0(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-prettier: + specifier: ^5.5.5 + version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.3.0(jiti@2.7.0)))(eslint@10.3.0(jiti@2.7.0))(prettier@3.8.3) + eslint-plugin-tsdoc: + specifier: ^0.5.2 + version: 0.5.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + prettier: + specifier: ^3.8.3 + version: 3.8.3 + prettier-plugin-multiline-arrays: + specifier: ^4.1.8 + version: 4.1.8(prettier@3.8.3) + devDependencies: + "@types/estree": + specifier: ^1.0.9 + version: 1.0.9 + "@types/node": + specifier: ^25.6.2 + version: 25.6.2 + browserslist: + specifier: ^4.28.2 + version: 4.28.2 + commander: + specifier: ^14.0.3 + version: 14.0.3 + copyfiles: + specifier: ^2.4.1 + version: 2.4.1 + cross-env: + specifier: ^10.1.0 + version: 10.1.0 + rimraf: + specifier: ^6.1.3 + version: 6.1.3 + terser-webpack-plugin: + specifier: ^5.5.0 + version: 5.5.0(@swc/core@1.15.33)(webpack@5.106.2) + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3) + typescript: + specifier: ^6.0.3 + version: 6.0.3 + webpack-bundle-analyzer: + specifier: ^5.3.0 + version: 5.3.0 + webpack-cli: + specifier: ^7.0.2 + version: 7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2) + + cli/commands/create-updater: + dependencies: + "@tsparticles/cli-create-utils": + specifier: workspace:^ + version: link:../create-utils + "@tsparticles/depcruise-config": + specifier: workspace:^ + version: link:../../utils/depcruise-config + "@tsparticles/eslint-config": + specifier: workspace:^ + version: link:../../utils/eslint-config + "@tsparticles/prettier-config": + specifier: workspace:^ + version: link:../../utils/prettier-config + "@tsparticles/tsconfig": + specifier: workspace:^ + version: link:../../utils/tsconfig + dependency-cruiser: + specifier: ^17.4.0 + version: 17.4.0 + eslint: + specifier: ^10.3.0 + version: 10.3.0(jiti@2.7.0) + eslint-config-prettier: + specifier: ^10.1.8 + version: 10.1.8(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-jsdoc: + specifier: ^62.9.0 + version: 62.9.0(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-prettier: + specifier: ^5.5.5 + version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.3.0(jiti@2.7.0)))(eslint@10.3.0(jiti@2.7.0))(prettier@3.8.3) + eslint-plugin-tsdoc: + specifier: ^0.5.2 + version: 0.5.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + prettier: + specifier: ^3.8.3 + version: 3.8.3 + prettier-plugin-multiline-arrays: + specifier: ^4.1.8 + version: 4.1.8(prettier@3.8.3) + devDependencies: + "@types/estree": + specifier: ^1.0.9 + version: 1.0.9 + "@types/node": + specifier: ^25.6.2 + version: 25.6.2 + browserslist: + specifier: ^4.28.2 + version: 4.28.2 + commander: + specifier: ^14.0.3 + version: 14.0.3 + copyfiles: + specifier: ^2.4.1 + version: 2.4.1 + cross-env: + specifier: ^10.1.0 + version: 10.1.0 + rimraf: + specifier: ^6.1.3 + version: 6.1.3 + terser-webpack-plugin: + specifier: ^5.5.0 + version: 5.5.0(@swc/core@1.15.33)(webpack@5.106.2) + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3) + typescript: + specifier: ^6.0.3 + version: 6.0.3 + webpack-bundle-analyzer: + specifier: ^5.3.0 + version: 5.3.0 + webpack-cli: + specifier: ^7.0.2 + version: 7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2) + + cli/commands/create-utils: + dependencies: + "@swc/core": + specifier: ^1.15.33 + version: 1.15.33 + "@tsparticles/depcruise-config": + specifier: workspace:^ + version: link:../../utils/depcruise-config + "@tsparticles/engine": + specifier: workspace:^ + version: link:../../../engine/dist + "@tsparticles/eslint-config": + specifier: workspace:^ + version: link:../../utils/eslint-config + "@tsparticles/prettier-config": + specifier: workspace:^ + version: link:../../utils/prettier-config + "@tsparticles/tsconfig": + specifier: workspace:^ + version: link:../../utils/tsconfig + "@tsparticles/webpack-plugin": + specifier: workspace:^ + version: link:../../utils/webpack-config + commander: + specifier: ^14.0.3 + version: 14.0.3 + dependency-cruiser: + specifier: ^17.4.0 + version: 17.4.0 + eslint: + specifier: ^10.3.0 + version: 10.3.0(jiti@2.7.0) + eslint-config-prettier: + specifier: ^10.1.8 + version: 10.1.8(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-jsdoc: + specifier: ^62.9.0 + version: 62.9.0(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-prettier: + specifier: ^5.5.5 + version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.3.0(jiti@2.7.0)))(eslint@10.3.0(jiti@2.7.0))(prettier@3.8.3) + eslint-plugin-tsdoc: + specifier: ^0.5.2 + version: 0.5.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + klaw: + specifier: ^4.1.0 + version: 4.1.0 + lookpath: + specifier: ^1.2.3 + version: 1.2.3 + path-scurry: + specifier: ^2.0.2 + version: 2.0.2 + prettier: + specifier: ^3.8.3 + version: 3.8.3 + prettier-plugin-multiline-arrays: + specifier: ^4.1.8 + version: 4.1.8(prettier@3.8.3) + prompts: + specifier: ^2.4.2 + version: 2.4.2 + rimraf: + specifier: ^6.1.3 + version: 6.1.3 + swc-loader: + specifier: ^0.2.7 + version: 0.2.7(@swc/core@1.15.33)(webpack@5.106.2) + typescript: + specifier: ^6.0.3 + version: 6.0.3 + typescript-eslint: + specifier: ^8.59.2 + version: 8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + webpack: + specifier: ^5.106.2 + version: 5.106.2(@swc/core@1.15.33)(esbuild@0.27.7)(webpack-cli@7.0.2) + devDependencies: + "@types/estree": + specifier: ^1.0.9 + version: 1.0.9 + "@types/klaw": + specifier: ^3.0.7 + version: 3.0.7 + "@types/node": + specifier: ^25.6.2 + version: 25.6.2 + "@types/prompts": + specifier: ^2.4.9 + version: 2.4.9 + "@types/webpack-env": + specifier: ^1.18.8 + version: 1.18.8 + browserslist: + specifier: ^4.28.2 + version: 4.28.2 + copyfiles: + specifier: ^2.4.1 + version: 2.4.1 + cross-env: + specifier: ^10.1.0 + version: 10.1.0 + terser-webpack-plugin: + specifier: ^5.5.0 + version: 5.5.0(@swc/core@1.15.33)(esbuild@0.27.7)(webpack@5.106.2) + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3) + vitest: + specifier: ^4.1.5 + version: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@25.6.2)(jsdom@29.0.2(canvas@3.2.3))(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) + webpack-bundle-analyzer: + specifier: ^5.3.0 + version: 5.3.0 + webpack-cli: + specifier: ^7.0.2 + version: 7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2) + + cli/packages/cli-build: + dependencies: + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../commands/build + commander: + specifier: ^14.0.3 + version: 14.0.3 + devDependencies: + "@tsparticles/prettier-config": + specifier: workspace:^ + version: link:../../utils/prettier-config + + cli/packages/cli-create: + dependencies: + "@tsparticles/cli-command-create": + specifier: workspace:^ + version: link:../../commands/create + commander: + specifier: ^14.0.3 + version: 14.0.3 + devDependencies: + "@tsparticles/prettier-config": + specifier: workspace:^ + version: link:../../utils/prettier-config + + cli/packages/nx-plugin: + dependencies: + "@nx/devkit": + specifier: ^22.7.1 + version: 22.7.1(nx@22.7.1(@swc-node/register@1.11.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@swc/core@1.15.33)(@swc/types@0.1.26)(typescript@6.0.3))(@swc/core@1.15.33)) + "@tsparticles/eslint-config": + specifier: workspace:^ + version: link:../../utils/eslint-config + "@tsparticles/prettier-config": + specifier: workspace:^ + version: link:../../utils/prettier-config + "@tsparticles/tsconfig": + specifier: workspace:^ + version: link:../../utils/tsconfig + eslint: + specifier: ^10.3.0 + version: 10.3.0(jiti@2.7.0) + eslint-config-prettier: + specifier: ^10.1.8 + version: 10.1.8(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-jsdoc: + specifier: ^62.9.0 + version: 62.9.0(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-prettier: + specifier: ^5.5.5 + version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.3.0(jiti@2.7.0)))(eslint@10.3.0(jiti@2.7.0))(prettier@3.8.3) + eslint-plugin-tsdoc: + specifier: ^0.5.2 + version: 0.5.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + nx: + specifier: ^22.7.1 + version: 22.7.1(@swc-node/register@1.11.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@swc/core@1.15.33)(@swc/types@0.1.26)(typescript@6.0.3))(@swc/core@1.15.33) + prettier: + specifier: ^3.8.3 + version: 3.8.3 + prettier-plugin-multiline-arrays: + specifier: ^4.1.8 + version: 4.1.8(prettier@3.8.3) + rimraf: + specifier: ^6.1.3 + version: 6.1.3 + typescript: + specifier: ^6.0.3 + version: 6.0.3 + typescript-eslint: + specifier: ^8.59.2 + version: 8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + vitest: + specifier: ^4.1.5 + version: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@25.6.2)(jsdom@29.0.2(canvas@3.2.3))(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) + devDependencies: + "@types/node": + specifier: ^25.6.2 + version: 25.6.2 + + cli/utils/browserslist-config: + devDependencies: + browserslist: + specifier: ^4.28.2 + version: 4.28.2 + cpx2: + specifier: ^8.0.2 + version: 8.0.2 + + cli/utils/depcruise-config: + devDependencies: + "@stylistic/eslint-plugin": + specifier: ^5.10.0 + version: 5.10.0(eslint@10.3.0(jiti@2.7.0)) + "@tsparticles/eslint-config": + specifier: workspace:^ + version: link:../eslint-config + "@tsparticles/prettier-config": + specifier: workspace:^ + version: link:../prettier-config + "@types/node": + specifier: ^25.6.2 + version: 25.6.2 + dependency-cruiser: + specifier: ^17.4.0 + version: 17.4.0 + eslint: + specifier: ^10.3.0 + version: 10.3.0(jiti@2.7.0) + eslint-config-prettier: + specifier: ^10.1.8 + version: 10.1.8(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-jsdoc: + specifier: ^62.9.0 + version: 62.9.0(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-tsdoc: + specifier: ^0.5.2 + version: 0.5.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + prettier: + specifier: ^3.8.3 + version: 3.8.3 + prettier-plugin-multiline-arrays: + specifier: ^4.1.8 + version: 4.1.8(prettier@3.8.3) + tsup: + specifier: ^8.5.1 + version: 8.5.1(patch_hash=ce9dbc714c187cea78868f1e68c1a0e5097ddbceb7e976a564d94f2291b5bcb9)(@microsoft/api-extractor@7.58.2(@types/node@25.6.2))(@swc/core@1.15.33)(jiti@2.7.0)(postcss@8.5.14)(typescript@6.0.3)(yaml@2.8.3) + typescript: + specifier: ^6.0.3 + version: 6.0.3 + typescript-eslint: + specifier: ^8.59.2 + version: 8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + + cli/utils/eslint-config: + dependencies: + "@eslint/js": + specifier: ^10.0.1 + version: 10.0.1(eslint@10.3.0(jiti@2.7.0)) + "@stylistic/eslint-plugin": + specifier: ^5.10.0 + version: 5.10.0(eslint@10.3.0(jiti@2.7.0)) + "@tsparticles/prettier-config": + specifier: workspace:^ + version: link:../prettier-config + eslint-config-prettier: + specifier: ^10.1.8 + version: 10.1.8(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-jsdoc: + specifier: ^62.9.0 + version: 62.9.0(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-prettier: + specifier: ^5.5.5 + version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.3.0(jiti@2.7.0)))(eslint@10.3.0(jiti@2.7.0))(prettier@3.8.3) + eslint-plugin-tsdoc: + specifier: ^0.5.2 + version: 0.5.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + jiti: + specifier: ^2.7.0 + version: 2.7.0 + prettier: + specifier: ^3.8.3 + version: 3.8.3 + prettier-plugin-multiline-arrays: + specifier: ^4.1.8 + version: 4.1.8(prettier@3.8.3) + typescript: + specifier: ^6.0.3 + version: 6.0.3 + typescript-eslint: + specifier: ^8.59.2 + version: 8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + devDependencies: + "@types/node": + specifier: ^25.6.2 + version: 25.6.2 + eslint: + specifier: ^10.3.0 + version: 10.3.0(jiti@2.7.0) + + cli/utils/prettier-config: + dependencies: + prettier-plugin-multiline-arrays: + specifier: ^4.1.8 + version: 4.1.8(prettier@3.8.3) + devDependencies: + cpx2: + specifier: ^8.0.2 + version: 8.0.2 + prettier: + specifier: ^3.8.3 + version: 3.8.3 + + cli/utils/rollup-plugin: + dependencies: + "@rollup/plugin-node-resolve": + specifier: ^16.0.3 + version: 16.0.3(rollup@4.60.1) + "@rollup/plugin-replace": + specifier: ^6.0.3 + version: 6.0.3(rollup@4.60.1) + "@rollup/plugin-terser": + specifier: ^1.0.0 + version: 1.0.0(rollup@4.60.1) + "@stylistic/eslint-plugin": + specifier: ^5.10.0 + version: 5.10.0(eslint@10.3.0(jiti@2.7.0)) + "@tsparticles/eslint-config": + specifier: workspace:^ + version: link:../eslint-config + "@tsparticles/prettier-config": + specifier: workspace:^ + version: link:../prettier-config + eslint: + specifier: ^10.3.0 + version: 10.3.0(jiti@2.7.0) + eslint-config-prettier: + specifier: ^10.1.8 + version: 10.1.8(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-jsdoc: + specifier: ^62.9.0 + version: 62.9.0(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-tsdoc: + specifier: ^0.5.2 + version: 0.5.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + prettier: + specifier: ^3.8.3 + version: 3.8.3 + prettier-plugin-multiline-arrays: + specifier: ^4.1.8 + version: 4.1.8(prettier@3.8.3) + rollup: + specifier: ^4 + version: 4.60.1 + rollup-plugin-visualizer: + specifier: ^7.0.1 + version: 7.0.1(rolldown@1.0.0-rc.18)(rollup@4.60.1) + devDependencies: + "@rollup/plugin-typescript": + specifier: ^12.3.0 + version: 12.3.0(rollup@4.60.1)(tslib@2.8.1)(typescript@6.0.3) + "@types/node": + specifier: ^25.6.2 + version: 25.6.2 + rimraf: + specifier: ^6.1.3 + version: 6.1.3 + typescript: + specifier: ^6.0.3 + version: 6.0.3 + typescript-eslint: + specifier: ^8.59.2 + version: 8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + + cli/utils/tsconfig: + devDependencies: + cpx2: + specifier: ^8.0.2 + version: 8.0.2 + typescript: + specifier: ^6.0.3 + version: 6.0.3 + + cli/utils/webpack-config: + dependencies: + "@stylistic/eslint-plugin": + specifier: ^5.10.0 + version: 5.10.0(eslint@10.3.0(jiti@2.7.0)) + "@swc/core": + specifier: ^1.15.33 + version: 1.15.33 + "@tsparticles/eslint-config": + specifier: workspace:^ + version: link:../eslint-config + "@tsparticles/prettier-config": + specifier: workspace:^ + version: link:../prettier-config + browserslist: + specifier: ^4.28.2 + version: 4.28.2 + eslint: + specifier: ^10.3.0 + version: 10.3.0(jiti@2.7.0) + eslint-config-prettier: + specifier: ^10.1.8 + version: 10.1.8(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-jsdoc: + specifier: ^62.9.0 + version: 62.9.0(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-tsdoc: + specifier: ^0.5.2 + version: 0.5.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + prettier: + specifier: ^3.8.3 + version: 3.8.3 + prettier-plugin-multiline-arrays: + specifier: ^4.1.8 + version: 4.1.8(prettier@3.8.3) + swc-loader: + specifier: ^0.2.7 + version: 0.2.7(@swc/core@1.15.33)(webpack@5.106.2) + terser-webpack-plugin: + specifier: ^5.5.0 + version: 5.5.0(@swc/core@1.15.33)(webpack@5.106.2) + typescript: + specifier: ^6.0.3 + version: 6.0.3 + typescript-eslint: + specifier: ^8.59.2 + version: 8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + webpack-bundle-analyzer: + specifier: ^5.3.0 + version: 5.3.0 + webpack-cli: + specifier: ^7.0.2 + version: 7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2) + devDependencies: + "@types/node": + specifier: ^25.6.2 + version: 25.6.2 + "@types/webpack-bundle-analyzer": + specifier: ^4.7.0 + version: 4.7.0(@swc/core@1.15.33)(webpack-cli@7.0.2) + "@types/webpack-env": + specifier: ^1.18.8 + version: 1.18.8 + rimraf: + specifier: ^6.1.3 + version: 6.1.3 + webpack: + specifier: ^5.106.2 + version: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) + + demo/angular: + dependencies: + "@angular/animations": + specifier: ~21.2.8 + version: 21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)) + "@angular/common": + specifier: ~21.2.8 + version: 21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + "@angular/compiler": + specifier: ~21.2.8 + version: 21.2.8 + "@angular/core": + specifier: ~21.2.8 + version: 21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1) + "@angular/forms": + specifier: ~21.2.8 + version: 21.2.8(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + "@angular/platform-browser": + specifier: ~21.2.8 + version: 21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)) + "@angular/platform-browser-dynamic": + specifier: ~21.2.8 + version: 21.2.8(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))) + "@angular/router": + specifier: ~21.2.8 + version: 21.2.8(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + "@tsparticles/angular": + specifier: workspace:^ + version: link:../../wrappers/angular/dist/ng-particles + "@tsparticles/basic": + specifier: workspace:^ + version: link:../../bundles/basic/dist + "@tsparticles/canvas-utils": + specifier: workspace:^ + version: link:../../utils/canvasUtils/dist + "@tsparticles/confetti": + specifier: workspace:^ + version: link:../../bundles/confetti/dist + "@tsparticles/configs": + specifier: workspace:^ + version: link:../../utils/configs/dist + "@tsparticles/effect-trail": + specifier: workspace:^ + version: link:../../effects/trail/dist + "@tsparticles/engine": + specifier: workspace:^ + version: link:../../engine/dist + "@tsparticles/fireworks": + specifier: workspace:^ + version: link:../../bundles/fireworks/dist + "@tsparticles/interaction-external-attract": + specifier: workspace:^ + version: link:../../interactions/external/attract/dist + "@tsparticles/interaction-external-bounce": + specifier: workspace:^ + version: link:../../interactions/external/bounce/dist + "@tsparticles/interaction-external-bubble": + specifier: workspace:^ + version: link:../../interactions/external/bubble/dist + "@tsparticles/interaction-external-connect": + specifier: workspace:^ + version: link:../../interactions/external/connect/dist + "@tsparticles/interaction-external-destroy": + specifier: workspace:^ + version: link:../../interactions/external/destroy/dist + "@tsparticles/interaction-external-drag": + specifier: workspace:^ + version: link:../../interactions/external/drag/dist + "@tsparticles/interaction-external-grab": + specifier: workspace:^ + version: link:../../interactions/external/grab/dist + "@tsparticles/interaction-external-parallax": + specifier: workspace:^ + version: link:../../interactions/external/parallax/dist + "@tsparticles/interaction-external-pause": + specifier: workspace:^ + version: link:../../interactions/external/pause/dist + "@tsparticles/interaction-external-push": + specifier: workspace:^ + version: link:../../interactions/external/push/dist + "@tsparticles/interaction-external-remove": + specifier: workspace:^ + version: link:../../interactions/external/remove/dist + "@tsparticles/interaction-external-repulse": + specifier: workspace:^ + version: link:../../interactions/external/repulse/dist + "@tsparticles/interaction-external-slow": + specifier: workspace:^ + version: link:../../interactions/external/slow/dist + "@tsparticles/interaction-external-trail": + specifier: workspace:^ + version: link:../../interactions/external/trail/dist + "@tsparticles/interaction-particles-attract": + specifier: workspace:^ + version: link:../../interactions/particles/attract/dist + "@tsparticles/interaction-particles-collisions": + specifier: workspace:^ + version: link:../../interactions/particles/collisions/dist + "@tsparticles/interaction-particles-links": + specifier: workspace:^ + version: link:../../interactions/particles/links/dist + "@tsparticles/path-utils": + specifier: workspace:^ + version: link:../../utils/pathUtils/dist + "@tsparticles/pjs": + specifier: workspace:^ + version: link:../../bundles/pjs/dist + "@tsparticles/plugin-absorbers": + specifier: workspace:^ + version: link:../../plugins/absorbers/dist + "@tsparticles/plugin-blend": + specifier: workspace:^ + version: link:../../plugins/blend/dist + "@tsparticles/plugin-easing-quad": + specifier: workspace:^ + version: link:../../plugins/easings/quad/dist + "@tsparticles/plugin-emitters": + specifier: workspace:^ + version: link:../../plugins/emitters/dist + "@tsparticles/plugin-emitters-shape-circle": + specifier: workspace:^ + version: link:../../plugins/emittersShapes/circle/dist + "@tsparticles/plugin-emitters-shape-square": + specifier: workspace:^ + version: link:../../plugins/emittersShapes/square/dist + "@tsparticles/plugin-hex-color": + specifier: workspace:^ + version: link:../../plugins/colors/hex/dist + "@tsparticles/plugin-hsl-color": + specifier: workspace:^ + version: link:../../plugins/colors/hsl/dist + "@tsparticles/plugin-interactivity": + specifier: workspace:^ + version: link:../../plugins/interactivity/dist + "@tsparticles/plugin-motion": + specifier: workspace:^ + version: link:../../plugins/motion/dist + "@tsparticles/plugin-move": + specifier: workspace:^ + version: link:../../plugins/move/dist + "@tsparticles/plugin-polygon-mask": + specifier: workspace:^ + version: link:../../plugins/polygonMask/dist + "@tsparticles/plugin-rgb-color": + specifier: workspace:^ + version: link:../../plugins/colors/rgb/dist + "@tsparticles/plugin-sounds": + specifier: workspace:^ + version: link:../../plugins/sounds/dist + "@tsparticles/shape-cards": + specifier: workspace:^ + version: link:../../shapes/cards/dist + "@tsparticles/shape-circle": + specifier: workspace:^ + version: link:../../shapes/circle/dist + "@tsparticles/shape-emoji": + specifier: workspace:^ + version: link:../../shapes/emoji/dist + "@tsparticles/shape-heart": + specifier: workspace:^ + version: link:../../shapes/heart/dist + "@tsparticles/shape-image": + specifier: workspace:^ + version: link:../../shapes/image/dist + "@tsparticles/shape-line": + specifier: workspace:^ + version: link:../../shapes/line/dist + "@tsparticles/shape-polygon": + specifier: workspace:^ + version: link:../../shapes/polygon/dist + "@tsparticles/shape-square": + specifier: workspace:^ + version: link:../../shapes/square/dist + "@tsparticles/shape-star": + specifier: workspace:^ + version: link:../../shapes/star/dist + "@tsparticles/shape-text": + specifier: workspace:^ + version: link:../../shapes/text/dist + "@tsparticles/slim": + specifier: workspace:^ + version: link:../../bundles/slim/dist + "@tsparticles/updater-destroy": specifier: workspace:^ version: link:../../updaters/destroy/dist "@tsparticles/updater-life": @@ -905,7 +3283,7 @@ importers: devDependencies: "@angular-devkit/build-angular": specifier: ~21.2.7 - version: 21.2.7(89e501c24d06f141aeb1b036fb75d7da) + version: 21.2.7(eb2fcdc8f74b5622af37fecb20cf3ebf) "@angular/cli": specifier: ~21.2.7 version: 21.2.7(@types/node@25.6.0)(chokidar@5.0.0) @@ -950,39 +3328,487 @@ importers: version: link:../../engine/dist astro: specifier: ^6.1.6 - version: 6.1.6(@types/node@25.6.0)(db0@0.3.4)(ioredis@5.10.1)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(rollup@4.60.1)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(typescript@5.9.3)(yaml@2.8.3) + version: 6.1.6(@types/node@25.6.2)(db0@0.3.4)(ioredis@5.10.1)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(rollup@4.60.3)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(typescript@5.9.3)(yaml@2.8.3) tsparticles: specifier: workspace:^ version: link:../../bundles/full/dist devDependencies: "@astrojs/check": specifier: ^0.9.8 - version: 0.9.8(prettier@3.8.3)(typescript@5.9.3) + version: 0.9.8(prettier-plugin-astro@0.14.1)(prettier@3.8.3)(typescript@5.9.3) typescript: specifier: ^5.9.3 version: 5.9.3 demo/electron: dependencies: + "@tsparticles/basic": + specifier: workspace:* + version: link:../../bundles/basic/dist "@tsparticles/configs": specifier: workspace:* version: link:../../utils/configs/dist "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist + "@tsparticles/interaction-external-attract": + specifier: workspace:* + version: link:../../interactions/external/attract/dist + "@tsparticles/interaction-external-bounce": + specifier: workspace:* + version: link:../../interactions/external/bounce/dist + "@tsparticles/interaction-external-bubble": + specifier: workspace:* + version: link:../../interactions/external/bubble/dist + "@tsparticles/interaction-external-connect": + specifier: workspace:* + version: link:../../interactions/external/connect/dist + "@tsparticles/interaction-external-destroy": + specifier: workspace:* + version: link:../../interactions/external/destroy/dist + "@tsparticles/interaction-external-drag": + specifier: workspace:* + version: link:../../interactions/external/drag/dist + "@tsparticles/interaction-external-grab": + specifier: workspace:* + version: link:../../interactions/external/grab/dist + "@tsparticles/interaction-external-parallax": + specifier: workspace:* + version: link:../../interactions/external/parallax/dist + "@tsparticles/interaction-external-pause": + specifier: workspace:* + version: link:../../interactions/external/pause/dist + "@tsparticles/interaction-external-push": + specifier: workspace:* + version: link:../../interactions/external/push/dist + "@tsparticles/interaction-external-remove": + specifier: workspace:* + version: link:../../interactions/external/remove/dist + "@tsparticles/interaction-external-repulse": + specifier: workspace:* + version: link:../../interactions/external/repulse/dist + "@tsparticles/interaction-external-slow": + specifier: workspace:* + version: link:../../interactions/external/slow/dist + "@tsparticles/interaction-external-trail": + specifier: workspace:* + version: link:../../interactions/external/trail/dist + "@tsparticles/interaction-particles-attract": + specifier: workspace:* + version: link:../../interactions/particles/attract/dist + "@tsparticles/interaction-particles-collisions": + specifier: workspace:* + version: link:../../interactions/particles/collisions/dist + "@tsparticles/interaction-particles-links": + specifier: workspace:* + version: link:../../interactions/particles/links/dist + "@tsparticles/plugin-absorbers": + specifier: workspace:* + version: link:../../plugins/absorbers/dist + "@tsparticles/plugin-easing-quad": + specifier: workspace:* + version: link:../../plugins/easings/quad/dist + "@tsparticles/plugin-emitters": + specifier: workspace:* + version: link:../../plugins/emitters/dist + "@tsparticles/plugin-emitters-shape-circle": + specifier: workspace:* + version: link:../../plugins/emittersShapes/circle/dist + "@tsparticles/plugin-emitters-shape-square": + specifier: workspace:* + version: link:../../plugins/emittersShapes/square/dist + "@tsparticles/plugin-hex-color": + specifier: workspace:* + version: link:../../plugins/colors/hex/dist + "@tsparticles/plugin-hsl-color": + specifier: workspace:* + version: link:../../plugins/colors/hsl/dist + "@tsparticles/plugin-interactivity": + specifier: workspace:* + version: link:../../plugins/interactivity/dist + "@tsparticles/plugin-move": + specifier: workspace:* + version: link:../../plugins/move/dist + "@tsparticles/plugin-rgb-color": + specifier: workspace:* + version: link:../../plugins/colors/rgb/dist + "@tsparticles/shape-circle": + specifier: workspace:* + version: link:../../shapes/circle/dist + "@tsparticles/shape-emoji": + specifier: workspace:* + version: link:../../shapes/emoji/dist + "@tsparticles/shape-image": + specifier: workspace:* + version: link:../../shapes/image/dist + "@tsparticles/shape-line": + specifier: workspace:* + version: link:../../shapes/line/dist + "@tsparticles/shape-polygon": + specifier: workspace:* + version: link:../../shapes/polygon/dist + "@tsparticles/shape-square": + specifier: workspace:* + version: link:../../shapes/square/dist + "@tsparticles/shape-star": + specifier: workspace:* + version: link:../../shapes/star/dist + "@tsparticles/shape-text": + specifier: workspace:* + version: link:../../shapes/text/dist + "@tsparticles/slim": + specifier: workspace:* + version: link:../../bundles/slim/dist + "@tsparticles/updater-destroy": + specifier: workspace:* + version: link:../../updaters/destroy/dist + "@tsparticles/updater-life": + specifier: workspace:* + version: link:../../updaters/life/dist + "@tsparticles/updater-opacity": + specifier: workspace:* + version: link:../../updaters/opacity/dist + "@tsparticles/updater-out-modes": + specifier: workspace:* + version: link:../../updaters/outModes/dist + "@tsparticles/updater-paint": + specifier: workspace:* + version: link:../../updaters/paint/dist + "@tsparticles/updater-roll": + specifier: workspace:* + version: link:../../updaters/roll/dist + "@tsparticles/updater-rotate": + specifier: workspace:* + version: link:../../updaters/rotate/dist + "@tsparticles/updater-size": + specifier: workspace:* + version: link:../../updaters/size/dist + "@tsparticles/updater-tilt": + specifier: workspace:* + version: link:../../updaters/tilt/dist + "@tsparticles/updater-twinkle": + specifier: workspace:* + version: link:../../updaters/twinkle/dist + "@tsparticles/updater-wobble": + specifier: workspace:* + version: link:../../updaters/wobble/dist tsparticles: specifier: workspace:* version: link:../../bundles/full/dist devDependencies: + "@electron/asar": + specifier: ^4.2.0 + version: 4.2.0 + "@electron/get": + specifier: ^5.0.0 + version: 5.0.0 + "@electron/notarize": + specifier: ^3.1.1 + version: 3.1.1 + "@electron/osx-sign": + specifier: ^2.4.0 + version: 2.4.0 + "@electron/packager": + specifier: ^20.0.0 + version: 20.0.0 + "@electron/universal": + specifier: ^3.0.4 + version: 3.0.4 + "@electron/windows-sign": + specifier: ^2.0.3 + version: 2.0.3 + "@malept/cross-spawn-promise": + specifier: ^2.0.0 + version: 2.0.0 + "@sec-ant/readable-stream": + specifier: ^0.6.0 + version: 0.6.0 + "@types/node": + specifier: ^25.6.0 + version: 25.6.0 + "@xmldom/xmldom": + specifier: ^0.9.10 + version: 0.9.10 + author-regex: + specifier: ^1.0.0 + version: 1.0.0 + balanced-match: + specifier: ^4.0.4 + version: 4.0.4 + brace-expansion: + specifier: ^5.0.5 + version: 5.0.5 + buffer-crc32: + specifier: ^1.0.0 + version: 1.0.0 + commander: + specifier: ^14.0.3 + version: 14.0.3 + cross-spawn: + specifier: ^7.0.6 + version: 7.0.6 + debug: + specifier: ^4.4.3 + version: 4.4.3(supports-color@5.5.0) electron: - specifier: ^41.2.0 - version: 41.2.0 + specifier: ^41.3.0 + version: 41.3.0 + env-paths: + specifier: ^4.0.0 + version: 4.0.0 + err-code: + specifier: ^3.0.1 + version: 3.0.1 + extract-zip: + specifier: ^2.0.1 + version: 2.0.1 + filename-reserved-regex: + specifier: ^4.0.0 + version: 4.0.0 + filenamify: + specifier: ^7.0.1 + version: 7.0.1 + flora-colossus: + specifier: ^3.0.2 + version: 3.0.2 + galactus: + specifier: ^2.0.2 + version: 2.0.2 + get-stream: + specifier: ^9.0.1 + version: 9.0.1 + glob: + specifier: ^13.0.6 + version: 13.0.6 + graceful-fs: + specifier: ^4.2.11 + version: 4.2.11 + is-safe-filename: + specifier: ^0.1.1 + version: 0.1.1 + is-stream: + specifier: ^4.0.1 + version: 4.0.1 + isbinaryfile: + specifier: ^6.0.0 + version: 6.0.0 + isexe: + specifier: ^4.0.0 + version: 4.0.0 + junk: + specifier: ^4.0.1 + version: 4.0.1 + lru-cache: + specifier: ^11.3.5 + version: 11.3.5 + minimatch: + specifier: ^10.2.5 + version: 10.2.5 + minipass: + specifier: ^7.1.3 + version: 7.1.3 + ms: + specifier: ^2.1.3 + version: 2.1.3 + parse-author: + specifier: ^2.0.0 + version: 2.0.0 + path-key: + specifier: ^4.0.0 + version: 4.0.0 + path-scurry: + specifier: ^2.0.2 + version: 2.0.2 + pe-library: + specifier: ^2.0.1 + version: 2.0.1 + pend: + specifier: ^1.2.0 + version: 1.2.0 + plist: + specifier: ^4.0.0 + version: 4.0.0 + postject: + specifier: ^1.0.0-alpha.6 + version: 1.0.0-alpha.6 + progress: + specifier: ^2.0.3 + version: 2.0.3 + promise-retry: + specifier: ^2.0.1 + version: 2.0.1 + resedit: + specifier: ^3.0.2 + version: 3.0.2 + retry: + specifier: ^0.13.1 + version: 0.13.1 + semver: + specifier: ^7.7.4 + version: 7.7.4 + shebang-command: + specifier: ^2.0.0 + version: 2.0.0 + shebang-regex: + specifier: ^4.0.0 + version: 4.0.0 + sumchecker: + specifier: ^3.0.1 + version: 3.0.1 + undici-types: + specifier: ^8.1.0 + version: 8.1.0 + which: + specifier: ^6.0.1 + version: 6.0.1 + xmlbuilder: + specifier: ^15.1.1 + version: 15.1.1 + yargs-parser: + specifier: ^22.0.0 + version: 22.0.0 + yauzl: + specifier: ^3.3.0 + version: 3.3.0 - demo/inferno: + demo/ember: dependencies: - "@tsparticles/configs": + "@glimmer/tracking": + specifier: ^1.1.2 + version: 1.1.2 + "@tsparticles/ember": specifier: workspace:^ - version: link:../../utils/configs/dist + version: link:../../wrappers/ember + "@tsparticles/engine": + specifier: workspace:^ + version: link:../../engine/dist + "@tsparticles/preset-snow": + specifier: workspace:^ + version: link:../../presets/snow/dist + ember-auto-import: + specifier: ^2.13.1 + version: 2.13.1(webpack@5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2)) + ember-cli-babel: + specifier: ^8.3.1 + version: 8.3.1(@babel/core@7.29.0) + ember-cli-htmlbars: + specifier: ^7.0.1 + version: 7.0.1(@babel/core@7.29.0)(ember-source@6.12.0(@glimmer/component@2.1.1)(rsvp@4.8.5)) + ember-cli-typescript: + specifier: ^5.3.0 + version: 5.3.0 + ember-load-initializers: + specifier: ^3.0.1 + version: 3.0.1(ember-source@6.12.0(@glimmer/component@2.1.1)(rsvp@4.8.5)) + ember-modifier: + specifier: ^4.3.0 + version: 4.3.0(@babel/core@7.29.0) + ember-page-title: + specifier: ^9.0.3 + version: 9.0.3 + ember-resolver: + specifier: ^13.2.0 + version: 13.2.0 + ember-source: + specifier: ~6.12.0 + version: 6.12.0(@glimmer/component@2.1.1)(rsvp@4.8.5) + tsparticles: + specifier: workspace:^ + version: link:../../bundles/full/dist + devDependencies: + "@babel/core": + specifier: 7.29.0 + version: 7.29.0 + "@ember/optional-features": + specifier: ^3.0.0 + version: 3.0.0(@types/node@25.6.0) + "@ember/test-helpers": + specifier: ^5.4.1 + version: 5.4.1(@babel/core@7.29.0) + "@tsconfig/ember": + specifier: ^3.0.12 + version: 3.0.12 + "@types/ember": + specifier: ^4.0.11 + version: 4.0.11(@babel/core@7.29.0) + "@types/ember__application": + specifier: ^4.0.11 + version: 4.0.11(@babel/core@7.29.0) + "@types/ember__controller": + specifier: ^4.0.12 + version: 4.0.12(@babel/core@7.29.0) + "@types/ember__routing": + specifier: ^4.0.23 + version: 4.0.23(@babel/core@7.29.0) + "@types/node": + specifier: ^25.6.0 + version: 25.6.0 + "@types/qunit": + specifier: ^2.19.13 + version: 2.19.13 + broccoli-asset-rev: + specifier: ^3.0.0 + version: 3.0.0 + ember-cli: + specifier: ~6.12.0 + version: 6.12.0(@babel/core@7.29.0)(@types/node@25.6.0)(ejs@3.1.10)(hamljs@0.6.2)(handlebars@4.7.9)(nunjucks@3.2.4(chokidar@3.6.0))(pug@3.0.4)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(underscore@1.13.8) + ember-cli-dependency-checker: + specifier: ^3.4.0 + version: 3.4.0(@babel/core@7.29.0)(ember-cli@6.12.0(@babel/core@7.29.0)(@types/node@25.6.0)(ejs@3.1.10)(hamljs@0.6.2)(handlebars@4.7.9)(nunjucks@3.2.4(chokidar@3.6.0))(pug@3.0.4)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(underscore@1.13.8))(eslint@10.2.1(jiti@2.7.0)) + ember-cli-inject-live-reload: + specifier: ^2.1.0 + version: 2.1.0 + ember-cli-sri: + specifier: ^2.1.1 + version: 2.1.1 + ember-cli-terser: + specifier: ^4.0.2 + version: 4.0.2 + ember-qunit: + specifier: ^9.0.4 + version: 9.0.4(@babel/core@7.29.0)(@ember/test-helpers@5.4.1(@babel/core@7.29.0))(qunit@2.25.0) + ember-template-lint: + specifier: ^7.9.3 + version: 7.9.3 + eslint: + specifier: ^10.2.1 + version: 10.2.1(jiti@2.7.0) + eslint-config-prettier: + specifier: ^10.1.8 + version: 10.1.8(eslint@10.2.1(jiti@2.7.0)) + eslint-plugin-ember: + specifier: ^13.0.0 + version: 13.0.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@typescript-eslint/parser@8.59.2(eslint@10.2.1(jiti@2.7.0))(typescript@6.0.3))(eslint@10.2.1(jiti@2.7.0))(typescript@6.0.3) + eslint-plugin-node: + specifier: ^11.1.0 + version: 11.1.0(eslint@10.2.1(jiti@2.7.0)) + eslint-plugin-prettier: + specifier: ^5.5.5 + version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.2.1(jiti@2.7.0)))(eslint@10.2.1(jiti@2.7.0))(prettier@3.8.3) + eslint-plugin-qunit: + specifier: ^8.2.6 + version: 8.2.6(eslint@10.2.1(jiti@2.7.0)) + loader.js: + specifier: ^4.7.0 + version: 4.7.0 + prettier: + specifier: ^3.8.3 + version: 3.8.3 + qunit: + specifier: ^2.25.0 + version: 2.25.0 + qunit-dom: + specifier: ^3.5.1 + version: 3.5.1 + typescript: + specifier: ^6.0.3 + version: 6.0.3 + webpack: + specifier: ^5.106.2 + version: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) + + demo/inferno: + dependencies: "@tsparticles/engine": specifier: workspace:^ version: link:../../engine/dist @@ -990,8 +3816,8 @@ importers: specifier: workspace:^ version: link:../../wrappers/inferno inferno: - specifier: ^8.0.5 - version: 8.2.3 + specifier: ^9.1.0 + version: 9.1.0 tsparticles: specifier: workspace:^ version: link:../../bundles/full/dist @@ -1027,8 +3853,8 @@ importers: specifier: ^1.81.0 version: 1.99.0 sass-loader: - specifier: ^13.2.0 - version: 13.3.3(sass@1.99.0)(webpack@5.106.1) + specifier: ^16.0.0 + version: 16.0.7(sass@1.99.0)(webpack@5.106.1) source-map-loader: specifier: ^4.0.1 version: 4.0.2(webpack@5.106.1) @@ -1040,7 +3866,7 @@ importers: version: 4.9.5 webpack: specifier: ^5.75.0 - version: 5.106.1(@swc/core@1.15.26)(webpack-cli@5.1.4) + version: 5.106.1(@swc/core@1.15.33)(webpack-cli@5.1.4) webpack-cli: specifier: ^5.0.1 version: 5.1.4(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@4.15.2)(webpack@5.106.1) @@ -1287,19 +4113,19 @@ importers: devDependencies: "@angular-devkit/build-angular": specifier: ~21.2.7 - version: 21.2.7(ce2bc26fd64eb08b8f5db928ff713ad3) + version: 21.2.7(596b57332a365a5c66657886d9849dbc) "@angular-eslint/builder": specifier: ~21.3.1 - version: 21.3.1(@angular/cli@21.2.7(@types/node@25.6.0))(eslint@8.57.1)(typescript@5.9.3) + version: 21.3.1(@angular/cli@21.2.7(@types/node@25.6.0))(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3) "@angular-eslint/eslint-plugin": specifier: ~21.3.1 - version: 21.3.1(@typescript-eslint/utils@8.58.2(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) + version: 21.3.1(@typescript-eslint/utils@8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3) "@angular-eslint/eslint-plugin-template": specifier: ~21.3.1 - version: 21.3.1(@angular-eslint/template-parser@21.3.1(eslint@8.57.1)(typescript@5.9.3))(@typescript-eslint/types@8.58.2)(@typescript-eslint/utils@8.58.2(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) + version: 21.3.1(@angular-eslint/template-parser@21.3.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3))(@typescript-eslint/types@8.59.2)(@typescript-eslint/utils@8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3) "@angular-eslint/template-parser": specifier: ~21.3.1 - version: 21.3.1(eslint@8.57.1)(typescript@5.9.3) + version: 21.3.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3) "@angular/cli": specifier: ~21.2.7 version: 21.2.7(@types/node@25.6.0)(chokidar@5.0.0) @@ -1329,22 +4155,22 @@ importers: version: 25.6.0 "@typescript-eslint/eslint-plugin": specifier: ^8.58.1 - version: 8.58.1(@typescript-eslint/parser@8.58.1(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) + version: 8.58.1(@typescript-eslint/parser@8.58.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3) "@typescript-eslint/parser": specifier: ^8.58.1 - version: 8.58.1(eslint@8.57.1)(typescript@5.9.3) + version: 8.58.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3) eslint: - specifier: ^8.57.1 - version: 8.57.1 + specifier: ^10.3.0 + version: 10.3.0(jiti@2.7.0) eslint-plugin-import: specifier: ^2.32.0 - version: 2.32.0(@typescript-eslint/parser@8.58.1(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1) + version: 2.32.0(@typescript-eslint/parser@8.58.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.3.0(jiti@2.7.0)) eslint-plugin-jsdoc: specifier: ^62.9.0 - version: 62.9.0(eslint@8.57.1) + version: 62.9.0(eslint@10.3.0(jiti@2.7.0)) eslint-plugin-prefer-arrow: specifier: ^1.2.3 - version: 1.2.3(eslint@8.57.1) + version: 1.2.3(eslint@10.3.0(jiti@2.7.0)) jasmine-core: specifier: ~6.2.0 version: 6.2.0 @@ -1374,7 +4200,7 @@ importers: version: 7.0.0 ts-node: specifier: ~10.9.2 - version: 10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.9.3) + version: 10.9.2(@swc/core@1.15.33)(@types/node@25.6.0)(typescript@5.9.3) typescript: specifier: ~5.9.3 version: 5.9.3 @@ -1404,20 +4230,20 @@ importers: specifier: ^6.5.1 version: 6.7.2 "@typescript-eslint/eslint-plugin": - specifier: ^6.16.0 - version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) + specifier: ^8.59.1 + version: 8.59.1(@typescript-eslint/parser@8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3) "@typescript-eslint/parser": - specifier: ^6.16.0 - version: 6.21.0(eslint@8.57.1)(typescript@5.9.3) + specifier: ^8.59.1 + version: 8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3) babel-preset-env: specifier: ^1.7.0 version: 1.7.0 eslint: - specifier: ^8.56.0 - version: 8.57.1 + specifier: ^10.3.0 + version: 10.3.0(jiti@2.7.0) eslint-config-prettier: - specifier: ^9.1.0 - version: 9.1.2(eslint@8.57.1) + specifier: ^10.1.8 + version: 10.1.8(eslint@10.3.0(jiti@2.7.0)) express: specifier: ^4.18.2 version: 4.22.1 @@ -1489,11 +4315,11 @@ importers: specifier: ^10.0.0 version: 10.0.10 "@typescript-eslint/eslint-plugin": - specifier: ^6.0.0 - version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) + specifier: ^8.59.1 + version: 8.59.1(@typescript-eslint/parser@8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3) "@typescript-eslint/parser": - specifier: ^6.0.0 - version: 6.21.0(eslint@8.57.1)(typescript@5.9.3) + specifier: ^8.59.1 + version: 8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3) "@web/dev-server": specifier: ^0.1.35 version: 0.1.38 @@ -1504,8 +4330,8 @@ importers: specifier: ^4.2.2 version: 4.3.1 eslint: - specifier: ^8.0.0 - version: 8.57.1 + specifier: ^10.3.0 + version: 10.3.0(jiti@2.7.0) karma: specifier: ^6.0.0 version: 6.4.4 @@ -1574,7 +4400,7 @@ importers: version: 19.2.3(@types/react@19.2.14) next: specifier: ^16.2.3 - version: 16.2.3(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(babel-plugin-macros@3.1.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(sass@1.99.0) + version: 16.2.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(babel-plugin-macros@3.1.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(sass@1.99.0) react: specifier: ^19.2.5 version: 19.2.5 @@ -1590,16 +4416,16 @@ importers: version: 16.2.3 "@typescript-eslint/eslint-plugin": specifier: ^8.58.1 - version: 8.58.1(@typescript-eslint/parser@8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) + version: 8.58.1(@typescript-eslint/parser@8.58.1(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2))(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) "@typescript-eslint/parser": specifier: ^8.58.1 - version: 8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) + version: 8.58.1(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) eslint: specifier: ^10.2.0 - version: 10.2.0(jiti@2.6.1) + version: 10.2.0(jiti@2.7.0) eslint-config-next: specifier: ^16.2.3 - version: 16.2.3(@typescript-eslint/parser@8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) + version: 16.2.3(@typescript-eslint/parser@8.58.1(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2))(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) demo/nextjs-legacy: dependencies: @@ -1617,7 +4443,7 @@ importers: version: link:../../bundles/slim/dist next: specifier: ^16.2.3 - version: 16.2.3(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(babel-plugin-macros@3.1.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(sass@1.99.0) + version: 16.2.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(babel-plugin-macros@3.1.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(sass@1.99.0) react: specifier: ^19.2.5 version: 19.2.5 @@ -1633,10 +4459,10 @@ importers: version: 16.2.3 eslint: specifier: ^10.2.0 - version: 10.2.0(jiti@2.6.1) + version: 10.2.0(jiti@2.7.0) eslint-config-next: specifier: ^16.2.3 - version: 16.2.3(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) + version: 16.2.3(@typescript-eslint/parser@8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) demo/nuxt2: dependencies: @@ -1653,22 +4479,22 @@ importers: specifier: ^3.49.0 version: 3.49.0 nuxt: - specifier: ^2.18.1 - version: 2.18.1(@vue/compiler-sfc@3.5.32)(buffer@6.0.3)(consola@3.4.2)(ejs@3.1.10)(encoding@0.1.13)(hamljs@0.6.2)(handlebars@4.7.9)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(tslib@2.8.1)(typescript@6.0.2)(underscore@1.13.8)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + specifier: 2.18.1 + version: 2.18.1(@vue/compiler-sfc@3.5.32)(buffer@6.0.3)(consola@3.4.2)(ejs@3.1.10)(encoding@0.1.13)(hamljs@0.6.2)(handlebars@4.7.9)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(tslib@2.8.1)(typescript@6.0.3)(underscore@1.13.8)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) tsparticles: specifier: workspace:^ version: link:../../bundles/full/dist vue: - specifier: ^2.7.16 + specifier: 2.7.16 version: 2.7.16 vue-router: - specifier: ^3.6.5 + specifier: 3.6.5 version: 3.6.5(vue@2.7.16) vue-server-renderer: - specifier: ^2.7.16 - version: 2.7.16 + specifier: 2.7.16 + version: 2.7.16(patch_hash=7374e4bf5b7956d7097feec494aaea43bf8f6a02e2b64e8a3cc57e19c2f65132) vue-template-compiler: - specifier: ^2.7.16 + specifier: 2.7.16 version: 2.7.16 devDependencies: "@babel/core": @@ -1676,7 +4502,7 @@ importers: version: 7.29.0 "@babel/eslint-parser": specifier: ^7.28.6 - version: 7.28.6(@babel/core@7.29.0)(eslint@8.57.1) + version: 7.28.6(@babel/core@7.29.0)(eslint@10.3.0(jiti@2.7.0)) "@babel/plugin-proposal-class-properties": specifier: ^7.18.6 version: 7.18.6(@babel/core@7.29.0) @@ -1689,57 +4515,69 @@ importers: "@babel/preset-env": specifier: ^7.29.2 version: 7.29.2(@babel/core@7.29.0) + "@eslint/js": + specifier: ^10.0.1 + version: 10.0.1(eslint@10.3.0(jiti@2.7.0)) "@nuxt/types": - specifier: ^2.18.1 + specifier: 2.18.1 version: 2.18.1 "@nuxt/typescript-build": specifier: ^3.0.2 - version: 3.0.2(@nuxt/types@2.18.1)(eslint@8.57.1)(typescript@6.0.2)(vue-template-compiler@2.7.16)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + version: 3.0.2(@nuxt/types@2.18.1)(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3)(vue-template-compiler@2.7.16)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) "@nuxtjs/eslint-config-typescript": specifier: ^12.1.0 - version: 12.1.0(eslint@8.57.1)(typescript@6.0.2) + version: 12.1.0(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) "@nuxtjs/eslint-module": specifier: ^4.1.0 - version: 4.1.0(eslint@8.57.1)(magicast@0.5.2)(vite@8.0.8(@types/node@20.19.39)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + version: 4.1.0(eslint@10.3.0(jiti@2.7.0))(vite@8.0.11(@types/node@20.19.39)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) "@types/node": specifier: ^20.11.25 version: 20.19.39 + "@typescript-eslint/parser": + specifier: ^8.59.1 + version: 8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) babel-loader: specifier: ^8.4.1 - version: 8.4.1(@babel/core@7.29.0)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + version: 8.4.1(@babel/core@7.29.0)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) css-loader: specifier: ^5.2.7 - version: 5.2.7(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + version: 5.2.7(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) eslint: - specifier: ^8.49.0 - version: 8.57.1 + specifier: ^10.3.0 + version: 10.3.0(jiti@2.7.0) eslint-config-prettier: - specifier: ^9.1.2 - version: 9.1.2(eslint@8.57.1) + specifier: ^10.1.8 + version: 10.1.8(eslint@10.3.0(jiti@2.7.0)) eslint-plugin-nuxt: specifier: ^4.0.0 - version: 4.0.0(eslint@8.57.1) + version: 4.0.0(eslint@10.3.0(jiti@2.7.0)) eslint-plugin-vue: - specifier: ^9.33.0 - version: 9.33.0(eslint@8.57.1) + specifier: ^10.8.0 + version: 10.8.0(@stylistic/eslint-plugin@5.10.0(eslint@10.3.0(jiti@2.7.0)))(@typescript-eslint/parser@8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.3.0(jiti@2.7.0))(vue-eslint-parser@10.4.0(eslint@10.3.0(jiti@2.7.0))) + globals: + specifier: ^16.4.0 + version: 16.4.0 postcss-loader: specifier: ^4.3.0 - version: 4.3.0(postcss@8.5.9)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + version: 4.3.0(postcss@8.5.14)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) prettier: specifier: ^3.8.2 version: 3.8.2 ts-loader: specifier: ^8.4.0 - version: 8.4.0(typescript@6.0.2)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + version: 8.4.0(typescript@6.0.3)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) + vue-eslint-parser: + specifier: ^10.4.0 + version: 10.4.0(eslint@10.3.0(jiti@2.7.0)) vue-loader: specifier: ^15.11.1 - version: 15.11.1(@vue/compiler-sfc@3.5.32)(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))))(css-loader@5.2.7(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))))(ejs@3.1.10)(hamljs@0.6.2)(handlebars@4.7.9)(lodash@4.18.1)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(underscore@1.13.8)(vue-template-compiler@2.7.16)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + version: 15.11.1(@vue/compiler-sfc@3.5.32)(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))))(css-loader@5.2.7(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))))(ejs@3.1.10)(hamljs@0.6.2)(handlebars@4.7.9)(lodash@4.18.1)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(underscore@1.13.8)(vue-template-compiler@2.7.16)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) vue-template-babel-compiler: specifier: ^2.0.0 version: 2.0.0(vue-template-compiler@2.7.16) webpack: specifier: ^4.47.0 - version: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + version: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) demo/nuxt3: dependencies: @@ -1793,7 +4631,7 @@ importers: version: 16.4.0 nuxt: specifier: ^3.21.2 - version: 3.21.2(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(encoding@0.1.13)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.1)(less@4.6.4)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rolldown@1.0.0-rc.15)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.15)(rollup@4.60.1))(rollup@4.60.1)(sass@1.99.0)(stylelint@16.26.1(typescript@6.0.2))(stylus@0.64.0)(terser@5.46.1)(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(xml2js@0.6.2)(yaml@2.8.3) + version: 3.21.2(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@types/node@25.6.2)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(encoding@0.1.13)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.1)(less@4.6.4)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rolldown@1.0.0-rc.18)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.18)(rollup@4.60.2))(rollup@4.60.2)(sass@1.99.0)(srvx@0.11.15)(stylelint@16.26.1(typescript@6.0.2))(stylus@0.64.0)(terser@5.46.1)(typescript@6.0.2)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(xml2js@0.6.2)(yaml@2.8.3) prettier: specifier: ^3.8.2 version: 3.8.2 @@ -1862,7 +4700,7 @@ importers: version: 16.4.0 nuxt: specifier: ^4.4.2 - version: 4.4.2(@babel/core@7.29.0)(@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.29.0))(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@rollup/plugin-babel@7.0.0(@babel/core@7.29.0)(@types/babel__core@7.20.5)(rollup@4.60.1))(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(encoding@0.1.13)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.1)(less@4.6.4)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rolldown@1.0.0-rc.15)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.15)(rollup@4.60.1))(rollup@4.60.1)(sass@1.99.0)(stylelint@16.26.1(typescript@6.0.2))(stylus@0.64.0)(terser@5.46.1)(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(xml2js@0.6.2)(yaml@2.8.3) + version: 4.4.2(@babel/core@7.29.0)(@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.29.0))(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@rollup/plugin-babel@7.0.0(@babel/core@7.29.0)(@types/babel__core@7.20.5)(rollup@4.60.3))(@types/node@25.6.2)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(encoding@0.1.13)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.1)(less@4.6.4)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rolldown@1.0.0-rc.18)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.18)(rollup@4.60.3))(rollup@4.60.3)(sass@1.99.0)(stylelint@16.26.1(typescript@6.0.2))(stylus@0.64.0)(terser@5.46.1)(typescript@6.0.2)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(xml2js@0.6.2)(yaml@2.8.3) prettier: specifier: ^3.8.2 version: 3.8.2 @@ -1904,11 +4742,11 @@ importers: version: link:../../bundles/full/dist devDependencies: "@typescript-eslint/eslint-plugin": - specifier: ^6.16.0 - version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) + specifier: ^8.59.1 + version: 8.59.1(@typescript-eslint/parser@8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3) "@typescript-eslint/parser": - specifier: ^6.16.0 - version: 6.21.0(eslint@8.57.1)(typescript@5.9.3) + specifier: ^8.59.1 + version: 8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3) copyfiles: specifier: ^2.4.1 version: 2.4.1 @@ -1919,23 +4757,23 @@ importers: specifier: ^4.1.0 version: 4.1.0(enzyme@3.11.0)(preact@10.29.1) eslint: - specifier: ^8.56.0 - version: 8.57.1 + specifier: ^10.3.0 + version: 10.3.0(jiti@2.7.0) eslint-config-preact: specifier: ^1.3.0 - version: 1.5.0(eslint@8.57.1) + version: 1.5.0(eslint@10.3.0(jiti@2.7.0)) eslint-config-prettier: - specifier: ^9.1.0 - version: 9.1.2(eslint@8.57.1) + specifier: ^10.1.8 + version: 10.1.8(eslint@10.3.0(jiti@2.7.0)) eslint-plugin-react-hooks: specifier: ^4.6.0 - version: 4.6.2(eslint@8.57.1) + version: 4.6.2(eslint@10.3.0(jiti@2.7.0)) identity-obj-proxy: specifier: ^3.0.0 version: 3.0.0 preact-cli: specifier: ^3.5.0 - version: 3.5.1(@types/babel__core@7.20.5)(encoding@0.1.13)(eslint@8.57.1)(preact-render-to-string@6.6.7(preact@10.29.1))(preact@10.29.1)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.9.3))(typescript@5.9.3)(vue-template-compiler@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + version: 3.5.1(@types/babel__core@7.20.5)(encoding@0.1.13)(eslint@10.3.0(jiti@2.7.0))(preact-render-to-string@6.6.7(preact@10.29.1))(preact@10.29.1)(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@5.9.3))(typescript@5.9.3)(vue-template-compiler@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) prettier: specifier: ^3.1.1 version: 3.8.2 @@ -1946,6 +4784,31 @@ importers: specifier: ^5.3.3 version: 5.9.3 + demo/qwik: + dependencies: + "@builder.io/qwik": + specifier: 1.19.2 + version: 1.19.2(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) + "@tsparticles/engine": + specifier: workspace:^ + version: link:../../engine/dist + tsparticles: + specifier: workspace:^ + version: link:../../bundles/full/dist + devDependencies: + "@types/node": + specifier: ^25.6.0 + version: 25.6.0 + typescript: + specifier: ^6.0.2 + version: 6.0.2 + vite: + specifier: ^8.0.8 + version: 8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + vite-tsconfig-paths: + specifier: ^6.1.1 + version: 6.1.1(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) + demo/react: dependencies: "@tsparticles/engine": @@ -1969,16 +4832,16 @@ importers: devDependencies: "@eslint/js": specifier: ^10.0.1 - version: 10.0.1(eslint@10.2.0(jiti@2.6.1)) + version: 10.0.1(eslint@10.2.0(jiti@2.7.0)) "@vitejs/plugin-react": specifier: ^6.0.1 - version: 6.0.1(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) + version: 6.0.1(vite@8.0.8(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) eslint: specifier: ^10.2.0 - version: 10.2.0(jiti@2.6.1) + version: 10.2.0(jiti@2.7.0) vite: specifier: ^8.0.8 - version: 8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + version: 8.0.8(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) demo/riot: dependencies: @@ -2048,7 +4911,7 @@ importers: version: 15.1.0 webpack: specifier: ^5.89.0 - version: 5.106.1(@swc/core@1.15.26)(webpack-cli@5.1.4) + version: 5.106.1(@swc/core@1.15.33)(webpack-cli@5.1.4) webpack-cli: specifier: ^5.1.4 version: 5.1.4(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@4.15.2)(webpack@5.106.1) @@ -2076,16 +4939,16 @@ importers: devDependencies: solid-devtools: specifier: ^0.29.2 - version: 0.29.3(solid-js@1.9.12)(vite@5.4.21(@types/node@25.6.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)) + version: 0.29.3(solid-js@1.9.12)(vite@5.4.21(@types/node@25.6.2)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)) typescript: specifier: ^5.3.3 version: 5.9.3 vite: specifier: ^5.0.11 - version: 5.4.21(@types/node@25.6.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1) + version: 5.4.21(@types/node@25.6.2)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1) vite-plugin-solid: specifier: ^2.8.2 - version: 2.11.12(@testing-library/jest-dom@6.9.1)(solid-js@1.9.12)(vite@5.4.21(@types/node@25.6.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)) + version: 2.11.12(@testing-library/jest-dom@6.9.1)(solid-js@1.9.12)(vite@5.4.21(@types/node@25.6.2)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)) demo/svelte: dependencies: @@ -2140,10 +5003,10 @@ importers: version: 4.2.20 svelte-check: specifier: ^3.7.1 - version: 3.8.6(@babel/core@7.29.0)(less@4.6.4)(postcss-load-config@3.1.4(postcss@8.5.9)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.4.5)))(postcss@8.5.9)(pug@3.0.4)(sass@1.99.0)(svelte@4.2.20) + version: 3.8.6(@babel/core@7.29.0)(less@4.6.4)(postcss-load-config@3.1.4(postcss@8.5.14)(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@5.4.5)))(postcss@8.5.14)(pug@3.0.4)(sass@1.99.0)(svelte@4.2.20) svelte-preprocess: specifier: ^5.1.4 - version: 5.1.4(@babel/core@7.29.0)(less@4.6.4)(postcss-load-config@3.1.4(postcss@8.5.9)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.4.5)))(postcss@8.5.9)(pug@3.0.4)(sass@1.99.0)(svelte@4.2.20)(typescript@5.4.5) + version: 5.1.4(@babel/core@7.29.0)(less@4.6.4)(postcss-load-config@3.1.4(postcss@8.5.14)(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@5.4.5)))(postcss@8.5.14)(pug@3.0.4)(sass@1.99.0)(svelte@4.2.20)(typescript@5.4.5) tslib: specifier: ^2.6.2 version: 2.8.1 @@ -2158,13 +5021,13 @@ importers: version: 5.2.7 "@sveltejs/adapter-auto": specifier: ^3.2.1 - version: 3.3.1(@sveltejs/kit@2.57.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.20)(vite@5.4.21(@types/node@25.6.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)))(svelte@4.2.20)(typescript@5.9.3)(vite@5.4.21(@types/node@25.6.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1))) + version: 3.3.1(@sveltejs/kit@2.57.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.20)(vite@5.4.21(@types/node@25.6.2)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)))(svelte@4.2.20)(typescript@5.9.3)(vite@5.4.21(@types/node@25.6.2)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1))) "@sveltejs/kit": specifier: ^2.5.10 - version: 2.57.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.20)(vite@5.4.21(@types/node@25.6.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)))(svelte@4.2.20)(typescript@5.9.3)(vite@5.4.21(@types/node@25.6.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)) + version: 2.57.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.20)(vite@5.4.21(@types/node@25.6.2)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)))(svelte@4.2.20)(typescript@5.9.3)(vite@5.4.21(@types/node@25.6.2)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)) "@sveltejs/vite-plugin-svelte": specifier: ^3.1.0 - version: 3.1.2(svelte@4.2.20)(vite@5.4.21(@types/node@25.6.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)) + version: 3.1.2(svelte@4.2.20)(vite@5.4.21(@types/node@25.6.2)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)) "@tsparticles/engine": specifier: workspace:^ version: link:../../engine/dist @@ -2175,20 +5038,20 @@ importers: specifier: ^0.6.0 version: 0.6.0 "@typescript-eslint/eslint-plugin": - specifier: ^7.10.0 - version: 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) + specifier: ^8.59.1 + version: 8.59.1(@typescript-eslint/parser@8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3) "@typescript-eslint/parser": - specifier: ^7.10.0 - version: 7.18.0(eslint@8.57.1)(typescript@5.9.3) + specifier: ^8.59.1 + version: 8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3) eslint: - specifier: ^8.57.0 - version: 8.57.1 + specifier: ^10.3.0 + version: 10.3.0(jiti@2.7.0) eslint-config-prettier: - specifier: ^9.1.0 - version: 9.1.2(eslint@8.57.1) + specifier: ^10.1.8 + version: 10.1.8(eslint@10.3.0(jiti@2.7.0)) eslint-plugin-svelte: specifier: ^2.39.0 - version: 2.46.1(eslint@8.57.1)(svelte@4.2.20)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.9.3)) + version: 2.46.1(eslint@10.3.0(jiti@2.7.0))(svelte@4.2.20)(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@5.9.3)) prettier: specifier: ^3.2.5 version: 3.8.2 @@ -2200,10 +5063,13 @@ importers: version: 4.2.20 svelte-check: specifier: ^3.7.1 - version: 3.8.6(@babel/core@7.29.0)(less@4.6.4)(postcss-load-config@3.1.4(postcss@8.5.9)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.9.3)))(postcss@8.5.9)(pug@3.0.4)(sass@1.99.0)(svelte@4.2.20) + version: 3.8.6(@babel/core@7.29.0)(less@4.6.4)(postcss-load-config@3.1.4(postcss@8.5.9)(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@5.9.3)))(postcss@8.5.9)(pug@3.0.4)(sass@1.99.0)(svelte@4.2.20) + svelte-eslint-parser: + specifier: ^1.0.0 + version: 1.6.0(svelte@4.2.20) svelte-preprocess: specifier: ^5.1.4 - version: 5.1.4(@babel/core@7.29.0)(less@4.6.4)(postcss-load-config@3.1.4(postcss@8.5.9)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.9.3)))(postcss@8.5.9)(pug@3.0.4)(sass@1.99.0)(svelte@4.2.20)(typescript@5.9.3) + version: 5.1.4(@babel/core@7.29.0)(less@4.6.4)(postcss-load-config@3.1.4(postcss@8.5.9)(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@5.9.3)))(postcss@8.5.9)(pug@3.0.4)(sass@1.99.0)(svelte@4.2.20)(typescript@5.9.3) tslib: specifier: ^2.6.2 version: 2.8.1 @@ -2215,118 +5081,688 @@ importers: version: 5.9.3 vite: specifier: ^5.2.11 - version: 5.4.21(@types/node@25.6.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1) + version: 5.4.21(@types/node@25.6.2)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1) demo/vanilla: dependencies: "@tsparticles/all": specifier: workspace:* - version: link:../../bundles/all/dist - "@tsparticles/basic": + version: link:../../bundles/all/dist + "@tsparticles/basic": + specifier: workspace:* + version: link:../../bundles/basic/dist + "@tsparticles/canvas-utils": + specifier: workspace:* + version: link:../../utils/canvasUtils/dist + "@tsparticles/confetti": + specifier: workspace:* + version: link:../../bundles/confetti/dist + "@tsparticles/configs": + specifier: workspace:* + version: link:../../utils/configs/dist + "@tsparticles/effect-bubble": + specifier: workspace:* + version: link:../../effects/bubble/dist + "@tsparticles/effect-filter": + specifier: workspace:* + version: link:../../effects/filter/dist + "@tsparticles/effect-particles": + specifier: workspace:* + version: link:../../effects/particles/dist + "@tsparticles/effect-shadow": + specifier: workspace:* + version: link:../../effects/shadow/dist + "@tsparticles/effect-trail": + specifier: workspace:* + version: link:../../effects/trail/dist + "@tsparticles/engine": + specifier: workspace:* + version: link:../../engine/dist + "@tsparticles/fireworks": + specifier: workspace:* + version: link:../../bundles/fireworks/dist + "@tsparticles/fractal-noise": + specifier: workspace:* + version: link:../../utils/fractalNoise/dist + "@tsparticles/interaction-external-attract": + specifier: workspace:* + version: link:../../interactions/external/attract/dist + "@tsparticles/interaction-external-bounce": + specifier: workspace:* + version: link:../../interactions/external/bounce/dist + "@tsparticles/interaction-external-bubble": + specifier: workspace:* + version: link:../../interactions/external/bubble/dist + "@tsparticles/interaction-external-cannon": + specifier: workspace:* + version: link:../../interactions/external/cannon/dist + "@tsparticles/interaction-external-connect": + specifier: workspace:* + version: link:../../interactions/external/connect/dist + "@tsparticles/interaction-external-destroy": + specifier: workspace:* + version: link:../../interactions/external/destroy/dist + "@tsparticles/interaction-external-drag": + specifier: workspace:* + version: link:../../interactions/external/drag/dist + "@tsparticles/interaction-external-grab": + specifier: workspace:* + version: link:../../interactions/external/grab/dist + "@tsparticles/interaction-external-parallax": + specifier: workspace:* + version: link:../../interactions/external/parallax/dist + "@tsparticles/interaction-external-particle": + specifier: workspace:* + version: link:../../interactions/external/particle/dist + "@tsparticles/interaction-external-pause": + specifier: workspace:* + version: link:../../interactions/external/pause/dist + "@tsparticles/interaction-external-pop": + specifier: workspace:* + version: link:../../interactions/external/pop/dist + "@tsparticles/interaction-external-push": + specifier: workspace:* + version: link:../../interactions/external/push/dist + "@tsparticles/interaction-external-remove": + specifier: workspace:* + version: link:../../interactions/external/remove/dist + "@tsparticles/interaction-external-repulse": + specifier: workspace:* + version: link:../../interactions/external/repulse/dist + "@tsparticles/interaction-external-slow": + specifier: workspace:* + version: link:../../interactions/external/slow/dist + "@tsparticles/interaction-external-trail": + specifier: workspace:* + version: link:../../interactions/external/trail/dist + "@tsparticles/interaction-light": + specifier: workspace:* + version: link:../../interactions/light/dist + "@tsparticles/interaction-particles-attract": + specifier: workspace:* + version: link:../../interactions/particles/attract/dist + "@tsparticles/interaction-particles-collisions": + specifier: workspace:* + version: link:../../interactions/particles/collisions/dist + "@tsparticles/interaction-particles-links": + specifier: workspace:* + version: link:../../interactions/particles/links/dist + "@tsparticles/interaction-particles-repulse": + specifier: workspace:* + version: link:../../interactions/particles/repulse/dist + "@tsparticles/noise-field": + specifier: workspace:* + version: link:../../utils/noiseField/dist + "@tsparticles/palette-acid-pair": + specifier: workspace:* + version: link:../../palettes/spectrum/acidPair/dist + "@tsparticles/palette-apple": + specifier: workspace:* + version: link:../../palettes/food/apple/dist + "@tsparticles/palette-apple-green": + specifier: workspace:* + version: link:../../palettes/food/apple-green/dist + "@tsparticles/palette-apple-red": + specifier: workspace:* + version: link:../../palettes/food/apple-red/dist + "@tsparticles/palette-aurora-borealis": + specifier: workspace:* + version: link:../../palettes/space/auroraBorealis/dist + "@tsparticles/palette-autumn-leaves": + specifier: workspace:* + version: link:../../palettes/nature/autumnLeaves/dist + "@tsparticles/palette-avocado": + specifier: workspace:* + version: link:../../palettes/food/avocado/dist + "@tsparticles/palette-bell-peppers": + specifier: workspace:* + version: link:../../palettes/food/bell-peppers/dist + "@tsparticles/palette-berries": + specifier: workspace:* + version: link:../../palettes/food/berries/dist + "@tsparticles/palette-bioluminescence": + specifier: workspace:* + version: link:../../palettes/fantasy/bioluminescence/dist + "@tsparticles/palette-blood-and-gore": + specifier: workspace:* + version: link:../../palettes/fantasy/bloodAndGore/dist + "@tsparticles/palette-bokeh-cold": + specifier: workspace:* + version: link:../../palettes/optics/bokehCold/dist + "@tsparticles/palette-bokeh-gold": + specifier: workspace:* + version: link:../../palettes/optics/bokehGold/dist + "@tsparticles/palette-bokeh-pastel": + specifier: workspace:* + version: link:../../palettes/optics/bokehPastel/dist + "@tsparticles/palette-bullet-hit": + specifier: workspace:* + version: link:../../palettes/impact/bulletHit/dist + "@tsparticles/palette-candlelight": + specifier: workspace:* + version: link:../../palettes/fire/candlelight/dist + "@tsparticles/palette-caustics": + specifier: workspace:* + version: link:../../palettes/earth/caustics/dist + "@tsparticles/palette-cherry": + specifier: workspace:* + version: link:../../palettes/food/cherry/dist + "@tsparticles/palette-cherry-blossom": + specifier: workspace:* + version: link:../../palettes/nature/cherryBlossom/dist + "@tsparticles/palette-citrus-twist": + specifier: workspace:* + version: link:../../palettes/food/citrus-twist/dist + "@tsparticles/palette-cmy-secondaries": + specifier: workspace:* + version: link:../../palettes/spectrum/cmySecondaries/dist + "@tsparticles/palette-colored-smoke-amber": + specifier: workspace:* + version: link:../../palettes/atmosphere/coloredSmokeAmber/dist + "@tsparticles/palette-colored-smoke-blue": + specifier: workspace:* + version: link:../../palettes/atmosphere/coloredSmokeBlue/dist + "@tsparticles/palette-colored-smoke-green": + specifier: workspace:* + version: link:../../palettes/atmosphere/coloredSmokeGreen/dist + "@tsparticles/palette-colored-smoke-magenta": + specifier: workspace:* + version: link:../../palettes/atmosphere/coloredSmokeMagenta/dist + "@tsparticles/palette-colored-smoke-orange": + specifier: workspace:* + version: link:../../palettes/atmosphere/coloredSmokeOrange/dist + "@tsparticles/palette-colored-smoke-purple": + specifier: workspace:* + version: link:../../palettes/atmosphere/coloredSmokePurple/dist + "@tsparticles/palette-colored-smoke-rainbow": + specifier: workspace:* + version: link:../../palettes/atmosphere/coloredSmokeRainbow/dist + "@tsparticles/palette-colored-smoke-red": + specifier: workspace:* + version: link:../../palettes/atmosphere/coloredSmokeRed/dist + "@tsparticles/palette-colored-smoke-teal": + specifier: workspace:* + version: link:../../palettes/atmosphere/coloredSmokeTeal/dist + "@tsparticles/palette-confetti": + specifier: workspace:* + version: link:../../palettes/confetti/default/dist + "@tsparticles/palette-confetti-gold": + specifier: workspace:* + version: link:../../palettes/confetti/gold/dist + "@tsparticles/palette-confetti-monochrome-blue": + specifier: workspace:* + version: link:../../palettes/confetti/monochromeBlue/dist + "@tsparticles/palette-confetti-monochrome-green": + specifier: workspace:* + version: link:../../palettes/confetti/monochromeGreen/dist + "@tsparticles/palette-confetti-monochrome-pink": + specifier: workspace:* + version: link:../../palettes/confetti/monochromePink/dist + "@tsparticles/palette-confetti-monochrome-purple": + specifier: workspace:* + version: link:../../palettes/confetti/monochromePurple/dist + "@tsparticles/palette-confetti-monochrome-red": + specifier: workspace:* + version: link:../../palettes/confetti/monochromeRed/dist + "@tsparticles/palette-confetti-neon": + specifier: workspace:* + version: link:../../palettes/confetti/neon/dist + "@tsparticles/palette-confetti-pastel": + specifier: workspace:* + version: link:../../palettes/confetti/pastel/dist + "@tsparticles/palette-confetti-patriotic": + specifier: workspace:* + version: link:../../palettes/confetti/patriotic/dist + "@tsparticles/palette-confetti-rainbow": + specifier: workspace:* + version: link:../../palettes/confetti/rainbow/dist + "@tsparticles/palette-confetti-winter": + specifier: workspace:* + version: link:../../palettes/confetti/winter/dist + "@tsparticles/palette-cosmic-radiation": + specifier: workspace:* + version: link:../../palettes/space/cosmicRadiation/dist + "@tsparticles/palette-crt-phosphor": + specifier: workspace:* + version: link:../../palettes/tech/crtPhosphor/dist + "@tsparticles/palette-dandelion-seeds": + specifier: workspace:* + version: link:../../palettes/nature/dandelionSeeds/dist + "@tsparticles/palette-dark-matter": + specifier: workspace:* + version: link:../../palettes/space/darkMatter/dist + "@tsparticles/palette-deep-ocean": + specifier: workspace:* + version: link:../../palettes/water/deepOcean/dist + "@tsparticles/palette-desert-sand": + specifier: workspace:* + version: link:../../palettes/earth/desertSand/dist + "@tsparticles/palette-duality-blue-yellow": + specifier: workspace:* + version: link:../../palettes/spectrum/dualityBlueYellow/dist + "@tsparticles/palette-duality-green-magenta": + specifier: workspace:* + version: link:../../palettes/spectrum/dualityGreenMagenta/dist + "@tsparticles/palette-duality-red-cyan": + specifier: workspace:* + version: link:../../palettes/spectrum/dualityRedCyan/dist + "@tsparticles/palette-dust-haze": + specifier: workspace:* + version: link:../../palettes/atmosphere/dustHaze/dist + "@tsparticles/palette-earthy-nature": + specifier: workspace:* + version: link:../../palettes/nature/earthyNature/dist + "@tsparticles/palette-embers-and-ash": + specifier: workspace:* + version: link:../../palettes/fire/embersAndAsh/dist + "@tsparticles/palette-explosion-debris": + specifier: workspace:* + version: link:../../palettes/impact/explosionDebris/dist + "@tsparticles/palette-fairy-dust": + specifier: workspace:* + version: link:../../palettes/fantasy/fairyDust/dist + "@tsparticles/palette-fire": + specifier: workspace:* + version: link:../../palettes/fire/default/dist + "@tsparticles/palette-fire-seed": + specifier: workspace:* + version: link:../../palettes/fire/seed/dist + "@tsparticles/palette-fireflies": + specifier: workspace:* + version: link:../../palettes/nature/fireflies/dist + "@tsparticles/palette-fireworks-blue": + specifier: workspace:* + version: link:../../palettes/fireworks/blue/dist + "@tsparticles/palette-fireworks-blue-stroke": + specifier: workspace:* + version: link:../../palettes/fireworks/blueStroke/dist + "@tsparticles/palette-fireworks-copper": + specifier: workspace:* + version: link:../../palettes/fireworks/copper/dist + "@tsparticles/palette-fireworks-copper-stroke": + specifier: workspace:* + version: link:../../palettes/fireworks/copperStroke/dist + "@tsparticles/palette-fireworks-gold": + specifier: workspace:* + version: link:../../palettes/fireworks/gold/dist + "@tsparticles/palette-fireworks-gold-stroke": + specifier: workspace:* + version: link:../../palettes/fireworks/goldStroke/dist + "@tsparticles/palette-fireworks-green": + specifier: workspace:* + version: link:../../palettes/fireworks/green/dist + "@tsparticles/palette-fireworks-green-stroke": + specifier: workspace:* + version: link:../../palettes/fireworks/greenStroke/dist + "@tsparticles/palette-fireworks-ice": + specifier: workspace:* + version: link:../../palettes/fireworks/ice/dist + "@tsparticles/palette-fireworks-ice-stroke": + specifier: workspace:* + version: link:../../palettes/fireworks/iceStroke/dist + "@tsparticles/palette-fireworks-multicolor": + specifier: workspace:* + version: link:../../palettes/fireworks/multicolor/dist + "@tsparticles/palette-fireworks-multicolor-stroke": + specifier: workspace:* + version: link:../../palettes/fireworks/multicolorStroke/dist + "@tsparticles/palette-fireworks-neon": + specifier: workspace:* + version: link:../../palettes/fireworks/neon/dist + "@tsparticles/palette-fireworks-neon-stroke": + specifier: workspace:* + version: link:../../palettes/fireworks/neonStroke/dist + "@tsparticles/palette-fireworks-pastel": + specifier: workspace:* + version: link:../../palettes/fireworks/pastel/dist + "@tsparticles/palette-fireworks-pastel-stroke": + specifier: workspace:* + version: link:../../palettes/fireworks/pastelStroke/dist + "@tsparticles/palette-fireworks-purple": + specifier: workspace:* + version: link:../../palettes/fireworks/purple/dist + "@tsparticles/palette-fireworks-purple-stroke": + specifier: workspace:* + version: link:../../palettes/fireworks/purpleStroke/dist + "@tsparticles/palette-fireworks-rainbow": + specifier: workspace:* + version: link:../../palettes/fireworks/rainbow/dist + "@tsparticles/palette-fireworks-rainbow-stroke": + specifier: workspace:* + version: link:../../palettes/fireworks/rainbowStroke/dist + "@tsparticles/palette-fireworks-red": + specifier: workspace:* + version: link:../../palettes/fireworks/red/dist + "@tsparticles/palette-fireworks-red-stroke": + specifier: workspace:* + version: link:../../palettes/fireworks/redStroke/dist + "@tsparticles/palette-fireworks-silver": + specifier: workspace:* + version: link:../../palettes/fireworks/silver/dist + "@tsparticles/palette-fireworks-silver-stroke": + specifier: workspace:* + version: link:../../palettes/fireworks/silverStroke/dist + "@tsparticles/palette-foam-and-bubbles": + specifier: workspace:* + version: link:../../palettes/water/foamAndBubbles/dist + "@tsparticles/palette-fog-coastal": + specifier: workspace:* + version: link:../../palettes/water/fogCoastal/dist + "@tsparticles/palette-fog-morning": + specifier: workspace:* + version: link:../../palettes/atmosphere/fogMorning/dist + "@tsparticles/palette-forest-canopy": + specifier: workspace:* + version: link:../../palettes/nature/forestCanopy/dist + "@tsparticles/palette-full-fire-gradient": + specifier: workspace:* + version: link:../../palettes/fire/fullFireGradient/dist + "@tsparticles/palette-full-spectrum": + specifier: workspace:* + version: link:../../palettes/spectrum/fullSpectrum/dist + "@tsparticles/palette-galaxy-dust": + specifier: workspace:* + version: link:../../palettes/space/galaxyDust/dist + "@tsparticles/palette-gingerbread-house": + specifier: workspace:* + version: link:../../palettes/food/gingerbread-house/dist + "@tsparticles/palette-glass-burst": + specifier: workspace:* + version: link:../../palettes/impact/glassBurst/dist + "@tsparticles/palette-glitch": + specifier: workspace:* + version: link:../../palettes/tech/glitch/dist + "@tsparticles/palette-grapes": + specifier: workspace:* + version: link:../../palettes/food/grapes/dist + "@tsparticles/palette-heat-duality": + specifier: workspace:* + version: link:../../palettes/atmospheric/heatDuality/dist + "@tsparticles/palette-heat-haze": + specifier: workspace:* + version: link:../../palettes/atmospheric/heatHaze/dist + "@tsparticles/palette-hologram": + specifier: workspace:* + version: link:../../palettes/tech/hologram/dist + "@tsparticles/palette-holographic-shimmer": + specifier: workspace:* + version: link:../../palettes/optics/holographicShimmer/dist + "@tsparticles/palette-holy-light": + specifier: workspace:* + version: link:../../palettes/fantasy/holyLight/dist + "@tsparticles/palette-ice-magic": + specifier: workspace:* + version: link:../../palettes/fantasy/iceMagic/dist + "@tsparticles/palette-ice-triad": + specifier: workspace:* + version: link:../../palettes/fantasy/iceTriad/dist + "@tsparticles/palette-ink-in-water": + specifier: workspace:* + version: link:../../palettes/water/inkInWater/dist + "@tsparticles/palette-iris": + specifier: workspace:* + version: link:../../palettes/fantasy/iris/dist + "@tsparticles/palette-jellyfish-glow": + specifier: workspace:* + version: link:../../palettes/fantasy/jellyfishGlow/dist + "@tsparticles/palette-lagoon": + specifier: workspace:* + version: link:../../palettes/water/lagoon/dist + "@tsparticles/palette-laser-scatter": + specifier: workspace:* + version: link:../../palettes/optics/laserScatter/dist + "@tsparticles/palette-lava-lamp": + specifier: workspace:* + version: link:../../palettes/fire/lavaLamp/dist + "@tsparticles/palette-lens-flare-dust": + specifier: workspace:* + version: link:../../palettes/optics/lensFlareDust/dist + "@tsparticles/palette-lightning": + specifier: workspace:* + version: link:../../palettes/atmospheric/lightning/dist + "@tsparticles/palette-lofi-warm": + specifier: workspace:* + version: link:../../palettes/tech/lofiWarm/dist + "@tsparticles/palette-macaron": + specifier: workspace:* + version: link:../../palettes/food/macaron/dist + "@tsparticles/palette-matrix-rain": + specifier: workspace:* + version: link:../../palettes/tech/matrixRain/dist + "@tsparticles/palette-melon": + specifier: workspace:* + version: link:../../palettes/food/melon/dist + "@tsparticles/palette-mermaid": + specifier: workspace:* + version: link:../../palettes/fantasy/mermaid/dist + "@tsparticles/palette-metal-sparks": + specifier: workspace:* + version: link:../../palettes/fire/metalSparks/dist + "@tsparticles/palette-meteor-impact": + specifier: workspace:* + version: link:../../palettes/impact/meteorImpact/dist + "@tsparticles/palette-molten-metal": + specifier: workspace:* + version: link:../../palettes/fire/moltenMetal/dist + "@tsparticles/palette-monochrome-blues": + specifier: workspace:* + version: link:../../palettes/monochromatic/blues/dist + "@tsparticles/palette-monochrome-brown": + specifier: workspace:* + version: link:../../palettes/monochromatic/brown/dist + "@tsparticles/palette-monochrome-cyan": + specifier: workspace:* + version: link:../../palettes/monochromatic/cyan/dist + "@tsparticles/palette-monochrome-gold": + specifier: workspace:* + version: link:../../palettes/monochromatic/gold/dist + "@tsparticles/palette-monochrome-greens": + specifier: workspace:* + version: link:../../palettes/monochromatic/greens/dist + "@tsparticles/palette-monochrome-noir": + specifier: workspace:* + version: link:../../palettes/monochromatic/noir/dist + "@tsparticles/palette-monochrome-oranges": + specifier: workspace:* + version: link:../../palettes/monochromatic/oranges/dist + "@tsparticles/palette-monochrome-pinks": + specifier: workspace:* + version: link:../../palettes/monochromatic/pinks/dist + "@tsparticles/palette-monochrome-purples": + specifier: workspace:* + version: link:../../palettes/monochromatic/purples/dist + "@tsparticles/palette-monochrome-reds": + specifier: workspace:* + version: link:../../palettes/monochromatic/reds/dist + "@tsparticles/palette-monochrome-silver": + specifier: workspace:* + version: link:../../palettes/monochromatic/silver/dist + "@tsparticles/palette-monochrome-teal": + specifier: workspace:* + version: link:../../palettes/monochromatic/teal/dist + "@tsparticles/palette-monochrome-white": + specifier: workspace:* + version: link:../../palettes/monochromatic/white/dist + "@tsparticles/palette-monochrome-yellows": + specifier: workspace:* + version: link:../../palettes/monochromatic/yellows/dist + "@tsparticles/palette-mud-and-dirt": specifier: workspace:* - version: link:../../bundles/basic/dist - "@tsparticles/canvas-utils": + version: link:../../palettes/earth/mudAndDirt/dist + "@tsparticles/palette-nebula": specifier: workspace:* - version: link:../../utils/canvasUtils/dist - "@tsparticles/confetti": + version: link:../../palettes/space/nebula/dist + "@tsparticles/palette-neon-city": specifier: workspace:* - version: link:../../bundles/confetti/dist - "@tsparticles/configs": + version: link:../../palettes/tech/neonCity/dist + "@tsparticles/palette-network-nodes": specifier: workspace:* - version: link:../../utils/configs/dist - "@tsparticles/effect-bubble": + version: link:../../palettes/tech/networkNodes/dist + "@tsparticles/palette-nuclear-glow": specifier: workspace:* - version: link:../../effects/bubble/dist - "@tsparticles/effect-filter": + version: link:../../palettes/impact/nuclearGlow/dist + "@tsparticles/palette-oil-slick": specifier: workspace:* - version: link:../../effects/filter/dist - "@tsparticles/effect-particles": + version: link:../../palettes/earth/oilSlick/dist + "@tsparticles/palette-okabe-ito-accessible": specifier: workspace:* - version: link:../../effects/particles/dist - "@tsparticles/effect-shadow": + version: link:../../palettes/spectrum/okabeItoAccessible/dist + "@tsparticles/palette-pastel-cool": specifier: workspace:* - version: link:../../effects/shadow/dist - "@tsparticles/effect-trail": + version: link:../../palettes/pastel/cool/dist + "@tsparticles/palette-pastel-dream": specifier: workspace:* - version: link:../../effects/trail/dist - "@tsparticles/engine": + version: link:../../palettes/pastel/dream/dist + "@tsparticles/palette-pastel-mint": specifier: workspace:* - version: link:../../engine/dist - "@tsparticles/fireworks": + version: link:../../palettes/pastel/mint/dist + "@tsparticles/palette-pastel-sunset": specifier: workspace:* - version: link:../../bundles/fireworks/dist - "@tsparticles/fractal-noise": + version: link:../../palettes/pastel/sunset/dist + "@tsparticles/palette-pastel-warm": specifier: workspace:* - version: link:../../utils/fractalNoise/dist - "@tsparticles/interaction-external-attract": + version: link:../../palettes/pastel/warm/dist + "@tsparticles/palette-pineapple": specifier: workspace:* - version: link:../../interactions/external/attract/dist - "@tsparticles/interaction-external-bounce": + version: link:../../palettes/food/pineapple/dist + "@tsparticles/palette-pizza": specifier: workspace:* - version: link:../../interactions/external/bounce/dist - "@tsparticles/interaction-external-bubble": + version: link:../../palettes/food/pizza/dist + "@tsparticles/palette-plasma-arc": specifier: workspace:* - version: link:../../interactions/external/bubble/dist - "@tsparticles/interaction-external-cannon": + version: link:../../palettes/tech/plasmaArc/dist + "@tsparticles/palette-poison-and-venom": specifier: workspace:* - version: link:../../interactions/external/cannon/dist - "@tsparticles/interaction-external-connect": + version: link:../../palettes/fantasy/poisonAndVenom/dist + "@tsparticles/palette-pollen-and-spores": specifier: workspace:* - version: link:../../interactions/external/connect/dist - "@tsparticles/interaction-external-destroy": + version: link:../../palettes/nature/pollenAndSpores/dist + "@tsparticles/palette-portal": specifier: workspace:* - version: link:../../interactions/external/destroy/dist - "@tsparticles/interaction-external-drag": + version: link:../../palettes/space/portal/dist + "@tsparticles/palette-prism-scatter": specifier: workspace:* - version: link:../../interactions/external/drag/dist - "@tsparticles/interaction-external-grab": + version: link:../../palettes/spectrum/prismScatter/dist + "@tsparticles/palette-prism-spectrum": specifier: workspace:* - version: link:../../interactions/external/grab/dist - "@tsparticles/interaction-external-parallax": + version: link:../../palettes/optics/prismSpectrum/dist + "@tsparticles/palette-pulsar": specifier: workspace:* - version: link:../../interactions/external/parallax/dist - "@tsparticles/interaction-external-particle": + version: link:../../palettes/space/pulsar/dist + "@tsparticles/palette-rain": specifier: workspace:* - version: link:../../interactions/external/particle/dist - "@tsparticles/interaction-external-pause": + version: link:../../palettes/water/rain/dist + "@tsparticles/palette-rainbow": specifier: workspace:* - version: link:../../interactions/external/pause/dist - "@tsparticles/interaction-external-pop": + version: link:../../palettes/spectrum/rainbow/dist + "@tsparticles/palette-rgb-primaries": specifier: workspace:* - version: link:../../interactions/external/pop/dist - "@tsparticles/interaction-external-push": + version: link:../../palettes/spectrum/rgbPrimaries/dist + "@tsparticles/palette-rising-bubbles": specifier: workspace:* - version: link:../../interactions/external/push/dist - "@tsparticles/interaction-external-remove": + version: link:../../palettes/water/risingBubbles/dist + "@tsparticles/palette-rock-and-gravel": specifier: workspace:* - version: link:../../interactions/external/remove/dist - "@tsparticles/interaction-external-repulse": + version: link:../../palettes/earth/rockAndGravel/dist + "@tsparticles/palette-rust-and-corrosion": specifier: workspace:* - version: link:../../interactions/external/repulse/dist - "@tsparticles/interaction-external-slow": + version: link:../../palettes/earth/rustAndCorrosion/dist + "@tsparticles/palette-sakura": specifier: workspace:* - version: link:../../interactions/external/slow/dist - "@tsparticles/interaction-external-trail": + version: link:../../palettes/food/sakura/dist + "@tsparticles/palette-salad": specifier: workspace:* - version: link:../../interactions/external/trail/dist - "@tsparticles/interaction-light": + version: link:../../palettes/food/salad/dist + "@tsparticles/palette-shockwave": specifier: workspace:* - version: link:../../interactions/light/dist - "@tsparticles/interaction-particles-attract": + version: link:../../palettes/atmospheric/shockwave/dist + "@tsparticles/palette-shockwave-blast": specifier: workspace:* - version: link:../../interactions/particles/attract/dist - "@tsparticles/interaction-particles-collisions": + version: link:../../palettes/impact/shockwaveBlast/dist + "@tsparticles/palette-skin-and-organic": specifier: workspace:* - version: link:../../interactions/particles/collisions/dist - "@tsparticles/interaction-particles-links": + version: link:../../palettes/earth/skinAndOrganic/dist + "@tsparticles/palette-smoke-cold": specifier: workspace:* - version: link:../../interactions/particles/links/dist - "@tsparticles/interaction-particles-repulse": + version: link:../../palettes/atmospheric/smokeCold/dist + "@tsparticles/palette-smoke-warm": specifier: workspace:* - version: link:../../interactions/particles/repulse/dist - "@tsparticles/noise-field": + version: link:../../palettes/atmospheric/smokeWarm/dist + "@tsparticles/palette-snowfall": specifier: workspace:* - version: link:../../utils/noiseField/dist + version: link:../../palettes/nature/snowfall/dist + "@tsparticles/palette-solar-wind": + specifier: workspace:* + version: link:../../palettes/space/solarWind/dist + "@tsparticles/palette-spice-rack": + specifier: workspace:* + version: link:../../palettes/food/spice-rack/dist + "@tsparticles/palette-splatter-dark": + specifier: workspace:* + version: link:../../palettes/impact/splatterDark/dist + "@tsparticles/palette-spring-bloom": + specifier: workspace:* + version: link:../../palettes/nature/springBloom/dist + "@tsparticles/palette-steak": + specifier: workspace:* + version: link:../../palettes/food/steak/dist + "@tsparticles/palette-sunrise-gold": + specifier: workspace:* + version: link:../../palettes/atmospheric/sunriseGold/dist + "@tsparticles/palette-sunset-binary": + specifier: workspace:* + version: link:../../palettes/atmospheric/sunsetBinary/dist + "@tsparticles/palette-supernova": + specifier: workspace:* + version: link:../../palettes/space/supernova/dist + "@tsparticles/palette-sushi": + specifier: workspace:* + version: link:../../palettes/food/sushi/dist + "@tsparticles/palette-thermal-map": + specifier: workspace:* + version: link:../../palettes/atmospheric/thermalMap/dist + "@tsparticles/palette-thunderstorm": + specifier: workspace:* + version: link:../../palettes/atmospheric/thunderstorm/dist + "@tsparticles/palette-tropical-fruits": + specifier: workspace:* + version: link:../../palettes/food/tropical-fruits/dist + "@tsparticles/palette-unicorn": + specifier: workspace:* + version: link:../../palettes/fantasy/unicorn/dist + "@tsparticles/palette-vaporwave": + specifier: workspace:* + version: link:../../palettes/tech/vaporwave/dist + "@tsparticles/palette-vibrant": + specifier: workspace:* + version: link:../../palettes/vibrant/default/dist + "@tsparticles/palette-vibrant-electric": + specifier: workspace:* + version: link:../../palettes/vibrant/electric/dist + "@tsparticles/palette-vibrant-neon": + specifier: workspace:* + version: link:../../palettes/vibrant/neon/dist + "@tsparticles/palette-vibrant-retro": + specifier: workspace:* + version: link:../../palettes/vibrant/retro/dist + "@tsparticles/palette-vibrant-tropical": + specifier: workspace:* + version: link:../../palettes/vibrant/tropical/dist + "@tsparticles/palette-volcanic-ash": + specifier: workspace:* + version: link:../../palettes/atmosphere/volcanicAsh/dist + "@tsparticles/palette-water": + specifier: workspace:* + version: link:../../palettes/water/default/dist + "@tsparticles/palette-water-splash": + specifier: workspace:* + version: link:../../palettes/water/splash/dist + "@tsparticles/palette-watermelon": + specifier: workspace:* + version: link:../../palettes/food/watermelon/dist + "@tsparticles/particles": + specifier: workspace:* + version: link:../../bundles/particles/dist "@tsparticles/path-branches": specifier: workspace:* version: link:../../paths/branches/dist @@ -2525,6 +5961,66 @@ importers: "@tsparticles/plugin-zoom": specifier: workspace:* version: link:../../plugins/zoom/dist + "@tsparticles/preset-ambient": + specifier: workspace:* + version: link:../../presets/ambient/dist + "@tsparticles/preset-big-circles": + specifier: workspace:* + version: link:../../presets/bigCircles/dist + "@tsparticles/preset-bubbles": + specifier: workspace:* + version: link:../../presets/bubbles/dist + "@tsparticles/preset-confetti": + specifier: workspace:* + version: link:../../presets/confetti/dist + "@tsparticles/preset-confetti-cannon": + specifier: workspace:* + version: link:../../presets/confettiCannon/dist + "@tsparticles/preset-confetti-explosions": + specifier: workspace:* + version: link:../../presets/confettiExplosions/dist + "@tsparticles/preset-confetti-falling": + specifier: workspace:* + version: link:../../presets/confettiFalling/dist + "@tsparticles/preset-confetti-parade": + specifier: workspace:* + version: link:../../presets/confettiParade/dist + "@tsparticles/preset-fire": + specifier: workspace:* + version: link:../../presets/fire/dist + "@tsparticles/preset-firefly": + specifier: workspace:* + version: link:../../presets/firefly/dist + "@tsparticles/preset-fireworks": + specifier: workspace:* + version: link:../../presets/fireworks/dist + "@tsparticles/preset-fountain": + specifier: workspace:* + version: link:../../presets/fountain/dist + "@tsparticles/preset-hyperspace": + specifier: workspace:* + version: link:../../presets/hyperspace/dist + "@tsparticles/preset-links": + specifier: workspace:* + version: link:../../presets/links/dist + "@tsparticles/preset-matrix": + specifier: workspace:* + version: link:../../presets/matrix/dist + "@tsparticles/preset-sea-anemone": + specifier: workspace:* + version: link:../../presets/seaAnemone/dist + "@tsparticles/preset-snow": + specifier: workspace:* + version: link:../../presets/snow/dist + "@tsparticles/preset-squares": + specifier: workspace:* + version: link:../../presets/squares/dist + "@tsparticles/preset-stars": + specifier: workspace:* + version: link:../../presets/stars/dist + "@tsparticles/preset-triangles": + specifier: workspace:* + version: link:../../presets/triangles/dist "@tsparticles/shape-arrow": specifier: workspace:* version: link:../../shapes/arrow/dist @@ -2668,14 +6164,14 @@ importers: specifier: ^0.6.1 version: 0.6.1 dotenv: - specifier: ^17.4.1 - version: 17.4.1 + specifier: ^17.4.2 + version: 17.4.2 express: specifier: ^5.2.1 version: 5.2.1 express-rate-limit: - specifier: ^8.3.2 - version: 8.3.2(express@5.2.1) + specifier: ^8.4.1 + version: 8.4.1(express@5.2.1) helmet: specifier: ^8.1.0 version: 8.1.0 @@ -2721,7 +6217,7 @@ importers: version: 1.15.24 minify: specifier: ^15.2.0 - version: 15.2.0 + version: 15.2.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) sass: specifier: ^1.99.0 version: 1.99.0 @@ -2739,7 +6235,7 @@ importers: version: link:../../engine/dist "@tsparticles/palette-confetti": specifier: workspace:* - version: link:../../palettes/confetti/confetti/dist + version: link:../../palettes/confetti/default/dist "@tsparticles/preset-big-circles": specifier: workspace:* version: link:../../presets/bigCircles/dist @@ -2749,7 +6245,7 @@ importers: version: 6.0.2 vite: specifier: ^8.0.8 - version: 8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + version: 8.0.8(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) demo/vue2: dependencies: @@ -2790,6 +6286,9 @@ importers: "@babel/plugin-transform-private-property-in-object": specifier: ^7.27.1 version: 7.28.6(@babel/core@7.29.0) + "@eslint/js": + specifier: ^10.0.1 + version: 10.0.1(eslint@10.3.0(jiti@2.7.0)) "@rollup/plugin-json": specifier: ^6.0.0 version: 6.1.0(rollup@2.80.0) @@ -2800,35 +6299,38 @@ importers: specifier: ^5.0.2 version: 5.0.7(rollup@2.80.0) "@typescript-eslint/eslint-plugin": - specifier: ^6.7.0 - version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) + specifier: ^8.59.1 + version: 8.59.1(@typescript-eslint/parser@8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3) "@typescript-eslint/parser": - specifier: ^6.7.0 - version: 6.21.0(eslint@8.57.1)(typescript@5.9.3) + specifier: ^8.59.1 + version: 8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3) "@vue/cli-plugin-babel": specifier: ^5.0.8 - version: 5.0.9(@swc/core@1.15.26)(@vue/cli-service@5.0.9(@swc/core@1.15.26)(@vue/compiler-sfc@3.5.32)(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))))(ejs@3.1.10)(encoding@0.1.13)(hamljs@0.6.2)(handlebars@4.7.9)(lodash@4.18.1)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(underscore@1.13.8)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))(webpack-sources@3.3.4))(core-js@3.49.0)(encoding@0.1.13)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + version: 5.0.9(@swc/core@1.15.33)(@vue/cli-service@5.0.9(@swc/core@1.15.33)(@vue/compiler-sfc@3.5.32)(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))))(ejs@3.1.10)(encoding@0.1.13)(hamljs@0.6.2)(handlebars@4.7.9)(lodash@4.18.1)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(underscore@1.13.8)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))(webpack-sources@3.3.4))(core-js@3.49.0)(encoding@0.1.13)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) "@vue/cli-plugin-typescript": specifier: ^5.0.8 - version: 5.0.9(@swc/core@1.15.26)(@vue/cli-service@5.0.9(@swc/core@1.15.26)(@vue/compiler-sfc@3.5.32)(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))))(ejs@3.1.10)(encoding@0.1.13)(hamljs@0.6.2)(handlebars@4.7.9)(lodash@4.18.1)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(underscore@1.13.8)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))(webpack-sources@3.3.4))(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))))(encoding@0.1.13)(eslint@8.57.1)(typescript@5.9.3)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + version: 5.0.9(@swc/core@1.15.33)(@vue/cli-service@5.0.9(@swc/core@1.15.33)(@vue/compiler-sfc@3.5.32)(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))))(ejs@3.1.10)(encoding@0.1.13)(hamljs@0.6.2)(handlebars@4.7.9)(lodash@4.18.1)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(underscore@1.13.8)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))(webpack-sources@3.3.4))(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))))(encoding@0.1.13)(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) "@vue/cli-service": specifier: ^5.0.8 - version: 5.0.9(@swc/core@1.15.26)(@vue/compiler-sfc@3.5.32)(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))))(ejs@3.1.10)(encoding@0.1.13)(hamljs@0.6.2)(handlebars@4.7.9)(lodash@4.18.1)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(underscore@1.13.8)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))(webpack-sources@3.3.4) + version: 5.0.9(@swc/core@1.15.33)(@vue/compiler-sfc@3.5.32)(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))))(ejs@3.1.10)(encoding@0.1.13)(hamljs@0.6.2)(handlebars@4.7.9)(lodash@4.18.1)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(underscore@1.13.8)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))(webpack-sources@3.3.4) babel-loader: specifier: ^8.3.0 - version: 8.4.1(@babel/core@7.29.0)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + version: 8.4.1(@babel/core@7.29.0)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) eslint: - specifier: ^8.49.0 - version: 8.57.1 + specifier: ^10.3.0 + version: 10.3.0(jiti@2.7.0) eslint-config-prettier: - specifier: ^9.1.2 - version: 9.1.2(eslint@8.57.1) + specifier: ^10.1.8 + version: 10.1.8(eslint@10.3.0(jiti@2.7.0)) eslint-plugin-vue: - specifier: ^9.33.0 - version: 9.33.0(eslint@8.57.1) + specifier: ^10.8.0 + version: 10.8.0(@stylistic/eslint-plugin@5.10.0(eslint@10.3.0(jiti@2.7.0)))(@typescript-eslint/parser@8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.3.0(jiti@2.7.0))(vue-eslint-parser@10.4.0(eslint@10.3.0(jiti@2.7.0))) fork-ts-checker-webpack-plugin: specifier: ^8.0.0 - version: 8.0.0(typescript@5.9.3)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + version: 8.0.0(typescript@5.9.3)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) + globals: + specifier: ^16.4.0 + version: 16.4.0 postcss: specifier: ^8.4.29 version: 8.5.9 @@ -2856,15 +6358,18 @@ importers: typescript: specifier: ^5.2.2 version: 5.9.3 + vue-eslint-parser: + specifier: ^10.4.0 + version: 10.4.0(eslint@10.3.0(jiti@2.7.0)) vue-loader: specifier: ^15.10.2 - version: 15.11.1(@vue/compiler-sfc@3.5.32)(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))))(css-loader@7.1.4(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))))(ejs@3.1.10)(hamljs@0.6.2)(handlebars@4.7.9)(lodash@4.18.1)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(underscore@1.13.8)(vue-template-compiler@2.7.16)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + version: 15.11.1(@vue/compiler-sfc@3.5.32)(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))))(css-loader@7.1.4(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))))(ejs@3.1.10)(hamljs@0.6.2)(handlebars@4.7.9)(lodash@4.18.1)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(underscore@1.13.8)(vue-template-compiler@2.7.16)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) vue-template-compiler: specifier: ^2.7.14 version: 2.7.16 webpack: specifier: ^4.46.0 - version: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + version: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) demo/vue3: dependencies: @@ -2889,7 +6394,7 @@ importers: devDependencies: "@eslint/js": specifier: ^10.0.1 - version: 10.0.1(eslint@10.2.0(jiti@2.6.1)) + version: 10.0.1(eslint@10.2.0(jiti@2.7.0)) "@rushstack/eslint-patch": specifier: ^1.16.1 version: 1.16.1 @@ -2901,28 +6406,28 @@ importers: version: 25.6.0 "@typescript-eslint/parser": specifier: ^8.58.1 - version: 8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) + version: 8.58.1(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) "@vitejs/plugin-vue": specifier: ^6.0.5 - version: 6.0.5(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2)) + version: 6.0.5(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2)) "@vitejs/plugin-vue-jsx": specifier: ^5.1.5 - version: 5.1.5(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2)) + version: 5.1.5(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2)) "@vue/eslint-config-prettier": specifier: ^10.2.0 - version: 10.2.0(@types/eslint@9.6.1)(eslint@10.2.0(jiti@2.6.1))(prettier@3.8.2) + version: 10.2.0(@types/eslint@9.6.1)(eslint@10.2.0(jiti@2.7.0))(prettier@3.8.2) "@vue/eslint-config-typescript": specifier: ^14.7.0 - version: 14.7.0(eslint-plugin-vue@10.8.0(@stylistic/eslint-plugin@5.10.0(eslint@10.2.0(jiti@2.6.1)))(@typescript-eslint/parser@8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.2.0(jiti@2.6.1))(vue-eslint-parser@10.4.0(eslint@10.2.0(jiti@2.6.1))))(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) + version: 14.7.0(eslint-plugin-vue@10.8.0(@stylistic/eslint-plugin@5.10.0(eslint@10.2.0(jiti@2.7.0)))(@typescript-eslint/parser@8.58.1(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2))(eslint@10.2.0(jiti@2.7.0))(vue-eslint-parser@10.4.0(eslint@10.2.0(jiti@2.7.0))))(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) "@vue/tsconfig": specifier: ^0.9.1 version: 0.9.1(typescript@6.0.2)(vue@3.5.32(typescript@6.0.2)) eslint: specifier: ^10.2.0 - version: 10.2.0(jiti@2.6.1) + version: 10.2.0(jiti@2.7.0) eslint-plugin-vue: specifier: ^10.8.0 - version: 10.8.0(@stylistic/eslint-plugin@5.10.0(eslint@10.2.0(jiti@2.6.1)))(@typescript-eslint/parser@8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.2.0(jiti@2.6.1))(vue-eslint-parser@10.4.0(eslint@10.2.0(jiti@2.6.1))) + version: 10.8.0(@stylistic/eslint-plugin@5.10.0(eslint@10.2.0(jiti@2.7.0)))(@typescript-eslint/parser@8.58.1(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2))(eslint@10.2.0(jiti@2.7.0))(vue-eslint-parser@10.4.0(eslint@10.2.0(jiti@2.7.0))) globals: specifier: ^17.5.0 version: 17.5.0 @@ -2940,10 +6445,10 @@ importers: version: 6.0.2 vite: specifier: ^8.0.8 - version: 8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + version: 8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) vue-eslint-parser: specifier: ^10.4.0 - version: 10.4.0(eslint@10.2.0(jiti@2.6.1)) + version: 10.4.0(eslint@10.2.0(jiti@2.7.0)) vue-tsc: specifier: ^3.2.6 version: 3.2.6(typescript@6.0.2) @@ -2963,20 +6468,20 @@ importers: specifier: workspace:^ version: link:../../wrappers/webcomponents "@typescript-eslint/eslint-plugin": - specifier: ^6.0.0 - version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) + specifier: ^8.59.1 + version: 8.59.1(@typescript-eslint/parser@8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3) "@typescript-eslint/parser": - specifier: ^6.0.0 - version: 6.21.0(eslint@8.57.1)(typescript@5.9.3) + specifier: ^8.59.1 + version: 8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3) "@webcomponents/webcomponentsjs": specifier: ^2.8.0 version: 2.8.0 eslint: - specifier: ^8.40.0 - version: 8.57.1 + specifier: ^10.3.0 + version: 10.3.0(jiti@2.7.0) eslint-config-prettier: - specifier: ^9.0.0 - version: 9.1.2(eslint@8.57.1) + specifier: ^10.1.8 + version: 10.1.8(eslint@10.3.0(jiti@2.7.0)) express: specifier: ^4.18.2 version: 4.22.1 @@ -3001,6 +6506,12 @@ importers: effects/bubble: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -3008,6 +6519,12 @@ importers: effects/filter: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -3015,6 +6532,12 @@ importers: effects/particles: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -3022,6 +6545,12 @@ importers: effects/shadow: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -3029,16 +6558,32 @@ importers: effects/trail: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist publishDirectory: dist engine: + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../cli/packages/cli-build publishDirectory: dist interactions/external/attract: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist @@ -3049,6 +6594,12 @@ importers: interactions/external/bounce: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist @@ -3059,6 +6610,12 @@ importers: interactions/external/bubble: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist @@ -3069,6 +6626,12 @@ importers: interactions/external/cannon: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist @@ -3082,6 +6645,12 @@ importers: "@tsparticles/canvas-utils": specifier: workspace:* version: link:../../../utils/canvasUtils/dist + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist @@ -3092,719 +6661,1759 @@ importers: interactions/external/destroy: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build + "@tsparticles/engine": + specifier: workspace:* + version: link:../../../engine/dist + "@tsparticles/plugin-interactivity": + specifier: workspace:* + version: link:../../../plugins/interactivity/dist + publishDirectory: dist + + interactions/external/drag: + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build + "@tsparticles/engine": + specifier: workspace:* + version: link:../../../engine/dist + "@tsparticles/plugin-interactivity": + specifier: workspace:* + version: link:../../../plugins/interactivity/dist + publishDirectory: dist + + interactions/external/grab: + devDependencies: + "@tsparticles/canvas-utils": + specifier: workspace:* + version: link:../../../utils/canvasUtils/dist + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build + "@tsparticles/engine": + specifier: workspace:* + version: link:../../../engine/dist + "@tsparticles/plugin-interactivity": + specifier: workspace:* + version: link:../../../plugins/interactivity/dist + publishDirectory: dist + + interactions/external/parallax: + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build + "@tsparticles/engine": + specifier: workspace:* + version: link:../../../engine/dist + "@tsparticles/plugin-interactivity": + specifier: workspace:* + version: link:../../../plugins/interactivity/dist + publishDirectory: dist + + interactions/external/particle: + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build + "@tsparticles/engine": + specifier: workspace:* + version: link:../../../engine/dist + "@tsparticles/plugin-interactivity": + specifier: workspace:* + version: link:../../../plugins/interactivity/dist + publishDirectory: dist + + interactions/external/pause: + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build + "@tsparticles/engine": + specifier: workspace:* + version: link:../../../engine/dist + "@tsparticles/plugin-interactivity": + specifier: workspace:* + version: link:../../../plugins/interactivity/dist + publishDirectory: dist + + interactions/external/pop: + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build + "@tsparticles/engine": + specifier: workspace:* + version: link:../../../engine/dist + "@tsparticles/plugin-interactivity": + specifier: workspace:* + version: link:../../../plugins/interactivity/dist + publishDirectory: dist + + interactions/external/push: + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build + "@tsparticles/engine": + specifier: workspace:* + version: link:../../../engine/dist + "@tsparticles/plugin-interactivity": + specifier: workspace:* + version: link:../../../plugins/interactivity/dist + publishDirectory: dist + + interactions/external/remove: + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build + "@tsparticles/engine": + specifier: workspace:* + version: link:../../../engine/dist + "@tsparticles/plugin-interactivity": + specifier: workspace:* + version: link:../../../plugins/interactivity/dist + publishDirectory: dist + + interactions/external/repulse: + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build + "@tsparticles/engine": + specifier: workspace:* + version: link:../../../engine/dist + "@tsparticles/plugin-interactivity": + specifier: workspace:* + version: link:../../../plugins/interactivity/dist + publishDirectory: dist + + interactions/external/slow: + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build + "@tsparticles/engine": + specifier: workspace:* + version: link:../../../engine/dist + "@tsparticles/plugin-interactivity": + specifier: workspace:* + version: link:../../../plugins/interactivity/dist + publishDirectory: dist + + interactions/external/trail: + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build + "@tsparticles/engine": + specifier: workspace:* + version: link:../../../engine/dist + "@tsparticles/plugin-interactivity": + specifier: workspace:* + version: link:../../../plugins/interactivity/dist + publishDirectory: dist + + interactions/light: + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build + "@tsparticles/engine": + specifier: workspace:* + version: link:../../engine/dist + "@tsparticles/plugin-interactivity": + specifier: workspace:* + version: link:../../plugins/interactivity/dist + publishDirectory: dist + + interactions/light/dist: + dependencies: + "@tsparticles/engine": + specifier: 4.0.0-beta.15 + version: link:../../../engine/dist + "@tsparticles/plugin-interactivity": + specifier: 4.0.0-beta.15 + version: link:../../../plugins/interactivity/dist + + interactions/particles/attract: + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build + "@tsparticles/engine": + specifier: workspace:* + version: link:../../../engine/dist + "@tsparticles/plugin-interactivity": + specifier: workspace:* + version: link:../../../plugins/interactivity/dist + publishDirectory: dist + + interactions/particles/collisions: + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build + "@tsparticles/engine": + specifier: workspace:* + version: link:../../../engine/dist + "@tsparticles/plugin-interactivity": + specifier: workspace:* + version: link:../../../plugins/interactivity/dist + publishDirectory: dist + + interactions/particles/links: + devDependencies: + "@tsparticles/canvas-utils": + specifier: workspace:* + version: link:../../../utils/canvasUtils/dist + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build + "@tsparticles/engine": + specifier: workspace:* + version: link:../../../engine/dist + "@tsparticles/plugin-interactivity": + specifier: workspace:* + version: link:../../../plugins/interactivity/dist + publishDirectory: dist + + interactions/particles/repulse: + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build + "@tsparticles/engine": + specifier: workspace:* + version: link:../../../engine/dist + "@tsparticles/plugin-interactivity": + specifier: workspace:* + version: link:../../../plugins/interactivity/dist + publishDirectory: dist + + palettes/atmosphere/coloredSmokeAmber: + dependencies: + "@tsparticles/engine": + specifier: workspace:* + version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build + publishDirectory: dist + + palettes/atmosphere/coloredSmokeBlue: + dependencies: + "@tsparticles/engine": + specifier: workspace:* + version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build + publishDirectory: dist + + palettes/atmosphere/coloredSmokeGreen: + dependencies: + "@tsparticles/engine": + specifier: workspace:* + version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build + publishDirectory: dist + + palettes/atmosphere/coloredSmokeMagenta: + dependencies: + "@tsparticles/engine": + specifier: workspace:* + version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build + publishDirectory: dist + + palettes/atmosphere/coloredSmokeOrange: + dependencies: + "@tsparticles/engine": + specifier: workspace:* + version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build + publishDirectory: dist + + palettes/atmosphere/coloredSmokePurple: + dependencies: + "@tsparticles/engine": + specifier: workspace:* + version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build + publishDirectory: dist + + palettes/atmosphere/coloredSmokeRainbow: + dependencies: + "@tsparticles/engine": + specifier: workspace:* + version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build + publishDirectory: dist + + palettes/atmosphere/coloredSmokeRed: + dependencies: + "@tsparticles/engine": + specifier: workspace:* + version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build + publishDirectory: dist + + palettes/atmosphere/coloredSmokeTeal: + dependencies: + "@tsparticles/engine": + specifier: workspace:* + version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build + publishDirectory: dist + + palettes/atmosphere/dustHaze: + dependencies: + "@tsparticles/engine": + specifier: workspace:* + version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build + publishDirectory: dist + + palettes/atmosphere/fogMorning: + dependencies: + "@tsparticles/engine": + specifier: workspace:* + version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build + publishDirectory: dist + + palettes/atmosphere/volcanicAsh: + dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist - "@tsparticles/plugin-interactivity": - specifier: workspace:* - version: link:../../../plugins/interactivity/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - interactions/external/drag: - devDependencies: + palettes/atmospheric/heatDuality: + dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist - "@tsparticles/plugin-interactivity": - specifier: workspace:* - version: link:../../../plugins/interactivity/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - interactions/external/grab: - devDependencies: - "@tsparticles/canvas-utils": - specifier: workspace:* - version: link:../../../utils/canvasUtils/dist + palettes/atmospheric/heatHaze: + dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist - "@tsparticles/plugin-interactivity": - specifier: workspace:* - version: link:../../../plugins/interactivity/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - interactions/external/parallax: - devDependencies: + palettes/atmospheric/lightning: + dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist - "@tsparticles/plugin-interactivity": - specifier: workspace:* - version: link:../../../plugins/interactivity/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - interactions/external/particle: - devDependencies: + palettes/atmospheric/shockwave: + dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist - "@tsparticles/plugin-interactivity": - specifier: workspace:* - version: link:../../../plugins/interactivity/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - interactions/external/pause: - devDependencies: + palettes/atmospheric/smokeCold: + dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist - "@tsparticles/plugin-interactivity": - specifier: workspace:* - version: link:../../../plugins/interactivity/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - interactions/external/pop: - devDependencies: + palettes/atmospheric/smokeWarm: + dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist - "@tsparticles/plugin-interactivity": - specifier: workspace:* - version: link:../../../plugins/interactivity/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - interactions/external/push: - devDependencies: + palettes/atmospheric/sunriseGold: + dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist - "@tsparticles/plugin-interactivity": - specifier: workspace:* - version: link:../../../plugins/interactivity/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - interactions/external/remove: - devDependencies: + palettes/atmospheric/sunsetBinary: + dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist - "@tsparticles/plugin-interactivity": - specifier: workspace:* - version: link:../../../plugins/interactivity/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - interactions/external/repulse: - devDependencies: + palettes/atmospheric/thermalMap: + dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist - "@tsparticles/plugin-interactivity": - specifier: workspace:* - version: link:../../../plugins/interactivity/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - interactions/external/slow: - devDependencies: + palettes/atmospheric/thunderstorm: + dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist - "@tsparticles/plugin-interactivity": - specifier: workspace:* - version: link:../../../plugins/interactivity/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - interactions/external/trail: - devDependencies: + palettes/confetti/default: + dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist - "@tsparticles/plugin-interactivity": - specifier: workspace:* - version: link:../../../plugins/interactivity/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - interactions/light: - devDependencies: + palettes/confetti/gold: + dependencies: "@tsparticles/engine": specifier: workspace:* - version: link:../../engine/dist - "@tsparticles/plugin-interactivity": - specifier: workspace:* - version: link:../../plugins/interactivity/dist + version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - interactions/light/dist: + palettes/confetti/monochromeBlue: dependencies: "@tsparticles/engine": - specifier: 4.0.0-beta.12 + specifier: workspace:* version: link:../../../engine/dist - "@tsparticles/plugin-interactivity": - specifier: 4.0.0-beta.12 - version: link:../../../plugins/interactivity/dist - - interactions/particles/attract: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build + publishDirectory: dist + + palettes/confetti/monochromeGreen: + dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist - "@tsparticles/plugin-interactivity": - specifier: workspace:* - version: link:../../../plugins/interactivity/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - interactions/particles/collisions: - devDependencies: + palettes/confetti/monochromePink: + dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist - "@tsparticles/plugin-interactivity": - specifier: workspace:* - version: link:../../../plugins/interactivity/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - interactions/particles/links: - devDependencies: - "@tsparticles/canvas-utils": - specifier: workspace:* - version: link:../../../utils/canvasUtils/dist + palettes/confetti/monochromePurple: + dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist - "@tsparticles/plugin-interactivity": - specifier: workspace:* - version: link:../../../plugins/interactivity/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - interactions/particles/repulse: - devDependencies: + palettes/confetti/monochromeRed: + dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist - "@tsparticles/plugin-interactivity": - specifier: workspace:* - version: link:../../../plugins/interactivity/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/atmosphere/coloredSmokeBlue: + palettes/confetti/neon: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/atmosphere/coloredSmokeGreen: + palettes/confetti/pastel: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/atmosphere/coloredSmokeMagenta: + palettes/confetti/patriotic: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/atmosphere/coloredSmokeOrange: + palettes/confetti/rainbow: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/atmosphere/coloredSmokePurple: + palettes/confetti/winter: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/atmosphere/coloredSmokeRainbow: + palettes/earth/caustics: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/atmosphere/coloredSmokeTeal: + palettes/earth/desertSand: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/atmosphere/dustHaze: + palettes/earth/mudAndDirt: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/atmosphere/fogMorning: + palettes/earth/oilSlick: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/atmosphere/volcanicAsh: + palettes/earth/rockAndGravel: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/atmospheric/heatDuality: + palettes/earth/rustAndCorrosion: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/atmospheric/heatHaze: + palettes/earth/skinAndOrganic: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/atmospheric/lightning: + palettes/fantasy/bioluminescence: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/atmospheric/shockwave: + palettes/fantasy/bloodAndGore: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/atmospheric/smokeCold: + palettes/fantasy/fairyDust: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/atmospheric/smokeWarm: + palettes/fantasy/holyLight: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/atmospheric/sunriseGold: + palettes/fantasy/iceMagic: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/atmospheric/sunsetBinary: + palettes/fantasy/iceTriad: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/atmospheric/thermalMap: + palettes/fantasy/iris: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/atmospheric/thunderstorm: + palettes/fantasy/jellyfishGlow: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/confetti/confetti: + palettes/fantasy/mermaid: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/confetti/confettiGold: + palettes/fantasy/poisonAndVenom: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/confetti/confettiMonochromeBlue: + palettes/fantasy/unicorn: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/confetti/confettiMonochromeGreen: + palettes/fire/candlelight: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/confetti/confettiMonochromePink: + palettes/fire/default: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/confetti/confettiNeon: + palettes/fire/embersAndAsh: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/confetti/confettiPastel: + palettes/fire/fullFireGradient: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/confetti/confettiPatriotic: + palettes/fire/lavaLamp: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/confetti/confettiRainbow: + palettes/fire/metalSparks: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/confetti/confettiWinter: + palettes/fire/moltenMetal: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/earth/caustics: + palettes/fire/seed: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/earth/desertSand: + palettes/fireworks/blue: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/earth/mudAndDirt: + palettes/fireworks/blueStroke: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/earth/oilSlick: + palettes/fireworks/copper: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/earth/rockAndGravel: + palettes/fireworks/copperStroke: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/earth/rustAndCorrosion: + palettes/fireworks/gold: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/earth/skinAndOrganic: + palettes/fireworks/goldStroke: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/fantasy/bioluminescence: + palettes/fireworks/green: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/fantasy/bloodAndGore: + palettes/fireworks/greenStroke: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/fantasy/fairyDust: + palettes/fireworks/ice: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/fantasy/holyLight: + palettes/fireworks/iceStroke: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/fantasy/iceMagic: + palettes/fireworks/multicolor: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/fantasy/iceTriad: + palettes/fireworks/multicolorStroke: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/fantasy/jellyfishGlow: + palettes/fireworks/neon: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/fantasy/poisonAndVenom: + palettes/fireworks/neonStroke: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/fire/candlelight: + palettes/fireworks/pastel: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/fire/embersAndAsh: + palettes/fireworks/pastelStroke: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/fire/fire: + palettes/fireworks/purple: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/fire/fireSeed: + palettes/fireworks/purpleStroke: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/fire/fullFireGradient: + palettes/fireworks/rainbow: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/fire/lavaLamp: + palettes/fireworks/rainbowStroke: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/fire/metalSparks: + palettes/fireworks/red: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/fire/moltenMetal: + palettes/fireworks/redStroke: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/fireworks/fireworksBlue: + palettes/fireworks/silver: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/fireworks/fireworksBlueStroke: + palettes/fireworks/silverStroke: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/fireworks/fireworksCopper: + palettes/food/apple: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/fireworks/fireworksCopperStroke: + palettes/food/apple-green: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/fireworks/fireworksGold: + palettes/food/apple-red: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/fireworks/fireworksGoldStroke: + palettes/food/avocado: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/fireworks/fireworksGreen: + palettes/food/bell-peppers: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/fireworks/fireworksGreenStroke: + palettes/food/berries: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/fireworks/fireworksIce: + palettes/food/cherry: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/fireworks/fireworksIceStroke: + palettes/food/citrus-twist: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/fireworks/fireworksMulticolor: + palettes/food/gingerbread-house: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/fireworks/fireworksMulticolorStroke: + palettes/food/grapes: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/fireworks/fireworksNeon: + palettes/food/macaron: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/fireworks/fireworksNeonStroke: + palettes/food/melon: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/fireworks/fireworksPastel: + palettes/food/pineapple: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/fireworks/fireworksPastelStroke: + palettes/food/pizza: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/fireworks/fireworksPurple: + palettes/food/sakura: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/fireworks/fireworksPurpleStroke: + palettes/food/salad: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/fireworks/fireworksRainbowStroke: + palettes/food/spice-rack: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/fireworks/fireworksRed: + palettes/food/steak: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/fireworks/fireworksRedStroke: + palettes/food/sushi: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/fireworks/fireworksSilver: + palettes/food/tropical-fruits: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/fireworks/fireworksSilverStroke: + palettes/food/watermelon: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/impact/bulletHit: @@ -3812,6 +8421,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/impact/explosionDebris: @@ -3819,6 +8435,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/impact/glassBurst: @@ -3826,6 +8449,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/impact/meteorImpact: @@ -3833,6 +8463,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/impact/nuclearGlow: @@ -3840,6 +8477,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/impact/shockwaveBlast: @@ -3847,6 +8491,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/impact/splatterDark: @@ -3854,97 +8505,209 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build + publishDirectory: dist + + palettes/monochromatic/blues: + dependencies: + "@tsparticles/engine": + specifier: workspace:* + version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/monochromatic/monochromeBlues: + palettes/monochromatic/brown: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/monochromatic/monochromeBrown: + palettes/monochromatic/cyan: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/monochromatic/monochromeCyan: + palettes/monochromatic/gold: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/monochromatic/monochromeGold: + palettes/monochromatic/greens: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/monochromatic/monochromeGreens: + palettes/monochromatic/noir: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/monochromatic/monochromeNoir: + palettes/monochromatic/oranges: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/monochromatic/monochromeOranges: + palettes/monochromatic/pinks: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/monochromatic/monochromePinks: + palettes/monochromatic/purples: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/monochromatic/monochromePurples: + palettes/monochromatic/reds: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/monochromatic/monochromeReds: + palettes/monochromatic/silver: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/monochromatic/monochromeTeal: + palettes/monochromatic/teal: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/monochromatic/monochromeWhite: + palettes/monochromatic/white: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/monochromatic/monochromeYellows: + palettes/monochromatic/yellows: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/nature/autumnLeaves: @@ -3952,6 +8715,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/nature/cherryBlossom: @@ -3959,6 +8729,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/nature/dandelionSeeds: @@ -3966,6 +8743,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/nature/earthyNature: @@ -3973,6 +8757,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/nature/fireflies: @@ -3980,6 +8771,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/nature/forestCanopy: @@ -3987,6 +8785,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/nature/pollenAndSpores: @@ -3994,6 +8799,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/nature/snowfall: @@ -4001,6 +8813,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/nature/springBloom: @@ -4008,6 +8827,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/optics/bokehCold: @@ -4015,6 +8841,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/optics/bokehGold: @@ -4022,6 +8855,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/optics/bokehPastel: @@ -4029,6 +8869,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/optics/holographicShimmer: @@ -4036,6 +8883,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/optics/laserScatter: @@ -4043,6 +8897,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/optics/lensFlareDust: @@ -4050,6 +8911,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/optics/prismSpectrum: @@ -4057,41 +8925,83 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/pastel/pastelCool: + palettes/pastel/cool: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/pastel/pastelDream: + palettes/pastel/dream: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/pastel/pastelMint: + palettes/pastel/mint: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/pastel/pastelSunset: + palettes/pastel/sunset: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/pastel/pastelWarm: + palettes/pastel/warm: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/space/auroraBorealis: @@ -4099,6 +9009,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/space/cosmicRadiation: @@ -4106,6 +9023,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/space/darkMatter: @@ -4113,6 +9037,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/space/galaxyDust: @@ -4120,6 +9051,27 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build + publishDirectory: dist + + palettes/space/nebula: + dependencies: + "@tsparticles/engine": + specifier: workspace:* + version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/space/portal: @@ -4127,6 +9079,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/space/pulsar: @@ -4134,6 +9093,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/space/solarWind: @@ -4141,6 +9107,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/space/supernova: @@ -4148,6 +9121,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/spectrum/acidPair: @@ -4155,6 +9135,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/spectrum/cmySecondaries: @@ -4162,6 +9149,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/spectrum/dualityBlueYellow: @@ -4169,6 +9163,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/spectrum/dualityGreenMagenta: @@ -4176,6 +9177,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/spectrum/dualityRedCyan: @@ -4183,6 +9191,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/spectrum/fullSpectrum: @@ -4190,6 +9205,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/spectrum/okabeItoAccessible: @@ -4197,6 +9219,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/spectrum/prismScatter: @@ -4204,6 +9233,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/spectrum/rainbow: @@ -4211,6 +9247,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/spectrum/rgbPrimaries: @@ -4218,6 +9261,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/tech/crtPhosphor: @@ -4225,6 +9275,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/tech/glitch: @@ -4232,6 +9289,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/tech/hologram: @@ -4239,6 +9303,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/tech/lofiWarm: @@ -4246,6 +9317,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/tech/matrixRain: @@ -4253,6 +9331,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/tech/neonCity: @@ -4260,6 +9345,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/tech/networkNodes: @@ -4267,6 +9359,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/tech/plasmaArc: @@ -4274,6 +9373,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/tech/vaporwave: @@ -4281,41 +9387,83 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/vibrant/vibrant: + palettes/vibrant/default: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/vibrant/vibrantElectric: + palettes/vibrant/electric: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/vibrant/vibrantNeon: + palettes/vibrant/neon: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/vibrant/vibrantRetro: + palettes/vibrant/retro: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/vibrant/vibrantTropical: + palettes/vibrant/tropical: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/water/deepOcean: @@ -4323,6 +9471,27 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build + publishDirectory: dist + + palettes/water/default: + dependencies: + "@tsparticles/engine": + specifier: workspace:* + version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/water/foamAndBubbles: @@ -4330,6 +9499,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/water/fogCoastal: @@ -4337,6 +9513,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist palettes/water/inkInWater: @@ -4344,38 +9527,79 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/water/rain: + palettes/water/lagoon: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/water/risingBubbles: + palettes/water/rain: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/water/water: + palettes/water/risingBubbles: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist - palettes/water/waterSplash: + palettes/water/splash: dependencies: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist paths/branches: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -4386,6 +9610,12 @@ importers: paths/brownian: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -4396,6 +9626,12 @@ importers: paths/curlNoise: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -4409,6 +9645,12 @@ importers: paths/curves: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -4419,6 +9661,12 @@ importers: paths/fractalNoise: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -4435,6 +9683,12 @@ importers: paths/grid: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -4445,6 +9699,12 @@ importers: paths/levy: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -4455,6 +9715,12 @@ importers: paths/perlinNoise: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -4471,6 +9737,12 @@ importers: paths/polygon: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -4481,6 +9753,12 @@ importers: paths/random: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -4491,6 +9769,12 @@ importers: paths/simplexNoise: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -4507,6 +9791,12 @@ importers: paths/spiral: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -4517,6 +9807,12 @@ importers: paths/svg: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -4527,6 +9823,12 @@ importers: paths/zigzag: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -4537,6 +9839,12 @@ importers: plugins/absorbers: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -4547,6 +9855,12 @@ importers: plugins/backgroundMask: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -4554,6 +9868,12 @@ importers: plugins/blend: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -4564,6 +9884,12 @@ importers: "@tsparticles/canvas-utils": specifier: workspace:* version: link:../../utils/canvasUtils/dist + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -4571,6 +9897,12 @@ importers: plugins/colors/hex: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist @@ -4578,6 +9910,12 @@ importers: plugins/colors/hsl: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist @@ -4585,6 +9923,12 @@ importers: plugins/colors/hsv: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist @@ -4592,6 +9936,12 @@ importers: plugins/colors/hwb: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist @@ -4599,6 +9949,12 @@ importers: plugins/colors/lab: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist @@ -4606,6 +9962,12 @@ importers: plugins/colors/lch: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist @@ -4613,6 +9975,12 @@ importers: plugins/colors/named: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist @@ -4620,6 +9988,12 @@ importers: plugins/colors/oklab: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist @@ -4627,6 +10001,12 @@ importers: plugins/colors/oklch: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist @@ -4634,6 +10014,12 @@ importers: plugins/colors/rgb: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist @@ -4641,6 +10027,12 @@ importers: plugins/easings/back: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist @@ -4648,6 +10040,12 @@ importers: plugins/easings/bounce: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist @@ -4655,6 +10053,12 @@ importers: plugins/easings/circ: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist @@ -4662,6 +10066,12 @@ importers: plugins/easings/cubic: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist @@ -4669,6 +10079,12 @@ importers: plugins/easings/elastic: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist @@ -4676,6 +10092,12 @@ importers: plugins/easings/expo: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist @@ -4686,6 +10108,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist plugins/easings/linear: @@ -4693,6 +10122,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist plugins/easings/quad: @@ -4700,10 +10136,23 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build publishDirectory: dist plugins/easings/quart: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist @@ -4711,6 +10160,12 @@ importers: plugins/easings/quint: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist @@ -4718,6 +10173,12 @@ importers: plugins/easings/sigmoid: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist @@ -4725,6 +10186,12 @@ importers: plugins/easings/sine: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist @@ -4732,6 +10199,12 @@ importers: plugins/easings/smoothstep: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist @@ -4739,6 +10212,12 @@ importers: plugins/emitters: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -4752,6 +10231,12 @@ importers: "@tsparticles/canvas-utils": specifier: workspace:* version: link:../../../utils/canvasUtils/dist + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist @@ -4762,6 +10247,12 @@ importers: plugins/emittersShapes/circle: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist @@ -4772,6 +10263,12 @@ importers: plugins/emittersShapes/path: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist @@ -4782,6 +10279,12 @@ importers: plugins/emittersShapes/polygon: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist @@ -4792,6 +10295,12 @@ importers: plugins/emittersShapes/square: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist @@ -4802,6 +10311,12 @@ importers: plugins/exports/image: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist @@ -4809,6 +10324,12 @@ importers: plugins/exports/json: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist @@ -4816,6 +10337,12 @@ importers: plugins/exports/video: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../../engine/dist @@ -4823,6 +10350,12 @@ importers: plugins/infection: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -4833,6 +10366,12 @@ importers: plugins/interactivity: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -4840,6 +10379,12 @@ importers: plugins/manualParticles: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -4847,6 +10392,12 @@ importers: plugins/motion: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -4854,6 +10405,12 @@ importers: plugins/move: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -4861,6 +10418,12 @@ importers: plugins/poisson: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -4868,6 +10431,12 @@ importers: plugins/polygonMask: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -4875,6 +10444,12 @@ importers: plugins/responsive: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -4882,6 +10457,12 @@ importers: plugins/sounds: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -4889,6 +10470,12 @@ importers: plugins/themes: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -4896,6 +10483,12 @@ importers: plugins/trail: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -4903,6 +10496,12 @@ importers: plugins/zoom: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -4916,6 +10515,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build publishDirectory: dist presets/bigCircles: @@ -4926,6 +10532,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build publishDirectory: dist presets/bubbles: @@ -4939,6 +10552,13 @@ importers: "@tsparticles/plugin-emitters": specifier: workspace:* version: link:../../plugins/emitters/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build publishDirectory: dist presets/confetti: @@ -4951,7 +10571,7 @@ importers: version: link:../../engine/dist "@tsparticles/palette-confetti": specifier: workspace:* - version: link:../../palettes/confetti/confetti/dist + version: link:../../palettes/confetti/default/dist "@tsparticles/plugin-emitters": specifier: workspace:* version: link:../../plugins/emitters/dist @@ -4976,6 +10596,13 @@ importers: "@tsparticles/updater-wobble": specifier: workspace:* version: link:../../updaters/wobble/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build publishDirectory: dist presets/confettiCannon: @@ -4991,7 +10618,7 @@ importers: version: link:../../interactions/external/cannon/dist "@tsparticles/palette-confetti": specifier: workspace:* - version: link:../../palettes/confetti/confetti/dist + version: link:../../palettes/confetti/default/dist "@tsparticles/plugin-interactivity": specifier: workspace:* version: link:../../plugins/interactivity/dist @@ -5016,6 +10643,13 @@ importers: "@tsparticles/updater-wobble": specifier: workspace:* version: link:../../updaters/wobble/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build publishDirectory: dist presets/confettiExplosions: @@ -5028,7 +10662,7 @@ importers: version: link:../../engine/dist "@tsparticles/palette-confetti": specifier: workspace:* - version: link:../../palettes/confetti/confetti/dist + version: link:../../palettes/confetti/default/dist "@tsparticles/plugin-emitters": specifier: workspace:* version: link:../../plugins/emitters/dist @@ -5050,6 +10684,13 @@ importers: "@tsparticles/updater-wobble": specifier: workspace:* version: link:../../updaters/wobble/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build publishDirectory: dist presets/confettiFalling: @@ -5062,7 +10703,7 @@ importers: version: link:../../engine/dist "@tsparticles/palette-confetti": specifier: workspace:* - version: link:../../palettes/confetti/confetti/dist + version: link:../../palettes/confetti/default/dist "@tsparticles/plugin-motion": specifier: workspace:* version: link:../../plugins/motion/dist @@ -5081,6 +10722,13 @@ importers: "@tsparticles/updater-wobble": specifier: workspace:* version: link:../../updaters/wobble/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build publishDirectory: dist presets/confettiParade: @@ -5093,7 +10741,7 @@ importers: version: link:../../engine/dist "@tsparticles/palette-confetti": specifier: workspace:* - version: link:../../palettes/confetti/confetti/dist + version: link:../../palettes/confetti/default/dist "@tsparticles/plugin-emitters": specifier: workspace:* version: link:../../plugins/emitters/dist @@ -5118,6 +10766,13 @@ importers: "@tsparticles/updater-wobble": specifier: workspace:* version: link:../../updaters/wobble/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build publishDirectory: dist presets/fire: @@ -5134,6 +10789,13 @@ importers: "@tsparticles/plugin-interactivity": specifier: workspace:* version: link:../../plugins/interactivity/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build publishDirectory: dist presets/firefly: @@ -5153,6 +10815,13 @@ importers: "@tsparticles/updater-life": specifier: workspace:* version: link:../../updaters/life/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build publishDirectory: dist presets/fireworks: @@ -5187,6 +10856,13 @@ importers: "@tsparticles/updater-rotate": specifier: workspace:* version: link:../../updaters/rotate/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build publishDirectory: dist presets/fountain: @@ -5206,6 +10882,13 @@ importers: "@tsparticles/updater-destroy": specifier: workspace:* version: link:../../updaters/destroy/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build publishDirectory: dist presets/hyperspace: @@ -5228,6 +10911,13 @@ importers: "@tsparticles/updater-life": specifier: workspace:* version: link:../../updaters/life/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build publishDirectory: dist presets/links: @@ -5244,6 +10934,13 @@ importers: "@tsparticles/plugin-interactivity": specifier: workspace:* version: link:../../plugins/interactivity/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build publishDirectory: dist presets/matrix: @@ -5266,6 +10963,13 @@ importers: "@tsparticles/shape-matrix": specifier: workspace:* version: link:../../shapes/matrix/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build publishDirectory: dist presets/seaAnemone: @@ -5288,6 +10992,13 @@ importers: "@tsparticles/plugin-trail": specifier: workspace:* version: link:../../plugins/trail/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build publishDirectory: dist presets/snow: @@ -5304,6 +11015,13 @@ importers: "@tsparticles/updater-wobble": specifier: workspace:* version: link:../../updaters/wobble/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build publishDirectory: dist presets/squares: @@ -5329,6 +11047,13 @@ importers: "@tsparticles/updater-size": specifier: workspace:* version: link:../../updaters/size/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build publishDirectory: dist presets/stars: @@ -5339,6 +11064,13 @@ importers: "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build publishDirectory: dist presets/triangles: @@ -5355,10 +11087,23 @@ importers: "@tsparticles/plugin-interactivity": specifier: workspace:* version: link:../../plugins/interactivity/dist + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build publishDirectory: dist shapes/arrow: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -5366,6 +11111,12 @@ importers: shapes/cards: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -5376,6 +11127,12 @@ importers: shapes/circle: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -5383,6 +11140,12 @@ importers: shapes/cog: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -5393,6 +11156,12 @@ importers: "@tsparticles/canvas-utils": specifier: workspace:* version: link:../../utils/canvasUtils/dist + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -5400,6 +11169,12 @@ importers: shapes/heart: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -5407,6 +11182,12 @@ importers: shapes/image: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -5414,6 +11195,12 @@ importers: shapes/infinity: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -5421,6 +11208,12 @@ importers: shapes/line: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -5428,6 +11221,12 @@ importers: shapes/matrix: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -5435,6 +11234,12 @@ importers: shapes/path: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -5445,6 +11250,12 @@ importers: shapes/polygon: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -5452,6 +11263,12 @@ importers: shapes/rounded-polygon: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -5459,6 +11276,12 @@ importers: shapes/rounded-rect: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -5466,6 +11289,12 @@ importers: shapes/spiral: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -5473,6 +11302,12 @@ importers: shapes/square: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -5480,6 +11315,12 @@ importers: shapes/squircle: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -5487,6 +11328,12 @@ importers: shapes/star: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -5497,6 +11344,12 @@ importers: "@tsparticles/canvas-utils": specifier: workspace:* version: link:../../utils/canvasUtils/dist + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -5572,6 +11425,12 @@ importers: updaters/destroy: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -5579,6 +11438,12 @@ importers: updaters/gradient: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -5586,6 +11451,12 @@ importers: updaters/life: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -5593,6 +11464,12 @@ importers: updaters/opacity: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -5600,6 +11477,12 @@ importers: updaters/orbit: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -5607,6 +11490,12 @@ importers: updaters/outModes: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -5614,6 +11503,12 @@ importers: updaters/paint: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -5621,6 +11516,12 @@ importers: updaters/roll: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -5628,6 +11529,12 @@ importers: updaters/rotate: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -5635,6 +11542,12 @@ importers: updaters/size: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -5642,6 +11555,12 @@ importers: updaters/tilt: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -5649,6 +11568,12 @@ importers: updaters/twinkle: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -5656,6 +11581,12 @@ importers: updaters/wobble: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -5663,6 +11594,12 @@ importers: utils/canvasUtils: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -5670,6 +11607,12 @@ importers: utils/configs: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -5677,6 +11620,15 @@ importers: utils/fractalNoise: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build + "@tsparticles/engine": + specifier: workspace:* + version: link:../../engine/dist "@tsparticles/smooth-value-noise": specifier: workspace:* version: link:../smoothValueNoise/dist @@ -5684,6 +11636,12 @@ importers: utils/noiseField: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist @@ -5694,18 +11652,54 @@ importers: utils/pathUtils: devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build "@tsparticles/engine": specifier: workspace:* version: link:../../engine/dist publishDirectory: dist utils/perlinNoise: + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build + "@tsparticles/engine": + specifier: workspace:* + version: link:../../engine/dist publishDirectory: dist utils/simplexNoise: + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build + "@tsparticles/engine": + specifier: workspace:* + version: link:../../engine/dist publishDirectory: dist utils/smoothValueNoise: + devDependencies: + "@tsparticles/cli-build": + specifier: workspace:^ + version: link:../../cli/packages/cli-build + "@tsparticles/cli-command-build": + specifier: workspace:^ + version: link:../../cli/commands/build + "@tsparticles/engine": + specifier: workspace:* + version: link:../../engine/dist publishDirectory: dist utils/tests: @@ -5746,34 +11740,726 @@ importers: version: 3.0.2(jsdom@29.0.2(canvas@3.2.3)) vitest: specifier: ^4.1.4 - version: 4.1.4(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(jsdom@29.0.2(canvas@3.2.3))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) + version: 4.1.4(@opentelemetry/api@1.9.1)(@types/node@25.6.2)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(jsdom@29.0.2(canvas@3.2.3))(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) + + websites/confetti: + dependencies: + "@tsparticles/confetti": + specifier: workspace:* + version: link:../../bundles/confetti/dist + devDependencies: + "@eslint/js": + specifier: ^10.0.1 + version: 10.0.1(eslint@10.3.0(jiti@2.7.0)) + eslint: + specifier: ^10.3.0 + version: 10.3.0(jiti@2.7.0) + eslint-config-prettier: + specifier: ^10.1.8 + version: 10.1.8(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-prettier: + specifier: ^5.5.5 + version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.3.0(jiti@2.7.0)))(eslint@10.3.0(jiti@2.7.0))(prettier@3.8.3) + gh-pages: + specifier: ^6.3.0 + version: 6.3.0 + globals: + specifier: ^17.6.0 + version: 17.6.0 + prettier: + specifier: ^3.8.3 + version: 3.8.3 + vite: + specifier: ^8.0.11 + version: 8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + + websites/website: + dependencies: + "@tsparticles/all": + specifier: workspace:* + version: link:../../bundles/all/dist + "@tsparticles/confetti": + specifier: workspace:* + version: link:../../bundles/confetti/dist + "@tsparticles/configs": + specifier: workspace:* + version: link:../../utils/configs/dist + "@tsparticles/engine": + specifier: workspace:* + version: link:../../engine/dist + "@tsparticles/fireworks": + specifier: workspace:* + version: link:../../bundles/fireworks/dist + "@tsparticles/palette-acid-pair": + specifier: workspace:* + version: link:../../palettes/spectrum/acidPair/dist + "@tsparticles/palette-apple": + specifier: workspace:* + version: link:../../palettes/food/apple/dist + "@tsparticles/palette-apple-green": + specifier: workspace:* + version: link:../../palettes/food/apple-green/dist + "@tsparticles/palette-apple-red": + specifier: workspace:* + version: link:../../palettes/food/apple-red/dist + "@tsparticles/palette-aurora-borealis": + specifier: workspace:* + version: link:../../palettes/space/auroraBorealis/dist + "@tsparticles/palette-autumn-leaves": + specifier: workspace:* + version: link:../../palettes/nature/autumnLeaves/dist + "@tsparticles/palette-avocado": + specifier: workspace:* + version: link:../../palettes/food/avocado/dist + "@tsparticles/palette-bell-peppers": + specifier: workspace:* + version: link:../../palettes/food/bell-peppers/dist + "@tsparticles/palette-berries": + specifier: workspace:* + version: link:../../palettes/food/berries/dist + "@tsparticles/palette-bioluminescence": + specifier: workspace:* + version: link:../../palettes/fantasy/bioluminescence/dist + "@tsparticles/palette-blood-and-gore": + specifier: workspace:* + version: link:../../palettes/fantasy/bloodAndGore/dist + "@tsparticles/palette-bokeh-cold": + specifier: workspace:* + version: link:../../palettes/optics/bokehCold/dist + "@tsparticles/palette-bokeh-gold": + specifier: workspace:* + version: link:../../palettes/optics/bokehGold/dist + "@tsparticles/palette-bokeh-pastel": + specifier: workspace:* + version: link:../../palettes/optics/bokehPastel/dist + "@tsparticles/palette-bullet-hit": + specifier: workspace:* + version: link:../../palettes/impact/bulletHit/dist + "@tsparticles/palette-candlelight": + specifier: workspace:* + version: link:../../palettes/fire/candlelight/dist + "@tsparticles/palette-caustics": + specifier: workspace:* + version: link:../../palettes/earth/caustics/dist + "@tsparticles/palette-cherry": + specifier: workspace:* + version: link:../../palettes/food/cherry/dist + "@tsparticles/palette-cherry-blossom": + specifier: workspace:* + version: link:../../palettes/nature/cherryBlossom/dist + "@tsparticles/palette-citrus-twist": + specifier: workspace:* + version: link:../../palettes/food/citrus-twist/dist + "@tsparticles/palette-cmy-secondaries": + specifier: workspace:* + version: link:../../palettes/spectrum/cmySecondaries/dist + "@tsparticles/palette-colored-smoke-amber": + specifier: workspace:* + version: link:../../palettes/atmosphere/coloredSmokeAmber/dist + "@tsparticles/palette-colored-smoke-blue": + specifier: workspace:* + version: link:../../palettes/atmosphere/coloredSmokeBlue/dist + "@tsparticles/palette-colored-smoke-green": + specifier: workspace:* + version: link:../../palettes/atmosphere/coloredSmokeGreen/dist + "@tsparticles/palette-colored-smoke-magenta": + specifier: workspace:* + version: link:../../palettes/atmosphere/coloredSmokeMagenta/dist + "@tsparticles/palette-colored-smoke-orange": + specifier: workspace:* + version: link:../../palettes/atmosphere/coloredSmokeOrange/dist + "@tsparticles/palette-colored-smoke-purple": + specifier: workspace:* + version: link:../../palettes/atmosphere/coloredSmokePurple/dist + "@tsparticles/palette-colored-smoke-rainbow": + specifier: workspace:* + version: link:../../palettes/atmosphere/coloredSmokeRainbow/dist + "@tsparticles/palette-colored-smoke-red": + specifier: workspace:* + version: link:../../palettes/atmosphere/coloredSmokeRed/dist + "@tsparticles/palette-colored-smoke-teal": + specifier: workspace:* + version: link:../../palettes/atmosphere/coloredSmokeTeal/dist + "@tsparticles/palette-confetti": + specifier: workspace:* + version: link:../../palettes/confetti/default/dist + "@tsparticles/palette-confetti-gold": + specifier: workspace:* + version: link:../../palettes/confetti/gold/dist + "@tsparticles/palette-confetti-monochrome-blue": + specifier: workspace:* + version: link:../../palettes/confetti/monochromeBlue/dist + "@tsparticles/palette-confetti-monochrome-green": + specifier: workspace:* + version: link:../../palettes/confetti/monochromeGreen/dist + "@tsparticles/palette-confetti-monochrome-pink": + specifier: workspace:* + version: link:../../palettes/confetti/monochromePink/dist + "@tsparticles/palette-confetti-monochrome-purple": + specifier: workspace:* + version: link:../../palettes/confetti/monochromePurple/dist + "@tsparticles/palette-confetti-monochrome-red": + specifier: workspace:* + version: link:../../palettes/confetti/monochromeRed/dist + "@tsparticles/palette-confetti-neon": + specifier: workspace:* + version: link:../../palettes/confetti/neon/dist + "@tsparticles/palette-confetti-pastel": + specifier: workspace:* + version: link:../../palettes/confetti/pastel/dist + "@tsparticles/palette-confetti-patriotic": + specifier: workspace:* + version: link:../../palettes/confetti/patriotic/dist + "@tsparticles/palette-confetti-rainbow": + specifier: workspace:* + version: link:../../palettes/confetti/rainbow/dist + "@tsparticles/palette-confetti-winter": + specifier: workspace:* + version: link:../../palettes/confetti/winter/dist + "@tsparticles/palette-cosmic-radiation": + specifier: workspace:* + version: link:../../palettes/space/cosmicRadiation/dist + "@tsparticles/palette-crt-phosphor": + specifier: workspace:* + version: link:../../palettes/tech/crtPhosphor/dist + "@tsparticles/palette-dandelion-seeds": + specifier: workspace:* + version: link:../../palettes/nature/dandelionSeeds/dist + "@tsparticles/palette-dark-matter": + specifier: workspace:* + version: link:../../palettes/space/darkMatter/dist + "@tsparticles/palette-deep-ocean": + specifier: workspace:* + version: link:../../palettes/water/deepOcean/dist + "@tsparticles/palette-desert-sand": + specifier: workspace:* + version: link:../../palettes/earth/desertSand/dist + "@tsparticles/palette-duality-blue-yellow": + specifier: workspace:* + version: link:../../palettes/spectrum/dualityBlueYellow/dist + "@tsparticles/palette-duality-green-magenta": + specifier: workspace:* + version: link:../../palettes/spectrum/dualityGreenMagenta/dist + "@tsparticles/palette-duality-red-cyan": + specifier: workspace:* + version: link:../../palettes/spectrum/dualityRedCyan/dist + "@tsparticles/palette-dust-haze": + specifier: workspace:* + version: link:../../palettes/atmosphere/dustHaze/dist + "@tsparticles/palette-earthy-nature": + specifier: workspace:* + version: link:../../palettes/nature/earthyNature/dist + "@tsparticles/palette-embers-and-ash": + specifier: workspace:* + version: link:../../palettes/fire/embersAndAsh/dist + "@tsparticles/palette-explosion-debris": + specifier: workspace:* + version: link:../../palettes/impact/explosionDebris/dist + "@tsparticles/palette-fairy-dust": + specifier: workspace:* + version: link:../../palettes/fantasy/fairyDust/dist + "@tsparticles/palette-fire": + specifier: workspace:* + version: link:../../palettes/fire/default/dist + "@tsparticles/palette-fire-seed": + specifier: workspace:* + version: link:../../palettes/fire/seed/dist + "@tsparticles/palette-fireflies": + specifier: workspace:* + version: link:../../palettes/nature/fireflies/dist + "@tsparticles/palette-fireworks-blue": + specifier: workspace:* + version: link:../../palettes/fireworks/blue/dist + "@tsparticles/palette-fireworks-blue-stroke": + specifier: workspace:* + version: link:../../palettes/fireworks/blueStroke/dist + "@tsparticles/palette-fireworks-copper": + specifier: workspace:* + version: link:../../palettes/fireworks/copper/dist + "@tsparticles/palette-fireworks-copper-stroke": + specifier: workspace:* + version: link:../../palettes/fireworks/copperStroke/dist + "@tsparticles/palette-fireworks-gold": + specifier: workspace:* + version: link:../../palettes/fireworks/gold/dist + "@tsparticles/palette-fireworks-gold-stroke": + specifier: workspace:* + version: link:../../palettes/fireworks/goldStroke/dist + "@tsparticles/palette-fireworks-green": + specifier: workspace:* + version: link:../../palettes/fireworks/green/dist + "@tsparticles/palette-fireworks-green-stroke": + specifier: workspace:* + version: link:../../palettes/fireworks/greenStroke/dist + "@tsparticles/palette-fireworks-ice": + specifier: workspace:* + version: link:../../palettes/fireworks/ice/dist + "@tsparticles/palette-fireworks-ice-stroke": + specifier: workspace:* + version: link:../../palettes/fireworks/iceStroke/dist + "@tsparticles/palette-fireworks-multicolor": + specifier: workspace:* + version: link:../../palettes/fireworks/multicolor/dist + "@tsparticles/palette-fireworks-multicolor-stroke": + specifier: workspace:* + version: link:../../palettes/fireworks/multicolorStroke/dist + "@tsparticles/palette-fireworks-neon": + specifier: workspace:* + version: link:../../palettes/fireworks/neon/dist + "@tsparticles/palette-fireworks-neon-stroke": + specifier: workspace:* + version: link:../../palettes/fireworks/neonStroke/dist + "@tsparticles/palette-fireworks-pastel": + specifier: workspace:* + version: link:../../palettes/fireworks/pastel/dist + "@tsparticles/palette-fireworks-pastel-stroke": + specifier: workspace:* + version: link:../../palettes/fireworks/pastelStroke/dist + "@tsparticles/palette-fireworks-purple": + specifier: workspace:* + version: link:../../palettes/fireworks/purple/dist + "@tsparticles/palette-fireworks-purple-stroke": + specifier: workspace:* + version: link:../../palettes/fireworks/purpleStroke/dist + "@tsparticles/palette-fireworks-rainbow": + specifier: workspace:* + version: link:../../palettes/fireworks/rainbow/dist + "@tsparticles/palette-fireworks-rainbow-stroke": + specifier: workspace:* + version: link:../../palettes/fireworks/rainbowStroke/dist + "@tsparticles/palette-fireworks-red": + specifier: workspace:* + version: link:../../palettes/fireworks/red/dist + "@tsparticles/palette-fireworks-red-stroke": + specifier: workspace:* + version: link:../../palettes/fireworks/redStroke/dist + "@tsparticles/palette-fireworks-silver": + specifier: workspace:* + version: link:../../palettes/fireworks/silver/dist + "@tsparticles/palette-fireworks-silver-stroke": + specifier: workspace:* + version: link:../../palettes/fireworks/silverStroke/dist + "@tsparticles/palette-foam-and-bubbles": + specifier: workspace:* + version: link:../../palettes/water/foamAndBubbles/dist + "@tsparticles/palette-fog-coastal": + specifier: workspace:* + version: link:../../palettes/water/fogCoastal/dist + "@tsparticles/palette-fog-morning": + specifier: workspace:* + version: link:../../palettes/atmosphere/fogMorning/dist + "@tsparticles/palette-forest-canopy": + specifier: workspace:* + version: link:../../palettes/nature/forestCanopy/dist + "@tsparticles/palette-full-fire-gradient": + specifier: workspace:* + version: link:../../palettes/fire/fullFireGradient/dist + "@tsparticles/palette-full-spectrum": + specifier: workspace:* + version: link:../../palettes/spectrum/fullSpectrum/dist + "@tsparticles/palette-galaxy-dust": + specifier: workspace:* + version: link:../../palettes/space/galaxyDust/dist + "@tsparticles/palette-gingerbread-house": + specifier: workspace:* + version: link:../../palettes/food/gingerbread-house/dist + "@tsparticles/palette-glass-burst": + specifier: workspace:* + version: link:../../palettes/impact/glassBurst/dist + "@tsparticles/palette-glitch": + specifier: workspace:* + version: link:../../palettes/tech/glitch/dist + "@tsparticles/palette-grapes": + specifier: workspace:* + version: link:../../palettes/food/grapes/dist + "@tsparticles/palette-heat-duality": + specifier: workspace:* + version: link:../../palettes/atmospheric/heatDuality/dist + "@tsparticles/palette-heat-haze": + specifier: workspace:* + version: link:../../palettes/atmospheric/heatHaze/dist + "@tsparticles/palette-hologram": + specifier: workspace:* + version: link:../../palettes/tech/hologram/dist + "@tsparticles/palette-holographic-shimmer": + specifier: workspace:* + version: link:../../palettes/optics/holographicShimmer/dist + "@tsparticles/palette-holy-light": + specifier: workspace:* + version: link:../../palettes/fantasy/holyLight/dist + "@tsparticles/palette-ice-magic": + specifier: workspace:* + version: link:../../palettes/fantasy/iceMagic/dist + "@tsparticles/palette-ice-triad": + specifier: workspace:* + version: link:../../palettes/fantasy/iceTriad/dist + "@tsparticles/palette-ink-in-water": + specifier: workspace:* + version: link:../../palettes/water/inkInWater/dist + "@tsparticles/palette-iris": + specifier: workspace:* + version: link:../../palettes/fantasy/iris/dist + "@tsparticles/palette-jellyfish-glow": + specifier: workspace:* + version: link:../../palettes/fantasy/jellyfishGlow/dist + "@tsparticles/palette-lagoon": + specifier: workspace:* + version: link:../../palettes/water/lagoon/dist + "@tsparticles/palette-laser-scatter": + specifier: workspace:* + version: link:../../palettes/optics/laserScatter/dist + "@tsparticles/palette-lava-lamp": + specifier: workspace:* + version: link:../../palettes/fire/lavaLamp/dist + "@tsparticles/palette-lens-flare-dust": + specifier: workspace:* + version: link:../../palettes/optics/lensFlareDust/dist + "@tsparticles/palette-lightning": + specifier: workspace:* + version: link:../../palettes/atmospheric/lightning/dist + "@tsparticles/palette-lofi-warm": + specifier: workspace:* + version: link:../../palettes/tech/lofiWarm/dist + "@tsparticles/palette-macaron": + specifier: workspace:* + version: link:../../palettes/food/macaron/dist + "@tsparticles/palette-matrix-rain": + specifier: workspace:* + version: link:../../palettes/tech/matrixRain/dist + "@tsparticles/palette-melon": + specifier: workspace:* + version: link:../../palettes/food/melon/dist + "@tsparticles/palette-mermaid": + specifier: workspace:* + version: link:../../palettes/fantasy/mermaid/dist + "@tsparticles/palette-metal-sparks": + specifier: workspace:* + version: link:../../palettes/fire/metalSparks/dist + "@tsparticles/palette-meteor-impact": + specifier: workspace:* + version: link:../../palettes/impact/meteorImpact/dist + "@tsparticles/palette-molten-metal": + specifier: workspace:* + version: link:../../palettes/fire/moltenMetal/dist + "@tsparticles/palette-monochrome-blues": + specifier: workspace:* + version: link:../../palettes/monochromatic/blues/dist + "@tsparticles/palette-monochrome-brown": + specifier: workspace:* + version: link:../../palettes/monochromatic/brown/dist + "@tsparticles/palette-monochrome-cyan": + specifier: workspace:* + version: link:../../palettes/monochromatic/cyan/dist + "@tsparticles/palette-monochrome-gold": + specifier: workspace:* + version: link:../../palettes/monochromatic/gold/dist + "@tsparticles/palette-monochrome-greens": + specifier: workspace:* + version: link:../../palettes/monochromatic/greens/dist + "@tsparticles/palette-monochrome-noir": + specifier: workspace:* + version: link:../../palettes/monochromatic/noir/dist + "@tsparticles/palette-monochrome-oranges": + specifier: workspace:* + version: link:../../palettes/monochromatic/oranges/dist + "@tsparticles/palette-monochrome-pinks": + specifier: workspace:* + version: link:../../palettes/monochromatic/pinks/dist + "@tsparticles/palette-monochrome-purples": + specifier: workspace:* + version: link:../../palettes/monochromatic/purples/dist + "@tsparticles/palette-monochrome-reds": + specifier: workspace:* + version: link:../../palettes/monochromatic/reds/dist + "@tsparticles/palette-monochrome-silver": + specifier: workspace:* + version: link:../../palettes/monochromatic/silver/dist + "@tsparticles/palette-monochrome-teal": + specifier: workspace:* + version: link:../../palettes/monochromatic/teal/dist + "@tsparticles/palette-monochrome-white": + specifier: workspace:* + version: link:../../palettes/monochromatic/white/dist + "@tsparticles/palette-monochrome-yellows": + specifier: workspace:* + version: link:../../palettes/monochromatic/yellows/dist + "@tsparticles/palette-mud-and-dirt": + specifier: workspace:* + version: link:../../palettes/earth/mudAndDirt/dist + "@tsparticles/palette-nebula": + specifier: workspace:* + version: link:../../palettes/space/nebula/dist + "@tsparticles/palette-neon-city": + specifier: workspace:* + version: link:../../palettes/tech/neonCity/dist + "@tsparticles/palette-network-nodes": + specifier: workspace:* + version: link:../../palettes/tech/networkNodes/dist + "@tsparticles/palette-nuclear-glow": + specifier: workspace:* + version: link:../../palettes/impact/nuclearGlow/dist + "@tsparticles/palette-oil-slick": + specifier: workspace:* + version: link:../../palettes/earth/oilSlick/dist + "@tsparticles/palette-okabe-ito-accessible": + specifier: workspace:* + version: link:../../palettes/spectrum/okabeItoAccessible/dist + "@tsparticles/palette-pastel-cool": + specifier: workspace:* + version: link:../../palettes/pastel/cool/dist + "@tsparticles/palette-pastel-dream": + specifier: workspace:* + version: link:../../palettes/pastel/dream/dist + "@tsparticles/palette-pastel-mint": + specifier: workspace:* + version: link:../../palettes/pastel/mint/dist + "@tsparticles/palette-pastel-sunset": + specifier: workspace:* + version: link:../../palettes/pastel/sunset/dist + "@tsparticles/palette-pastel-warm": + specifier: workspace:* + version: link:../../palettes/pastel/warm/dist + "@tsparticles/palette-pineapple": + specifier: workspace:* + version: link:../../palettes/food/pineapple/dist + "@tsparticles/palette-pizza": + specifier: workspace:* + version: link:../../palettes/food/pizza/dist + "@tsparticles/palette-plasma-arc": + specifier: workspace:* + version: link:../../palettes/tech/plasmaArc/dist + "@tsparticles/palette-poison-and-venom": + specifier: workspace:* + version: link:../../palettes/fantasy/poisonAndVenom/dist + "@tsparticles/palette-pollen-and-spores": + specifier: workspace:* + version: link:../../palettes/nature/pollenAndSpores/dist + "@tsparticles/palette-portal": + specifier: workspace:* + version: link:../../palettes/space/portal/dist + "@tsparticles/palette-prism-scatter": + specifier: workspace:* + version: link:../../palettes/spectrum/prismScatter/dist + "@tsparticles/palette-prism-spectrum": + specifier: workspace:* + version: link:../../palettes/optics/prismSpectrum/dist + "@tsparticles/palette-pulsar": + specifier: workspace:* + version: link:../../palettes/space/pulsar/dist + "@tsparticles/palette-rain": + specifier: workspace:* + version: link:../../palettes/water/rain/dist + "@tsparticles/palette-rainbow": + specifier: workspace:* + version: link:../../palettes/spectrum/rainbow/dist + "@tsparticles/palette-rgb-primaries": + specifier: workspace:* + version: link:../../palettes/spectrum/rgbPrimaries/dist + "@tsparticles/palette-rising-bubbles": + specifier: workspace:* + version: link:../../palettes/water/risingBubbles/dist + "@tsparticles/palette-rock-and-gravel": + specifier: workspace:* + version: link:../../palettes/earth/rockAndGravel/dist + "@tsparticles/palette-rust-and-corrosion": + specifier: workspace:* + version: link:../../palettes/earth/rustAndCorrosion/dist + "@tsparticles/palette-sakura": + specifier: workspace:* + version: link:../../palettes/food/sakura/dist + "@tsparticles/palette-salad": + specifier: workspace:* + version: link:../../palettes/food/salad/dist + "@tsparticles/palette-shockwave": + specifier: workspace:* + version: link:../../palettes/atmospheric/shockwave/dist + "@tsparticles/palette-shockwave-blast": + specifier: workspace:* + version: link:../../palettes/impact/shockwaveBlast/dist + "@tsparticles/palette-skin-and-organic": + specifier: workspace:* + version: link:../../palettes/earth/skinAndOrganic/dist + "@tsparticles/palette-smoke-cold": + specifier: workspace:* + version: link:../../palettes/atmospheric/smokeCold/dist + "@tsparticles/palette-smoke-warm": + specifier: workspace:* + version: link:../../palettes/atmospheric/smokeWarm/dist + "@tsparticles/palette-snowfall": + specifier: workspace:* + version: link:../../palettes/nature/snowfall/dist + "@tsparticles/palette-solar-wind": + specifier: workspace:* + version: link:../../palettes/space/solarWind/dist + "@tsparticles/palette-spice-rack": + specifier: workspace:* + version: link:../../palettes/food/spice-rack/dist + "@tsparticles/palette-splatter-dark": + specifier: workspace:* + version: link:../../palettes/impact/splatterDark/dist + "@tsparticles/palette-spring-bloom": + specifier: workspace:* + version: link:../../palettes/nature/springBloom/dist + "@tsparticles/palette-steak": + specifier: workspace:* + version: link:../../palettes/food/steak/dist + "@tsparticles/palette-sunrise-gold": + specifier: workspace:* + version: link:../../palettes/atmospheric/sunriseGold/dist + "@tsparticles/palette-sunset-binary": + specifier: workspace:* + version: link:../../palettes/atmospheric/sunsetBinary/dist + "@tsparticles/palette-supernova": + specifier: workspace:* + version: link:../../palettes/space/supernova/dist + "@tsparticles/palette-sushi": + specifier: workspace:* + version: link:../../palettes/food/sushi/dist + "@tsparticles/palette-thermal-map": + specifier: workspace:* + version: link:../../palettes/atmospheric/thermalMap/dist + "@tsparticles/palette-thunderstorm": + specifier: workspace:* + version: link:../../palettes/atmospheric/thunderstorm/dist + "@tsparticles/palette-tropical-fruits": + specifier: workspace:* + version: link:../../palettes/food/tropical-fruits/dist + "@tsparticles/palette-unicorn": + specifier: workspace:* + version: link:../../palettes/fantasy/unicorn/dist + "@tsparticles/palette-vaporwave": + specifier: workspace:* + version: link:../../palettes/tech/vaporwave/dist + "@tsparticles/palette-vibrant": + specifier: workspace:* + version: link:../../palettes/vibrant/default/dist + "@tsparticles/palette-vibrant-electric": + specifier: workspace:* + version: link:../../palettes/vibrant/electric/dist + "@tsparticles/palette-vibrant-neon": + specifier: workspace:* + version: link:../../palettes/vibrant/neon/dist + "@tsparticles/palette-vibrant-retro": + specifier: workspace:* + version: link:../../palettes/vibrant/retro/dist + "@tsparticles/palette-vibrant-tropical": + specifier: workspace:* + version: link:../../palettes/vibrant/tropical/dist + "@tsparticles/palette-volcanic-ash": + specifier: workspace:* + version: link:../../palettes/atmosphere/volcanicAsh/dist + "@tsparticles/palette-water": + specifier: workspace:* + version: link:../../palettes/water/default/dist + "@tsparticles/palette-water-splash": + specifier: workspace:* + version: link:../../palettes/water/splash/dist + "@tsparticles/palette-watermelon": + specifier: workspace:* + version: link:../../palettes/food/watermelon/dist + "@tsparticles/particles": + specifier: workspace:* + version: link:../../bundles/particles/dist + "@tsparticles/preset-ambient": + specifier: workspace:* + version: link:../../presets/ambient/dist + "@tsparticles/preset-big-circles": + specifier: workspace:* + version: link:../../presets/bigCircles/dist + "@tsparticles/preset-bubbles": + specifier: workspace:* + version: link:../../presets/bubbles/dist + "@tsparticles/preset-confetti": + specifier: workspace:* + version: link:../../presets/confetti/dist + "@tsparticles/preset-confetti-cannon": + specifier: workspace:* + version: link:../../presets/confettiCannon/dist + "@tsparticles/preset-confetti-explosions": + specifier: workspace:* + version: link:../../presets/confettiExplosions/dist + "@tsparticles/preset-confetti-falling": + specifier: workspace:* + version: link:../../presets/confettiFalling/dist + "@tsparticles/preset-confetti-parade": + specifier: workspace:* + version: link:../../presets/confettiParade/dist + "@tsparticles/preset-fire": + specifier: workspace:* + version: link:../../presets/fire/dist + "@tsparticles/preset-firefly": + specifier: workspace:* + version: link:../../presets/firefly/dist + "@tsparticles/preset-fireworks": + specifier: workspace:* + version: link:../../presets/fireworks/dist + "@tsparticles/preset-fountain": + specifier: workspace:* + version: link:../../presets/fountain/dist + "@tsparticles/preset-hyperspace": + specifier: workspace:* + version: link:../../presets/hyperspace/dist + "@tsparticles/preset-links": + specifier: workspace:* + version: link:../../presets/links/dist + "@tsparticles/preset-matrix": + specifier: workspace:* + version: link:../../presets/matrix/dist + "@tsparticles/preset-sea-anemone": + specifier: workspace:* + version: link:../../presets/seaAnemone/dist + "@tsparticles/preset-snow": + specifier: workspace:* + version: link:../../presets/snow/dist + "@tsparticles/preset-squares": + specifier: workspace:* + version: link:../../presets/squares/dist + "@tsparticles/preset-stars": + specifier: workspace:* + version: link:../../presets/stars/dist + "@tsparticles/preset-triangles": + specifier: workspace:* + version: link:../../presets/triangles/dist + "@tsparticles/slim": + specifier: workspace:* + version: link:../../bundles/slim/dist + tsparticles: + specifier: workspace:* + version: link:../../bundles/full/dist + devDependencies: + prettier: + specifier: ^3.8.3 + version: 3.8.3 + vitepress: + specifier: ^1.6.4 + version: 1.6.4(@algolia/client-search@5.48.1)(@types/node@25.6.2)(@types/react@18.3.28)(axios@1.15.0)(fuse.js@7.3.0)(less@4.6.4)(lightningcss@1.32.0)(postcss@8.5.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.99.0)(search-insights@2.17.3)(stylus@0.64.0)(terser@5.46.1)(typescript@6.0.3) wrappers/angular: dependencies: "@angular/animations": - specifier: ~21.2.8 - version: 21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)) + specifier: ~21.2.9 + version: 21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1)) "@angular/common": - specifier: ~21.2.8 - version: 21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + specifier: ~21.2.9 + version: 21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) "@angular/compiler": - specifier: ~21.2.8 - version: 21.2.8 + specifier: ~21.2.9 + version: 21.2.9 "@angular/core": - specifier: ~21.2.8 - version: 21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1) + specifier: ~21.2.9 + version: 21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1) "@angular/forms": - specifier: ~21.2.8 - version: 21.2.8(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + specifier: ~21.2.9 + version: 21.2.9(@angular/common@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.9(@angular/animations@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) "@angular/platform-browser": - specifier: ~21.2.8 - version: 21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)) + specifier: ~21.2.9 + version: 21.2.9(@angular/animations@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1)) "@angular/platform-browser-dynamic": - specifier: ~21.2.8 - version: 21.2.8(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))) + specifier: ~21.2.9 + version: 21.2.9(@angular/common@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@21.2.9)(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.9(@angular/animations@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))) "@angular/router": - specifier: ~21.2.8 - version: 21.2.8(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + specifier: ~21.2.9 + version: 21.2.9(@angular/common@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.9(@angular/animations@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) "@tsparticles/engine": specifier: workspace:^ version: link:../../engine/dist @@ -5789,16 +12475,16 @@ importers: devDependencies: "@angular-devkit/build-angular": specifier: ~21.2.7 - version: 21.2.7(abd474a72fce5c55ab9d1bbe6c9cd57f) + version: 21.2.7(11aad3ff90c627164ed7012b1f438aef) "@angular/cli": specifier: ~21.2.7 version: 21.2.7(@types/node@25.6.0)(chokidar@5.0.0) "@angular/compiler-cli": - specifier: ~21.2.8 - version: 21.2.8(@angular/compiler@21.2.8)(typescript@5.9.3) + specifier: ~21.2.9 + version: 21.2.9(@angular/compiler@21.2.9)(typescript@5.9.3) "@tsparticles/prettier-config": - specifier: ^3.4.6 - version: 3.4.6(prettier@3.8.2) + specifier: workspace:^ + version: link:../../cli/utils/prettier-config "@types/jasmine": specifier: ~6.0.0 version: 6.0.0 @@ -5825,10 +12511,10 @@ importers: version: 2.2.0(jasmine-core@6.2.0)(karma-jasmine@5.1.0(karma@6.4.4))(karma@6.4.4) ng-packagr: specifier: ~21.2.2 - version: 21.2.2(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3) + version: 21.2.2(@angular/compiler-cli@21.2.9(@angular/compiler@21.2.9)(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3) prettier: - specifier: ^3.8.2 - version: 3.8.2 + specifier: ^3.8.3 + version: 3.8.3 typescript: specifier: ~5.9.3 version: 5.9.3 @@ -5837,29 +12523,29 @@ importers: wrappers/angular-confetti: dependencies: "@angular/animations": - specifier: ~21.2.8 - version: 21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)) + specifier: ~21.2.9 + version: 21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1)) "@angular/common": - specifier: ~21.2.8 - version: 21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + specifier: ~21.2.9 + version: 21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) "@angular/compiler": - specifier: ~21.2.8 - version: 21.2.8 + specifier: ~21.2.9 + version: 21.2.9 "@angular/core": - specifier: ~21.2.8 - version: 21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1) + specifier: ~21.2.9 + version: 21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1) "@angular/forms": - specifier: ~21.2.8 - version: 21.2.8(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + specifier: ~21.2.9 + version: 21.2.9(@angular/common@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.9(@angular/animations@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) "@angular/platform-browser": - specifier: ~21.2.8 - version: 21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)) + specifier: ~21.2.9 + version: 21.2.9(@angular/animations@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1)) "@angular/platform-browser-dynamic": - specifier: ~21.2.8 - version: 21.2.8(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))) + specifier: ~21.2.9 + version: 21.2.9(@angular/common@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@21.2.9)(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.9(@angular/animations@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))) "@angular/router": - specifier: ~21.2.8 - version: 21.2.8(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + specifier: ~21.2.9 + version: 21.2.9(@angular/common@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.9(@angular/animations@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) "@tsparticles/basic": specifier: workspace:^ version: link:../../bundles/basic/dist @@ -5956,16 +12642,16 @@ importers: devDependencies: "@angular-devkit/build-angular": specifier: ~21.2.7 - version: 21.2.7(abd474a72fce5c55ab9d1bbe6c9cd57f) + version: 21.2.7(11aad3ff90c627164ed7012b1f438aef) "@angular/cli": specifier: ~21.2.7 version: 21.2.7(@types/node@25.6.0)(chokidar@5.0.0) "@angular/compiler-cli": - specifier: ~21.2.8 - version: 21.2.8(@angular/compiler@21.2.8)(typescript@5.9.3) + specifier: ~21.2.9 + version: 21.2.9(@angular/compiler@21.2.9)(typescript@5.9.3) "@tsparticles/prettier-config": - specifier: ^3.4.6 - version: 3.4.6(prettier@3.8.2) + specifier: workspace:^ + version: link:../../cli/utils/prettier-config "@types/jasmine": specifier: ~6.0.0 version: 6.0.0 @@ -5992,10 +12678,10 @@ importers: version: 2.2.0(jasmine-core@6.2.0)(karma-jasmine@5.1.0(karma@6.4.4))(karma@6.4.4) ng-packagr: specifier: ~21.2.2 - version: 21.2.2(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3) + version: 21.2.2(@angular/compiler-cli@21.2.9(@angular/compiler@21.2.9)(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3) prettier: - specifier: ^3.8.2 - version: 3.8.2 + specifier: ^3.8.3 + version: 3.8.3 typescript: specifier: ~5.9.3 version: 5.9.3 @@ -6004,29 +12690,29 @@ importers: wrappers/angular-fireworks: dependencies: "@angular/animations": - specifier: ~21.2.8 - version: 21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)) + specifier: ~21.2.9 + version: 21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1)) "@angular/common": - specifier: ~21.2.8 - version: 21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + specifier: ~21.2.9 + version: 21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) "@angular/compiler": - specifier: ~21.2.8 - version: 21.2.8 + specifier: ~21.2.9 + version: 21.2.9 "@angular/core": - specifier: ~21.2.8 - version: 21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1) + specifier: ~21.2.9 + version: 21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1) "@angular/forms": - specifier: ~21.2.8 - version: 21.2.8(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + specifier: ~21.2.9 + version: 21.2.9(@angular/common@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.9(@angular/animations@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) "@angular/platform-browser": - specifier: ~21.2.8 - version: 21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)) + specifier: ~21.2.9 + version: 21.2.9(@angular/animations@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1)) "@angular/platform-browser-dynamic": - specifier: ~21.2.8 - version: 21.2.8(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))) + specifier: ~21.2.9 + version: 21.2.9(@angular/common@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@21.2.9)(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.9(@angular/animations@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))) "@angular/router": - specifier: ~21.2.8 - version: 21.2.8(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + specifier: ~21.2.9 + version: 21.2.9(@angular/common@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.9(@angular/animations@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) "@tsparticles/basic": specifier: workspace:^ version: link:../../bundles/basic/dist @@ -6102,16 +12788,16 @@ importers: devDependencies: "@angular-devkit/build-angular": specifier: ~21.2.7 - version: 21.2.7(abd474a72fce5c55ab9d1bbe6c9cd57f) + version: 21.2.7(11aad3ff90c627164ed7012b1f438aef) "@angular/cli": specifier: ~21.2.7 version: 21.2.7(@types/node@25.6.0)(chokidar@5.0.0) "@angular/compiler-cli": - specifier: ~21.2.8 - version: 21.2.8(@angular/compiler@21.2.8)(typescript@5.9.3) + specifier: ~21.2.9 + version: 21.2.9(@angular/compiler@21.2.9)(typescript@5.9.3) "@tsparticles/prettier-config": - specifier: ^3.4.6 - version: 3.4.6(prettier@3.8.2) + specifier: workspace:^ + version: link:../../cli/utils/prettier-config "@types/jasmine": specifier: ~6.0.0 version: 6.0.0 @@ -6138,10 +12824,10 @@ importers: version: 2.2.0(jasmine-core@6.2.0)(karma-jasmine@5.1.0(karma@6.4.4))(karma@6.4.4) ng-packagr: specifier: ~21.2.2 - version: 21.2.2(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3) + version: 21.2.2(@angular/compiler-cli@21.2.9(@angular/compiler@21.2.9)(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3) prettier: - specifier: ^3.8.2 - version: 3.8.2 + specifier: ^3.8.3 + version: 3.8.3 typescript: specifier: ~5.9.3 version: 5.9.3 @@ -6153,9 +12839,18 @@ importers: specifier: workspace:^ version: link:../../engine/dist devDependencies: + "@tsparticles/prettier-config": + specifier: workspace:^ + version: link:../../cli/utils/prettier-config astro: - specifier: ^6.1.6 - version: 6.1.6(@types/node@25.6.0)(db0@0.3.4)(ioredis@5.10.1)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(rollup@4.60.1)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(typescript@5.9.3)(yaml@2.8.3) + specifier: ^6.2.2 + version: 6.2.2(@types/node@25.6.2)(db0@0.3.4)(ioredis@5.10.1)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(rollup@4.60.3)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + prettier: + specifier: ^3.8.3 + version: 3.8.3 + prettier-plugin-astro: + specifier: ^0.14.1 + version: 0.14.1 typescript: specifier: ^5.9.3 version: 5.9.3 @@ -6167,7 +12862,7 @@ importers: version: link:../../engine/dist ember-auto-import: specifier: ^2.13.1 - version: 2.13.1(webpack@5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2)) + version: 2.13.1(webpack@5.106.1(@swc/core@1.15.33)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) ember-cli-babel: specifier: ^8.3.1 version: 8.3.1(@babel/core@7.29.0) @@ -6189,7 +12884,7 @@ importers: version: 7.29.0 "@ember/optional-features": specifier: ^3.0.0 - version: 3.0.0(@types/node@25.6.0) + version: 3.0.0(@types/node@25.6.2) "@ember/test-helpers": specifier: ^5.4.1 version: 5.4.1(@babel/core@7.29.0) @@ -6282,16 +12977,16 @@ importers: version: 21.0.1 babel-eslint: specifier: ^10.1.0 - version: 10.1.0(eslint@10.2.0(jiti@2.6.1)) + version: 10.1.0(eslint@10.2.0(jiti@2.7.0)) broccoli-asset-rev: specifier: ^3.0.0 version: 3.0.0 ember-cli: specifier: ~6.12.0 - version: 6.12.0(@babel/core@7.29.0)(@types/node@25.6.0)(ejs@3.1.10)(hamljs@0.6.2)(handlebars@4.7.9)(nunjucks@3.2.4(chokidar@3.6.0))(pug@3.0.4)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(underscore@1.13.8) + version: 6.12.0(@babel/core@7.29.0)(@types/node@25.6.2)(ejs@3.1.10)(hamljs@0.6.2)(handlebars@4.7.9)(nunjucks@3.2.4(chokidar@3.6.0))(pug@3.0.4)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(underscore@1.13.8) ember-cli-dependency-checker: specifier: ^3.3.3 - version: 3.3.3(ember-cli@6.12.0(@babel/core@7.29.0)(@types/node@25.6.0)(ejs@3.1.10)(hamljs@0.6.2)(handlebars@4.7.9)(nunjucks@3.2.4(chokidar@3.6.0))(pug@3.0.4)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(underscore@1.13.8)) + version: 3.3.3(ember-cli@6.12.0(@babel/core@7.29.0)(@types/node@25.6.2)(ejs@3.1.10)(hamljs@0.6.2)(handlebars@4.7.9)(nunjucks@3.2.4(chokidar@3.6.0))(pug@3.0.4)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(underscore@1.13.8)) ember-cli-inject-live-reload: specifier: ^2.1.0 version: 2.1.0 @@ -6333,22 +13028,22 @@ importers: version: 4.0.0(encoding@0.1.13) eslint: specifier: ^10.2.0 - version: 10.2.0(jiti@2.6.1) + version: 10.2.0(jiti@2.7.0) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@10.2.0(jiti@2.6.1)) + version: 10.1.8(eslint@10.2.0(jiti@2.7.0)) eslint-plugin-ember: specifier: ^12.7.5 - version: 12.7.5(@babel/core@7.29.0)(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) + version: 12.7.5(@babel/core@7.29.0)(@typescript-eslint/parser@8.59.2(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2))(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) eslint-plugin-node: specifier: ^11.1.0 - version: 11.1.0(eslint@10.2.0(jiti@2.6.1)) + version: 11.1.0(eslint@10.2.0(jiti@2.7.0)) eslint-plugin-prettier: specifier: ^5.5.5 - version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.2.0(jiti@2.6.1)))(eslint@10.2.0(jiti@2.6.1))(prettier@3.8.2) + version: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.2.0(jiti@2.7.0)))(eslint@10.2.0(jiti@2.7.0))(prettier@3.8.2) eslint-plugin-qunit: specifier: ^8.2.6 - version: 8.2.6(eslint@10.2.0(jiti@2.6.1)) + version: 8.2.6(eslint@10.2.0(jiti@2.7.0)) loader.js: specifier: ^4.7.0 version: 4.7.0 @@ -6372,7 +13067,7 @@ importers: version: 6.0.2 webpack: specifier: ^5.106.1 - version: 5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2) + version: 5.106.1(@swc/core@1.15.33)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) wrappers/inferno: dependencies: @@ -6402,65 +13097,65 @@ importers: specifier: ^7.29.2 version: 7.29.2 "@tsparticles/prettier-config": - specifier: ^3.4.6 - version: 3.4.6(prettier@3.8.2) + specifier: workspace:^ + version: link:../../cli/utils/prettier-config "@typescript-eslint/eslint-plugin": - specifier: ^5.48.2 - version: 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@4.9.5))(eslint@8.57.1)(typescript@4.9.5) + specifier: ^8.59.1 + version: 8.59.1(@typescript-eslint/parser@8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@4.9.5))(eslint@10.3.0(jiti@2.7.0))(typescript@4.9.5) "@typescript-eslint/parser": - specifier: ^5.48.2 - version: 5.62.0(eslint@8.57.1)(typescript@4.9.5) + specifier: ^8.59.1 + version: 8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@4.9.5) babel-loader: specifier: ^10.1.1 - version: 10.1.1(@babel/core@7.29.0)(webpack@5.106.1) + version: 10.1.1(@babel/core@7.29.0)(webpack@5.106.2) babel-plugin-inferno: specifier: ^6.8.5 version: 6.8.5(@babel/core@7.29.0) clean-webpack-plugin: specifier: ^4.0.0 - version: 4.0.0(webpack@5.106.1) + version: 4.0.0(webpack@5.106.2) css-loader: specifier: ^7.1.4 - version: 7.1.4(webpack@5.106.1) + version: 7.1.4(webpack@5.106.2) eslint: - specifier: ^8.32.0 - version: 8.57.1 + specifier: ^10.3.0 + version: 10.3.0(jiti@2.7.0) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@8.57.1) + version: 10.1.8(eslint@10.3.0(jiti@2.7.0)) html-webpack-plugin: - specifier: ^5.6.6 - version: 5.6.6(webpack@5.106.1) + specifier: ^5.6.7 + version: 5.6.7(webpack@5.106.2) inferno: specifier: ^9.1.0 version: 9.1.0 prettier: - specifier: ^3.8.2 - version: 3.8.2 + specifier: ^3.8.3 + version: 3.8.3 sass: specifier: ^1.99.0 version: 1.99.0 sass-loader: specifier: ^16.0.7 - version: 16.0.7(sass@1.99.0)(webpack@5.106.1) + version: 16.0.7(sass@1.99.0)(webpack@5.106.2) source-map-loader: specifier: ^5.0.0 - version: 5.0.0(webpack@5.106.1) + version: 5.0.0(webpack@5.106.2) style-loader: specifier: ^4.0.0 - version: 4.0.0(webpack@5.106.1) + version: 4.0.0(webpack@5.106.2) typescript: specifier: ^4.9.4 version: 4.9.5 webpack: - specifier: ^5.106.1 - version: 5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2) + specifier: ^5.106.2 + version: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) webpack-cli: specifier: ^7.0.2 - version: 7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1) + version: 7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2) webpack-dev-server: specifier: ^5.2.3 - version: 5.2.3(tslib@2.8.1)(webpack-cli@7.0.2)(webpack@5.106.1) + version: 5.2.3(tslib@2.8.1)(webpack-cli@7.0.2)(webpack@5.106.2) wrappers/jquery: dependencies: @@ -6478,8 +13173,8 @@ importers: specifier: ^7.0.0 version: 7.0.0(@babel/core@7.29.0)(@types/babel__core@7.20.5)(rollup@4.60.1) "@tsparticles/prettier-config": - specifier: ^3.4.6 - version: 3.4.6(prettier@3.8.2) + specifier: workspace:^ + version: link:../../cli/utils/prettier-config "@types/jquery": specifier: ^4.0.0 version: 4.0.0 @@ -6490,20 +13185,20 @@ importers: specifier: ^1.18.8 version: 1.18.8 "@typescript-eslint/eslint-plugin": - specifier: ^6.16.0 - version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) + specifier: ^8.59.1 + version: 8.59.1(@typescript-eslint/parser@8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3) "@typescript-eslint/parser": - specifier: ^6.16.0 - version: 6.21.0(eslint@8.57.1)(typescript@5.9.3) + specifier: ^8.59.1 + version: 8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3) babel-preset-env: specifier: ^1.7.0 version: 1.7.0 eslint: - specifier: ^8.56.0 - version: 8.57.1 + specifier: ^10.3.0 + version: 10.3.0(jiti@2.7.0) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@8.57.1) + version: 10.1.8(eslint@10.3.0(jiti@2.7.0)) jquery: specifier: ^4.0.0 version: 4.0.0 @@ -6546,28 +13241,28 @@ importers: version: 19.2.3(@types/react@19.2.14) "@typescript-eslint/eslint-plugin": specifier: ^8.58.2 - version: 8.58.2(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) + version: 8.58.2(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2))(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) "@typescript-eslint/parser": specifier: ^8.58.2 - version: 8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) + version: 8.58.2(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) "@vitejs/plugin-react": specifier: ^6.0.1 - version: 6.0.1(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) + version: 6.0.1(vite@8.0.8(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) eslint: specifier: ^10.2.0 - version: 10.2.0(jiti@2.6.1) + version: 10.2.0(jiti@2.7.0) eslint-plugin-react-hooks: specifier: ^7.0.1 - version: 7.0.1(eslint@10.2.0(jiti@2.6.1)) + version: 7.0.1(eslint@10.2.0(jiti@2.7.0)) eslint-plugin-react-refresh: specifier: ^0.5.2 - version: 0.5.2(eslint@10.2.0(jiti@2.6.1)) + version: 0.5.2(eslint@10.2.0(jiti@2.7.0)) glob: specifier: ^13.0.6 version: 13.0.6 next: specifier: ^16.2.3 - version: 16.2.3(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(babel-plugin-macros@3.1.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(sass@1.99.0) + version: 16.2.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(babel-plugin-macros@3.1.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(sass@1.99.0) react: specifier: ^19.2.5 version: 19.2.5 @@ -6579,10 +13274,10 @@ importers: version: 6.0.2 vite: specifier: ^8.0.8 - version: 8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + version: 8.0.8(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) vite-plugin-dts: specifier: ^4.5.4 - version: 4.5.4(@types/node@25.6.0)(rollup@4.60.1)(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) + version: 4.5.4(@types/node@25.6.2)(rollup@4.60.3)(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) wrappers/nuxt2: dependencies: @@ -6597,20 +13292,20 @@ importers: version: link:../vue2 nuxt: specifier: ">=2.0.0 <3.0.0" - version: 2.18.1(@vue/compiler-sfc@3.5.32)(buffer@6.0.3)(consola@3.4.2)(encoding@0.1.13)(prettier@3.8.3)(tslib@2.8.1)(typescript@6.0.2)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + version: 2.18.1(@vue/compiler-sfc@3.5.32)(buffer@6.0.3)(consola@3.4.2)(encoding@0.1.13)(prettier@3.8.3)(tslib@2.8.1)(typescript@6.0.2)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) devDependencies: "@eslint/js": specifier: ^10.0.1 - version: 10.0.1(eslint@10.2.0(jiti@2.6.1)) + version: 10.0.1(eslint@10.2.0(jiti@2.7.0)) "@typescript-eslint/eslint-plugin": specifier: ^8.58.2 - version: 8.58.2(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) + version: 8.58.2(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2))(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) "@typescript-eslint/parser": specifier: ^8.58.2 - version: 8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) + version: 8.58.2(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) eslint: specifier: ^10.2.0 - version: 10.2.0(jiti@2.6.1) + version: 10.2.0(jiti@2.7.0) globals: specifier: ^17.5.0 version: 17.5.0 @@ -6621,8 +13316,8 @@ importers: wrappers/nuxt3: dependencies: "@nuxt/kit": - specifier: ^4.4.2 - version: 4.4.2(magicast@0.5.2) + specifier: ^3.21.2 + version: 3.21.2(magicast@0.5.2) "@tsparticles/engine": specifier: workspace:^ version: link:../../engine/dist @@ -6631,23 +13326,23 @@ importers: version: link:../vue3 nuxt: specifier: ^3.0.0 - version: 3.21.2(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(encoding@0.1.13)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.1)(less@4.6.4)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rolldown@1.0.0-rc.15)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.15)(rollup@4.60.1))(rollup@4.60.1)(sass@1.99.0)(srvx@0.11.15)(stylelint@16.26.1(typescript@6.0.2))(stylus@0.64.0)(terser@5.46.1)(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(xml2js@0.6.2)(yaml@2.8.3) + version: 3.21.2(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@types/node@25.6.2)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(encoding@0.1.13)(eslint@10.2.0(jiti@2.7.0))(ioredis@5.10.1)(less@4.6.4)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rolldown@1.0.0-rc.18)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.18)(rollup@4.60.3))(rollup@4.60.3)(sass@1.99.0)(stylelint@16.26.1(typescript@6.0.2))(stylus@0.64.0)(terser@5.46.1)(typescript@6.0.2)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(xml2js@0.6.2)(yaml@2.8.3) devDependencies: "@eslint/js": specifier: ^10.0.1 - version: 10.0.1(eslint@10.2.0(jiti@2.6.1)) + version: 10.0.1(eslint@10.2.0(jiti@2.7.0)) "@nuxt/schema": - specifier: ^4.4.2 - version: 4.4.2 + specifier: ^3.21.2 + version: 3.21.2 "@typescript-eslint/eslint-plugin": specifier: ^8.58.2 - version: 8.58.2(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) + version: 8.58.2(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2))(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) "@typescript-eslint/parser": specifier: ^8.58.2 - version: 8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) + version: 8.58.2(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) eslint: specifier: ^10.2.0 - version: 10.2.0(jiti@2.6.1) + version: 10.2.0(jiti@2.7.0) globals: specifier: ^17.5.0 version: 17.5.0 @@ -6669,25 +13364,25 @@ importers: devDependencies: "@eslint/js": specifier: ^10.0.1 - version: 10.0.1(eslint@10.2.0(jiti@2.6.1)) + version: 10.0.1(eslint@10.2.0(jiti@2.7.0)) "@nuxt/schema": specifier: ^4.4.2 version: 4.4.2 "@typescript-eslint/eslint-plugin": specifier: ^8.58.2 - version: 8.58.2(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) + version: 8.58.2(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2))(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) "@typescript-eslint/parser": specifier: ^8.58.2 - version: 8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) + version: 8.58.2(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) eslint: specifier: ^10.2.0 - version: 10.2.0(jiti@2.6.1) + version: 10.2.0(jiti@2.7.0) globals: specifier: ^17.5.0 version: 17.5.0 nuxt: specifier: ^4.4.2 - version: 4.4.2(@babel/core@7.29.0)(@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.29.0))(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@rollup/plugin-babel@7.0.0(@babel/core@7.29.0)(@types/babel__core@7.20.5)(rollup@4.60.1))(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(encoding@0.1.13)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.1)(less@4.6.4)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rolldown@1.0.0-rc.15)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.15)(rollup@4.60.1))(rollup@4.60.1)(sass@1.99.0)(stylelint@16.26.1(typescript@6.0.2))(stylus@0.64.0)(terser@5.46.1)(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(xml2js@0.6.2)(yaml@2.8.3) + version: 4.4.2(@babel/core@7.29.0)(@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.29.0))(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@rollup/plugin-babel@7.0.0(@babel/core@7.29.0)(@types/babel__core@7.20.5)(rollup@4.60.3))(@types/node@25.6.2)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(encoding@0.1.13)(eslint@10.2.0(jiti@2.7.0))(ioredis@5.10.1)(less@4.6.4)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rolldown@1.0.0-rc.18)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.18)(rollup@4.60.3))(rollup@4.60.3)(sass@1.99.0)(stylelint@16.26.1(typescript@6.0.2))(stylus@0.64.0)(terser@5.46.1)(typescript@6.0.2)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(xml2js@0.6.2)(yaml@2.8.3) typescript: specifier: ^6.0.2 version: 6.0.2 @@ -6711,8 +13406,8 @@ importers: specifier: ^7.29.2 version: 7.29.2 "@tsparticles/prettier-config": - specifier: ^3.4.6 - version: 3.4.6(prettier@3.8.2) + specifier: workspace:^ + version: link:../../cli/utils/prettier-config "@types/node": specifier: ^25.6.0 version: 25.6.0 @@ -6723,11 +13418,11 @@ importers: specifier: ^19.2.3 version: 19.2.3(@types/react@19.2.14) "@typescript-eslint/eslint-plugin": - specifier: ^6.16.0 - version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) + specifier: ^8.59.1 + version: 8.59.1(@typescript-eslint/parser@8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3) "@typescript-eslint/parser": - specifier: ^6.16.0 - version: 6.21.0(eslint@8.57.1)(typescript@5.9.3) + specifier: ^8.59.1 + version: 8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3) babel-loader: specifier: ^10.1.1 version: 10.1.1(@babel/core@7.29.0)(webpack@5.106.1) @@ -6735,11 +13430,11 @@ importers: specifier: ^10.1.0 version: 10.1.0 eslint: - specifier: ^8.56.0 - version: 8.57.1 + specifier: ^10.3.0 + version: 10.3.0(jiti@2.7.0) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@8.57.1) + version: 10.1.8(eslint@10.3.0(jiti@2.7.0)) preact: specifier: ^10.29.1 version: 10.29.1 @@ -6751,13 +13446,13 @@ importers: version: 9.5.7(typescript@5.9.3)(webpack@5.106.1) ts-node: specifier: ^10.9.2 - version: 10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.9.3) + version: 10.9.2(@swc/core@1.15.33)(@types/node@25.6.0)(typescript@5.9.3) typescript: specifier: ^5.3.3 version: 5.9.3 webpack: specifier: ^5.106.1 - version: 5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2) + version: 5.106.1(@swc/core@1.15.33)(webpack-cli@7.0.2) webpack-bundle-analyzer: specifier: ^5.3.0 version: 5.3.0 @@ -6776,7 +13471,7 @@ importers: devDependencies: "@builder.io/qwik": specifier: 1.19.2 - version: 1.19.2(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) + version: 1.19.2(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) "@types/eslint": specifier: 9.6.1 version: 9.6.1 @@ -6785,16 +13480,16 @@ importers: version: 25.6.0 "@typescript-eslint/eslint-plugin": specifier: 8.58.2 - version: 8.58.2(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) + version: 8.58.2(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2))(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) "@typescript-eslint/parser": specifier: 8.58.2 - version: 8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) + version: 8.58.2(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) eslint: specifier: 10.2.0 - version: 10.2.0(jiti@2.6.1) + version: 10.2.0(jiti@2.7.0) eslint-plugin-qwik: specifier: latest - version: 1.19.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) + version: 1.19.2(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) np: specifier: 11.0.3 version: 11.0.3(@types/node@25.6.0)(typescript@6.0.2) @@ -6812,10 +13507,10 @@ importers: version: 8.1.0 vite: specifier: 8.0.8 - version: 8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + version: 8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) vite-tsconfig-paths: specifier: 6.1.1 - version: 6.1.1(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) + version: 6.1.1(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) wrappers/react: devDependencies: @@ -6830,22 +13525,22 @@ importers: version: 19.2.3(@types/react@19.2.14) "@typescript-eslint/eslint-plugin": specifier: ^8.58.1 - version: 8.58.1(@typescript-eslint/parser@8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) + version: 8.58.1(@typescript-eslint/parser@8.58.1(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2))(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) "@typescript-eslint/parser": specifier: ^8.58.1 - version: 8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) + version: 8.58.1(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) "@vitejs/plugin-react": specifier: ^6.0.1 - version: 6.0.1(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) + version: 6.0.1(vite@8.0.8(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) eslint: specifier: ^10.2.0 - version: 10.2.0(jiti@2.6.1) + version: 10.2.0(jiti@2.7.0) eslint-plugin-react-hooks: specifier: ^7.0.1 - version: 7.0.1(eslint@10.2.0(jiti@2.6.1)) + version: 7.0.1(eslint@10.2.0(jiti@2.7.0)) eslint-plugin-react-refresh: specifier: ^0.5.2 - version: 0.5.2(eslint@10.2.0(jiti@2.6.1)) + version: 0.5.2(eslint@10.2.0(jiti@2.7.0)) glob: specifier: ^13.0.6 version: 13.0.6 @@ -6860,13 +13555,13 @@ importers: version: 6.0.2 vite: specifier: ^8.0.8 - version: 8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + version: 8.0.8(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) vite-plugin-dts: specifier: ^4.5.4 - version: 4.5.4(@types/node@25.6.0)(rollup@4.60.1)(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) + version: 4.5.4(@types/node@25.6.2)(rollup@4.60.3)(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) vite-plugin-lib-inject-css: specifier: ^2.2.2 - version: 2.2.2(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) + version: 2.2.2(vite@8.0.8(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) wrappers/riot: dependencies: @@ -6886,9 +13581,12 @@ importers: "@riotjs/compiler": specifier: ^10.0.1 version: 10.0.1 + "@rollup/plugin-babel": + specifier: ^7.0.0 + version: 7.0.0(@babel/core@7.29.0)(@types/babel__core@7.20.5)(rollup@4.60.1) "@tsparticles/prettier-config": - specifier: ^3.4.6 - version: 3.4.6(prettier@3.8.2) + specifier: workspace:^ + version: link:../../cli/utils/prettier-config chai: specifier: ^6.2.2 version: 6.2.2 @@ -6913,24 +13611,33 @@ importers: riot: specifier: ^10.1.3 version: 10.1.3 + rollup: + specifier: ^4.60.1 + version: 4.60.1 + rollup-plugin-riot: + specifier: ^10.0.0 + version: 10.0.0(rollup@4.60.1) wrappers/solid: devDependencies: + "@eslint/js": + specifier: ^10.0.1 + version: 10.0.1(eslint@10.3.0(jiti@2.7.0)) "@tsparticles/engine": specifier: workspace:^ version: link:../../engine/dist "@tsparticles/prettier-config": - specifier: ^3.4.6 - version: 3.4.6(prettier@3.8.2) + specifier: workspace:^ + version: link:../../cli/utils/prettier-config "@types/node": specifier: ^20.12.12 version: 20.19.39 "@typescript-eslint/eslint-plugin": - specifier: ^7.9.0 - version: 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) + specifier: ^8.59.1 + version: 8.59.1(@typescript-eslint/parser@8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3) "@typescript-eslint/parser": - specifier: ^7.9.0 - version: 7.18.0(eslint@8.57.1)(typescript@5.9.3) + specifier: ^8.59.1 + version: 8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3) concurrently: specifier: ^9.2.1 version: 9.2.1 @@ -6941,11 +13648,11 @@ importers: specifier: ^0.6.0 version: 0.6.0(esbuild@0.21.5)(solid-js@1.9.12) eslint: - specifier: ^8.56.0 - version: 8.57.1 + specifier: ^10.3.0 + version: 10.3.0(jiti@2.7.0) eslint-plugin-eslint-comments: specifier: ^3.2.0 - version: 3.2.0(eslint@8.57.1) + version: 3.2.0(eslint@10.3.0(jiti@2.7.0)) eslint-plugin-no-only-tests: specifier: ^3.3.0 version: 3.3.0 @@ -6960,10 +13667,10 @@ importers: version: 1.9.12 tsup: specifier: ^8.0.2 - version: 8.5.1(@microsoft/api-extractor@7.58.2(@types/node@20.19.39))(@swc/core@1.15.26)(jiti@2.6.1)(postcss@8.5.9)(typescript@5.9.3)(yaml@2.8.3) + version: 8.5.1(patch_hash=ce9dbc714c187cea78868f1e68c1a0e5097ddbceb7e976a564d94f2291b5bcb9)(@microsoft/api-extractor@7.58.2(@types/node@20.19.39))(@swc/core@1.15.33)(jiti@2.7.0)(postcss@8.5.14)(typescript@5.9.3)(yaml@2.8.3) tsup-preset-solid: specifier: ^2.2.0 - version: 2.2.0(esbuild@0.21.5)(solid-js@1.9.12)(tsup@8.5.1(@microsoft/api-extractor@7.58.2(@types/node@20.19.39))(@swc/core@1.15.26)(jiti@2.6.1)(postcss@8.5.9)(typescript@5.9.3)(yaml@2.8.3)) + version: 2.2.0(esbuild@0.21.5)(solid-js@1.9.12)(tsup@8.5.1(patch_hash=ce9dbc714c187cea78868f1e68c1a0e5097ddbceb7e976a564d94f2291b5bcb9)(@microsoft/api-extractor@7.58.2(@types/node@20.19.39))(@swc/core@1.15.33)(jiti@2.7.0)(postcss@8.5.14)(typescript@5.9.3)(yaml@2.8.3)) typescript: specifier: ^5.4.5 version: 5.9.3 @@ -6985,49 +13692,49 @@ importers: devDependencies: "@sveltejs/adapter-auto": specifier: ^7.0.1 - version: 7.0.1(@sveltejs/kit@2.57.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.3(@typescript-eslint/types@8.58.2))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)))(svelte@5.55.3(@typescript-eslint/types@8.58.2))(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))) + version: 7.0.1(@sveltejs/kit@2.57.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.3(@typescript-eslint/types@8.59.2))(vite@8.0.8(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)))(svelte@5.55.3(@typescript-eslint/types@8.59.2))(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))) "@sveltejs/kit": specifier: ^2.57.1 - version: 2.57.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.3(@typescript-eslint/types@8.58.2))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)))(svelte@5.55.3(@typescript-eslint/types@8.58.2))(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) + version: 2.57.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.3(@typescript-eslint/types@8.59.2))(vite@8.0.8(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)))(svelte@5.55.3(@typescript-eslint/types@8.59.2))(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) "@sveltejs/package": specifier: ^2.5.7 - version: 2.5.7(svelte@5.55.3(@typescript-eslint/types@8.58.2))(typescript@6.0.2) + version: 2.5.7(svelte@5.55.3(@typescript-eslint/types@8.59.2))(typescript@6.0.2) "@sveltejs/vite-plugin-svelte": specifier: ^7.0.0 - version: 7.0.0(svelte@5.55.3(@typescript-eslint/types@8.58.2))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) + version: 7.0.0(svelte@5.55.3(@typescript-eslint/types@8.59.2))(vite@8.0.8(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) "@types/eslint": specifier: ^9.6.1 version: 9.6.1 "@typescript-eslint/eslint-plugin": specifier: ^8.58.2 - version: 8.58.2(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) + version: 8.58.2(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2))(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) "@typescript-eslint/parser": specifier: ^8.58.2 - version: 8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) + version: 8.58.2(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) eslint: specifier: ^10.2.0 - version: 10.2.0(jiti@2.6.1) + version: 10.2.0(jiti@2.7.0) eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@10.2.0(jiti@2.6.1)) + version: 10.1.8(eslint@10.2.0(jiti@2.7.0)) eslint-plugin-svelte: specifier: ^3.17.0 - version: 3.17.0(eslint@10.2.0(jiti@2.6.1))(svelte@5.55.3(@typescript-eslint/types@8.58.2))(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@6.0.2)) + version: 3.17.0(eslint@10.2.0(jiti@2.7.0))(svelte@5.55.3(@typescript-eslint/types@8.59.2))(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.2)) prettier: specifier: ^3.8.2 version: 3.8.2 prettier-plugin-svelte: specifier: ^3.5.1 - version: 3.5.1(prettier@3.8.2)(svelte@5.55.3(@typescript-eslint/types@8.58.2)) + version: 3.5.1(prettier@3.8.2)(svelte@5.55.3(@typescript-eslint/types@8.59.2)) publint: specifier: ^0.3.18 version: 0.3.18 svelte: specifier: ^5.55.3 - version: 5.55.3(@typescript-eslint/types@8.58.2) + version: 5.55.3(@typescript-eslint/types@8.59.2) svelte-check: specifier: ^4.4.6 - version: 4.4.6(picomatch@4.0.4)(svelte@5.55.3(@typescript-eslint/types@8.58.2))(typescript@6.0.2) + version: 4.4.6(picomatch@4.0.4)(svelte@5.55.3(@typescript-eslint/types@8.59.2))(typescript@6.0.2) tslib: specifier: ^2.8.1 version: 2.8.1 @@ -7036,7 +13743,7 @@ importers: version: 6.0.2 vite: specifier: ^8.0.8 - version: 8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + version: 8.0.8(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) wrappers/vue2: dependencies: @@ -7046,25 +13753,25 @@ importers: devDependencies: "@eslint/js": specifier: ^10.0.1 - version: 10.0.1(eslint@10.2.0(jiti@2.6.1)) + version: 10.0.1(eslint@10.2.0(jiti@2.7.0)) "@tsparticles/prettier-config": - specifier: ^3.4.6 - version: 3.4.6(prettier@3.8.2) + specifier: workspace:^ + version: link:../../cli/utils/prettier-config "@types/node": specifier: ^25.6.0 version: 25.6.0 "@typescript-eslint/parser": specifier: ^8.58.1 - version: 8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) + version: 8.58.1(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) "@vitejs/plugin-vue2": specifier: ^2.3.4 - version: 2.3.4(vite@6.4.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@2.7.16) + version: 2.3.4(vite@6.4.2(@types/node@25.6.0)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@2.7.16) eslint: specifier: ^10.2.0 - version: 10.2.0(jiti@2.6.1) + version: 10.2.0(jiti@2.7.0) eslint-plugin-vue: specifier: ^10.8.0 - version: 10.8.0(@stylistic/eslint-plugin@5.10.0(eslint@10.2.0(jiti@2.6.1)))(@typescript-eslint/parser@8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.2.0(jiti@2.6.1))(vue-eslint-parser@10.4.0(eslint@10.2.0(jiti@2.6.1))) + version: 10.8.0(@stylistic/eslint-plugin@5.10.0(eslint@10.2.0(jiti@2.7.0)))(@typescript-eslint/parser@8.58.1(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2))(eslint@10.2.0(jiti@2.7.0))(vue-eslint-parser@10.4.0(eslint@10.2.0(jiti@2.7.0))) globals: specifier: ^17.5.0 version: 17.5.0 @@ -7076,10 +13783,10 @@ importers: version: 6.0.2 vite: specifier: ^6.4.1 - version: 6.4.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + version: 6.4.2(@types/node@25.6.0)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) vite-plugin-dts: specifier: ^4.5.4 - version: 4.5.4(@types/node@25.6.0)(rollup@4.60.1)(typescript@6.0.2)(vite@6.4.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) + version: 4.5.4(@types/node@25.6.0)(rollup@4.60.3)(typescript@6.0.2)(vite@6.4.2(@types/node@25.6.0)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) vue: specifier: ^2.7.16 version: 2.7.16 @@ -7088,7 +13795,7 @@ importers: version: 7.2.6(vue@2.7.16) vue-eslint-parser: specifier: ^10.4.0 - version: 10.4.0(eslint@10.2.0(jiti@2.6.1)) + version: 10.4.0(eslint@10.2.0(jiti@2.7.0)) vue-property-decorator: specifier: ^9.1.2 version: 9.1.2(vue-class-component@7.2.6(vue@2.7.16))(vue@2.7.16) @@ -7110,7 +13817,7 @@ importers: devDependencies: "@eslint/js": specifier: ^10.0.1 - version: 10.0.1(eslint@10.2.0(jiti@2.6.1)) + version: 10.0.1(eslint@10.2.0(jiti@2.7.0)) "@rushstack/eslint-patch": specifier: ^1.16.1 version: 1.16.1 @@ -7118,35 +13825,35 @@ importers: specifier: ^18.2.6 version: 18.2.6 "@tsparticles/prettier-config": - specifier: ^3.4.6 - version: 3.4.6(prettier@3.8.2) + specifier: workspace:^ + version: link:../../cli/utils/prettier-config "@types/node": specifier: ^25.6.0 version: 25.6.0 "@typescript-eslint/parser": specifier: ^8.58.1 - version: 8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) + version: 8.58.1(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) "@vitejs/plugin-vue": specifier: ^6.0.5 - version: 6.0.5(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2)) + version: 6.0.5(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2)) "@vitejs/plugin-vue-jsx": specifier: ^5.1.5 - version: 5.1.5(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2)) + version: 5.1.5(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2)) "@vue/eslint-config-prettier": specifier: ^10.2.0 - version: 10.2.0(@types/eslint@9.6.1)(eslint@10.2.0(jiti@2.6.1))(prettier@3.8.2) + version: 10.2.0(@types/eslint@9.6.1)(eslint@10.2.0(jiti@2.7.0))(prettier@3.8.2) "@vue/eslint-config-typescript": specifier: ^14.7.0 - version: 14.7.0(eslint-plugin-vue@10.8.0(@stylistic/eslint-plugin@5.10.0(eslint@10.2.0(jiti@2.6.1)))(@typescript-eslint/parser@8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.2.0(jiti@2.6.1))(vue-eslint-parser@10.4.0(eslint@10.2.0(jiti@2.6.1))))(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) + version: 14.7.0(eslint-plugin-vue@10.8.0(@stylistic/eslint-plugin@5.10.0(eslint@10.2.0(jiti@2.7.0)))(@typescript-eslint/parser@8.58.1(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2))(eslint@10.2.0(jiti@2.7.0))(vue-eslint-parser@10.4.0(eslint@10.2.0(jiti@2.7.0))))(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) "@vue/tsconfig": specifier: ^0.9.1 version: 0.9.1(typescript@6.0.2)(vue@3.5.32(typescript@6.0.2)) eslint: specifier: ^10.2.0 - version: 10.2.0(jiti@2.6.1) + version: 10.2.0(jiti@2.7.0) eslint-plugin-vue: specifier: ^10.8.0 - version: 10.8.0(@stylistic/eslint-plugin@5.10.0(eslint@10.2.0(jiti@2.6.1)))(@typescript-eslint/parser@8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.2.0(jiti@2.6.1))(vue-eslint-parser@10.4.0(eslint@10.2.0(jiti@2.6.1))) + version: 10.8.0(@stylistic/eslint-plugin@5.10.0(eslint@10.2.0(jiti@2.7.0)))(@typescript-eslint/parser@8.58.1(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2))(eslint@10.2.0(jiti@2.7.0))(vue-eslint-parser@10.4.0(eslint@10.2.0(jiti@2.7.0))) globals: specifier: ^17.5.0 version: 17.5.0 @@ -7158,13 +13865,13 @@ importers: version: 6.0.2 vite: specifier: ^8.0.8 - version: 8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + version: 8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) vite-plugin-dts: specifier: ^4.5.4 - version: 4.5.4(@types/node@25.6.0)(rollup@4.60.1)(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) + version: 4.5.4(@types/node@25.6.0)(rollup@4.60.3)(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) vue-eslint-parser: specifier: ^10.4.0 - version: 10.4.0(eslint@10.2.0(jiti@2.6.1)) + version: 10.4.0(eslint@10.2.0(jiti@2.7.0)) vue-tsc: specifier: ^3.2.6 version: 3.2.6(typescript@6.0.2) @@ -7182,8 +13889,8 @@ importers: specifier: ^12.3.0 version: 12.3.0(rollup@4.60.1)(tslib@2.8.1)(typescript@5.9.3) "@tsparticles/prettier-config": - specifier: ^3.4.6 - version: 3.4.6(prettier@3.8.2) + specifier: workspace:^ + version: link:../../cli/utils/prettier-config "@types/node": specifier: ^20.1.0 version: 20.19.39 @@ -7195,7 +13902,7 @@ importers: version: 4.60.1 ts-node: specifier: ^10.9.2 - version: 10.9.2(@swc/core@1.15.26)(@types/node@20.19.39)(typescript@5.9.3) + version: 10.9.2(@swc/core@1.15.33)(@types/node@20.19.39)(typescript@5.9.3) tslib: specifier: ^2.8.1 version: 2.8.1 @@ -7214,6 +13921,15 @@ importers: "@tsparticles/effect-bubble": specifier: workspace:^ version: link:../../effects/bubble/dist + "@tsparticles/effect-filter": + specifier: workspace:^ + version: link:../../effects/filter/dist + "@tsparticles/effect-particles": + specifier: workspace:^ + version: link:../../effects/particles/dist + "@tsparticles/effect-shadow": + specifier: workspace:^ + version: link:../../effects/shadow/dist "@tsparticles/effect-trail": specifier: workspace:^ version: link:../../effects/trail/dist @@ -7229,12 +13945,21 @@ importers: "@tsparticles/interaction-external-bubble": specifier: workspace:^ version: link:../../interactions/external/bubble/dist + "@tsparticles/interaction-external-cannon": + specifier: workspace:^ + version: link:../../interactions/external/cannon/dist "@tsparticles/interaction-external-connect": specifier: workspace:^ version: link:../../interactions/external/connect/dist "@tsparticles/interaction-external-grab": specifier: workspace:^ version: link:../../interactions/external/grab/dist + "@tsparticles/interaction-external-parallax": + specifier: workspace:^ + version: link:../../interactions/external/parallax/dist + "@tsparticles/interaction-external-particle": + specifier: workspace:^ + version: link:../../interactions/external/particle/dist "@tsparticles/interaction-external-pause": specifier: workspace:^ version: link:../../interactions/external/pause/dist @@ -7271,30 +13996,48 @@ importers: "@tsparticles/interaction-particles-repulse": specifier: workspace:^ version: link:../../interactions/particles/repulse/dist - "@tsparticles/move-base": - specifier: ^3.9.1 - version: 3.9.1 - "@tsparticles/move-parallax": - specifier: ^3.9.1 - version: 3.9.1 + "@tsparticles/path-branches": + specifier: workspace:^ + version: link:../../paths/branches/dist + "@tsparticles/path-brownian": + specifier: workspace:^ + version: link:../../paths/brownian/dist "@tsparticles/path-curl-noise": specifier: workspace:^ version: link:../../paths/curlNoise/dist "@tsparticles/path-curves": specifier: workspace:^ version: link:../../paths/curves/dist + "@tsparticles/path-fractal-noise": + specifier: workspace:^ + version: link:../../paths/fractalNoise/dist + "@tsparticles/path-grid": + specifier: workspace:^ + version: link:../../paths/grid/dist + "@tsparticles/path-levy": + specifier: workspace:^ + version: link:../../paths/levy/dist "@tsparticles/path-perlin-noise": specifier: workspace:^ version: link:../../paths/perlinNoise/dist "@tsparticles/path-polygon": specifier: workspace:^ version: link:../../paths/polygon/dist + "@tsparticles/path-random": + specifier: workspace:^ + version: link:../../paths/random/dist "@tsparticles/path-simplex-noise": specifier: workspace:^ version: link:../../paths/simplexNoise/dist + "@tsparticles/path-spiral": + specifier: workspace:^ + version: link:../../paths/spiral/dist "@tsparticles/path-svg": specifier: workspace:^ version: link:../../paths/svg/dist + "@tsparticles/path-zig-zag": + specifier: workspace:^ + version: link:../../paths/zigzag/dist "@tsparticles/perlin-noise": specifier: workspace:^ version: link:../../utils/perlinNoise/dist @@ -7304,21 +14047,36 @@ importers: "@tsparticles/plugin-absorbers": specifier: workspace:^ version: link:../../plugins/absorbers/dist + "@tsparticles/plugin-background-mask": + specifier: workspace:^ + version: link:../../plugins/backgroundMask/dist + "@tsparticles/plugin-blend": + specifier: workspace:^ + version: link:../../plugins/blend/dist "@tsparticles/plugin-canvas-mask": specifier: workspace:^ version: link:../../plugins/canvasMask/dist "@tsparticles/plugin-easing-back": specifier: workspace:^ version: link:../../plugins/easings/back/dist + "@tsparticles/plugin-easing-bounce": + specifier: workspace:^ + version: link:../../plugins/easings/bounce/dist "@tsparticles/plugin-easing-circ": specifier: workspace:^ version: link:../../plugins/easings/circ/dist "@tsparticles/plugin-easing-cubic": specifier: workspace:^ version: link:../../plugins/easings/cubic/dist + "@tsparticles/plugin-easing-elastic": + specifier: workspace:^ + version: link:../../plugins/easings/elastic/dist "@tsparticles/plugin-easing-expo": specifier: workspace:^ version: link:../../plugins/easings/expo/dist + "@tsparticles/plugin-easing-gaussian": + specifier: workspace:^ + version: link:../../plugins/easings/gaussian/dist "@tsparticles/plugin-easing-linear": specifier: workspace:^ version: link:../../plugins/easings/linear/dist @@ -7331,9 +14089,15 @@ importers: "@tsparticles/plugin-easing-quint": specifier: workspace:^ version: link:../../plugins/easings/quint/dist + "@tsparticles/plugin-easing-sigmoid": + specifier: workspace:^ + version: link:../../plugins/easings/sigmoid/dist "@tsparticles/plugin-easing-sine": specifier: workspace:^ version: link:../../plugins/easings/sine/dist + "@tsparticles/plugin-easing-smoothstep": + specifier: workspace:^ + version: link:../../plugins/easings/smoothstep/dist "@tsparticles/plugin-emitters": specifier: workspace:^ version: link:../../plugins/emitters/dist @@ -7364,18 +14128,60 @@ importers: "@tsparticles/plugin-hsv-color": specifier: workspace:^ version: link:../../plugins/colors/hsv/dist + "@tsparticles/plugin-hwb-color": + specifier: workspace:^ + version: link:../../plugins/colors/hwb/dist "@tsparticles/plugin-infection": specifier: workspace:^ version: link:../../plugins/infection/dist + "@tsparticles/plugin-lab-color": + specifier: workspace:^ + version: link:../../plugins/colors/lab/dist + "@tsparticles/plugin-lch-color": + specifier: workspace:^ + version: link:../../plugins/colors/lch/dist + "@tsparticles/plugin-manual-particles": + specifier: workspace:^ + version: link:../../plugins/manualParticles/dist "@tsparticles/plugin-motion": specifier: workspace:^ version: link:../../plugins/motion/dist + "@tsparticles/plugin-move": + specifier: workspace:^ + version: link:../../plugins/move/dist + "@tsparticles/plugin-named-color": + specifier: workspace:^ + version: link:../../plugins/colors/named/dist + "@tsparticles/plugin-oklab-color": + specifier: workspace:^ + version: link:../../plugins/colors/oklab/dist + "@tsparticles/plugin-oklch-color": + specifier: workspace:^ + version: link:../../plugins/colors/oklch/dist + "@tsparticles/plugin-poisson-disc": + specifier: workspace:^ + version: link:../../plugins/poisson/dist "@tsparticles/plugin-polygon-mask": specifier: workspace:^ version: link:../../plugins/polygonMask/dist + "@tsparticles/plugin-responsive": + specifier: workspace:^ + version: link:../../plugins/responsive/dist "@tsparticles/plugin-sounds": specifier: workspace:^ version: link:../../plugins/sounds/dist + "@tsparticles/plugin-themes": + specifier: workspace:^ + version: link:../../plugins/themes/dist + "@tsparticles/plugin-trail": + specifier: workspace:^ + version: link:../../plugins/trail/dist + "@tsparticles/plugin-zoom": + specifier: workspace:^ + version: link:../../plugins/zoom/dist + "@tsparticles/preset-ambient": + specifier: workspace:^ + version: link:../../presets/ambient/dist "@tsparticles/preset-big-circles": specifier: workspace:^ version: link:../../presets/bigCircles/dist @@ -7385,6 +14191,18 @@ importers: "@tsparticles/preset-confetti": specifier: workspace:^ version: link:../../presets/confetti/dist + "@tsparticles/preset-confetti-cannon": + specifier: workspace:^ + version: link:../../presets/confettiCannon/dist + "@tsparticles/preset-confetti-explosions": + specifier: workspace:^ + version: link:../../presets/confettiExplosions/dist + "@tsparticles/preset-confetti-falling": + specifier: workspace:^ + version: link:../../presets/confettiFalling/dist + "@tsparticles/preset-confetti-parade": + specifier: workspace:^ + version: link:../../presets/confettiParade/dist "@tsparticles/preset-fire": specifier: workspace:^ version: link:../../presets/fire/dist @@ -7403,6 +14221,9 @@ importers: "@tsparticles/preset-links": specifier: workspace:^ version: link:../../presets/links/dist + "@tsparticles/preset-matrix": + specifier: workspace:^ + version: link:../../presets/matrix/dist "@tsparticles/preset-sea-anemone": specifier: workspace:^ version: link:../../presets/seaAnemone/dist @@ -7439,9 +14260,15 @@ importers: "@tsparticles/shape-image": specifier: workspace:^ version: link:../../shapes/image/dist + "@tsparticles/shape-infinity": + specifier: workspace:^ + version: link:../../shapes/infinity/dist "@tsparticles/shape-line": specifier: workspace:^ version: link:../../shapes/line/dist + "@tsparticles/shape-matrix": + specifier: workspace:^ + version: link:../../shapes/matrix/dist "@tsparticles/shape-path": specifier: workspace:^ version: link:../../shapes/path/dist @@ -7460,6 +14287,9 @@ importers: "@tsparticles/shape-square": specifier: workspace:^ version: link:../../shapes/square/dist + "@tsparticles/shape-squircle": + specifier: workspace:^ + version: link:../../shapes/squircle/dist "@tsparticles/shape-star": specifier: workspace:^ version: link:../../shapes/star/dist @@ -7472,9 +14302,6 @@ importers: "@tsparticles/slim": specifier: workspace:^ version: link:../../bundles/slim/dist - "@tsparticles/updater-color": - specifier: ^3.9.1 - version: 3.9.1 "@tsparticles/updater-destroy": specifier: workspace:^ version: link:../../updaters/destroy/dist @@ -7493,6 +14320,9 @@ importers: "@tsparticles/updater-out-modes": specifier: workspace:^ version: link:../../updaters/outModes/dist + "@tsparticles/updater-paint": + specifier: workspace:^ + version: link:../../updaters/paint/dist "@tsparticles/updater-roll": specifier: workspace:^ version: link:../../updaters/roll/dist @@ -7502,9 +14332,6 @@ importers: "@tsparticles/updater-size": specifier: workspace:^ version: link:../../updaters/size/dist - "@tsparticles/updater-stroke-color": - specifier: ^3.9.1 - version: 3.9.1 "@tsparticles/updater-tilt": specifier: workspace:^ version: link:../../updaters/tilt/dist @@ -7525,17 +14352,20 @@ importers: specifier: ^7.29.2 version: 7.29.2 "@wordpress/block-editor": - specifier: ^15.16.0 - version: 15.16.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@19.2.3(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.9.3)) + specifier: ^15.18.0 + version: 15.18.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@19.2.3(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(stylelint@16.26.1(typescript@6.0.3)) "@wordpress/blocks": - specifier: ^15.16.0 - version: 15.16.0(react@18.3.1) + specifier: ^15.18.0 + version: 15.18.0(react@19.2.5) + "@wordpress/browserslist-config": + specifier: ^6.45.0 + version: 6.45.0 "@wordpress/i18n": - specifier: ^6.16.0 - version: 6.16.0 + specifier: ^6.18.0 + version: 6.18.0 "@wordpress/scripts": - specifier: ^31.8.0 - version: 31.8.0(@playwright/test@1.59.1)(@swc/core@1.15.26)(@types/eslint@9.6.1)(@types/node@25.6.0)(@types/webpack@4.41.40)(babel-plugin-macros@3.1.0)(canvas@3.2.3)(file-loader@6.2.0(webpack@5.106.1))(node-notifier@10.0.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint-scss@6.14.0(stylelint@16.26.1(typescript@5.9.3)))(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.9.3))(type-fest@4.41.0)(typescript@5.9.3)(webpack-hot-middleware@2.26.1) + specifier: ^32.1.0 + version: 32.1.0(@playwright/test@1.59.1)(@swc/core@1.15.33)(@types/eslint@9.6.1)(@types/node@25.6.2)(@types/webpack@4.41.40)(@typescript-eslint/eslint-plugin@8.59.2(@typescript-eslint/parser@8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(@typescript-eslint/parser@8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(babel-plugin-macros@3.1.0)(canvas@3.2.3)(file-loader@6.2.0(webpack@5.106.2))(jiti@2.7.0)(node-notifier@10.0.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(stylelint-scss@6.14.0(stylelint@16.26.1(typescript@6.0.3)))(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3))(type-fest@4.41.0)(typescript@6.0.3)(webpack-hot-middleware@2.26.1) fs-extra: specifier: ^11.3.4 version: 11.3.4 @@ -7543,17 +14373,17 @@ importers: specifier: ^5.0.1 version: 5.0.1 postcss: - specifier: ^8.5.9 - version: 8.5.9 + specifier: ^8.5.14 + version: 8.5.14 react: - specifier: ^18.2.0 - version: 18.3.1 + specifier: ^19.2.5 + version: 19.2.5 react-dom: - specifier: ^18.2.0 - version: 18.3.1(react@18.3.1) + specifier: ^19.2.5 + version: 19.2.5(react@19.2.5) typescript: - specifier: ^5.3.3 - version: 5.9.3 + specifier: ^6.0.3 + version: 6.0.3 packages: "@11ty/dependency-tree@2.0.1": @@ -7610,6 +14440,30 @@ packages: { integrity: sha512-Dkj0BgPiLAaim9sbQ97UKDFHJE/880wgStAM18U++NaJ/2Cws34J5731ovJifr6E3Pv4T2CqvMXf8qLCC417Ew== } engines: { node: ">= 14.0.0" } + "@algolia/autocomplete-core@1.17.7": + resolution: + { integrity: sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q== } + + "@algolia/autocomplete-plugin-algolia-insights@1.17.7": + resolution: + { integrity: sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A== } + peerDependencies: + search-insights: ">= 1 < 3" + + "@algolia/autocomplete-preset-algolia@1.17.7": + resolution: + { integrity: sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA== } + peerDependencies: + "@algolia/client-search": ">= 4.9.1 < 6" + algoliasearch: ">= 4.9.1 < 6" + + "@algolia/autocomplete-shared@1.17.7": + resolution: + { integrity: sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg== } + peerDependencies: + "@algolia/client-search": ">= 4.9.1 < 6" + algoliasearch: ">= 4.9.1 < 6" + "@algolia/client-abtesting@5.48.1": resolution: { integrity: sha512-LV5qCJdj+/m9I+Aj91o+glYszrzd7CX6NgKaYdTOj4+tUYfbS62pwYgUfZprYNayhkQpVFcrW8x8ZlIHpS23Vw== } @@ -7827,6 +14681,13 @@ packages: peerDependencies: "@angular/core": 21.2.8 + "@angular/animations@21.2.9": + resolution: + { integrity: sha512-wOWbrneivpTYx3xhiPygoNFNC8ZZ1shpgwBe1hYvfky1fkiz1c92XeHIW1V4rPqYw6d3U55aUX5InyTsVe2Xng== } + engines: { node: ^20.19.0 || ^22.12.0 || >=24.0.0 } + peerDependencies: + "@angular/core": 21.2.9 + "@angular/build@21.2.7": resolution: { integrity: sha512-FpSkFqpsJtdN1cROekVYkmeV1QepdP+/d7fyYQEuNmlOlyqXSDh9qJmy4iL9VNbAU0rk+vFCtYM86rO7Pt9cSw== } @@ -7888,6 +14749,14 @@ packages: "@angular/core": 21.2.8 rxjs: ^6.5.3 || ^7.4.0 + "@angular/common@21.2.9": + resolution: + { integrity: sha512-7spQcF3hPN/fjTx6Pwa32KRRdO0NcixnRuPV4lo50ejtXesjiLVR+fkaX38sawAyGoq89IuuYvUDrbLwCMypmQ== } + engines: { node: ^20.19.0 || ^22.12.0 || >=24.0.0 } + peerDependencies: + "@angular/core": 21.2.9 + rxjs: ^6.5.3 || ^7.4.0 + "@angular/compiler-cli@21.2.8": resolution: { integrity: sha512-S0W+6QazCsn/4xWZu0V5VmU9zmKIlqFR2FJSsAQUPReVmpA40SuQSP6A/cyMVIMYaHvO/cAXSHJVgpxBzBSL/Q== } @@ -7900,11 +14769,28 @@ packages: typescript: optional: true + "@angular/compiler-cli@21.2.9": + resolution: + { integrity: sha512-hTTW/OiqTXrwTneS18CMp47OX0XSbLYl2rIomLS3nXVJniSETH6S/k+LqQtGWWgLbzsd3PzUOOckHnvzpTBTsA== } + engines: { node: ^20.19.0 || ^22.12.0 || >=24.0.0 } + hasBin: true + peerDependencies: + "@angular/compiler": 21.2.9 + typescript: ">=5.9 <6.1" + peerDependenciesMeta: + typescript: + optional: true + "@angular/compiler@21.2.8": resolution: { integrity: sha512-Il9KlT6qX8rWmun5jY6wMLx56bCQZpOVIFEyHM4ai2wmxvbqyxgRFKDs4iMRNn1h04Tgupl6cKSqP9lecIvH6w== } engines: { node: ^20.19.0 || ^22.12.0 || >=24.0.0 } + "@angular/compiler@21.2.9": + resolution: + { integrity: sha512-clsK1EsSPtAuqlRl4CciA/gsvsW7xe0eWcvHxtrMW6DYaUJ6X4AAuDxEEJ5cf/3Mpw4s8KssjIUPPtbrUIGLSQ== } + engines: { node: ^20.19.0 || ^22.12.0 || >=24.0.0 } + "@angular/core@21.2.8": resolution: { integrity: sha512-hI7n4t8qgFJaVV55LIaNuzcdP+/IeuqQRu3huSLo47Gf6uZAD0Acj4Ye9SC8YNmhUu5/RiImngm9NOlcI2oCJA== } @@ -7919,6 +14805,20 @@ packages: zone.js: optional: true + "@angular/core@21.2.9": + resolution: + { integrity: sha512-uZLq2aedJ+0uEZxyf6a1Nc7y1aZ7akAW7K1Kon8JUDZOvI2IDbk0i00MzkELt8q9uSmSSqg9zNKuhjspFf0Pyw== } + engines: { node: ^20.19.0 || ^22.12.0 || >=24.0.0 } + peerDependencies: + "@angular/compiler": 21.2.9 + rxjs: ^6.5.3 || ^7.4.0 + zone.js: ~0.15.0 || ~0.16.0 + peerDependenciesMeta: + "@angular/compiler": + optional: true + zone.js: + optional: true + "@angular/forms@21.2.8": resolution: { integrity: sha512-tyQAHjfMHcqETRkKQaZHjYqIK9W8uRenPpY2DF/Jl+S7CwcaX4T8t8TKgzvTynNzQW9QGiLg0pqVosVMKzBXJg== } @@ -7929,6 +14829,16 @@ packages: "@angular/platform-browser": 21.2.8 rxjs: ^6.5.3 || ^7.4.0 + "@angular/forms@21.2.9": + resolution: + { integrity: sha512-qXLnzmsJoHMgV/gDU7AZgsKBhUH7k6im6V9YuY5UpHHl+nGKCWxtePAZRB0OH2AsqzLwER3Fv2S6+mtmb7651w== } + engines: { node: ^20.19.0 || ^22.12.0 || >=24.0.0 } + peerDependencies: + "@angular/common": 21.2.9 + "@angular/core": 21.2.9 + "@angular/platform-browser": 21.2.9 + rxjs: ^6.5.3 || ^7.4.0 + "@angular/language-service@21.2.8": resolution: { integrity: sha512-Eyvoo3ttFhRAAEmPcLkLfbEtTLfKnAxRAbxNoA9eDXozskkgaDDBUAHd9qOC1A6cnVda5nP4aNeUa+I81Q2maw== } @@ -7944,6 +14854,16 @@ packages: "@angular/core": 21.2.8 "@angular/platform-browser": 21.2.8 + "@angular/platform-browser-dynamic@21.2.9": + resolution: + { integrity: sha512-Z+2vefW4GUSuTC4BOKNiyftqecLSjxOKwe1ZNljBsjesLzywIXi+v+tyEm8ODHHlf7bz/0HwXvc9OYZmfjt95A== } + engines: { node: ^20.19.0 || ^22.12.0 || >=24.0.0 } + peerDependencies: + "@angular/common": 21.2.9 + "@angular/compiler": 21.2.9 + "@angular/core": 21.2.9 + "@angular/platform-browser": 21.2.9 + "@angular/platform-browser@21.2.8": resolution: { integrity: sha512-4fwmGf7GCuIsjFqx1gqqWC92YjlN9SmGJO17TPPsOm5zUOnDx+h3Bj9XjdXxlcBtugTb2xHk6Auqyv3lzWGlkw== } @@ -7956,6 +14876,18 @@ packages: "@angular/animations": optional: true + "@angular/platform-browser@21.2.9": + resolution: + { integrity: sha512-MjEtFvoFtsjsAeu2yzauqGgwwEHV4ml25c9vGFmw4OmSoNme4yp41f2DegwOkn1TTHL3OF3GE65ng2U2feJU4Q== } + engines: { node: ^20.19.0 || ^22.12.0 || >=24.0.0 } + peerDependencies: + "@angular/animations": 21.2.9 + "@angular/common": 21.2.9 + "@angular/core": 21.2.9 + peerDependenciesMeta: + "@angular/animations": + optional: true + "@angular/router@21.2.8": resolution: { integrity: sha512-KSlUbFHHKY84G6iKlB2FDMmh+lLmGjmpyT1p/kx8qZm1BuxJGOOU+oNgkCfaPJT1R2/muDXuxQ51uc/la6y28g== } @@ -7966,6 +14898,16 @@ packages: "@angular/platform-browser": 21.2.8 rxjs: ^6.5.3 || ^7.4.0 + "@angular/router@21.2.9": + resolution: + { integrity: sha512-ExqOEO6IUuNaI75ZcjAbOuzJKpvVze6hRdETyVf7Sny07+XSKv9t8DK9tBHmR7+67wz+zPIUgCXxsQXi8jJu0w== } + engines: { node: ^20.19.0 || ^22.12.0 || >=24.0.0 } + peerDependencies: + "@angular/common": 21.2.9 + "@angular/core": 21.2.9 + "@angular/platform-browser": 21.2.9 + rxjs: ^6.5.3 || ^7.4.0 + "@apideck/better-ajv-errors@0.3.7": resolution: { integrity: sha512-TajUJwGWbDwkCx/CZi7tRE8PVB7simCvKJfHUsSdvps+aTM/PDPP4gkLmKnc+x3CE//y9i/nj74GqdL/hwk7Iw== } @@ -8096,10 +15038,18 @@ packages: resolution: { integrity: sha512-z97oYbdebO5aoWzuJ/8q5hLK232+17KcLZ7cJ8BCWk6+qNzVxn/gftC0KzMBUTD8WAaBkPpNSQK6PXLnNrZ0CA== } + "@astrojs/compiler@4.0.0": + resolution: + { integrity: sha512-eouss7G8ygdZqHuke033VMcVw5HTZUu+PXd/h06DGDUg/jt5btPYPqh66ENWw/mU78rBrf/oeC4oqoBwMtDMNA== } + "@astrojs/internal-helpers@0.8.0": resolution: { integrity: sha512-J56GrhEiV+4dmrGLPNOl2pZjpHXAndWVyiVDYGDuw6MWKpBSEMLdFxHzeM/6sqaknw9M+HFfHZAcvi3OfT3D/w== } + "@astrojs/internal-helpers@0.9.0": + resolution: + { integrity: sha512-GdYkzR26re8izmyYlBqf4z2s7zNngmWLFuxw0UKiPNqHraZGS6GKWIwSHgS22RDlu2ePFJ8bzmpBcUszut/SDg== } + "@astrojs/language-server@2.16.6": resolution: { integrity: sha512-N990lu+HSFiG57owR0XBkr02BYMgiLCshLf+4QG4v6jjSWkBeQGnzqi+E1L08xFPPJ7eEeXnxPXGLaVv5pa4Ug== } @@ -8117,6 +15067,10 @@ packages: resolution: { integrity: sha512-P+HnCsu2js3BoTc8kFmu+E9gOcFeMdPris75g+Zl4sY8+bBRbSQV6xzcBDbZ27eE7yBGEGQoqjpChx+KJYIPYQ== } + "@astrojs/markdown-remark@7.1.1": + resolution: + { integrity: sha512-C6e9BnLGlbdv6bV8MYGeHpHxsUHrCrB4OuRLqi5LI7oiBVcBcqfUN06zpwFQdHgV48QCCrMmLpyqBr7VqC+swA== } + "@astrojs/prism@4.0.1": resolution: { integrity: sha512-nksZQVjlferuWzhPsBpQ1JE5XuKAf1id1/9Hj4a9KG4+ofrlzxUUwX4YGQF/SuDiuiGKEnzopGOt38F3AnVWsQ== } @@ -8127,23 +15081,28 @@ packages: { integrity: sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ== } engines: { node: 18.20.8 || ^20.3.0 || >=22.0.0 } + "@astrojs/telemetry@3.3.1": + resolution: + { integrity: sha512-7fcIxXS9J4ls5tr8b3ww9rbAIz2+HrhNJYZdkAhhB4za/I5IZ/60g+Bs8q7zwG0tOIZfNB4JWhVJ1Qkl/OrNCw== } + engines: { node: 18.20.8 || ^20.3.0 || >=22.0.0 } + "@astrojs/yaml2ts@0.2.3": resolution: { integrity: sha512-PJzRmgQzUxI2uwpdX2lXSHtP4G8ocp24/t+bZyf5Fy0SZLSF9f9KXZoMlFM/XCGue+B0nH/2IZ7FpBYQATBsCg== } - "@augment-vir/assert@31.59.3": + "@augment-vir/assert@31.68.4": resolution: - { integrity: sha512-o6+RSEJZJLb9oTPcRkvUkO5QRVVSJby/mOZ6iQqCVkWrkqeMEeFHjqrvlf8C4KfJzg1323QSj+EARXKkcTHWQA== } + { integrity: sha512-TMmsuWXewtP49ZQbrYK87vMFOMzm/+xqgZ7p0Cg69EYRNvpoRoknWSzv16VInvzrErI8BMCyRFBZ1eFyfvJZLg== } engines: { node: ">=22" } - "@augment-vir/common@31.59.3": + "@augment-vir/common@31.68.4": resolution: - { integrity: sha512-hEMnLeHE+eOCX4XEb0sIlUBbC/3gNsgLCsA+WA5a4syEgtijvWc+/t2r2LW9N+3XmQrH76fPyyxsxfgzvoT82Q== } + { integrity: sha512-bjp7HurCZV7pvwD0mzFkhNWfklrusUxjk3BtzLfjEEBLfZRffilIP6IDMvTp2wwILxvhPjaL/vjgDz6GYSvSlQ== } engines: { node: ">=22" } - "@augment-vir/core@31.59.3": + "@augment-vir/core@31.68.4": resolution: - { integrity: sha512-5Yj/ONzKZYdH6P0a130pgP6QkLpLyNelICXAHqDvZrhMcOKxGKdwRR+DxQlOvPvKulOC30o2QH84VI1/zj8eVw== } + { integrity: sha512-j1dLnvmfw1hCyFgscArMumCgLqbMH6VSPdM7+sVpBpHX13CrYDgBQvKbCorsSA16xjK3RjPxO7UfeSYb7rAWeA== } engines: { node: ">=22" } "@babel/code-frame@7.29.0": @@ -8166,14 +15125,6 @@ packages: { integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA== } engines: { node: ">=6.9.0" } - "@babel/eslint-parser@7.25.7": - resolution: - { integrity: sha512-B+BO9x86VYsQHimucBAL1fxTJKF4wyKY6ZVzee9QgzdZOUfs3BaR6AQrgoGrRI+7IFS1wUz/VyQ+SoBcSpdPbw== } - engines: { node: ^10.13.0 || ^12.13.0 || >=14.0.0 } - peerDependencies: - "@babel/core": ^7.11.0 - eslint: ^7.5.0 || ^8.0.0 || ^9.0.0 - "@babel/eslint-parser@7.28.6": resolution: { integrity: sha512-QGmsKi2PBO/MHSQk+AAgA9R6OHQr+VqnniFE0eMWZcVcfBZoA2dKn2hUsl3Csg/Plt9opRUWdY7//VXsrIlEiA== } @@ -9077,9 +16028,9 @@ packages: { integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A== } engines: { node: ">=6.9.0" } - "@base-ui/react@1.4.0": + "@base-ui/react@1.4.1": resolution: - { integrity: sha512-QcqdVbr/+ba2/RAKJIV1PV6S02Q5+r6a4Eym8ndBw+ZbBILkkmQAyRxXCg/pArrHnkrGeU8goe26aw0h6eE8pg== } + { integrity: sha512-Ab5/LIhcmL8BQcsBUYiOfkSDRdLpvgUBzMK30cu684JPcLclYlztharvCZyNNgzJtbAiREzI9q0pI5erHCMgCw== } engines: { node: ">=14.0.0" } peerDependencies: "@date-fns/tz": ^1.2.0 @@ -9088,12 +16039,16 @@ packages: react: ^17 || ^18 || ^19 react-dom: ^17 || ^18 || ^19 peerDependenciesMeta: + "@date-fns/tz": + optional: true "@types/react": optional: true + date-fns: + optional: true - "@base-ui/utils@0.2.7": + "@base-ui/utils@0.2.8": resolution: - { integrity: sha512-nXYKhiL/0JafyJE8PfcflipGftOftlIwKd72rU15iZ1M5yqgg5J9P8NHU71GReDuXco5MJA/eVQqUT5WRqX9sA== } + { integrity: sha512-jvOi+c+ftGlGotNcKnzPVg2IhCaDTB6/6R3JeqdjdXktuAJi3wKH9T7+svuaKh1mmfVU11UWzUZVH74JDfi/wQ== } peerDependencies: "@types/react": ^17 || ^18 || ^19 react: ^17 || ^18 || ^19 @@ -9220,91 +16175,91 @@ packages: { integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA== } engines: { node: ">=0.1.90" } - "@commitlint/cli@20.5.0": + "@commitlint/cli@21.0.0": resolution: - { integrity: sha512-yNkyN/tuKTJS3wdVfsZ2tXDM4G4Gi7z+jW54Cki8N8tZqwKBltbIvUUrSbT4hz1bhW/h0CdR+5sCSpXD+wMKaQ== } - engines: { node: ">=v18" } + { integrity: sha512-p3y2oC0G2R45zaadMwBxCiSesS8digi5RDplP3Zrfpzm7xIgrgAj0W4fGzONjpHyg8obDVJDU45g5txzeMcblg== } + engines: { node: ">=22.12.0" } hasBin: true - "@commitlint/config-conventional@20.5.0": + "@commitlint/config-conventional@21.0.0": resolution: - { integrity: sha512-t3Ni88rFw1XMa4nZHgOKJ8fIAT9M2j5TnKyTqJzsxea7FUetlNdYFus9dz+MhIRZmc16P0PPyEfh6X2d/qw8SA== } - engines: { node: ">=v18" } + { integrity: sha512-QJX/rPK4Yu3f5J4OCIBy5aXq2e0EEdwSDFZ3NQvFAXTm3gs12ipyZ+yjhZxm3hHn6DB8wuv3zhFTL1I2tYzUBA== } + engines: { node: ">=22.12.0" } - "@commitlint/config-validator@20.5.0": + "@commitlint/config-validator@21.0.0": resolution: - { integrity: sha512-T/Uh6iJUzyx7j35GmHWdIiGRQB+ouZDk0pwAaYq4SXgB54KZhFdJ0vYmxiW6AMYICTIWuyMxDBl1jK74oFp/Gw== } - engines: { node: ">=v18" } + { integrity: sha512-v0UplTYryNUB463X5WrelzKq5/qyYm9/iUNk38S7ZLnd56Uuk2T9awhYKGlgD2/4L5YuN2gsKkyy4EHpRPPz2Q== } + engines: { node: ">=22.12.0" } - "@commitlint/ensure@20.5.0": + "@commitlint/ensure@21.0.0": resolution: - { integrity: sha512-IpHqAUesBeW1EDDdjzJeaOxU9tnogLAyXLRBn03SHlj1SGENn2JGZqSWGkFvBJkJzfXAuCNtsoYzax+ZPS+puw== } - engines: { node: ">=v18" } + { integrity: sha512-n+OYs0Ws9GKC2WlmAeLNoPz9CUg6n/ZyYMkFF8rJ0aMn2kDTDTG0VqK/2Dco0EB4fhuF3JPIllJmU9/LKTl4aw== } + engines: { node: ">=22.12.0" } - "@commitlint/execute-rule@20.0.0": + "@commitlint/execute-rule@21.0.0": resolution: - { integrity: sha512-xyCoOShoPuPL44gVa+5EdZsBVao/pNzpQhkzq3RdtlFdKZtjWcLlUFQHSWBuhk5utKYykeJPSz2i8ABHQA+ZZw== } - engines: { node: ">=v18" } + { integrity: sha512-3OhTq2gQX1tEheMsbDNqxfcNHsAM6g9cub9plf05I9jCxtbNfn8Y+mhClKyUwhX4dbtmC4OLZ9i+HNmoL1aksA== } + engines: { node: ">=22.12.0" } - "@commitlint/format@20.5.0": + "@commitlint/format@21.0.0": resolution: - { integrity: sha512-TI9EwFU/qZWSK7a5qyXMpKPPv3qta7FO4tKW+Wt2al7sgMbLWTsAcDpX1cU8k16TRdsiiet9aOw0zpvRXNJu7Q== } - engines: { node: ">=v18" } + { integrity: sha512-RTfGSrueEgofs1piqwi42U05d85wfxiMH2ncMCZnltx1XqPR3N2S48oACBtTy4xRAhWlf5XlHkK2RaDzEQu3dA== } + engines: { node: ">=22.12.0" } - "@commitlint/is-ignored@20.5.0": + "@commitlint/is-ignored@21.0.0": resolution: - { integrity: sha512-JWLarAsurHJhPozbuAH6GbP4p/hdOCoqS9zJMfqwswne+/GPs5V0+rrsfOkP68Y8PSLphwtFXV0EzJ+GTXTTGg== } - engines: { node: ">=v18" } + { integrity: sha512-K3SaaOTVY9VKhge7vl0R3ng7GENRzJQ9MPV43Tu53kAwEgSx/E0HF4US3AcVqdvlvsDUbF2yXvED95dhela83w== } + engines: { node: ">=22.12.0" } - "@commitlint/lint@20.5.0": + "@commitlint/lint@21.0.0": resolution: - { integrity: sha512-jiM3hNUdu04jFBf1VgPdjtIPvbuVfDTBAc6L98AWcoLjF5sYqkulBHBzlVWll4rMF1T5zeQFB6r//a+s+BBKlA== } - engines: { node: ">=v18" } + { integrity: sha512-dlUJA0Ka14R1YaR46JVRWE3m/8dOQAgE/D0heUfzYua5Jogtq/zzu2ITAIaB/u25DaKjtEO6kuvASzsFDyrPMw== } + engines: { node: ">=22.12.0" } - "@commitlint/load@20.5.0": + "@commitlint/load@21.0.0": resolution: - { integrity: sha512-sLhhYTL/KxeOTZjjabKDhwidGZan84XKK1+XFkwDYL/4883kIajcz/dZFAhBJmZPtL8+nBx6bnkzA95YxPeDPw== } - engines: { node: ">=v18" } + { integrity: sha512-l0nBfO/20PKcJXHZqDIgh7kw/TWVVwn8zZJOkVGBK/ig/h328jBu9jK7OiDl2oZr5mLphmKGjYDR2ffEyb2lIA== } + engines: { node: ">=22.12.0" } - "@commitlint/message@20.4.3": + "@commitlint/message@21.0.0": resolution: - { integrity: sha512-6akwCYrzcrFcTYz9GyUaWlhisY4lmQ3KvrnabmhoeAV8nRH4dXJAh4+EUQ3uArtxxKQkvxJS78hNX2EU3USgxQ== } - engines: { node: ">=v18" } + { integrity: sha512-+daU92JaOHhI2En9KcH+2mvZGJ6D4YSxb/32QDwqkOwSj1Vanjio8PbAqX7dneACdg6B7RgQ7i3mpyYZAws4nw== } + engines: { node: ">=22.12.0" } - "@commitlint/parse@20.5.0": + "@commitlint/parse@21.0.0": resolution: - { integrity: sha512-SeKWHBMk7YOTnnEWUhx+d1a9vHsjjuo6Uo1xRfPNfeY4bdYFasCH1dDpAv13Lyn+dDPOels+jP6D2GRZqzc5fA== } - engines: { node: ">=v18" } + { integrity: sha512-1dbvFBcQK79aTbpc2QCrgEDc6/MMkQ0Mdz4gGmYkN4AHMnAK9HesSewTHqGTrW5mALrMlYSgcWyvKjloY2w19A== } + engines: { node: ">=22.12.0" } - "@commitlint/read@20.5.0": + "@commitlint/read@21.0.0": resolution: - { integrity: sha512-JDEIJ2+GnWpK8QqwfmW7O42h0aycJEWNqcdkJnyzLD11nf9dW2dWLTVEa8Wtlo4IZFGLPATjR5neA5QlOvIH1w== } - engines: { node: ">=v18" } + { integrity: sha512-8VKLKLl2vBSKoTMm1LwcySsyxrBeotnqcT5qJi9pPuPfqSapdAD870Ckgh79c41UFywL6kMqtiyY+kxtfcqZGg== } + engines: { node: ">=22.12.0" } - "@commitlint/resolve-extends@20.5.0": + "@commitlint/resolve-extends@21.0.0": resolution: - { integrity: sha512-3SHPWUW2v0tyspCTcfSsYml0gses92l6TlogwzvM2cbxDgmhSRc+fldDjvGkCXJrjSM87BBaWYTPWwwyASZRrg== } - engines: { node: ">=v18" } + { integrity: sha512-hrJYSZRpmecmSoxYrpuJ/1Q4J9JHt4AVVtr5/Ac6upLO/jJ1DnIm2AjD+38gru3KGOec4aHCVqETuWWLJhydWw== } + engines: { node: ">=22.12.0" } - "@commitlint/rules@20.5.0": + "@commitlint/rules@21.0.0": resolution: - { integrity: sha512-5NdQXQEdnDPT5pK8O39ZA7HohzPRHEsDGU23cyVCNPQy4WegAbAwrQk3nIu7p2sl3dutPk8RZd91yKTrMTnRkQ== } - engines: { node: ">=v18" } + { integrity: sha512-NgQhX1qENA+rbrMw5KKyvVZpZG4D/0wgK8Z4INtcwKbfKtVDFMbn0oNc/Rs8wdyBPBj7ue8Lo/GllUL2Mqjwkg== } + engines: { node: ">=22.12.0" } - "@commitlint/to-lines@20.0.0": + "@commitlint/to-lines@21.0.0": resolution: - { integrity: sha512-2l9gmwiCRqZNWgV+pX1X7z4yP0b3ex/86UmUFgoRt672Ez6cAM2lOQeHFRUTuE6sPpi8XBCGnd8Kh3bMoyHwJw== } - engines: { node: ">=v18" } + { integrity: sha512-qMwvrJK/x3dPcXsIAtQAMKV5Q0wTioyqyHKR06vVN4wmBF4cCrrLq5x81FDeY3Ba+GWgDt0/P3Zw/IHGM8lwgg== } + engines: { node: ">=22.12.0" } - "@commitlint/top-level@20.4.3": + "@commitlint/top-level@21.0.0": resolution: - { integrity: sha512-qD9xfP6dFg5jQ3NMrOhG0/w5y3bBUsVGyJvXxdWEwBm8hyx4WOk3kKXw28T5czBYvyeCVJgJJ6aoJZUWDpaacQ== } - engines: { node: ">=v18" } + { integrity: sha512-8jPqyWZueuN4hU6/ArKVsZ6i8xWtjIrbzHEOaLaTGUfjhhbZNBfXef/DGjzxy55hAv3yFNxHLINfI1bCJ0/MzA== } + engines: { node: ">=22.12.0" } - "@commitlint/types@20.5.0": + "@commitlint/types@21.0.0": resolution: - { integrity: sha512-ZJoS8oSq2CAZEpc/YI9SulLrdiIyXeHb/OGqGrkUP6Q7YV+0ouNAa7GjqRdXeQPncHQIDz/jbCTlHScvYvO/gA== } - engines: { node: ">=v18" } + { integrity: sha512-6nEz+M7I90iix4sviA8NLwskOuyt0M98KUU2aYgiKbn46jMSxUm1l2ACtzRd9ec+y38aKyJhW4Fp6NW0z35kJQ== } + engines: { node: ">=22.12.0" } "@conventional-changelog/git-client@2.6.0": resolution: @@ -9720,9 +16675,9 @@ packages: resolution: { integrity: sha512-SlJDfG6RPeEX8wEVv6ZB3kak4MmbtyiI2qX/5zuKdordbrhB/iaJ58GVMZgJ6P1sJaM1gMgENFYYeg1JWrCFrA== } - "@date-vir/duration@8.1.0": + "@date-vir/duration@8.3.2": resolution: - { integrity: sha512-PwvII5Lo3dzZKpTIYHvPnrKQg6UlOY6V/z/ahPiSGt1HeAMlC96PPfuPZ9ZmzcrKQuAZgO9NzX67sXWRI3T62Q== } + { integrity: sha512-17LP5iSeFsXe5Gnggo71jzJi5Az3Laj2Gz6AWvkbMSmbJrkHAugNBVyKLrbxL7qsHwpTFdr2LGK5ncOH06fJ4Q== } engines: { node: ">=22" } "@discoveryjs/json-ext@0.5.7": @@ -9740,6 +16695,32 @@ packages: { integrity: sha512-dDlz3W405VMFO4w5kIP9DOmELBcvFQGmLoKSdIRstBDubKFYwaNHV1NnlzMCQpXQFGWVALmeMORAuiLx18AvZQ== } engines: { node: ">=14.17.0" } + "@docsearch/css@3.8.2": + resolution: + { integrity: sha512-y05ayQFyUmCXze79+56v/4HpycYF3uFqB78pLPrSV5ZKAlDuIAAJNhaRi8tTdRNXh05yxX/TyNnzD6LwSM89vQ== } + + "@docsearch/js@3.8.2": + resolution: + { integrity: sha512-Q5wY66qHn0SwA7Taa0aDbHiJvaFJLOJyHmooQ7y8hlwwQLQ/5WwCcoX0g7ii04Qi2DJlHsd0XXzJ8Ypw9+9YmQ== } + + "@docsearch/react@3.8.2": + resolution: + { integrity: sha512-xCRrJQlTt8N9GU0DG4ptwHRkfnSnD/YpdeaXe02iKfqs97TkZJv60yE+1eq/tjPcVnTW8dP5qLP7itifFVV5eg== } + peerDependencies: + "@types/react": ">= 16.8.0 < 19.0.0" + react: ">= 16.8.0 < 19.0.0" + react-dom: ">= 16.8.0 < 19.0.0" + search-insights: ">= 1 < 3" + peerDependenciesMeta: + "@types/react": + optional: true + react: + optional: true + react-dom: + optional: true + search-insights: + optional: true + "@dual-bundle/import-meta-resolve@4.2.1": resolution: { integrity: sha512-id+7YRUgoUX6CgV0DtuhirQWodeeA7Lf4i2x71JS/vtA5pRb/hIGWlw+G6MeXvsM+MXrz0VAydTGElX1rAfgPg== } @@ -9754,11 +16735,50 @@ packages: resolution: { integrity: sha512-/B8YJGPzaYq1NbsQmwgP8EZqg40NpTw4ZB3suuI0TplbxKHeK94jeaawLmVhCv+YwUnOpiWEz9U6SeThku/8JQ== } + "@electron/asar@4.2.0": + resolution: + { integrity: sha512-npW1NW5yy8EB9XY/vEw9sUdgmq0sJEhmSBb6bqyFOAw1CSkrhvAvO6QWlW8CdIMo8VN1lkdF345l/MeW0LrY0Q== } + engines: { node: ">=22.12.0" } + hasBin: true + "@electron/get@2.0.3": resolution: { integrity: sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ== } engines: { node: ">=12" } + "@electron/get@5.0.0": + resolution: + { integrity: sha512-pjoBpru1KdEtcExBnuHAP1cAc/5faoedw0hzJkL3o4/IJp7HNF1+fbrdxT3gMYRX2oJfvnA/WXeCTVQpYYxyJA== } + engines: { node: ">=22.12.0" } + + "@electron/notarize@3.1.1": + resolution: + { integrity: sha512-uQQSlOiJnqRkTL1wlEBAxe90nVN/Fc/hEmk0bqpKk8nKjV1if/tXLHKUPePtv9Xsx90PtZU8aidx5lAiOpjkQQ== } + engines: { node: ">= 22.12.0" } + + "@electron/osx-sign@2.4.0": + resolution: + { integrity: sha512-9mJiKF/yrn2FYt1Pd9hIN8bUWs6w6uhm8DJJ/tZtTPMVmqv9/NO1JvRh+NyOJp8kE2bfffK4YkU3ZyM+rHipUw== } + engines: { node: ">=22.12.0" } + hasBin: true + + "@electron/packager@20.0.0": + resolution: + { integrity: sha512-kl4c4LcsrQflg0wAi3mqpmmZFRdTYoZFLZPBP9YeEIvWwQR1NmkZphwT7558UeLOdhr6Ac5l83r8W69KaJBedg== } + engines: { node: ">= 22.12.0" } + hasBin: true + + "@electron/universal@3.0.4": + resolution: + { integrity: sha512-G7mNdfZIdPbx54dTorGlV7SN7nHAKlbJU1NjjeuEo7RzEMYBG62+tKpA2VrzocGcvFLxqJI5XYIknca9EijwOw== } + engines: { node: ">=22.12.0" } + + "@electron/windows-sign@2.0.3": + resolution: + { integrity: sha512-lJGpt2artEZNiOsQtU1JmcLr4Ow/AGskwjTTNaxL2+R2wLN7G2BHL4Z9unOoW321N69kBP1nzObSMdDbQydjbA== } + engines: { node: ">=22.12.0" } + hasBin: true + "@ember-data/rfc395-data@0.0.4": resolution: { integrity: sha512-tGRdvgC9/QMQSuSuJV45xoyhI0Pzjm7A9o/MVVA3HakXIImJbbzx/k/6dO9CUEQXIyS2y0fW6C1XaYOG7rY0FQ== } @@ -9875,21 +16895,33 @@ packages: resolution: { integrity: sha512-fXVXEyFA5Yv3M3n8sUGT7+fvecGrZP4k6FnWWMSZVQf69kAq0LLpaBQLGcPR30m3zMmKYhECP4k/ZkzvhEW5kw== } - "@emnapi/core@1.8.1": + "@emnapi/core@1.10.0": resolution: - { integrity: sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg== } + { integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw== } + + "@emnapi/core@1.4.5": + resolution: + { integrity: sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q== } "@emnapi/core@1.9.2": resolution: { integrity: sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA== } + "@emnapi/runtime@1.10.0": + resolution: + { integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA== } + + "@emnapi/runtime@1.4.5": + resolution: + { integrity: sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg== } + "@emnapi/runtime@1.9.2": resolution: { integrity: sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw== } - "@emnapi/wasi-threads@1.1.0": + "@emnapi/wasi-threads@1.0.4": resolution: - { integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ== } + { integrity: sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g== } "@emnapi/wasi-threads@1.2.1": resolution: @@ -9970,10 +17002,10 @@ packages: resolution: { integrity: sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA== } - "@es-joy/jsdoccomment@0.41.0": + "@es-joy/jsdoccomment@0.50.2": resolution: - { integrity: sha512-aKUhyn1QI5Ksbqcr3fFJj16p99QdjUxXAEuFst1Z47DRyoiMwivIH9MV/ARcJOCXVjPfjITciej8ZD2O/6qUmw== } - engines: { node: ">=16" } + { integrity: sha512-YAdE/IJSpwbOTiaURNCKECdAwqrJuFiZhylmesBcIRawtYKnBR2wxPhoIewMg+Yu+QuYvHfJNReWpoxGBKOChA== } + engines: { node: ">=18" } "@es-joy/jsdoccomment@0.86.0": resolution: @@ -9999,13 +17031,6 @@ packages: cpu: [ppc64] os: [aix] - "@esbuild/aix-ppc64@0.27.2": - resolution: - { integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw== } - engines: { node: ">=18" } - cpu: [ppc64] - os: [aix] - "@esbuild/aix-ppc64@0.27.3": resolution: { integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg== } @@ -10020,13 +17045,6 @@ packages: cpu: [ppc64] os: [aix] - "@esbuild/aix-ppc64@0.28.0": - resolution: - { integrity: sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA== } - engines: { node: ">=18" } - cpu: [ppc64] - os: [aix] - "@esbuild/android-arm64@0.21.5": resolution: { integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A== } @@ -10041,13 +17059,6 @@ packages: cpu: [arm64] os: [android] - "@esbuild/android-arm64@0.27.2": - resolution: - { integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA== } - engines: { node: ">=18" } - cpu: [arm64] - os: [android] - "@esbuild/android-arm64@0.27.3": resolution: { integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg== } @@ -10062,13 +17073,6 @@ packages: cpu: [arm64] os: [android] - "@esbuild/android-arm64@0.28.0": - resolution: - { integrity: sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw== } - engines: { node: ">=18" } - cpu: [arm64] - os: [android] - "@esbuild/android-arm@0.21.5": resolution: { integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg== } @@ -10083,13 +17087,6 @@ packages: cpu: [arm] os: [android] - "@esbuild/android-arm@0.27.2": - resolution: - { integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA== } - engines: { node: ">=18" } - cpu: [arm] - os: [android] - "@esbuild/android-arm@0.27.3": resolution: { integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA== } @@ -10104,13 +17101,6 @@ packages: cpu: [arm] os: [android] - "@esbuild/android-arm@0.28.0": - resolution: - { integrity: sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ== } - engines: { node: ">=18" } - cpu: [arm] - os: [android] - "@esbuild/android-x64@0.21.5": resolution: { integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA== } @@ -10125,13 +17115,6 @@ packages: cpu: [x64] os: [android] - "@esbuild/android-x64@0.27.2": - resolution: - { integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A== } - engines: { node: ">=18" } - cpu: [x64] - os: [android] - "@esbuild/android-x64@0.27.3": resolution: { integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ== } @@ -10146,13 +17129,6 @@ packages: cpu: [x64] os: [android] - "@esbuild/android-x64@0.28.0": - resolution: - { integrity: sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA== } - engines: { node: ">=18" } - cpu: [x64] - os: [android] - "@esbuild/darwin-arm64@0.21.5": resolution: { integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ== } @@ -10167,13 +17143,6 @@ packages: cpu: [arm64] os: [darwin] - "@esbuild/darwin-arm64@0.27.2": - resolution: - { integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg== } - engines: { node: ">=18" } - cpu: [arm64] - os: [darwin] - "@esbuild/darwin-arm64@0.27.3": resolution: { integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg== } @@ -10188,13 +17157,6 @@ packages: cpu: [arm64] os: [darwin] - "@esbuild/darwin-arm64@0.28.0": - resolution: - { integrity: sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q== } - engines: { node: ">=18" } - cpu: [arm64] - os: [darwin] - "@esbuild/darwin-x64@0.21.5": resolution: { integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw== } @@ -10209,13 +17171,6 @@ packages: cpu: [x64] os: [darwin] - "@esbuild/darwin-x64@0.27.2": - resolution: - { integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA== } - engines: { node: ">=18" } - cpu: [x64] - os: [darwin] - "@esbuild/darwin-x64@0.27.3": resolution: { integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg== } @@ -10230,13 +17185,6 @@ packages: cpu: [x64] os: [darwin] - "@esbuild/darwin-x64@0.28.0": - resolution: - { integrity: sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ== } - engines: { node: ">=18" } - cpu: [x64] - os: [darwin] - "@esbuild/freebsd-arm64@0.21.5": resolution: { integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g== } @@ -10251,13 +17199,6 @@ packages: cpu: [arm64] os: [freebsd] - "@esbuild/freebsd-arm64@0.27.2": - resolution: - { integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g== } - engines: { node: ">=18" } - cpu: [arm64] - os: [freebsd] - "@esbuild/freebsd-arm64@0.27.3": resolution: { integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w== } @@ -10272,13 +17213,6 @@ packages: cpu: [arm64] os: [freebsd] - "@esbuild/freebsd-arm64@0.28.0": - resolution: - { integrity: sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q== } - engines: { node: ">=18" } - cpu: [arm64] - os: [freebsd] - "@esbuild/freebsd-x64@0.21.5": resolution: { integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ== } @@ -10293,13 +17227,6 @@ packages: cpu: [x64] os: [freebsd] - "@esbuild/freebsd-x64@0.27.2": - resolution: - { integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA== } - engines: { node: ">=18" } - cpu: [x64] - os: [freebsd] - "@esbuild/freebsd-x64@0.27.3": resolution: { integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA== } @@ -10314,13 +17241,6 @@ packages: cpu: [x64] os: [freebsd] - "@esbuild/freebsd-x64@0.28.0": - resolution: - { integrity: sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw== } - engines: { node: ">=18" } - cpu: [x64] - os: [freebsd] - "@esbuild/linux-arm64@0.21.5": resolution: { integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q== } @@ -10335,13 +17255,6 @@ packages: cpu: [arm64] os: [linux] - "@esbuild/linux-arm64@0.27.2": - resolution: - { integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw== } - engines: { node: ">=18" } - cpu: [arm64] - os: [linux] - "@esbuild/linux-arm64@0.27.3": resolution: { integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg== } @@ -10356,13 +17269,6 @@ packages: cpu: [arm64] os: [linux] - "@esbuild/linux-arm64@0.28.0": - resolution: - { integrity: sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A== } - engines: { node: ">=18" } - cpu: [arm64] - os: [linux] - "@esbuild/linux-arm@0.21.5": resolution: { integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA== } @@ -10377,13 +17283,6 @@ packages: cpu: [arm] os: [linux] - "@esbuild/linux-arm@0.27.2": - resolution: - { integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw== } - engines: { node: ">=18" } - cpu: [arm] - os: [linux] - "@esbuild/linux-arm@0.27.3": resolution: { integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw== } @@ -10398,13 +17297,6 @@ packages: cpu: [arm] os: [linux] - "@esbuild/linux-arm@0.28.0": - resolution: - { integrity: sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw== } - engines: { node: ">=18" } - cpu: [arm] - os: [linux] - "@esbuild/linux-ia32@0.21.5": resolution: { integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg== } @@ -10419,13 +17311,6 @@ packages: cpu: [ia32] os: [linux] - "@esbuild/linux-ia32@0.27.2": - resolution: - { integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w== } - engines: { node: ">=18" } - cpu: [ia32] - os: [linux] - "@esbuild/linux-ia32@0.27.3": resolution: { integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg== } @@ -10440,13 +17325,6 @@ packages: cpu: [ia32] os: [linux] - "@esbuild/linux-ia32@0.28.0": - resolution: - { integrity: sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ== } - engines: { node: ">=18" } - cpu: [ia32] - os: [linux] - "@esbuild/linux-loong64@0.21.5": resolution: { integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg== } @@ -10461,13 +17339,6 @@ packages: cpu: [loong64] os: [linux] - "@esbuild/linux-loong64@0.27.2": - resolution: - { integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg== } - engines: { node: ">=18" } - cpu: [loong64] - os: [linux] - "@esbuild/linux-loong64@0.27.3": resolution: { integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA== } @@ -10482,13 +17353,6 @@ packages: cpu: [loong64] os: [linux] - "@esbuild/linux-loong64@0.28.0": - resolution: - { integrity: sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg== } - engines: { node: ">=18" } - cpu: [loong64] - os: [linux] - "@esbuild/linux-mips64el@0.21.5": resolution: { integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg== } @@ -10503,13 +17367,6 @@ packages: cpu: [mips64el] os: [linux] - "@esbuild/linux-mips64el@0.27.2": - resolution: - { integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw== } - engines: { node: ">=18" } - cpu: [mips64el] - os: [linux] - "@esbuild/linux-mips64el@0.27.3": resolution: { integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw== } @@ -10524,13 +17381,6 @@ packages: cpu: [mips64el] os: [linux] - "@esbuild/linux-mips64el@0.28.0": - resolution: - { integrity: sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w== } - engines: { node: ">=18" } - cpu: [mips64el] - os: [linux] - "@esbuild/linux-ppc64@0.21.5": resolution: { integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w== } @@ -10545,13 +17395,6 @@ packages: cpu: [ppc64] os: [linux] - "@esbuild/linux-ppc64@0.27.2": - resolution: - { integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ== } - engines: { node: ">=18" } - cpu: [ppc64] - os: [linux] - "@esbuild/linux-ppc64@0.27.3": resolution: { integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA== } @@ -10566,13 +17409,6 @@ packages: cpu: [ppc64] os: [linux] - "@esbuild/linux-ppc64@0.28.0": - resolution: - { integrity: sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg== } - engines: { node: ">=18" } - cpu: [ppc64] - os: [linux] - "@esbuild/linux-riscv64@0.21.5": resolution: { integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA== } @@ -10587,13 +17423,6 @@ packages: cpu: [riscv64] os: [linux] - "@esbuild/linux-riscv64@0.27.2": - resolution: - { integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA== } - engines: { node: ">=18" } - cpu: [riscv64] - os: [linux] - "@esbuild/linux-riscv64@0.27.3": resolution: { integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ== } @@ -10608,13 +17437,6 @@ packages: cpu: [riscv64] os: [linux] - "@esbuild/linux-riscv64@0.28.0": - resolution: - { integrity: sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ== } - engines: { node: ">=18" } - cpu: [riscv64] - os: [linux] - "@esbuild/linux-s390x@0.21.5": resolution: { integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A== } @@ -10629,13 +17451,6 @@ packages: cpu: [s390x] os: [linux] - "@esbuild/linux-s390x@0.27.2": - resolution: - { integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w== } - engines: { node: ">=18" } - cpu: [s390x] - os: [linux] - "@esbuild/linux-s390x@0.27.3": resolution: { integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw== } @@ -10650,13 +17465,6 @@ packages: cpu: [s390x] os: [linux] - "@esbuild/linux-s390x@0.28.0": - resolution: - { integrity: sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q== } - engines: { node: ">=18" } - cpu: [s390x] - os: [linux] - "@esbuild/linux-x64@0.21.5": resolution: { integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ== } @@ -10671,13 +17479,6 @@ packages: cpu: [x64] os: [linux] - "@esbuild/linux-x64@0.27.2": - resolution: - { integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA== } - engines: { node: ">=18" } - cpu: [x64] - os: [linux] - "@esbuild/linux-x64@0.27.3": resolution: { integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA== } @@ -10692,13 +17493,6 @@ packages: cpu: [x64] os: [linux] - "@esbuild/linux-x64@0.28.0": - resolution: - { integrity: sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ== } - engines: { node: ">=18" } - cpu: [x64] - os: [linux] - "@esbuild/netbsd-arm64@0.25.12": resolution: { integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg== } @@ -10706,13 +17500,6 @@ packages: cpu: [arm64] os: [netbsd] - "@esbuild/netbsd-arm64@0.27.2": - resolution: - { integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw== } - engines: { node: ">=18" } - cpu: [arm64] - os: [netbsd] - "@esbuild/netbsd-arm64@0.27.3": resolution: { integrity: sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA== } @@ -10727,13 +17514,6 @@ packages: cpu: [arm64] os: [netbsd] - "@esbuild/netbsd-arm64@0.28.0": - resolution: - { integrity: sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw== } - engines: { node: ">=18" } - cpu: [arm64] - os: [netbsd] - "@esbuild/netbsd-x64@0.21.5": resolution: { integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg== } @@ -10748,13 +17528,6 @@ packages: cpu: [x64] os: [netbsd] - "@esbuild/netbsd-x64@0.27.2": - resolution: - { integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA== } - engines: { node: ">=18" } - cpu: [x64] - os: [netbsd] - "@esbuild/netbsd-x64@0.27.3": resolution: { integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA== } @@ -10769,13 +17542,6 @@ packages: cpu: [x64] os: [netbsd] - "@esbuild/netbsd-x64@0.28.0": - resolution: - { integrity: sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw== } - engines: { node: ">=18" } - cpu: [x64] - os: [netbsd] - "@esbuild/openbsd-arm64@0.25.12": resolution: { integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A== } @@ -10783,13 +17549,6 @@ packages: cpu: [arm64] os: [openbsd] - "@esbuild/openbsd-arm64@0.27.2": - resolution: - { integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA== } - engines: { node: ">=18" } - cpu: [arm64] - os: [openbsd] - "@esbuild/openbsd-arm64@0.27.3": resolution: { integrity: sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw== } @@ -10804,13 +17563,6 @@ packages: cpu: [arm64] os: [openbsd] - "@esbuild/openbsd-arm64@0.28.0": - resolution: - { integrity: sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g== } - engines: { node: ">=18" } - cpu: [arm64] - os: [openbsd] - "@esbuild/openbsd-x64@0.21.5": resolution: { integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow== } @@ -10825,13 +17577,6 @@ packages: cpu: [x64] os: [openbsd] - "@esbuild/openbsd-x64@0.27.2": - resolution: - { integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg== } - engines: { node: ">=18" } - cpu: [x64] - os: [openbsd] - "@esbuild/openbsd-x64@0.27.3": resolution: { integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ== } @@ -10846,13 +17591,6 @@ packages: cpu: [x64] os: [openbsd] - "@esbuild/openbsd-x64@0.28.0": - resolution: - { integrity: sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA== } - engines: { node: ">=18" } - cpu: [x64] - os: [openbsd] - "@esbuild/openharmony-arm64@0.25.12": resolution: { integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg== } @@ -10860,13 +17598,6 @@ packages: cpu: [arm64] os: [openharmony] - "@esbuild/openharmony-arm64@0.27.2": - resolution: - { integrity: sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag== } - engines: { node: ">=18" } - cpu: [arm64] - os: [openharmony] - "@esbuild/openharmony-arm64@0.27.3": resolution: { integrity: sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g== } @@ -10881,13 +17612,6 @@ packages: cpu: [arm64] os: [openharmony] - "@esbuild/openharmony-arm64@0.28.0": - resolution: - { integrity: sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w== } - engines: { node: ">=18" } - cpu: [arm64] - os: [openharmony] - "@esbuild/sunos-x64@0.21.5": resolution: { integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg== } @@ -10902,13 +17626,6 @@ packages: cpu: [x64] os: [sunos] - "@esbuild/sunos-x64@0.27.2": - resolution: - { integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg== } - engines: { node: ">=18" } - cpu: [x64] - os: [sunos] - "@esbuild/sunos-x64@0.27.3": resolution: { integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA== } @@ -10923,13 +17640,6 @@ packages: cpu: [x64] os: [sunos] - "@esbuild/sunos-x64@0.28.0": - resolution: - { integrity: sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw== } - engines: { node: ">=18" } - cpu: [x64] - os: [sunos] - "@esbuild/win32-arm64@0.21.5": resolution: { integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A== } @@ -10944,13 +17654,6 @@ packages: cpu: [arm64] os: [win32] - "@esbuild/win32-arm64@0.27.2": - resolution: - { integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg== } - engines: { node: ">=18" } - cpu: [arm64] - os: [win32] - "@esbuild/win32-arm64@0.27.3": resolution: { integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA== } @@ -10965,13 +17668,6 @@ packages: cpu: [arm64] os: [win32] - "@esbuild/win32-arm64@0.28.0": - resolution: - { integrity: sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA== } - engines: { node: ">=18" } - cpu: [arm64] - os: [win32] - "@esbuild/win32-ia32@0.21.5": resolution: { integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA== } @@ -10986,13 +17682,6 @@ packages: cpu: [ia32] os: [win32] - "@esbuild/win32-ia32@0.27.2": - resolution: - { integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ== } - engines: { node: ">=18" } - cpu: [ia32] - os: [win32] - "@esbuild/win32-ia32@0.27.3": resolution: { integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q== } @@ -11007,13 +17696,6 @@ packages: cpu: [ia32] os: [win32] - "@esbuild/win32-ia32@0.28.0": - resolution: - { integrity: sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA== } - engines: { node: ">=18" } - cpu: [ia32] - os: [win32] - "@esbuild/win32-x64@0.21.5": resolution: { integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw== } @@ -11028,13 +17710,6 @@ packages: cpu: [x64] os: [win32] - "@esbuild/win32-x64@0.27.2": - resolution: - { integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ== } - engines: { node: ">=18" } - cpu: [x64] - os: [win32] - "@esbuild/win32-x64@0.27.3": resolution: { integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA== } @@ -11049,12 +17724,12 @@ packages: cpu: [x64] os: [win32] - "@esbuild/win32-x64@0.28.0": + "@eslint-community/eslint-plugin-eslint-comments@4.7.1": resolution: - { integrity: sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw== } - engines: { node: ">=18" } - cpu: [x64] - os: [win32] + { integrity: sha512-Ql2nJFwA8wUGpILYGOQaT1glPsmvEwE0d+a+l7AALLzQvInqdbXJdx7aSu0DpUX9dB1wMVBMhm99/++S3MdEtQ== } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 "@eslint-community/eslint-utils@4.9.1": resolution: @@ -11068,25 +17743,45 @@ packages: { integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew== } engines: { node: ^12.0.0 || ^14.0.0 || >=16.0.0 } + "@eslint/compat@2.0.5": + resolution: + { integrity: sha512-IbHDbHJfkVNv6xjlET8AIVo/K1NQt7YT4Rp6ok/clyBGcpRx1l6gv0Rq3vBvYfPJIZt6ODf66Zq08FJNDpnzgg== } + engines: { node: ^20.19.0 || ^22.13.0 || >=24 } + peerDependencies: + eslint: ^8.40 || 9 || 10 + peerDependenciesMeta: + eslint: + optional: true + "@eslint/config-array@0.23.4": resolution: { integrity: sha512-lf19F24LSMfF8weXvW5QEtnLqW70u7kgit5e9PSx0MsHAFclGd1T9ynvWEMDT1w5J4Qt54tomGeAhdoAku1Xow== } engines: { node: ^20.19.0 || ^22.13.0 || >=24 } + "@eslint/config-array@0.23.5": + resolution: + { integrity: sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA== } + engines: { node: ^20.19.0 || ^22.13.0 || >=24 } + "@eslint/config-helpers@0.5.4": resolution: { integrity: sha512-jJhqiY3wPMlWWO3370M86CPJ7pt8GmEwSLglMfQhjXal07RCvhmU0as4IuUEW5SJeunfItiEetHmSxCCe9lDBg== } engines: { node: ^20.19.0 || ^22.13.0 || >=24 } + "@eslint/config-helpers@0.5.5": + resolution: + { integrity: sha512-eIJYKTCECbP/nsKaaruF6LW967mtbQbsw4JTtSVkUQc9MneSkbrgPJAbKl9nWr0ZeowV8BfsarBmPpBzGelA2w== } + engines: { node: ^20.19.0 || ^22.13.0 || >=24 } + "@eslint/core@1.2.0": resolution: { integrity: sha512-8FTGbNzTvmSlc4cZBaShkC6YvFMG0riksYWRFKXztqVdXaQbcZLXlFbSpC05s70sGEsXAw0qwhx69JiW7hQS7A== } engines: { node: ^20.19.0 || ^22.13.0 || >=24 } - "@eslint/eslintrc@2.1.4": + "@eslint/core@1.2.1": resolution: - { integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + { integrity: sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ== } + engines: { node: ^20.19.0 || ^22.13.0 || >=24 } "@eslint/js@10.0.1": resolution: @@ -11098,21 +17793,26 @@ packages: eslint: optional: true - "@eslint/js@8.57.1": - resolution: - { integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } - "@eslint/object-schema@3.0.4": resolution: { integrity: sha512-55lO/7+Yp0ISKRP0PsPtNTeNGapXaO085aELZmWCVc5SH3jfrqpuU6YgOdIxMS99ZHkQN1cXKE+cdIqwww9ptw== } engines: { node: ^20.19.0 || ^22.13.0 || >=24 } + "@eslint/object-schema@3.0.5": + resolution: + { integrity: sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw== } + engines: { node: ^20.19.0 || ^22.13.0 || >=24 } + "@eslint/plugin-kit@0.7.0": resolution: { integrity: sha512-ejvBr8MQCbVsWNZnCwDXjUKq40MDmHalq7cJ6e9s/qzTUFIIo/afzt1Vui9T97FM/V/pN4YsFVoed5NIa96RDg== } engines: { node: ^20.19.0 || ^22.13.0 || >=24 } + "@eslint/plugin-kit@0.7.1": + resolution: + { integrity: sha512-rZAP3aVgB9ds9KOeUSL+zZ21hPmo8dh6fnIFwRQj5EAZl9gzR7wxYbYXYysAM8CTqGmUGyp2S4kUdV17MnGuWQ== } + engines: { node: ^20.19.0 || ^22.13.0 || >=24 } + "@esm-bundle/chai@4.3.4-fix.0": resolution: { integrity: sha512-26SKdM4uvDWlY8/OOOxSB1AqQWeBosCX3wRYUZO7enTAj03CtVxIiCimYVG2WpULcyV51qapK4qTovwkUr5Mlw== } @@ -11320,22 +18020,11 @@ packages: { integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw== } engines: { node: ">=18.18.0" } - "@humanwhocodes/config-array@0.13.0": - resolution: - { integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw== } - engines: { node: ">=10.10.0" } - deprecated: Use @eslint/config-array instead - "@humanwhocodes/module-importer@1.0.1": resolution: { integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== } engines: { node: ">=12.22" } - "@humanwhocodes/object-schema@2.0.3": - resolution: - { integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== } - deprecated: Use @eslint/object-schema instead - "@humanwhocodes/retry@0.3.1": resolution: { integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA== } @@ -11355,6 +18044,14 @@ packages: resolution: { integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg== } + "@iconify-json/simple-icons@1.2.80": + resolution: + { integrity: sha512-iglncJJ6X/dVuzFDU32MrHwwo4RBwivGf108dgyYg+HKS78ifx0h7sTenpDZMVT+UhdS6CSgZcvY/SvRXlIEUg== } + + "@iconify/types@2.0.0": + resolution: + { integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg== } + "@img/colour@1.1.0": resolution: { integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ== } @@ -12073,10 +18770,6 @@ packages: resolution: { integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA== } - "@jridgewell/source-map@0.3.5": - resolution: - { integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== } - "@jridgewell/sourcemap-codec@1.5.5": resolution: { integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og== } @@ -12324,6 +19017,11 @@ packages: cpu: [x64] os: [win32] + "@malept/cross-spawn-promise@2.0.0": + resolution: + { integrity: sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg== } + engines: { node: ">= 12.13.0" } + "@mapbox/node-pre-gyp@2.0.3": resolution: { integrity: sha512-uwPAhccfFJlsfCxMYTwOdVfOz3xqyj8xYL3zJj8f0pb30tLohnnFPhLuqp4/qoEz8sNxe4SESZedcBojRefIzg== } @@ -12542,10 +19240,6 @@ packages: resolution: { integrity: sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ== } - "@napi-rs/wasm-runtime@1.1.1": - resolution: - { integrity: sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A== } - "@napi-rs/wasm-runtime@1.1.3": resolution: { integrity: sha512-xK9sGVbJWYb08+mTJt3/YV24WxvxpXcXtP6B172paPZ+Ts69Re9dAr7lKwJoeIx8OoeuimEiRZ7umkiUVClmmQ== } @@ -12553,6 +19247,13 @@ packages: "@emnapi/core": ^1.7.1 "@emnapi/runtime": ^1.7.1 + "@napi-rs/wasm-runtime@1.1.4": + resolution: + { integrity: sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow== } + peerDependencies: + "@emnapi/core": ^1.7.1 + "@emnapi/runtime": ^1.7.1 + "@next/env@16.2.3": resolution: { integrity: sha512-ZWXyj4uNu4GCWQw9cjRxWlbD+33mcDszIo9iQxFnBX3Wmgq9ulaSJcl6VhuWx5pCWqqD+9W6Wfz7N0lM5lYPMA== } @@ -12718,11 +19419,6 @@ packages: { integrity: sha512-GUYESQlxZRAdhs3UhbB6pVRNUELQOHXwK9ruDkwmCv2aZ5y0SApQzUJCg02p3A7Ue2J5hxvlk1YI53c00NmRyQ== } engines: { node: ^18.17.0 || >=20.5.0 } - "@npmcli/git@7.0.1": - resolution: - { integrity: sha512-+XTFxK2jJF/EJJ5SoAzXk3qwIDfvFc5/g+bD274LZ7uY7LE8sTfG6Z8rOanPl2ZEvZWqNvmEdtXC25cE54VcoA== } - engines: { node: ^20.17.0 || >=22.9.0 } - "@npmcli/git@7.0.2": resolution: { integrity: sha512-oeolHDjExNAJAnlYP2qzNjMX/Xi9bmu78C9dIGr4xjobrSKbuMYCph8lTzn4vnW3NjIqVmw/f8BCfouqyJXlRg== } @@ -13088,84 +19784,97 @@ packages: resolution: { integrity: sha512-XiTWdadTwtmL/IGkNqbVe+dOlT+IMvcBu7TvKI7plWhVQeBCQ9iKhk3jgvVWFyiwL2yHJDlEwOM5v9oVES5Xmw== } - "@nx/devkit@22.6.5": + "@nx/devkit@22.7.1": resolution: - { integrity: sha512-9kvAI+kk2pfEXLqS8OyjI9XvWmp+Gdn7jPfxDAz8BOqxMyPy3p5hYl+jc4TIsLOWunAFl8azqrcYsHzEpaWCIA== } + { integrity: sha512-z2ayFHq406MyVpNtksGnsfHOYZVTSInwQgZeg6u+S4sD21Wvb+oldhqkbYX46jiGJSaw5aUjFdzXJu2l4MYP1A== } peerDependencies: nx: ">= 21 <= 23 || ^22.0.0-0" - "@nx/nx-darwin-arm64@22.6.5": + "@nx/js@22.7.1": resolution: - { integrity: sha512-qT77Omkg5xQuL2+pDbneX2tI+XW5ZeayMylu7UUgK8OhTrAkJLKjpuYRH4xT5XBipxbDtlxmO3aLS3Ib1pKzJQ== } + { integrity: sha512-zvPaamdAFehy4PsA963sJuwVXehsbpSJQJgEW6xcWy58lYLI/NRQHSZn4yJmuaFVnuuciRlmiacCom242byWnw== } + peerDependencies: + verdaccio: ^6.0.5 + peerDependenciesMeta: + verdaccio: + optional: true + + "@nx/nx-darwin-arm64@22.7.1": + resolution: + { integrity: sha512-m00ZmBn39VUgb0Ahhu5iY6D56ETdXjDbVnOz0XF3DacJrcLtq9sZ+cg1bj6PshqtvRWVg+zJRrZBU6vL7hGuFQ== } cpu: [arm64] os: [darwin] - "@nx/nx-darwin-x64@22.6.5": + "@nx/nx-darwin-x64@22.7.1": resolution: - { integrity: sha512-9jICxb7vfJ56y/7Yuh3b/n1QJqWxO9xnXKYEs6SO8xPoW/KomVckILGc1C6RQSs6/3ixVJC7k1Dh1wm5tKPFrg== } + { integrity: sha512-DmD8Qow+Yt7Yrmjlz1AsfiwxW+0kRzg+6MY70+d7qChtD2bTzvA/k0ut8SMy+CxU3kxgUbKhGOtml5JDXoX2ww== } cpu: [x64] os: [darwin] - "@nx/nx-freebsd-x64@22.6.5": + "@nx/nx-freebsd-x64@22.7.1": resolution: - { integrity: sha512-6B1wEKpqz5dI3AGMqttAVnA6M3DB/besAtuGyQiymK9ROlta1iuWgCcIYwcCQyhLn2Rx7vqj447KKcgCa8HlVw== } + { integrity: sha512-HboVrUCHcuYTXtuX3dMyRszP7JO90ZVBLWgnmaM7jUM7jnllZjmezUMtpNHfN1GQbVFafJf/NBShDWsu9LuaUA== } cpu: [x64] os: [freebsd] - "@nx/nx-linux-arm-gnueabihf@22.6.5": + "@nx/nx-linux-arm-gnueabihf@22.7.1": resolution: - { integrity: sha512-xV50B8mnDPboct7JkAHftajI02s+8FszA8WTzhore+YGR+lEKHTLpucwGEaQuMlSdLplH7pQix4B4uK5pcMhZw== } + { integrity: sha512-5Gm8Y7L8WXMLUjHhiy1eqGz5/PiRw1YLanFg5audBNkZvH6Jkwzdpoz0dbeKjwMDHz4NmniUV1s76Th8VLWmiQ== } cpu: [arm] os: [linux] - "@nx/nx-linux-arm64-gnu@22.6.5": + "@nx/nx-linux-arm64-gnu@22.7.1": resolution: - { integrity: sha512-2JkWuMGj+HpW6oPAvU5VdAx1afTnEbiM10Y3YOrl3fipWV4BiP5VDx762QTrfCraP4hl6yqTgvTe7F9xaby+jQ== } + { integrity: sha512-GdgPYMfbijBRFJs1absL/9QdSNLsTAGdyKykDf9CaVxEMZ92VB+pncpX9Vn/ZBCSeeWTLF+bSK3UM5v+loIObQ== } cpu: [arm64] os: [linux] libc: [glibc] - "@nx/nx-linux-arm64-musl@22.6.5": + "@nx/nx-linux-arm64-musl@22.7.1": resolution: - { integrity: sha512-Z/zMqFClnEyqDXouJKEPoWVhMQIif5F0YuECWBYjd3ZLwQsXGTItoh+6Wm3XF/nGMA2uLOHyTq/X7iFXQY3RzA== } + { integrity: sha512-HyBgPtY1hyNTk8683nt7F29jh3lVdS/zul9vS0NgKeCSoYL3GRM3nLoTPynoHUxyVP/tWYOE3ymvnk92qYwL4Q== } cpu: [arm64] os: [linux] libc: [musl] - "@nx/nx-linux-x64-gnu@22.6.5": + "@nx/nx-linux-x64-gnu@22.7.1": resolution: - { integrity: sha512-FlotSyqNnaXSn0K+yWw+hRdYBwusABrPgKLyixfJIYRzsy+xPKN6pON6vZfqGwzuWF/9mEGReRz+iM8PiW0XSg== } + { integrity: sha512-bQBgRiEsanNvKcDOjVAUPjvcp0iDLofYYUL2af2iuCDxreLOej+J6MeA5bWTLNly5ly1d4voKGTqa+OsouVyLg== } cpu: [x64] os: [linux] libc: [glibc] - "@nx/nx-linux-x64-musl@22.6.5": + "@nx/nx-linux-x64-musl@22.7.1": resolution: - { integrity: sha512-RVOe2qcwhoIx6mxQURPjUfAW5SEOmT2gdhewvdcvX9ICq1hj5B2VarmkhTg0qroO7xiyqOqwq26mCzoV2I3NgQ== } + { integrity: sha512-gcco2GjcAztF/fRcAgFxtWxrWDnQdNmPaAN9FTt1+qQ9RUSLvdL8bQxKx4Kd9N9T+gXPlrWhMkBkKbbV09+X1Q== } cpu: [x64] os: [linux] libc: [musl] - "@nx/nx-win32-arm64-msvc@22.6.5": + "@nx/nx-win32-arm64-msvc@22.7.1": resolution: - { integrity: sha512-ZqurqI8VuYnsr2Kn4K4t+Gx6j/BZdf6qz/6Tv4A7XQQ6oNYVQgTqoNEFj+CCkVaIe6aIdCWpousFLqs+ZgBqYQ== } + { integrity: sha512-IT9oEn0YQ83iPH7666aoPyTRsUzBIBJdBLMXeLX4I60fHPXWhUSGpfiLtIsgU2OfeOVb9hU9idwNh1wc4u9rWQ== } cpu: [arm64] os: [win32] - "@nx/nx-win32-x64-msvc@22.6.5": + "@nx/nx-win32-x64-msvc@22.7.1": resolution: - { integrity: sha512-i2QFBJIuaYg9BHxrrnBV4O7W9rVL2k0pSIdk/rRp3EYJEU93iUng+qbZiY9wh1xvmXuUCE2G7TRd+8/SG/RFKg== } + { integrity: sha512-P2zeSKXVH2Eiwsb8UfP2rMMS7//cHWpiO4M9zt6q0c4lI/hN1vXBciRKVWruGk9ZrWLHuhaMAhG94+MJtzKuRQ== } cpu: [x64] os: [win32] + "@nx/workspace@22.7.1": + resolution: + { integrity: sha512-wnBMgeogdGaRdxDDzZspSt1U87PMeYJhz1ygr42L9Lot9E5nCf17E85iyHl3YxcMSNslHxnHyTkq7MyQ8hHjdQ== } + "@octokit/auth-token@4.0.0": resolution: { integrity: sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA== } engines: { node: ">= 18" } - "@octokit/core@5.2.1": + "@octokit/core@5.2.2": resolution: - { integrity: sha512-dKYCMuPO1bmrpuogcjQ8z7ICCH3FP6WmxpwC03yjzGfZhj9fTJg6+bS1+UAplekbN2C+M61UNllGOOoAfGCrdQ== } + { integrity: sha512-/g2d4sW9nUDJOMz3mabVQvOGhVa4e/BN/Um7yca9Bb2XTzPPnfTWHWQg+IsEYO7M3Vx+EXvaM/I2pJWIMun1bg== } engines: { node: ">= 18" } "@octokit/endpoint@9.0.6": @@ -13226,6 +19935,10 @@ packages: resolution: { integrity: sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA== } + "@one-ini/wasm@0.2.1": + resolution: + { integrity: sha512-TUqERXGNTifZ9y2g3wPxQrw3HpHv/02DsW3D90T9x0hhonrL1ZqpSmNrU2XkoIq0fP1N6gZfVQzy2Fw1ZvGBNg== } + "@open-wc/building-utils@2.21.1": resolution: { integrity: sha512-wCyxkvkcA7vRwXJeyrIpRhDbBrVlPGAgYKsuG9n1Pyxt2aypthtZR+1q0+wPkr6h1ZYgJnM9CWQYe72AaAXxvw== } @@ -13784,6 +20497,13 @@ packages: cpu: [arm] os: [android] + "@oxc-parser/binding-android-arm-eabi@0.119.0": + resolution: + { integrity: sha512-e0ii/Tqwk5pAHZRY+ZyXOdKHNRNmE+dvTGQZ7xQ5XPH2Am59aktD30QvfcfwItGhNTLCj/5TYGH5RHvmvqaILQ== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [arm] + os: [android] + "@oxc-parser/binding-android-arm64@0.117.0": resolution: { integrity: sha512-EPTs2EBijGmyhPso4rXAL0NSpECXER9IaVKFZEv83YcA6h4uhKW47kmYt+OZcSp130zhHx+lTWILDQ/LDkCRNA== } @@ -13791,6 +20511,13 @@ packages: cpu: [arm64] os: [android] + "@oxc-parser/binding-android-arm64@0.119.0": + resolution: + { integrity: sha512-ha0xQpiStuoBv7HGazNKQWa6IRxri2+PpeojdAyBGnHGzfioA1GcStNGEGOyXvF+OxDfWvPuw5QiRYRUMtmgbQ== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [arm64] + os: [android] + "@oxc-parser/binding-darwin-arm64@0.117.0": resolution: { integrity: sha512-3bAEpyih6r/Kb+Xzn1em1qBMClOS7NsVWgF86k95jpysR5ix/HlKFKSy7cax6PcS96HeHR4kjlME20n/XK1zNg== } @@ -13798,6 +20525,13 @@ packages: cpu: [arm64] os: [darwin] + "@oxc-parser/binding-darwin-arm64@0.119.0": + resolution: + { integrity: sha512-h/AIi5jfQz9WQUJJkkkHeXNYMhPtR72qnYZt0ZpM/LvlH/wpI5QkCPi7MWjjyY+m0JDorIXJyfOfccn8SbNSxQ== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [arm64] + os: [darwin] + "@oxc-parser/binding-darwin-x64@0.117.0": resolution: { integrity: sha512-W7S99zFwVZhSbCxvjfZkioStFU249DBc4TJw/kK6kfKwx2Zew+jvizX5Y3ZPkAh7fBVUSNOdSeOqLBHLiP50tw== } @@ -13805,6 +20539,13 @@ packages: cpu: [x64] os: [darwin] + "@oxc-parser/binding-darwin-x64@0.119.0": + resolution: + { integrity: sha512-15RwS/AawrgognvWsonI2eLKI5BqO0FzrpYXnzROysSR0x5RYsCc3UMFBwB1ph0UFFQzJy3ZbHHxfxp8RGr5Xg== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [x64] + os: [darwin] + "@oxc-parser/binding-freebsd-x64@0.117.0": resolution: { integrity: sha512-xH76lqSdjCSY0KUMPwLXlvQ3YEm3FFVEQmgiOCGNf+stZ6E4Mo3nC102Bo8yKd7aW0foIPAFLYsHgj7vVI/axw== } @@ -13812,6 +20553,13 @@ packages: cpu: [x64] os: [freebsd] + "@oxc-parser/binding-freebsd-x64@0.119.0": + resolution: + { integrity: sha512-iKaayTIDqEj0yyNPL+0t/spNAxMv7O32uY4eu/ir8BvFNgavoRmN8uqxRj8sxQDle89N/1Iw0dgRjS3tiWrqlA== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [x64] + os: [freebsd] + "@oxc-parser/binding-linux-arm-gnueabihf@0.117.0": resolution: { integrity: sha512-9Hdm1imzrn4RdMYnQKKcy+7p7QsSPIrgVIZmpGSJT02nYDuBWLdG1pdYMPFoEo46yiXry3tS3RoHIpNbT1IiyQ== } @@ -13819,6 +20567,13 @@ packages: cpu: [arm] os: [linux] + "@oxc-parser/binding-linux-arm-gnueabihf@0.119.0": + resolution: + { integrity: sha512-PDoOaOx8YWoxy19WNeMs6kOE0uFSb5EtA64Ye0wSp6sQpe+l8Gd+yjX2L+yNwd5MpDOvOy8KToa2bqCV4pf6iQ== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [arm] + os: [linux] + "@oxc-parser/binding-linux-arm-musleabihf@0.117.0": resolution: { integrity: sha512-Itszer/VCeYhYVJLcuKnHktlY8QyGnVxapltP68S1XRGlV6IsM9HQAElJRMwQhT6/GkMjOhANmkv2Qu/9v44lw== } @@ -13826,6 +20581,13 @@ packages: cpu: [arm] os: [linux] + "@oxc-parser/binding-linux-arm-musleabihf@0.119.0": + resolution: + { integrity: sha512-AVxZ5Eo5squsUhpjnkCYuH20t5FCGV3HAP9UOKLxJQkmZW3kJvBGbfpH75ABxRrE2kGqmJW5FmS980u8v9Cepw== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [arm] + os: [linux] + "@oxc-parser/binding-linux-arm64-gnu@0.117.0": resolution: { integrity: sha512-jBxD7DtlHQ36ivjjZdH0noQJgWNouenzpLmXNKnYaCsBfo3jY95m5iyjYQEiWkvkhJ3TJUAs7tQ1/kEpY7x/Kg== } @@ -13834,6 +20596,14 @@ packages: os: [linux] libc: [glibc] + "@oxc-parser/binding-linux-arm64-gnu@0.119.0": + resolution: + { integrity: sha512-9vfdyT9gczSeSwsEkBHVjigI8SWo3iB9zxEzL+YMBUrN0ftCUkKQr27DaDZK4/cQ80t6KRB+g9sUmT2T2AGnOQ== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [arm64] + os: [linux] + libc: [glibc] + "@oxc-parser/binding-linux-arm64-musl@0.117.0": resolution: { integrity: sha512-QagKTDF4lrz8bCXbUi39Uq5xs7C7itAseKm51f33U+Dyar9eJY/zGKqfME9mKLOiahX7Fc1J3xMWVS0AdDXLPg== } @@ -13842,6 +20612,14 @@ packages: os: [linux] libc: [musl] + "@oxc-parser/binding-linux-arm64-musl@0.119.0": + resolution: + { integrity: sha512-7BOq/tjSrtnp/ihw615uGcxMY3iya2qvVtwm15h2NvBZ6Jje+PC1GSUBOLfqGKJbUr9riSVV//a4iNhHI48Qdw== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [arm64] + os: [linux] + libc: [musl] + "@oxc-parser/binding-linux-ppc64-gnu@0.117.0": resolution: { integrity: sha512-RPddpcE/0xxWaommWy0c5i/JdrXcXAkxBS2GOrAUh5LKmyCh03hpJedOAWszG4ADsKQwoUQQ1/tZVGRhZIWtKA== } @@ -13850,6 +20628,14 @@ packages: os: [linux] libc: [glibc] + "@oxc-parser/binding-linux-ppc64-gnu@0.119.0": + resolution: + { integrity: sha512-PQIrLJwoAaNyNSWBF+2SSgv44Jp+xpKVUA+8+PuoMhyBQ6lFSbQdaxewdn11i3heTFMYd2xF339HWax4S6MPVA== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [ppc64] + os: [linux] + libc: [glibc] + "@oxc-parser/binding-linux-riscv64-gnu@0.117.0": resolution: { integrity: sha512-ur/WVZF9FSOiZGxyP+nfxZzuv6r5OJDYoVxJnUR7fM/hhXLh4V/be6rjbzm9KLCDBRwYCEKJtt+XXNccwd06IA== } @@ -13858,6 +20644,14 @@ packages: os: [linux] libc: [glibc] + "@oxc-parser/binding-linux-riscv64-gnu@0.119.0": + resolution: + { integrity: sha512-spNh4YhT9K+Ya5hr6NmI1MazKSKORD8u5/06hFbzTslLnmmxiGaLqJXhNKIYUH39ne/JD5rkoRkUcOB2/LpC3A== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [riscv64] + os: [linux] + libc: [glibc] + "@oxc-parser/binding-linux-riscv64-musl@0.117.0": resolution: { integrity: sha512-ujGcAx8xAMvhy7X5sBFi3GXML1EtyORuJZ5z2T6UV3U416WgDX/4OCi3GnoteeenvxIf6JgP45B+YTHpt71vpA== } @@ -13866,6 +20660,14 @@ packages: os: [linux] libc: [musl] + "@oxc-parser/binding-linux-riscv64-musl@0.119.0": + resolution: + { integrity: sha512-hFoCTRxSJAcrNBYVlgNDDQq6LyJLYyhnJDlPtK/mWrPYS3x5/fUR9jc6wo5VyxKIL/0dDJBBWp19v81q9heU/A== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [riscv64] + os: [linux] + libc: [musl] + "@oxc-parser/binding-linux-s390x-gnu@0.117.0": resolution: { integrity: sha512-hbsfKjUwRjcMZZvvmpZSc+qS0bHcHRu8aV/I3Ikn9BzOA0ZAgUE7ctPtce5zCU7bM8dnTLi4sJ1Pi9YHdx6Urw== } @@ -13874,6 +20676,14 @@ packages: os: [linux] libc: [glibc] + "@oxc-parser/binding-linux-s390x-gnu@0.119.0": + resolution: + { integrity: sha512-bl7jHJZq3W5tYEvKG3yWZTUKTNb0/BtyYSnfMIrQ7t8hajCH4i1g0q+14s0KmQQl1UHxIX/Gx/Ps6e92qJQJmQ== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [s390x] + os: [linux] + libc: [glibc] + "@oxc-parser/binding-linux-x64-gnu@0.117.0": resolution: { integrity: sha512-1QrTrf8rige7UPJrYuDKJLQOuJlgkt+nRSJLBMHWNm9TdivzP48HaK3f4q18EjNlglKtn03lgjMu4fryDm8X4A== } @@ -13882,6 +20692,14 @@ packages: os: [linux] libc: [glibc] + "@oxc-parser/binding-linux-x64-gnu@0.119.0": + resolution: + { integrity: sha512-m+DE7NhJIEGp4efSJnNfRf3swT25rbZ1FTIihV+pOLTI+k5yNguxvqT338mNu61OVSx0BfpV8QlO2nz43GR/Zg== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [x64] + os: [linux] + libc: [glibc] + "@oxc-parser/binding-linux-x64-musl@0.117.0": resolution: { integrity: sha512-gRvK6HPzF5ITRL68fqb2WYYs/hGviPIbkV84HWCgiJX+LkaOpp+HIHQl3zVZdyKHwopXToTbXbtx/oFjDjl8pg== } @@ -13890,6 +20708,14 @@ packages: os: [linux] libc: [musl] + "@oxc-parser/binding-linux-x64-musl@0.119.0": + resolution: + { integrity: sha512-pHhnXZHUfd5pYzFLQfvx1DH2HY+L8DPZeh6SsQrsmoaODm1+j8VPeWLwGSrXQSz5f1kfT/mnzm1iNLVOGIeuaw== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [x64] + os: [linux] + libc: [musl] + "@oxc-parser/binding-openharmony-arm64@0.117.0": resolution: { integrity: sha512-QPJvFbnnDZZY7xc+xpbIBWLThcGBakwaYA9vKV8b3+oS5MGfAZUoTFJcix5+Zg2Ri46sOfrUim6Y6jsKNcssAQ== } @@ -13897,12 +20723,25 @@ packages: cpu: [arm64] os: [openharmony] + "@oxc-parser/binding-openharmony-arm64@0.119.0": + resolution: + { integrity: sha512-8Fthv9nOec0hQLX16yjYyYIU+u8ZFuQojdQ3vNgXN+PcqI/bDohGgCATrxO69gLf0IzkyOmKmurXOQCYK8BYpQ== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [arm64] + os: [openharmony] + "@oxc-parser/binding-wasm32-wasi@0.117.0": resolution: { integrity: sha512-+XRSNA0xt3pk/6CUHM7pykVe7M8SdifJk8LX1+fIp/zefvR3HBieZCbwG5un8gogNgh7srLycoh/cQA9uozv5g== } engines: { node: ">=14.0.0" } cpu: [wasm32] + "@oxc-parser/binding-wasm32-wasi@0.119.0": + resolution: + { integrity: sha512-KpOU6fLqevFDP6ndkgE4BPoceELM4bOsEsAXjpe+FKYuUyEzHssYPBmxouGpXDQeAeWTBIjosw5yElLMRPuccw== } + engines: { node: ">=14.0.0" } + cpu: [wasm32] + "@oxc-parser/binding-win32-arm64-msvc@0.117.0": resolution: { integrity: sha512-GpxeGS+Vo030DsrXeRPc7OSJOQIyAHkM3mzwBcnQjg/79XnOIDDMXJ5X6/aNdkVt/+Pv35pqKzGA4TQau97x8w== } @@ -13910,6 +20749,13 @@ packages: cpu: [arm64] os: [win32] + "@oxc-parser/binding-win32-arm64-msvc@0.119.0": + resolution: + { integrity: sha512-omtTgAKIl6GQ40nG+wAWN8xMJLNtfmTdd0+wMIcrw1shX9y5TntAVIuiay3Du0wvUK9sgMpL07HYNphgHeZS0A== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [arm64] + os: [win32] + "@oxc-parser/binding-win32-ia32-msvc@0.117.0": resolution: { integrity: sha512-tchWEYiso1+objTZirmlR+w3fcIel6PVBOJ8NuC2Jr30dxBOiKUfFLovJLANwHg1+TzeD6pVSLIIIEf2T5o5lQ== } @@ -13917,6 +20763,13 @@ packages: cpu: [ia32] os: [win32] + "@oxc-parser/binding-win32-ia32-msvc@0.119.0": + resolution: + { integrity: sha512-+0kqoCfv4WFP3e4BqcVEtf1moUuG9Zv5lo1aKcw1JakqJo008TGG+C2LnVM4QucGSZVQ/Ii/H5XCvrRbkeLQfA== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [ia32] + os: [win32] + "@oxc-parser/binding-win32-x64-msvc@0.117.0": resolution: { integrity: sha512-ysRJAjIbB4e5y+t9PZs7TwbgOV/GVT//s30AORLCT/pedYwpYzHq6ApXK7is9fvyfZtgT3anNir8+esurmyaDw== } @@ -13924,6 +20777,13 @@ packages: cpu: [x64] os: [win32] + "@oxc-parser/binding-win32-x64-msvc@0.119.0": + resolution: + { integrity: sha512-5kaKmBHD+OQjZzGAQQ9n8jWNvCRxu3MjElAjkCqsS3i2wiN3hqHlOPKwGDydYiB1gKdeYGlTjRYtuF4gBLDSxQ== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [x64] + os: [win32] + "@oxc-project/types@0.113.0": resolution: { integrity: sha512-Tp3XmgxwNQ9pEN9vxgJBAqdRamHibi76iowQ38O2I4PMpcvNRQNVsU2n1x1nv9yh0XoTrGFzf7cZSGxmixxrhA== } @@ -13932,10 +20792,18 @@ packages: resolution: { integrity: sha512-C/kPXBphID44fXdsa2xSOCuzX8fKZiFxPsvucJ6Yfkr6CJlMA+kNLPNKyLoI+l9XlDsNxBrz6h7IIjKU8pB69w== } + "@oxc-project/types@0.119.0": + resolution: + { integrity: sha512-9SCGhodOxEicD2kblitu34fGHcpmqgI3beYw/E22ehVLHzccHRFH91NmKt0MhZEaAwLpei6OOA9aB6Vuks9qAg== } + "@oxc-project/types@0.124.0": resolution: { integrity: sha512-VBFWMTBvHxS11Z5Lvlr3IWgrwhMTXV+Md+EQF0Xf60+wAdsGFTBx7X7K/hP4pi8N7dcm1RvcHwDxZ16Qx8keUg== } + "@oxc-project/types@0.128.0": + resolution: + { integrity: sha512-huv1Y/LzBJkBVHt3OlC7u0zHBW9qXf1FdD7sGmc1rXc2P1mTwHssYv7jyGx5KAACSCH+9B3Bhn6Z9luHRvf7pQ== } + "@oxc-resolver/binding-android-arm-eabi@11.19.1": resolution: { integrity: sha512-aUs47y+xyXHUKlbhqHUjBABjvycq6YSD7bpxSW7vplUmdzAlJ93yXY6ZR0c1o1x5A/QKbENCvs3+NlY8IpIVzg== } @@ -14518,6 +21386,12 @@ packages: engines: { node: ">=18" } hasBin: true + "@puppeteer/browsers@2.13.1": + resolution: + { integrity: sha512-zmS4RTK9fbrc++WlAJhxYbfz3IjDeOmkK/CwwbLmk7ydfS9e2CiEeRJHEPvjDVElO/bwXbidwGA37Bsm6LzCnQ== } + engines: { node: ">=18" } + hasBin: true + "@puppeteer/browsers@2.6.1": resolution: { integrity: sha512-aBSREisdsGH890S2rQqK82qmQYU3uFpSH8wcZWHgHzl3LfzsxAKbLNiAG9mO8v1Y0UICBeClICxPJvyr0rcuxg== } @@ -14852,6 +21726,13 @@ packages: cpu: [arm64] os: [android] + "@rolldown/binding-android-arm64@1.0.0-rc.18": + resolution: + { integrity: sha512-lIDyUAfD7U3+BWKzdxMbJcsYHuqXqmGz40aeRqvuAm3y5TkJSYTBW2RDrn65DJFPQqVjUAUqq5uz8urzQ8aBdQ== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [arm64] + os: [android] + "@rolldown/binding-android-arm64@1.0.0-rc.4": resolution: { integrity: sha512-vRq9f4NzvbdZavhQbjkJBx7rRebDKYR9zHfO/Wg486+I7bSecdUapzCm5cyXoK+LHokTxgSq7A5baAXUZkIz0w== } @@ -14866,6 +21747,13 @@ packages: cpu: [arm64] os: [darwin] + "@rolldown/binding-darwin-arm64@1.0.0-rc.18": + resolution: + { integrity: sha512-apJq2ktnGp27nSInMR5Vcj8kY6xJzDAvfdIFlpDcAK/w4cDO58qVoi1YQsES/SKiFNge/6e4CUzgjfHduYqWpQ== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [arm64] + os: [darwin] + "@rolldown/binding-darwin-arm64@1.0.0-rc.4": resolution: { integrity: sha512-kFgEvkWLqt3YCgKB5re9RlIrx9bRsvyVUnaTakEpOPuLGzLpLapYxE9BufJNvPg8GjT6mB1alN4yN1NjzoeM8Q== } @@ -14880,6 +21768,13 @@ packages: cpu: [x64] os: [darwin] + "@rolldown/binding-darwin-x64@1.0.0-rc.18": + resolution: + { integrity: sha512-5Ofot8xbs+pxRHJqm9/9N/4sTQOvdrwEsmPE9pdLEEoAbdZtG6F2LMDfO1sp6ZAtXJuJV/21ew2srq3W8NXB5g== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [x64] + os: [darwin] + "@rolldown/binding-darwin-x64@1.0.0-rc.4": resolution: { integrity: sha512-JXmaOJGsL/+rsmMfutcDjxWM2fTaVgCHGoXS7nE8Z3c9NAYjGqHvXrAhMUZvMpHS/k7Mg+X7n/MVKb7NYWKKww== } @@ -14894,6 +21789,13 @@ packages: cpu: [x64] os: [freebsd] + "@rolldown/binding-freebsd-x64@1.0.0-rc.18": + resolution: + { integrity: sha512-7h8eeOTT1eyqJyx64BFCnWZpNm486hGWt2sqeLLgDxA0xI1oGZ9H7gK1S85uNGmBhkdPwa/6reTxfFFKvIsebw== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [x64] + os: [freebsd] + "@rolldown/binding-freebsd-x64@1.0.0-rc.4": resolution: { integrity: sha512-ep3Catd6sPnHTM0P4hNEvIv5arnDvk01PfyJIJ+J3wVCG1eEaPo09tvFqdtcaTrkwQy0VWR24uz+cb4IsK53Qw== } @@ -14908,6 +21810,13 @@ packages: cpu: [arm] os: [linux] + "@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.18": + resolution: + { integrity: sha512-eRcm/HVt9U/JFu5RKAEKwGQYtDCKWLiaH6wOnsSEp6NMBb/3Os8LgHZlNyzMpFVNmiiMFlfb2zEnebfzJrHFmg== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [arm] + os: [linux] + "@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.4": resolution: { integrity: sha512-LwA5ayKIpnsgXJEwWc3h8wPiS33NMIHd9BhsV92T8VetVAbGe2qXlJwNVDGHN5cOQ22R9uYvbrQir2AB+ntT2w== } @@ -14923,6 +21832,14 @@ packages: os: [linux] libc: [glibc] + "@rolldown/binding-linux-arm64-gnu@1.0.0-rc.18": + resolution: + { integrity: sha512-SOrT/cT4ukTmgnrEz/Hg3m7LBnuCLW9psDeMKrimRWY4I8DmnO7Lco8W2vtqPmMkbVu8iJ+g4GFLVLLOVjJ9DQ== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [arm64] + os: [linux] + libc: [glibc] + "@rolldown/binding-linux-arm64-gnu@1.0.0-rc.4": resolution: { integrity: sha512-AC1WsGdlV1MtGay/OQ4J9T7GRadVnpYRzTcygV1hKnypbYN20Yh4t6O1Sa2qRBMqv1etulUknqXjc3CTIsBu6A== } @@ -14939,6 +21856,14 @@ packages: os: [linux] libc: [musl] + "@rolldown/binding-linux-arm64-musl@1.0.0-rc.18": + resolution: + { integrity: sha512-QWjdxN1HJCpBTAcZ5N5F7wju3gVPzRzSpmGzx7na0c/1qpN9CFil+xt+l9lV/1M6/gqHSNXCiqPfwhVJPeLnug== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [arm64] + os: [linux] + libc: [musl] + "@rolldown/binding-linux-arm64-musl@1.0.0-rc.4": resolution: { integrity: sha512-lU+6rgXXViO61B4EudxtVMXSOfiZONR29Sys5VGSetUY7X8mg9FCKIIjcPPj8xNDeYzKl+H8F/qSKOBVFJChCQ== } @@ -14955,6 +21880,14 @@ packages: os: [linux] libc: [glibc] + "@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.18": + resolution: + { integrity: sha512-ugCOyj7a4d9h3q9B+wXmf6g3a68UsjGh6dob5DHevHGMwDUbhsYNbSPxJsENcIttJZ9jv7qGM2UesLw5jqIhdg== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [ppc64] + os: [linux] + libc: [glibc] + "@rolldown/binding-linux-s390x-gnu@1.0.0-rc.15": resolution: { integrity: sha512-y1uXY3qQWCzcPgRJATPSOUP4tCemh4uBdY7e3EZbVwCJTY3gLJWnQABgeUetvED+bt1FQ01OeZwvhLS2bpNrAQ== } @@ -14963,6 +21896,14 @@ packages: os: [linux] libc: [glibc] + "@rolldown/binding-linux-s390x-gnu@1.0.0-rc.18": + resolution: + { integrity: sha512-kKWRhbsotpXkGbcd5dllUWg5gEXcDAa8u5YnP9AV5DYNbvJHGzzuwv7dpmhc8NqKMJldl0a+x76IHbspEpEmdA== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [s390x] + os: [linux] + libc: [glibc] + "@rolldown/binding-linux-x64-gnu@1.0.0-rc.15": resolution: { integrity: sha512-023bTPBod7J3Y/4fzAN6QtpkSABR0rigtrwaP+qSEabUh5zf6ELr9Nc7GujaROuPY3uwdSIXWrvhn1KxOvurWA== } @@ -14971,6 +21912,14 @@ packages: os: [linux] libc: [glibc] + "@rolldown/binding-linux-x64-gnu@1.0.0-rc.18": + resolution: + { integrity: sha512-uCo8ElcCIAMyYAZyuIZ81oFkhTSIllNvUCHCAlbhlN4ji3uC28h7IIdlXyIvGO7HsuqnV9p3rD/bpH7XhIyhRw== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [x64] + os: [linux] + libc: [glibc] + "@rolldown/binding-linux-x64-gnu@1.0.0-rc.4": resolution: { integrity: sha512-DZaN1f0PGp/bSvKhtw50pPsnln4T13ycDq1FrDWRiHmWt1JeW+UtYg9touPFf8yt993p8tS2QjybpzKNTxYEwg== } @@ -14987,6 +21936,14 @@ packages: os: [linux] libc: [musl] + "@rolldown/binding-linux-x64-musl@1.0.0-rc.18": + resolution: + { integrity: sha512-XNOQZtuE6yUIvx4rwGemwh8kpL1xvU41FXy/s9K7T/3JVcqGzo3NfKM2HrbrGgfPYGFW42f07Wk++aOC6B9NWA== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [x64] + os: [linux] + libc: [musl] + "@rolldown/binding-linux-x64-musl@1.0.0-rc.4": resolution: { integrity: sha512-RnGxwZLN7fhMMAItnD6dZ7lvy+TI7ba+2V54UF4dhaWa/p8I/ys1E73KO6HmPmgz92ZkfD8TXS1IMV8+uhbR9g== } @@ -15002,6 +21959,13 @@ packages: cpu: [arm64] os: [openharmony] + "@rolldown/binding-openharmony-arm64@1.0.0-rc.18": + resolution: + { integrity: sha512-tSn/kzrfa7tNOXr7sEacDBN4YsIqTyLqh45IO0nHDwtpKIDNDJr+VFojt+4klSpChxB29JLyduSsE0MKEwa65A== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [arm64] + os: [openharmony] + "@rolldown/binding-openharmony-arm64@1.0.0-rc.4": resolution: { integrity: sha512-6lcI79+X8klGiGd8yHuTgQRjuuJYNggmEml+RsyN596P23l/zf9FVmJ7K0KVKkFAeYEdg0iMUKyIxiV5vebDNQ== } @@ -15015,6 +21979,12 @@ packages: engines: { node: ">=14.0.0" } cpu: [wasm32] + "@rolldown/binding-wasm32-wasi@1.0.0-rc.18": + resolution: + { integrity: sha512-+J9YGmc+czgqlhYmwun3S3O0FIZhsH8ep2456xwjAdIOmuJxM7xz4P4PtrxU+Bz17a/5bqPA8o3HAAoX0teUdg== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [wasm32] + "@rolldown/binding-wasm32-wasi@1.0.0-rc.4": resolution: { integrity: sha512-wz7ohsKCAIWy91blZ/1FlpPdqrsm1xpcEOQVveWoL6+aSPKL4VUcoYmmzuLTssyZxRpEwzuIxL/GDsvpjaBtOw== } @@ -15028,6 +21998,13 @@ packages: cpu: [arm64] os: [win32] + "@rolldown/binding-win32-arm64-msvc@1.0.0-rc.18": + resolution: + { integrity: sha512-zsu47DgU0FQzSwi6sU9dZoEdUv7pc1AptSEz/Z8HBg54sV0Pbs3N0+CrIbTsgiu6EyoaNN9CHboqbLaz9lhOyQ== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [arm64] + os: [win32] + "@rolldown/binding-win32-arm64-msvc@1.0.0-rc.4": resolution: { integrity: sha512-cfiMrfuWCIgsFmcVG0IPuO6qTRHvF7NuG3wngX1RZzc6dU8FuBFb+J3MIR5WrdTNozlumfgL4cvz+R4ozBCvsQ== } @@ -15042,6 +22019,13 @@ packages: cpu: [x64] os: [win32] + "@rolldown/binding-win32-x64-msvc@1.0.0-rc.18": + resolution: + { integrity: sha512-7H+3yqGgmnlDTRRhw/xpYY9J1kf4GC681nVc4GqKhExZTDrVVrV2tsOR9kso0fvgBdcTCcQShx4SLLoHgaLwhg== } + engines: { node: ^20.19.0 || >=22.12.0 } + cpu: [x64] + os: [win32] + "@rolldown/binding-win32-x64-msvc@1.0.0-rc.4": resolution: { integrity: sha512-p6UeR9y7ht82AH57qwGuFYn69S6CZ7LLKdCKy/8T3zS9VTrJei2/CGsTUV45Da4Z9Rbhc7G4gyWQ/Ioamqn09g== } @@ -15053,6 +22037,10 @@ packages: resolution: { integrity: sha512-UromN0peaE53IaBRe9W7CjrZgXl90fqGpK+mIZbA3qSTeYqg3pqpROBdIPvOG3F5ereDHNwoHBI2e50n1BDr1g== } + "@rolldown/pluginutils@1.0.0-rc.18": + resolution: + { integrity: sha512-CUY5Mnhe64xQBGZEEXQ5WyZwsc1JU3vAZLIxtrsBt3LO6UOb+C8GunVKqe9sT8NeWb4lqSaoJtp2xo6GxT1MNw== } + "@rolldown/pluginutils@1.0.0-rc.2": resolution: { integrity: sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw== } @@ -15315,12 +22303,36 @@ packages: cpu: [arm] os: [android] + "@rollup/rollup-android-arm-eabi@4.60.2": + resolution: + { integrity: sha512-dnlp69efPPg6Uaw2dVqzWRfAWRnYVb1XJ8CyyhIbZeaq4CA5/mLeZ1IEt9QqQxmbdvagjLIm2ZL8BxXv5lH4Yw== } + cpu: [arm] + os: [android] + + "@rollup/rollup-android-arm-eabi@4.60.3": + resolution: + { integrity: sha512-x35CNW/ANXG3hE/EZpRU8MXX1JDN86hBb2wMGAtltkz7pc6cxgjpy1OMMfDosOQ+2hWqIkag/fGok1Yady9nGw== } + cpu: [arm] + os: [android] + "@rollup/rollup-android-arm64@4.60.1": resolution: { integrity: sha512-YjG/EwIDvvYI1YvYbHvDz/BYHtkY4ygUIXHnTdLhG+hKIQFBiosfWiACWortsKPKU/+dUwQQCKQM3qrDe8c9BA== } cpu: [arm64] os: [android] + "@rollup/rollup-android-arm64@4.60.2": + resolution: + { integrity: sha512-OqZTwDRDchGRHHm/hwLOL7uVPB9aUvI0am/eQuWMNyFHf5PSEQmyEeYYheA0EPPKUO/l0uigCp+iaTjoLjVoHg== } + cpu: [arm64] + os: [android] + + "@rollup/rollup-android-arm64@4.60.3": + resolution: + { integrity: sha512-xw3xtkDApIOGayehp2+Rz4zimfkaX65r4t47iy+ymQB2G4iJCBBfj0ogVg5jpvjpn8UWn/+q9tprxleYeNp3Hw== } + cpu: [arm64] + os: [android] + "@rollup/rollup-darwin-arm64@4.34.9": resolution: { integrity: sha512-0CY3/K54slrzLDjOA7TOjN1NuLKERBgk9nY5V34mhmuu673YNb+7ghaDUs6N0ujXR7fz5XaS5Aa6d2TNxZd0OQ== } @@ -15339,6 +22351,18 @@ packages: cpu: [arm64] os: [darwin] + "@rollup/rollup-darwin-arm64@4.60.2": + resolution: + { integrity: sha512-UwRE7CGpvSVEQS8gUMBe1uADWjNnVgP3Iusyda1nSRwNDCsRjnGc7w6El6WLQsXmZTbLZx9cecegumcitNfpmA== } + cpu: [arm64] + os: [darwin] + + "@rollup/rollup-darwin-arm64@4.60.3": + resolution: + { integrity: sha512-vo6Y5Qfpx7/5EaamIwi0WqW2+zfiusVihKatLvtN1VFVy3D13uERk/6gZLU1UiHRL6fDXqj/ELIeVRGnvcTE1g== } + cpu: [arm64] + os: [darwin] + "@rollup/rollup-darwin-x64@4.34.9": resolution: { integrity: sha512-eOojSEAi/acnsJVYRxnMkPFqcxSMFfrw7r2iD9Q32SGkb/Q9FpUY1UlAu1DH9T7j++gZ0lHjnm4OyH2vCI7l7Q== } @@ -15357,18 +22381,54 @@ packages: cpu: [x64] os: [darwin] + "@rollup/rollup-darwin-x64@4.60.2": + resolution: + { integrity: sha512-gjEtURKLCC5VXm1I+2i1u9OhxFsKAQJKTVB8WvDAHF+oZlq0GTVFOlTlO1q3AlCTE/DF32c16ESvfgqR7343/g== } + cpu: [x64] + os: [darwin] + + "@rollup/rollup-darwin-x64@4.60.3": + resolution: + { integrity: sha512-D+0QGcZhBzTN82weOnsSlY7V7+RMmPuF1CkbxyMAGE8+ZHeUjyb76ZiWmBlCu//AQQONvxcqRbwZTajZKqjuOw== } + cpu: [x64] + os: [darwin] + "@rollup/rollup-freebsd-arm64@4.60.1": resolution: { integrity: sha512-czw90wpQq3ZsAVBlinZjAYTKduOjTywlG7fEeWKUA7oCmpA8xdTkxZZlwNJKWqILlq0wehoZcJYfBvOyhPTQ6w== } cpu: [arm64] os: [freebsd] + "@rollup/rollup-freebsd-arm64@4.60.2": + resolution: + { integrity: sha512-Bcl6CYDeAgE70cqZaMojOi/eK63h5Me97ZqAQoh77VPjMysA/4ORQBRGo3rRy45x4MzVlU9uZxs8Uwy7ZaKnBw== } + cpu: [arm64] + os: [freebsd] + + "@rollup/rollup-freebsd-arm64@4.60.3": + resolution: + { integrity: sha512-6HnvHCT7fDyj6R0Ph7A6x8dQS/S38MClRWeDLqc0MdfWkxjiu1HSDYrdPhqSILzjTIC/pnXbbJbo+ft+gy/9hQ== } + cpu: [arm64] + os: [freebsd] + "@rollup/rollup-freebsd-x64@4.60.1": resolution: { integrity: sha512-KVB2rqsxTHuBtfOeySEyzEOB7ltlB/ux38iu2rBQzkjbwRVlkhAGIEDiiYnO2kFOkJp+Z7pUXKyrRRFuFUKt+g== } cpu: [x64] os: [freebsd] + "@rollup/rollup-freebsd-x64@4.60.2": + resolution: + { integrity: sha512-LU+TPda3mAE2QB0/Hp5VyeKJivpC6+tlOXd1VMoXV/YFMvk/MNk5iXeBfB4MQGRWyOYVJ01625vjkr0Az98OJQ== } + cpu: [x64] + os: [freebsd] + + "@rollup/rollup-freebsd-x64@4.60.3": + resolution: + { integrity: sha512-KHLgC3WKlUYW3ShFKnnosZDOJ0xjg9zp7au3sIm2bs/tGBeC2ipmvRh/N7JKi0t9Ue20C0dpEshi8WUubg+cnA== } + cpu: [x64] + os: [freebsd] + "@rollup/rollup-linux-arm-gnueabihf@4.60.1": resolution: { integrity: sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g== } @@ -15376,6 +22436,20 @@ packages: os: [linux] libc: [glibc] + "@rollup/rollup-linux-arm-gnueabihf@4.60.2": + resolution: + { integrity: sha512-2QxQrM+KQ7DAW4o22j+XZ6RKdxjLD7BOWTP0Bv0tmjdyhXSsr2Ul1oJDQqh9Zf5qOwTuTc7Ek83mOFaKnodPjg== } + cpu: [arm] + os: [linux] + libc: [glibc] + + "@rollup/rollup-linux-arm-gnueabihf@4.60.3": + resolution: + { integrity: sha512-DV6fJoxEYWJOvaZIsok7KrYl0tPvga5OZ2yvKHNNYyk/2roMLqQAbGhr78EQ5YhHpnhLKJD3S1WFusAkmUuV5g== } + cpu: [arm] + os: [linux] + libc: [glibc] + "@rollup/rollup-linux-arm-musleabihf@4.60.1": resolution: { integrity: sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg== } @@ -15383,6 +22457,20 @@ packages: os: [linux] libc: [musl] + "@rollup/rollup-linux-arm-musleabihf@4.60.2": + resolution: + { integrity: sha512-TbziEu2DVsTEOPif2mKWkMeDMLoYjx95oESa9fkQQK7r/Orta0gnkcDpzwufEcAO2BLBsD7mZkXGFqEdMRRwfw== } + cpu: [arm] + os: [linux] + libc: [musl] + + "@rollup/rollup-linux-arm-musleabihf@4.60.3": + resolution: + { integrity: sha512-mQKoJAzvuOs6F+TZybQO4GOTSMUu7v0WdxEk24krQ/uUxXoPTtHjuaUuPmFhtBcM4K0ons8nrE3JyhTuCFtT/w== } + cpu: [arm] + os: [linux] + libc: [musl] + "@rollup/rollup-linux-arm64-gnu@4.34.9": resolution: { integrity: sha512-6TZjPHjKZUQKmVKMUowF3ewHxctrRR09eYyvT5eFv8w/fXarEra83A2mHTVJLA5xU91aCNOUnM+DWFMSbQ0Nxw== } @@ -15404,6 +22492,20 @@ packages: os: [linux] libc: [glibc] + "@rollup/rollup-linux-arm64-gnu@4.60.2": + resolution: + { integrity: sha512-bO/rVDiDUuM2YfuCUwZ1t1cP+/yqjqz+Xf2VtkdppefuOFS2OSeAfgafaHNkFn0t02hEyXngZkxtGqXcXwO8Rg== } + cpu: [arm64] + os: [linux] + libc: [glibc] + + "@rollup/rollup-linux-arm64-gnu@4.60.3": + resolution: + { integrity: sha512-Whjj2qoiJ6+OOJMGptTYazaJvjOJm+iKHpXQM1P3LzGjt7Ff++Tp7nH4N8J/BUA7R9IHfDyx4DJIflifwnbmIA== } + cpu: [arm64] + os: [linux] + libc: [glibc] + "@rollup/rollup-linux-arm64-musl@4.34.9": resolution: { integrity: sha512-LD2fytxZJZ6xzOKnMbIpgzFOuIKlxVOpiMAXawsAZ2mHBPEYOnLRK5TTEsID6z4eM23DuO88X0Tq1mErHMVq0A== } @@ -15425,6 +22527,20 @@ packages: os: [linux] libc: [musl] + "@rollup/rollup-linux-arm64-musl@4.60.2": + resolution: + { integrity: sha512-hr26p7e93Rl0Za+JwW7EAnwAvKkehh12BU1Llm9Ykiibg4uIr2rbpxG9WCf56GuvidlTG9KiiQT/TXT1yAWxTA== } + cpu: [arm64] + os: [linux] + libc: [musl] + + "@rollup/rollup-linux-arm64-musl@4.60.3": + resolution: + { integrity: sha512-4YTNHKqGng5+yiZt3mg77nmyuCfmNfX4fPmyUapBcIk+BdwSwmCWGXOUxhXbBEkFHtoN5boLj/5NON+u5QC9tg== } + cpu: [arm64] + os: [linux] + libc: [musl] + "@rollup/rollup-linux-loong64-gnu@4.60.1": resolution: { integrity: sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ== } @@ -15432,6 +22548,20 @@ packages: os: [linux] libc: [glibc] + "@rollup/rollup-linux-loong64-gnu@4.60.2": + resolution: + { integrity: sha512-pOjB/uSIyDt+ow3k/RcLvUAOGpysT2phDn7TTUB3n75SlIgZzM6NKAqlErPhoFU+npgY3/n+2HYIQVbF70P9/A== } + cpu: [loong64] + os: [linux] + libc: [glibc] + + "@rollup/rollup-linux-loong64-gnu@4.60.3": + resolution: + { integrity: sha512-SU3kNlhkpI4UqlUc2VXPGK9o886ZsSeGfMAX2ba2b8DKmMXq4AL7KUrkSWVbb7koVqx41Yczx6dx5PNargIrEA== } + cpu: [loong64] + os: [linux] + libc: [glibc] + "@rollup/rollup-linux-loong64-musl@4.60.1": resolution: { integrity: sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw== } @@ -15439,6 +22569,20 @@ packages: os: [linux] libc: [musl] + "@rollup/rollup-linux-loong64-musl@4.60.2": + resolution: + { integrity: sha512-2/w+q8jszv9Ww1c+6uJT3OwqhdmGP2/4T17cu8WuwyUuuaCDDJ2ojdyYwZzCxx0GcsZBhzi3HmH+J5pZNXnd+Q== } + cpu: [loong64] + os: [linux] + libc: [musl] + + "@rollup/rollup-linux-loong64-musl@4.60.3": + resolution: + { integrity: sha512-6lDLl5h4TXpB1mTf2rQWnAk/LcXrx9vBfu/DT5TIPhvMhRWaZ5MxkIc8u4lJAmBo6klTe1ywXIUHFjylW505sg== } + cpu: [loong64] + os: [linux] + libc: [musl] + "@rollup/rollup-linux-ppc64-gnu@4.60.1": resolution: { integrity: sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw== } @@ -15446,6 +22590,20 @@ packages: os: [linux] libc: [glibc] + "@rollup/rollup-linux-ppc64-gnu@4.60.2": + resolution: + { integrity: sha512-11+aL5vKheYgczxtPVVRhdptAM2H7fcDR5Gw4/bTcteuZBlH4oP9f5s9zYO9aGZvoGeBpqXI/9TZZihZ609wKw== } + cpu: [ppc64] + os: [linux] + libc: [glibc] + + "@rollup/rollup-linux-ppc64-gnu@4.60.3": + resolution: + { integrity: sha512-BMo8bOw8evlup/8G+cj5xWtPyp93xPdyoSN16Zy90Q2QZ0ZYRhCt6ZJSwbrRzG9HApFabjwj2p25TUPDWrhzqQ== } + cpu: [ppc64] + os: [linux] + libc: [glibc] + "@rollup/rollup-linux-ppc64-musl@4.60.1": resolution: { integrity: sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg== } @@ -15453,6 +22611,20 @@ packages: os: [linux] libc: [musl] + "@rollup/rollup-linux-ppc64-musl@4.60.2": + resolution: + { integrity: sha512-i16fokAGK46IVZuV8LIIwMdtqhin9hfYkCh8pf8iC3QU3LpwL+1FSFGej+O7l3E/AoknL6Dclh2oTdnRMpTzFQ== } + cpu: [ppc64] + os: [linux] + libc: [musl] + + "@rollup/rollup-linux-ppc64-musl@4.60.3": + resolution: + { integrity: sha512-E0L8X1dZN1/Rph+5VPF6Xj2G7JJvMACVXtamTJIDrVI44Y3K+G8gQaMEAavbqCGTa16InptiVrX6eM6pmJ+7qA== } + cpu: [ppc64] + os: [linux] + libc: [musl] + "@rollup/rollup-linux-riscv64-gnu@4.60.1": resolution: { integrity: sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg== } @@ -15460,6 +22632,20 @@ packages: os: [linux] libc: [glibc] + "@rollup/rollup-linux-riscv64-gnu@4.60.2": + resolution: + { integrity: sha512-49FkKS6RGQoriDSK/6E2GkAsAuU5kETFCh7pG4yD/ylj9rKhTmO3elsnmBvRD4PgJPds5W2PkhC82aVwmUcJ7A== } + cpu: [riscv64] + os: [linux] + libc: [glibc] + + "@rollup/rollup-linux-riscv64-gnu@4.60.3": + resolution: + { integrity: sha512-oZJ/WHaVfHUiRAtmTAeo3DcevNsVvH8mbvodjZy7D5QKvCefO371SiKRpxoDcCxB3PTRTLayWBkvmDQKTcX/sw== } + cpu: [riscv64] + os: [linux] + libc: [glibc] + "@rollup/rollup-linux-riscv64-musl@4.60.1": resolution: { integrity: sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg== } @@ -15467,6 +22653,20 @@ packages: os: [linux] libc: [musl] + "@rollup/rollup-linux-riscv64-musl@4.60.2": + resolution: + { integrity: sha512-mjYNkHPfGpUR00DuM1ZZIgs64Hpf4bWcz9Z41+4Q+pgDx73UwWdAYyf6EG/lRFldmdHHzgrYyge5akFUW0D3mQ== } + cpu: [riscv64] + os: [linux] + libc: [musl] + + "@rollup/rollup-linux-riscv64-musl@4.60.3": + resolution: + { integrity: sha512-Dhbyh7j9FybM3YaTgaHmVALwA8AkUwTPccyCQ79TG9AJUsMQqgN1DDEZNr4+QUfwiWvLDumW5vdwzoeUF+TNxQ== } + cpu: [riscv64] + os: [linux] + libc: [musl] + "@rollup/rollup-linux-s390x-gnu@4.60.1": resolution: { integrity: sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ== } @@ -15474,6 +22674,20 @@ packages: os: [linux] libc: [glibc] + "@rollup/rollup-linux-s390x-gnu@4.60.2": + resolution: + { integrity: sha512-ALyvJz965BQk8E9Al/JDKKDLH2kfKFLTGMlgkAbbYtZuJt9LU8DW3ZoDMCtQpXAltZxwBHevXz5u+gf0yA0YoA== } + cpu: [s390x] + os: [linux] + libc: [glibc] + + "@rollup/rollup-linux-s390x-gnu@4.60.3": + resolution: + { integrity: sha512-cJd1X5XhHHlltkaypz1UcWLA8AcoIi1aWhsvaWDskD1oz2eKCypnqvTQ8ykMNI0RSmm7NkTdSqSSD7zM0xa6Ig== } + cpu: [s390x] + os: [linux] + libc: [glibc] + "@rollup/rollup-linux-x64-gnu@4.34.9": resolution: { integrity: sha512-FwBHNSOjUTQLP4MG7y6rR6qbGw4MFeQnIBrMe161QGaQoBQLqSUEKlHIiVgF3g/mb3lxlxzJOpIBhaP+C+KP2A== } @@ -15495,6 +22709,20 @@ packages: os: [linux] libc: [glibc] + "@rollup/rollup-linux-x64-gnu@4.60.2": + resolution: + { integrity: sha512-UQjrkIdWrKI626Du8lCQ6MJp/6V1LAo2bOK9OTu4mSn8GGXIkPXk/Vsp4bLHCd9Z9Iz2OTEaokUE90VweJgIYQ== } + cpu: [x64] + os: [linux] + libc: [glibc] + + "@rollup/rollup-linux-x64-gnu@4.60.3": + resolution: + { integrity: sha512-DAZDBHQfG2oQuhY7mc6I3/qB4LU2fQCjRvxbDwd/Jdvb9fypP4IJ4qmtu6lNjes6B531AI8cg1aKC2di97bUxA== } + cpu: [x64] + os: [linux] + libc: [glibc] + "@rollup/rollup-linux-x64-musl@4.34.9": resolution: { integrity: sha512-cYRpV4650z2I3/s6+5/LONkjIz8MBeqrk+vPXV10ORBnshpn8S32bPqQ2Utv39jCiDcO2eJTuSlPXpnvmaIgRA== } @@ -15516,18 +22744,56 @@ packages: os: [linux] libc: [musl] + "@rollup/rollup-linux-x64-musl@4.60.2": + resolution: + { integrity: sha512-bTsRGj6VlSdn/XD4CGyzMnzaBs9bsRxy79eTqTCBsA8TMIEky7qg48aPkvJvFe1HyzQ5oMZdg7AnVlWQSKLTnw== } + cpu: [x64] + os: [linux] + libc: [musl] + + "@rollup/rollup-linux-x64-musl@4.60.3": + resolution: + { integrity: sha512-cRxsE8c13mZOh3vP+wLDxpQBRrOHDIGOWyDL93Sy0Ga8y515fBcC2pjUfFwUe5T7tqvTvWbCpg1URM/AXdWIXA== } + cpu: [x64] + os: [linux] + libc: [musl] + "@rollup/rollup-openbsd-x64@4.60.1": resolution: { integrity: sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw== } cpu: [x64] os: [openbsd] + "@rollup/rollup-openbsd-x64@4.60.2": + resolution: + { integrity: sha512-6d4Z3534xitaA1FcMWP7mQPq5zGwBmGbhphh2DwaA1aNIXUu3KTOfwrWpbwI4/Gr0uANo7NTtaykFyO2hPuFLg== } + cpu: [x64] + os: [openbsd] + + "@rollup/rollup-openbsd-x64@4.60.3": + resolution: + { integrity: sha512-QaWcIgRxqEdQdhJqW4DJctsH6HCmo5vHxY0krHSX4jMtOqfzC+dqDGuHM87bu4H8JBeibWx7jFz+h6/4C8wA5Q== } + cpu: [x64] + os: [openbsd] + "@rollup/rollup-openharmony-arm64@4.60.1": resolution: { integrity: sha512-4Cv23ZrONRbNtbZa37mLSueXUCtN7MXccChtKpUnQNgF010rjrjfHx3QxkS2PI7LqGT5xXyYs1a7LbzAwT0iCA== } cpu: [arm64] os: [openharmony] + "@rollup/rollup-openharmony-arm64@4.60.2": + resolution: + { integrity: sha512-NetAg5iO2uN7eB8zE5qrZ3CSil+7IJt4WDFLcC75Ymywq1VZVD6qJ6EvNLjZ3rEm6gB7XW5JdT60c6MN35Z85Q== } + cpu: [arm64] + os: [openharmony] + + "@rollup/rollup-openharmony-arm64@4.60.3": + resolution: + { integrity: sha512-AaXwSvUi3QIPtroAUw1t5yHGIyqKEXwH54WUocFolZhpGDruJcs8c+xPNDRn4XiQsS7MEwnYsHW2l0MBLDMkWg== } + cpu: [arm64] + os: [openharmony] + "@rollup/rollup-win32-arm64-msvc@4.34.9": resolution: { integrity: sha512-z4mQK9dAN6byRA/vsSgQiPeuO63wdiDxZ9yg9iyX2QTzKuQM7T4xlBoeUP/J8uiFkqxkcWndWi+W7bXdPbt27Q== } @@ -15546,18 +22812,54 @@ packages: cpu: [arm64] os: [win32] + "@rollup/rollup-win32-arm64-msvc@4.60.2": + resolution: + { integrity: sha512-NCYhOotpgWZ5kdxCZsv6Iudx0wX8980Q/oW4pNFNihpBKsDbEA1zpkfxJGC0yugsUuyDZ7gL37dbzwhR0VI7pQ== } + cpu: [arm64] + os: [win32] + + "@rollup/rollup-win32-arm64-msvc@4.60.3": + resolution: + { integrity: sha512-65LAKM/bAWDqKNEelHlcHvm2V+Vfb8C6INFxQXRHCvaVN1rJfwr4NvdP4FyzUaLqWfaCGaadf6UbTm8xJeYfEg== } + cpu: [arm64] + os: [win32] + "@rollup/rollup-win32-ia32-msvc@4.60.1": resolution: { integrity: sha512-u09m3CuwLzShA0EYKMNiFgcjjzwqtUMLmuCJLeZWjjOYA3IT2Di09KaxGBTP9xVztWyIWjVdsB2E9goMjZvTQg== } cpu: [ia32] os: [win32] + "@rollup/rollup-win32-ia32-msvc@4.60.2": + resolution: + { integrity: sha512-RXsaOqXxfoUBQoOgvmmijVxJnW2IGB0eoMO7F8FAjaj0UTywUO/luSqimWBJn04WNgUkeNhh7fs7pESXajWmkg== } + cpu: [ia32] + os: [win32] + + "@rollup/rollup-win32-ia32-msvc@4.60.3": + resolution: + { integrity: sha512-EEM2gyhBF5MFnI6vMKdX1LAosE627RGBzIoGMdLloPZkXrUN0Ckqgr2Qi8+J3zip/8NVVro3/FjB+tjhZUgUHA== } + cpu: [ia32] + os: [win32] + "@rollup/rollup-win32-x64-gnu@4.60.1": resolution: { integrity: sha512-k+600V9Zl1CM7eZxJgMyTUzmrmhB/0XZnF4pRypKAlAgxmedUA+1v9R+XOFv56W4SlHEzfeMtzujLJD22Uz5zg== } cpu: [x64] os: [win32] + "@rollup/rollup-win32-x64-gnu@4.60.2": + resolution: + { integrity: sha512-qdAzEULD+/hzObedtmV6iBpdL5TIbKVztGiK7O3/KYSf+HIzU257+MX1EXJcyIiDbMAqmbwaufcYPvyRryeZtA== } + cpu: [x64] + os: [win32] + + "@rollup/rollup-win32-x64-gnu@4.60.3": + resolution: + { integrity: sha512-E5Eb5H/DpxaoXH++Qkv28RcUJboMopmdDUALBczvHMf7hNIxaDZqwY5lK12UK1BHacSmvupoEWGu+n993Z0y1A== } + cpu: [x64] + os: [win32] + "@rollup/rollup-win32-x64-msvc@4.34.9": resolution: { integrity: sha512-AyleYRPU7+rgkMWbEh71fQlrzRfeP6SyMnRf9XX4fCdDPAJumdSBqYEcWPMzVQ4ScAl7E4oFfK0GUVn77xSwbw== } @@ -15576,6 +22878,18 @@ packages: cpu: [x64] os: [win32] + "@rollup/rollup-win32-x64-msvc@4.60.2": + resolution: + { integrity: sha512-Nd/SgG27WoA9e+/TdK74KnHz852TLa94ovOYySo/yMPuTmpckK/jIF2jSwS3g7ELSKXK13/cVdmg1Z/DaCWKxA== } + cpu: [x64] + os: [win32] + + "@rollup/rollup-win32-x64-msvc@4.60.3": + resolution: + { integrity: sha512-hPt/bgL5cE+Qp+/TPHBqptcAgPzgj46mPcg/16zNUmbQk0j+mOEQV/+Lqu8QRtDV3Ek95Q6FeFITpuhl6OTsAA== } + cpu: [x64] + os: [win32] + "@rollup/wasm-node@4.60.1": resolution: { integrity: sha512-FAfGj5Ferzyna11iUwGdkYus/Y9d/H75PEpsseP5DZOsEsyPvP/Q7mJiSXhUYSEmyfHPaZyC8EsJCjqzDbtcfg== } @@ -15652,6 +22966,10 @@ packages: resolution: { integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg== } + "@sec-ant/readable-stream@0.6.0": + resolution: + { integrity: sha512-uiBh8DrB5FN35gP6/o8JEhEQ7/ci1jUsOZO/VMUjyvTpjtV54VstOXVj1TvTj/wsT23pfX6butxxh3qufsW3+g== } + "@sentry/core@9.47.1": resolution: { integrity: sha512-KX62+qIt4xgy8eHKHiikfhz2p5fOciXd0Cl+dNzhgPFq8klq4MGMNaf148GB3M/vBqP4nw/eFvRMAayFCgdRQw== } @@ -15686,16 +23004,28 @@ packages: "@opentelemetry/sdk-trace-base": ^1.30.1 || ^2.0.0 "@opentelemetry/semantic-conventions": ^1.34.0 + "@shikijs/core@2.5.0": + resolution: + { integrity: sha512-uu/8RExTKtavlpH7XqnVYBrfBkUc20ngXiX9NSrBhOVZYv/7XQRKUyhtkeflY5QsxC0GbJThCerruZfsUaSldg== } + "@shikijs/core@4.0.2": resolution: { integrity: sha512-hxT0YF4ExEqB8G/qFdtJvpmHXBYJ2lWW7qTHDarVkIudPFE6iCIrqdgWxGn5s+ppkGXI0aEGlibI0PAyzP3zlw== } engines: { node: ">=20" } + "@shikijs/engine-javascript@2.5.0": + resolution: + { integrity: sha512-VjnOpnQf8WuCEZtNUdjjwGUbtAVKuZkVQ/5cHy/tojVVRIRtlWMYVjyWhxOmIq05AlSOv72z7hRNRGVBgQOl0w== } + "@shikijs/engine-javascript@4.0.2": resolution: { integrity: sha512-7PW0Nm49DcoUIQEXlJhNNBHyoGMjalRETTCcjMqEaMoJRLljy1Bi/EGV3/qLBgLKQejdspiiYuHGQW6dX94Nag== } engines: { node: ">=20" } + "@shikijs/engine-oniguruma@2.5.0": + resolution: + { integrity: sha512-pGd1wRATzbo/uatrCIILlAdFVKdxImWJGQ5rFiB5VZi2ve5xj3Ax9jny8QvkaV93btQEwR/rSz5ERFpC5mKNIw== } + "@shikijs/engine-oniguruma@3.23.0": resolution: { integrity: sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g== } @@ -15705,6 +23035,10 @@ packages: { integrity: sha512-UpCB9Y2sUKlS9z8juFSKz7ZtysmeXCgnRF0dlhXBkmQnek7lAToPte8DkxmEYGNTMii72zU/lyXiCB6StuZeJg== } engines: { node: ">=20" } + "@shikijs/langs@2.5.0": + resolution: + { integrity: sha512-Qfrrt5OsNH5R+5tJ/3uYBBZv3SuGmnRPejV9IlIbFH3HTGLDlkqgHymAlzklVmKBjAaVmkPkyikAV/sQ1wSL+w== } + "@shikijs/langs@3.23.0": resolution: { integrity: sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg== } @@ -15719,6 +23053,10 @@ packages: { integrity: sha512-M6UMPrSa3fN5ayeJwFVl9qWofl273wtK1VG8ySDZ1mQBfhCpdd8nEx7nPZ/tk7k+TYcpqBZzj/AnwxT9lO+HJw== } engines: { node: ">=20" } + "@shikijs/themes@2.5.0": + resolution: + { integrity: sha512-wGrk+R8tJnO0VMzmUExHR+QdSaPUl/NKs+a4cQQRWyoc3YFbUzuLEi/KWK1hj+8BfHRKm2jNhhJck1dfstJpiw== } + "@shikijs/themes@3.23.0": resolution: { integrity: sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA== } @@ -15728,6 +23066,14 @@ packages: { integrity: sha512-mjCafwt8lJJaVSsQvNVrJumbnnj1RI8jbUKrPKgE6E3OvQKxnuRoBaYC51H4IGHePsGN/QtALglWBU7DoKDFnA== } engines: { node: ">=20" } + "@shikijs/transformers@2.5.0": + resolution: + { integrity: sha512-SI494W5X60CaUwgi8u4q4m4s3YAFSxln3tzNjOSYqq54wlVgz0/NbbXEb3mdLbqMBztcmS7bVTaEd2w0qMmfeg== } + + "@shikijs/types@2.5.0": + resolution: + { integrity: sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw== } + "@shikijs/types@3.23.0": resolution: { integrity: sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ== } @@ -16253,9 +23599,9 @@ packages: cpu: [arm64] os: [darwin] - "@swc/core-darwin-arm64@1.15.26": + "@swc/core-darwin-arm64@1.15.33": resolution: - { integrity: sha512-OmcP96CFsNOwa65tamQayRcfqhNlcQ3YCWOq+0Wb+CAM4uB7kOMrXY41Gj4atthxrGhLQ9pg7Vk26iApb88idA== } + { integrity: sha512-N+L0uXhuO7FIfzqwgxmzv0zIpV0qEp8wPX3QQs2p4atjMoywup2JTeDlXPw+z9pWJGCae3JjM+tZ6myclI+2gA== } engines: { node: ">=10" } cpu: [arm64] os: [darwin] @@ -16267,9 +23613,9 @@ packages: cpu: [x64] os: [darwin] - "@swc/core-darwin-x64@1.15.26": + "@swc/core-darwin-x64@1.15.33": resolution: - { integrity: sha512-liTTTpKSv89ivIxcZ+iU1cRige9Y7JkOjVnJ2Ystzl+DsWNHqt7wLTTgm/u7gEqmmAS2JKryODLQn3q1UtFNPQ== } + { integrity: sha512-/Il4QHSOhV4FekbsDtkrNmKbsX26oSysvgrRswa/RYOHXAkwXDbB4jaeKq6PsJLSPkzJ2KzQ061gtBnk0vNHfA== } engines: { node: ">=10" } cpu: [x64] os: [darwin] @@ -16281,9 +23627,9 @@ packages: cpu: [arm] os: [linux] - "@swc/core-linux-arm-gnueabihf@1.15.26": + "@swc/core-linux-arm-gnueabihf@1.15.33": resolution: - { integrity: sha512-Y/g+m3I8CeBof5A3kWWOS6QA2HOIUytF5EeTgfwcAK+GKT/tGe7Xqo5svBtaqflU5od2zzbMTWqkinPXgRWGgA== } + { integrity: sha512-C64hBnBxq4viOPQ8hlx+2lJ23bzZBGnjw7ryALmS+0Q3zHmwO8lw1/DArLENw4Q18/0w5wdEO1k3m1wWNtKGqQ== } engines: { node: ">=10" } cpu: [arm] os: [linux] @@ -16296,9 +23642,9 @@ packages: os: [linux] libc: [glibc] - "@swc/core-linux-arm64-gnu@1.15.26": + "@swc/core-linux-arm64-gnu@1.15.33": resolution: - { integrity: sha512-19IvwyPfBN/rz9s7qXhOTQmW0922+pjpRUUvIebu+CMM75nX6YuDzHsGx8hSmn5dS89SNaMCh1lgUuXqm++6jg== } + { integrity: sha512-TRJfnJbX3jqpxRDRoieMzRiCBS5jOmXNb3iQXmcgjFEHKLnAgK1RZRU8Cq1MsPqO4jAJp/ld1G4O3fXuxv85uw== } engines: { node: ">=10" } cpu: [arm64] os: [linux] @@ -16312,9 +23658,9 @@ packages: os: [linux] libc: [musl] - "@swc/core-linux-arm64-musl@1.15.26": + "@swc/core-linux-arm64-musl@1.15.33": resolution: - { integrity: sha512-iNlbvTIo425rkKzDLLWFJGnFXr3myETUdIDHcjuiPNZE8b0ogmcAuilC4yEJX7FSHGbnlsoJcCT2xf4b3VJmmQ== } + { integrity: sha512-il7tYM+CpUNzieQbwAjFT1P8zqAhmGWNAGhQZBnxurXZ0aNn+5nqYFTEUKNZl7QibtT0uQXzTZrNGHCIj6Y1Og== } engines: { node: ">=10" } cpu: [arm64] os: [linux] @@ -16328,9 +23674,9 @@ packages: os: [linux] libc: [glibc] - "@swc/core-linux-ppc64-gnu@1.15.26": + "@swc/core-linux-ppc64-gnu@1.15.33": resolution: - { integrity: sha512-AuuEOtG+YXKIjIUup4RsxYNklx6XVB3WKWfhxG6hnfPrn7vp89RNOLbbyyprgj6Sk7k9ulwGVTJElEvmBNPSCA== } + { integrity: sha512-ZtNBwN0Z7CFj9Il0FcPaKdjgP7URyKu/3RfH46vq+0paOBqLj4NYldD6Qo//Duif/7IOtAraUfDOmp0PLAufog== } engines: { node: ">=10" } cpu: [ppc64] os: [linux] @@ -16344,9 +23690,9 @@ packages: os: [linux] libc: [glibc] - "@swc/core-linux-s390x-gnu@1.15.26": + "@swc/core-linux-s390x-gnu@1.15.33": resolution: - { integrity: sha512-JcMDWQvW1BchUyRg8E0jHiTx7CQYpUr5uDEL1dnPDECrEjBEGG2ynmJ3XX70sWXql0JagqR1t3VpANYFWdUnqA== } + { integrity: sha512-De1IyajoOmhOYYjw/lx66bKlyDpHZTueqwpDrWgf5O7T6d1ODeJJO9/OqMBmrBQc5C+dNnlmIufHsp4QVCWufA== } engines: { node: ">=10" } cpu: [s390x] os: [linux] @@ -16360,9 +23706,9 @@ packages: os: [linux] libc: [glibc] - "@swc/core-linux-x64-gnu@1.15.26": + "@swc/core-linux-x64-gnu@1.15.33": resolution: - { integrity: sha512-FW7V7Mbpq4+PA7BiAq76LJs8MdNuUSylyuRVfQRkhIyeWadFroZ+KOPgjku8Z/fXzngxBRvsk+PGGB0t8mGcjA== } + { integrity: sha512-mGTH0YxmUN+x6vRN/I6NOk5X0ogNktkwPnJ94IMvR7QjhRDwL0O8RXEDhyUM0YtwWrryBOqaJQBX4zruxEPRGw== } engines: { node: ">=10" } cpu: [x64] os: [linux] @@ -16376,9 +23722,9 @@ packages: os: [linux] libc: [musl] - "@swc/core-linux-x64-musl@1.15.26": + "@swc/core-linux-x64-musl@1.15.33": resolution: - { integrity: sha512-w8erqMHsVcdGwUfJxF6LaiTuPoKnyLOcUbhLcxiXrlLt5MLjtlgcIeUY/NWK/oPoyqkgH+/i8pOJnMTxvl83ZQ== } + { integrity: sha512-hj628ZkSEJf6zMf5VMbYrG2O6QqyTIp2qwY6VlCjvIa9lAEZ5c2lfPblCLVGYubTeLJDxadLB/CxqQYOQABeEQ== } engines: { node: ">=10" } cpu: [x64] os: [linux] @@ -16391,9 +23737,9 @@ packages: cpu: [arm64] os: [win32] - "@swc/core-win32-arm64-msvc@1.15.26": + "@swc/core-win32-arm64-msvc@1.15.33": resolution: - { integrity: sha512-uDCWCNpUiqkbvPmsuPUTn/P7ag9SqNXD2JT/W3dUu7yZ2krzN+nmmoQ2xRX63/J6RYiHI7aT4jo7Z++lsljlPA== } + { integrity: sha512-GV2oohtN2/5+KSccl86VULu3aT+LrISC8uzgSq0FRnikpD+Zwc+sBlXmoKQ+Db6jI57ITUOIB8jRkdGMABC29g== } engines: { node: ">=10" } cpu: [arm64] os: [win32] @@ -16405,9 +23751,9 @@ packages: cpu: [ia32] os: [win32] - "@swc/core-win32-ia32-msvc@1.15.26": + "@swc/core-win32-ia32-msvc@1.15.33": resolution: - { integrity: sha512-2k1ax1QmmqLEnpC0uRCw7OXhBfyvdPqERBXupDasjYbChT6ZSO/uha28Bp38cw0viKIG79L27aTDkbkABsMW3w== } + { integrity: sha512-gtyvzSNR8DHKfFEA2uqb8Ld1myqi6uEg2jyeUq3ikn5ytYs7H8RpZYC8mdy4NXr8hfcdJfCLXPlYaqqfBXpoEQ== } engines: { node: ">=10" } cpu: [ia32] os: [win32] @@ -16419,9 +23765,9 @@ packages: cpu: [x64] os: [win32] - "@swc/core-win32-x64-msvc@1.15.26": + "@swc/core-win32-x64-msvc@1.15.33": resolution: - { integrity: sha512-aUuYecSEGa4SUSdyCWaI/vk8jdseifYnsF1GZQx2+piL8GIuT/5QrVcFfmes4Iwy7FIVXxtzD063z/FfpZ7K7w== } + { integrity: sha512-d6fRqQSkJI+kmMEBWaDQ7TMl8+YjLYbwRUPZQ9DY0ORBJeTzOrG0twvfvlZ2xgw6jA0ScQKgfBm4vHLSLl5Hqg== } engines: { node: ">=10" } cpu: [x64] os: [win32] @@ -16436,9 +23782,9 @@ packages: "@swc/helpers": optional: true - "@swc/core@1.15.26": + "@swc/core@1.15.33": resolution: - { integrity: sha512-tglZGyx8N5PC+x1Nd/JrZxqpqlcZoSuG9gTDKO6AuFToFiVB3uS8HvbKFuO7g3lJzvFf9riAb94xs9HU2UhAHQ== } + { integrity: sha512-jOlwnFV2xhuuZeAUILGFULeR6vDPfijEJ57evfocwznQldLU3w2cZ9bSDryY9ip+AsM3r1NJKzf47V2NXebkeQ== } engines: { node: ">=10" } peerDependencies: "@swc/helpers": ">=0.5.17" @@ -16564,71 +23910,6 @@ packages: resolution: { integrity: sha512-UkNnw1/oFEfecR8ypyHIQuWYdkPvHiwcQ78sh+ymIiYoF+uc5H1UBetbjyqT+vgGJ3qQN6nhucJviX6HesWtKQ== } - "@tsparticles/browserslist-config@3.4.7": - resolution: - { integrity: sha512-S3n1iONLhObQ3cQVpEnzMo4iPL02hoOGbP7nJjpvED8b6i8LIlzuW8xtupTdr/LR8I7rdIJO/MuX3/xGGKpVbA== } - peerDependencies: - browserslist: ^4 - - "@tsparticles/cli@3.4.6": - resolution: - { integrity: sha512-Q79Mo6wQgG2SP3A4h5FGK7EhZIUDIUIG6DYHEIB2EwVOWlClqaOJRad9islBX0gBBpo7OU0y+aIVzYlnbACDCw== } - hasBin: true - - "@tsparticles/depcruise-config@3.4.7": - resolution: - { integrity: sha512-diqx/EQFLzgvi87L9fGVcy1pBi05FId0annB2ddxd5G0wj8A+i4VzEkAj4sUMgHM0tPWX4dSlpXZD11EOIfWPQ== } - peerDependencies: - dependency-cruiser: ^17 - - "@tsparticles/engine@3.9.1": - resolution: - { integrity: sha512-DpdgAhWMZ3Eh2gyxik8FXS6BKZ8vyea+Eu5BC4epsahqTGY9V3JGGJcXC6lRJx6cPMAx1A0FaQAojPF3v6rkmQ== } - - "@tsparticles/eslint-config@3.4.7": - resolution: - { integrity: sha512-zn0B9qe+pKfd3ReW/wWziC+d7ft2tqJLT3qrhS5DjkihBsdoCRqoZ7yMkdi7Gzxff31Zg6dS+fr7Jb++MxKXMQ== } - peerDependencies: - eslint: ^10 - - "@tsparticles/move-base@3.9.1": - resolution: - { integrity: sha512-X4huBS27d8srpxwOxliWPUt+NtCwY+8q/cx1DvQxyqmTA8VFCGpcHNwtqiN+9JicgzOvSuaORVqUgwlsc7h4pQ== } - - "@tsparticles/move-parallax@3.9.1": - resolution: - { integrity: sha512-whlOR0bVeyh6J/hvxf/QM3DqvNnITMiAQ0kro6saqSDItAVqg4pYxBfEsSOKq7EhjxNvfhhqR+pFMhp06zoCVA== } - - "@tsparticles/prettier-config@3.4.6": - resolution: - { integrity: sha512-V/TWCXHsRCkDZL/+lYgGxja79m9pLoLIhbHeEDLrAK3jbJdkcdY+xLMXgkrgHp1JPv9EADI4OTO0Orwn4nMlyg== } - peerDependencies: - prettier: ^3 - - "@tsparticles/prettier-config@3.4.7": - resolution: - { integrity: sha512-gZGP904bVSRuJu1Rgw2eDwf5t8BEhKiHLNl+yAyZExHTVVri8Kj19ngvnWUl6dz9w/PCJ4PMrtFKjmdGiYaHuQ== } - peerDependencies: - prettier: ^3 - - "@tsparticles/tsconfig@3.4.7": - resolution: - { integrity: sha512-gKEapAzBIDu9g2g9eW9T2o4HkHiN9BpVMcKCmnqCQobf8Zw/bpiukOIPbbPEamX73CAdr3nIS4brfxJGTrqb5A== } - peerDependencies: - typescript: ^6 - - "@tsparticles/updater-color@3.9.1": - resolution: - { integrity: sha512-XGWdscrgEMA8L5E7exsE0f8/2zHKIqnTrZymcyuFBw2DCB6BIV+5z6qaNStpxrhq3DbIxxhqqcybqeOo7+Alpg== } - - "@tsparticles/updater-stroke-color@3.9.1": - resolution: - { integrity: sha512-3x14+C2is9pZYTg9T2TiA/aM1YMq4wLdYaZDcHm3qO30DZu5oeQq0rm/6w+QOGKYY1Z3Htg9rlSUZkhTHn7eDA== } - - "@tsparticles/webpack-plugin@3.4.7": - resolution: - { integrity: sha512-h2qqm8jspnE/tBwy67a/9u+4LXKI9KzLH620lGoQ2MhMLWCsXpVXooMtKrLmRJ6Pk7PkIR4x6N+TUDZPaEAQYg== } - "@tufjs/canonical-json@1.0.0": resolution: { integrity: sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ== } @@ -16905,6 +24186,10 @@ packages: resolution: { integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== } + "@types/estree@1.0.9": + resolution: + { integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg== } + "@types/etag@1.8.3": resolution: { integrity: sha512-QYHv9Yeh1ZYSMPQOoxY4XC4F1r+xRUiAriB303F4G6uBsT3KKX60DjiogvVv+2VISVDuJhcIzMdbjT+Bm938QQ== } @@ -17062,6 +24347,10 @@ packages: resolution: { integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== } + "@types/klaw@3.0.7": + resolution: + { integrity: sha512-ooZ+dVfTfg8RIUzwCBnHR6NirCB0amo1MNneUbL+Votca1H/eaMwkB31uDU9O6yKWNY5ngdYP3ywduOxm4KtMg== } + "@types/koa-compose@3.2.9": resolution: { integrity: sha512-BroAZ9FTvPiCy0Pi8tjD1OfJ7bgU1gQf0eR6e1Vm+JJATy9eKOG3hQMFtMciMawiSOVnLMdmUOC46s7HBhSTsA== } @@ -17094,6 +24383,10 @@ packages: resolution: { integrity: sha512-PecSzorDGdabF57OBeQO/xFbAkYWo88g4Xvnsx7LRwqLC17I7OoKtA3bQB9uXkY6UkMWCOsA8HSVpaoitscdXw== } + "@types/linkify-it@5.0.0": + resolution: + { integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q== } + "@types/livereload@0.9.5": resolution: { integrity: sha512-2RXcRKdivPmn67pwjytvHoRv46AeXaLYVUWA0zkel1XSAOH5i71G0KfUdE5u3g80T155gR3Fo3ilVaqparLsVA== } @@ -17106,10 +24399,18 @@ packages: resolution: { integrity: sha512-H3iskjFIAn5SlJU7OuxUmTEpebK6TKB8rxZShDslBMZJ5u9S//KM1sbdAisiSrqwLQncVjnpi2OK2J51h+4lsg== } + "@types/markdown-it@14.1.2": + resolution: + { integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog== } + "@types/mdast@4.0.4": resolution: { integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA== } + "@types/mdurl@2.0.0": + resolution: + { integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg== } + "@types/mime-types@2.1.4": resolution: { integrity: sha512-lfU4b34HOri+kAY5UheuFMWPDOI+OPceBSHZKp69gEyTL/mmJ4cnU6Y/rlme3UL3GyOn6Y42hyIEw0/q8sWx5w== } @@ -17179,6 +24480,10 @@ packages: resolution: { integrity: sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ== } + "@types/node@25.6.2": + resolution: + { integrity: sha512-sokuT28dxf9JT5Kady1fsXOvI4HVpjZa95NKT5y9PNTIrs2AsobR4GFAA90ZG8M+nxVRLysCXsVj6eGC7Vbrlw== } + "@types/normalize-package-data@2.4.1": resolution: { integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== } @@ -17211,6 +24516,10 @@ packages: resolution: { integrity: sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w== } + "@types/prompts@2.4.9": + resolution: + { integrity: sha512-qTxFi6Buiu8+50/+3DGIWLHM6QuWsEKugJnnP6iv2Mc4ncxE4A/OJkjuVOA+5X0X1S/nq5VJRa8Lu+nwcvbrKA== } + "@types/prop-types@15.7.15": resolution: { integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw== } @@ -17415,10 +24724,18 @@ packages: resolution: { integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q== } + "@types/web-bluetooth@0.0.21": + resolution: + { integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA== } + "@types/webpack-bundle-analyzer@3.9.5": resolution: { integrity: sha512-QlyDyX7rsOIJHASzXWlih8DT9fR+XCG9cwIV/4pKrtScdHv4XFshdEf/7iiqLqG0lzWcoBdzG8ylMHQ5XLNixw== } + "@types/webpack-bundle-analyzer@4.7.0": + resolution: + { integrity: sha512-c5i2ThslSNSG8W891BRvOd/RoCjI2zwph8maD22b1adtSns20j+0azDDMCK06DiVrzTgnwiDl5Ntmu1YRJw8Sg== } + "@types/webpack-env@1.18.8": resolution: { integrity: sha512-G9eAoJRMLjcvN4I08wB5I7YofOb/kaJNd5uoCMX+LbKXTPCF+ZIHuqTnFaK9Jz1rgs035f9JUPUhNFtqgucy/A== } @@ -17463,18 +24780,6 @@ packages: resolution: { integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q== } - "@typescript-eslint/eslint-plugin@5.62.0": - resolution: - { integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } - peerDependencies: - "@typescript-eslint/parser": ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: "*" - peerDependenciesMeta: - typescript: - optional: true - "@typescript-eslint/eslint-plugin@6.21.0": resolution: { integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA== } @@ -17487,18 +24792,6 @@ packages: typescript: optional: true - "@typescript-eslint/eslint-plugin@7.18.0": - resolution: - { integrity: sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw== } - engines: { node: ^18.18.0 || >=20.0.0 } - peerDependencies: - "@typescript-eslint/parser": ^7.0.0 - eslint: ^8.56.0 - typescript: "*" - peerDependenciesMeta: - typescript: - optional: true - "@typescript-eslint/eslint-plugin@8.58.1": resolution: { integrity: sha512-eSkwoemjo76bdXl2MYqtxg51HNwUSkWfODUOQ3PaTLZGh9uIWWFZIjyjaJnex7wXDu+TRx+ATsnSxdN9YWfRTQ== } @@ -17517,16 +24810,23 @@ packages: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: ">=4.8.4 <6.1.0" - "@typescript-eslint/parser@5.62.0": + "@typescript-eslint/eslint-plugin@8.59.1": resolution: - { integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + { integrity: sha512-BOziFIfE+6osHO9FoJG4zjoHUcvI7fTNBSpdAwrNH0/TLvzjsk2oo8XSSOT2HhqUyhZPfHv4UOffoJ9oEEQ7Ag== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: "*" - peerDependenciesMeta: - typescript: - optional: true + "@typescript-eslint/parser": ^8.59.1 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: ">=4.8.4 <6.1.0" + + "@typescript-eslint/eslint-plugin@8.59.2": + resolution: + { integrity: sha512-j/bwmkBvHUtPNxzuWe5z6BEk3q54YRyGlBXkSsmfoih7zNrBvl5A9A98anlp/7JbyZcWIJ8KXo/3Tq/DjFLtuQ== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + "@typescript-eslint/parser": ^8.59.2 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: ">=4.8.4 <6.1.0" "@typescript-eslint/parser@6.21.0": resolution: @@ -17539,17 +24839,6 @@ packages: typescript: optional: true - "@typescript-eslint/parser@7.18.0": - resolution: - { integrity: sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg== } - engines: { node: ^18.18.0 || >=20.0.0 } - peerDependencies: - eslint: ^8.56.0 - typescript: "*" - peerDependenciesMeta: - typescript: - optional: true - "@typescript-eslint/parser@8.58.1": resolution: { integrity: sha512-gGkiNMPqerb2cJSVcruigx9eHBlLG14fSdPdqMoOcBfh+vvn4iCq2C8MzUB89PrxOXk0y3GZ1yIWb9aOzL93bw== } @@ -17566,6 +24855,22 @@ packages: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: ">=4.8.4 <6.1.0" + "@typescript-eslint/parser@8.59.1": + resolution: + { integrity: sha512-HDQH9O/47Dxi1ceDhBXdaldtf/WV9yRYMjbjCuNk3qnaTD564qwv61Y7+gTxwxRKzSrgO5uhtw584igXVuuZkA== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: ">=4.8.4 <6.1.0" + + "@typescript-eslint/parser@8.59.2": + resolution: + { integrity: sha512-plR3pp6D+SSUn1HM7xvSkx12/DhoHInI2YF35KAcVFNZvlC0gtrWqx7Qq1oH2Ssgi0vlFRCTbP+DZc7B9+TtsQ== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: ">=4.8.4 <6.1.0" + "@typescript-eslint/project-service@8.56.1": resolution: { integrity: sha512-TAdqQTzHNNvlVFfR+hu2PDJrURiwKsUvxFn1M0h95BB8ah5jejas08jUWG4dBA68jDMI988IvtfdAI53JzEHOQ== } @@ -17587,21 +24892,25 @@ packages: peerDependencies: typescript: ">=4.8.4 <6.1.0" - "@typescript-eslint/scope-manager@5.62.0": + "@typescript-eslint/project-service@8.59.1": resolution: - { integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + { integrity: sha512-+MuHQlHiEr00Of/IQbE/MmEoi44znZHbR/Pz7Opq4HryUOlRi+/44dro9Ycy8Fyo+/024IWtw8m4JUMCGTYxDg== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + typescript: ">=4.8.4 <6.1.0" + + "@typescript-eslint/project-service@8.59.2": + resolution: + { integrity: sha512-+2hqvEkeyf/0FBor67duF0Ll7Ot8jyKzDQOSrxazF/danillRq2DwR9dLptsXpoZQqxE1UisSmoZewrlPas9Vw== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + typescript: ">=4.8.4 <6.1.0" "@typescript-eslint/scope-manager@6.21.0": resolution: { integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg== } engines: { node: ^16.0.0 || >=18.0.0 } - "@typescript-eslint/scope-manager@7.18.0": - resolution: - { integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA== } - engines: { node: ^18.18.0 || >=20.0.0 } - "@typescript-eslint/scope-manager@8.56.1": resolution: { integrity: sha512-YAi4VDKcIZp0O4tz/haYKhmIDZFEUPOreKbfdAN3SzUDMcPhJ8QI99xQXqX+HoUVq8cs85eRKnD+rne2UAnj2w== } @@ -17617,6 +24926,16 @@ packages: { integrity: sha512-SgmyvDPexWETQek+qzZnrG6844IaO02UVyOLhI4wpo82dpZJY9+6YZCKAMFzXb7qhx37mFK1QcPQ18tud+vo6Q== } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + "@typescript-eslint/scope-manager@8.59.1": + resolution: + { integrity: sha512-LwuHQI4pDOYVKvmH2dkaJo6YZCSgouVgnS/z7yBPKBMvgtBvyLqiLy9Z6b7+m/TRcX1NFYUqZetI5Y+aT4GEfg== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + "@typescript-eslint/scope-manager@8.59.2": + resolution: + { integrity: sha512-JzfyEpEtOU89CcFSwyNS3mu4MLvLSXqnmX05+aKBDM+TdR5jzcGOEBwxwGNxrEQ7p/z6kK2WyioCGBf2zZBnvg== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + "@typescript-eslint/tsconfig-utils@8.56.1": resolution: { integrity: sha512-qOtCYzKEeyr3aR9f28mPJqBty7+DBqsdd63eO0yyDwc6vgThj2UjWfJIcsFeSucYydqcuudMOprZ+x1SpF3ZuQ== } @@ -17638,16 +24957,19 @@ packages: peerDependencies: typescript: ">=4.8.4 <6.1.0" - "@typescript-eslint/type-utils@5.62.0": + "@typescript-eslint/tsconfig-utils@8.59.1": resolution: - { integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew== } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + { integrity: sha512-/0nEyPbX7gRsk0Uwfe4ALwwgxuA66d/l2mhRDNlAvaj4U3juhUtJNq0DsY8M2AYwwb9rEq2hrC3IcIcEt++iJA== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } peerDependencies: - eslint: "*" - typescript: "*" - peerDependenciesMeta: - typescript: - optional: true + typescript: ">=4.8.4 <6.1.0" + + "@typescript-eslint/tsconfig-utils@8.59.2": + resolution: + { integrity: sha512-BKK4alN7oi4C/zv4VqHQ+uRU+lTa6JGIZ7s1juw7b3RHo9OfKB+bKX3u0iVZetdsUCBBkSbdWbarJbmN0fTeSw== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + typescript: ">=4.8.4 <6.1.0" "@typescript-eslint/type-utils@6.21.0": resolution: @@ -17660,17 +24982,6 @@ packages: typescript: optional: true - "@typescript-eslint/type-utils@7.18.0": - resolution: - { integrity: sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA== } - engines: { node: ^18.18.0 || >=20.0.0 } - peerDependencies: - eslint: ^8.56.0 - typescript: "*" - peerDependenciesMeta: - typescript: - optional: true - "@typescript-eslint/type-utils@8.58.1": resolution: { integrity: sha512-HUFxvTJVroT+0rXVJC7eD5zol6ID+Sn5npVPWoFuHGg9Ncq5Q4EYstqR+UOqaNRFXi5TYkpXXkLhoCHe3G0+7w== } @@ -17687,21 +24998,27 @@ packages: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: ">=4.8.4 <6.1.0" - "@typescript-eslint/types@5.62.0": + "@typescript-eslint/type-utils@8.59.1": resolution: - { integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + { integrity: sha512-klWPBR2ciQHS3f++ug/mVnWKPjBUo7icEL3FAO1lhAR1Z1i5NQYZ1EannMSRYcq5qCv5wNALlXr6fksRHyYl7w== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: ">=4.8.4 <6.1.0" + + "@typescript-eslint/type-utils@8.59.2": + resolution: + { integrity: sha512-nhqaj1nmTdVVl/BP5omXNRGO38jn5iosis2vbdmupF2txCf8ylWT8lx+JlvMYYVqzGVKtjojUFoQ3JRWK+mfzQ== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: ">=4.8.4 <6.1.0" "@typescript-eslint/types@6.21.0": resolution: { integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg== } engines: { node: ^16.0.0 || >=18.0.0 } - "@typescript-eslint/types@7.18.0": - resolution: - { integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ== } - engines: { node: ^18.18.0 || >=20.0.0 } - "@typescript-eslint/types@8.56.1": resolution: { integrity: sha512-dbMkdIUkIkchgGDIv7KLUpa0Mda4IYjo4IAMJUZ+3xNoUXxMsk9YtKpTHSChRS85o+H9ftm51gsK1dZReY9CVw== } @@ -17722,15 +25039,20 @@ packages: { integrity: sha512-9TukXyATBQf/Jq9AMQXfvurk+G5R2MwfqQGDR2GzGz28HvY/lXNKGhkY+6IOubwcquikWk5cjlgPvD2uAA7htQ== } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } - "@typescript-eslint/typescript-estree@5.62.0": + "@typescript-eslint/types@8.59.0": resolution: - { integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } - peerDependencies: - typescript: "*" - peerDependenciesMeta: - typescript: - optional: true + { integrity: sha512-nLzdsT1gdOgFxxxwrlNVUBzSNBEEHJ86bblmk4QAS6stfig7rcJzWKqCyxFy3YRRHXDWEkb2NralA1nOYkkm/A== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + "@typescript-eslint/types@8.59.1": + resolution: + { integrity: sha512-ZDCjgccSdYPw5Bxh+my4Z0lJU96ZDN7jbBzvmEn0FZx3RtU1C7VWl6NbDx94bwY3V5YsgwRzJPOgeY2Q/nLG8A== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + "@typescript-eslint/types@8.59.2": + resolution: + { integrity: sha512-e82GVOE8Ps3E++Egvb6Y3Dw0S10u8NkQ9KXmtRhCWJJ8kDhOJTvtMAWnFL16kB1583goCWXsr0NieKCZMs2/0Q== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } "@typescript-eslint/typescript-estree@6.21.0": resolution: @@ -17742,16 +25064,6 @@ packages: typescript: optional: true - "@typescript-eslint/typescript-estree@7.18.0": - resolution: - { integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA== } - engines: { node: ^18.18.0 || >=20.0.0 } - peerDependencies: - typescript: "*" - peerDependenciesMeta: - typescript: - optional: true - "@typescript-eslint/typescript-estree@8.56.1": resolution: { integrity: sha512-qzUL1qgalIvKWAf9C1HpvBjif+Vm6rcT5wZd4VoMb9+Km3iS3Cv9DY6dMRMDtPnwRAFyAi7YXJpTIEXLvdfPxg== } @@ -17773,12 +25085,19 @@ packages: peerDependencies: typescript: ">=4.8.4 <6.1.0" - "@typescript-eslint/utils@5.62.0": + "@typescript-eslint/typescript-estree@8.59.1": resolution: - { integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + { integrity: sha512-OUd+vJS05sSkOip+BkZ/2NS8RMxrAAJemsC6vU3kmfLyeaJT0TftHkV9mcx2107MmsBVXXexhVu4F0TZXyMl4g== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: ">=4.8.4 <6.1.0" + + "@typescript-eslint/typescript-estree@8.59.2": + resolution: + { integrity: sha512-o0XPGNwcWw+FIwStOWn+BwBuEmL6QXP0rsvAFg7ET1dey1Nr6Wb1ac8p5HEsK0ygO/6mUxlk+YWQD9xcb/nnXg== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + typescript: ">=4.8.4 <6.1.0" "@typescript-eslint/utils@6.21.0": resolution: @@ -17787,13 +25106,6 @@ packages: peerDependencies: eslint: ^7.0.0 || ^8.0.0 - "@typescript-eslint/utils@7.18.0": - resolution: - { integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw== } - engines: { node: ^18.18.0 || >=20.0.0 } - peerDependencies: - eslint: ^8.56.0 - "@typescript-eslint/utils@8.56.1": resolution: { integrity: sha512-HPAVNIME3tABJ61siYlHzSWCGtOoeP2RTIaHXFMPqjrQKCGB9OgUVdiNgH7TJS2JNIQ5qQ4RsAUDuGaGme/KOA== } @@ -17818,21 +25130,27 @@ packages: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: ">=4.8.4 <6.1.0" - "@typescript-eslint/visitor-keys@5.62.0": + "@typescript-eslint/utils@8.59.1": resolution: - { integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + { integrity: sha512-3pIeoXhCeYH9FSCBI8P3iNwJlGuzPlYKkTlen2O9T1DSeeg8UG8jstq6BLk+Mda0qup7mgk4z4XL4OzRaxZ8LA== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: ">=4.8.4 <6.1.0" + + "@typescript-eslint/utils@8.59.2": + resolution: + { integrity: sha512-Juw3EinkXqjaffxz6roowvV7GZT/kET5vSKKZT6upl5TXdWkLkYmNPXwDDL2Vkt2DPn0nODIS4egC/0AGxKo/Q== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: ">=4.8.4 <6.1.0" "@typescript-eslint/visitor-keys@6.21.0": resolution: { integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A== } engines: { node: ^16.0.0 || >=18.0.0 } - "@typescript-eslint/visitor-keys@7.18.0": - resolution: - { integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg== } - engines: { node: ^18.18.0 || >=20.0.0 } - "@typescript-eslint/visitor-keys@8.56.1": resolution: { integrity: sha512-KiROIzYdEV85YygXw6BI/Dx4fnBlFQu6Mq4QE4MOH9fFnhohw6wX/OAvDY2/C+ut0I3RSPKenvZJIVYqJNkhEw== } @@ -17848,6 +25166,16 @@ packages: { integrity: sha512-f1WO2Lx8a9t8DARmcWAUPJbu0G20bJlj8L4z72K00TMeJAoyLr/tHhI/pzYBLrR4dXWkcxO1cWYZEOX8DKHTqA== } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + "@typescript-eslint/visitor-keys@8.59.1": + resolution: + { integrity: sha512-LdDNl6C5iJExcM0Yh0PwAIBb9PrSiCsWamF/JyEZawm3kFDnRoaq3LGE4bpyRao/fWeGKKyw7icx0YxrLFC5Cg== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + "@typescript-eslint/visitor-keys@8.59.2": + resolution: + { integrity: sha512-NwjLUnGy8/Zfx23fl50tRC8rYaYnM52xNRYFAXvmiil9yh1+K6aRVQMnzW6gQB/1DLgWt977lYQn7C+wtgXZiA== } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + "@ungap/structured-clone@1.3.0": resolution: { integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g== } @@ -18033,6 +25361,14 @@ packages: vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 vue: ^2.7.0-0 + "@vitejs/plugin-vue@5.2.4": + resolution: + { integrity: sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA== } + engines: { node: ^18.0.0 || >=20.0.0 } + peerDependencies: + vite: ^5.0.0 || ^6.0.0 + vue: ^3.2.25 + "@vitejs/plugin-vue@6.0.5": resolution: { integrity: sha512-bL3AxKuQySfk1iGcBsQnoRVexTPJq0Z/ixFVM8OhVJAP6ZXXXLtM7NFKWhLl30Kg7uTBqIaPXbh+nuQCuBDedg== } @@ -18059,6 +25395,10 @@ packages: resolution: { integrity: sha512-iPBpra+VDuXmBFI3FMKHSFXp3Gx5HfmSCE8X67Dn+bwephCnQCaB7qWK2ldHa+8ncN8hJU8VTMcxjPpyMkUjww== } + "@vitest/expect@4.1.5": + resolution: + { integrity: sha512-PWBaRY5JoKuRnHlUHfpV/KohFylaDZTupcXN1H9vYryNLOnitSw60Mw9IAE2r67NbwwzBw/Cc/8q9BK3kIX8Kw== } + "@vitest/mocker@4.1.4": resolution: { integrity: sha512-R9HTZBhW6yCSGbGQnDnH3QHfJxokKN4KB+Yvk9Q1le7eQNYwiCyKxmLmurSpFy6BzJanSLuEUDrD+j97Q+ZLPg== } @@ -18071,10 +25411,26 @@ packages: vite: optional: true + "@vitest/mocker@4.1.5": + resolution: + { integrity: sha512-/x2EmFC4mT4NNzqvC3fmesuV97w5FC903KPmey4gsnJiMQ3Be1IlDKVaDaG8iqaLFHqJ2FVEkxZk5VmeLjIItw== } + peerDependencies: + msw: ^2.4.9 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + "@vitest/pretty-format@4.1.4": resolution: { integrity: sha512-ddmDHU0gjEUyEVLxtZa7xamrpIefdEETu3nZjWtHeZX4QxqJ7tRxSteHVXJOcr8jhiLoGAhkK4WJ3WqBpjx42A== } + "@vitest/pretty-format@4.1.5": + resolution: + { integrity: sha512-7I3q6l5qr03dVfMX2wCo9FxwSJbPdwKjy2uu/YPpU3wfHvIL4QHwVRp57OfGrDFeUJ8/8QdfBKIV12FTtLn00g== } + "@vitest/runner@1.6.1": resolution: { integrity: sha512-3nSnYXkVkf3mXFfE7vVyPmi3Sazhb/2cfZGGs0JRzFsPFvAMBEcrweV1V1GsrstdXeKCTXlJbvnQwGWgEIHmOA== } @@ -18083,6 +25439,10 @@ packages: resolution: { integrity: sha512-xTp7VZ5aXP5ZJrn15UtJUWlx6qXLnGtF6jNxHepdPHpMfz/aVPx+htHtgcAL2mDXJgKhpoo2e9/hVJsIeFbytQ== } + "@vitest/runner@4.1.5": + resolution: + { integrity: sha512-2D+o7Pr82IEO46YPpoA/YU0neeyr6FTerQb5Ro7BUnBuv6NQtT/kmVnczngiMEBhzgqz2UZYl5gArejsyERDSQ== } + "@vitest/snapshot@1.6.1": resolution: { integrity: sha512-WvidQuWAzU2p95u8GAKlRMqMyN1yOJkGHnx3M1PL9Raf7AQ1kwLKg04ADlCa3+OXUZE7BceOhVZiuWAbzCKcUQ== } @@ -18091,6 +25451,10 @@ packages: resolution: { integrity: sha512-MCjCFgaS8aZz+m5nTcEcgk/xhWv0rEH4Yl53PPlMXOZ1/Ka2VcZU6CJ+MgYCZbcJvzGhQRjVrGQNZqkGPttIKw== } + "@vitest/snapshot@4.1.5": + resolution: + { integrity: sha512-zypXEt4KH/XgKGPUz4eC2AvErYx0My5hfL8oDb1HzGFpEk1P62bxSohdyOmvz+d9UJwanI68MKwr2EquOaOgMQ== } + "@vitest/spy@1.6.1": resolution: { integrity: sha512-MGcMmpGkZebsMZhbQKkAf9CX5zGvjkBTqf8Zx3ApYWXr3wG+QvEu2eXWfnIIWYSJExIp4V9FCKDEeygzkYrXMw== } @@ -18099,6 +25463,10 @@ packages: resolution: { integrity: sha512-XxNdAsKW7C+FLydqFJLb5KhJtl3PGCMmYwFRfhvIgxJvLSXhhVI1zM8f1qD3Zg7RCjTSzDVyct6sghs9UEgBEQ== } + "@vitest/spy@4.1.5": + resolution: + { integrity: sha512-2lNOsh6+R2Idnf1TCZqSwYlKN2E/iDlD8sgU59kYVl+OMDmvldO1VDk39smRfpUNwYpNRVn3w4YfuC7KfbBnkQ== } + "@vitest/ui@4.1.4": resolution: { integrity: sha512-EgFR7nlj5iTDYZYCvavjFokNYwr3c3ry0sFiCg+N7B233Nwp+NNx7eoF/XvMWDCKY71xXAG3kFkt97ZHBJVL8A== } @@ -18113,6 +25481,10 @@ packages: resolution: { integrity: sha512-13QMT+eysM5uVGa1rG4kegGYNp6cnQcsTc67ELFbhNLQO+vgsygtYJx2khvdt4gVQqSSpC/KT5FZZxUpP3Oatw== } + "@vitest/utils@4.1.5": + resolution: + { integrity: sha512-76wdkrmfXfqGjueGgnb45ITPyUi1ycZ4IHgC2bhPDUfWHklY/q3MdLOAB+TF1e6xfl8NxNY0ZYaPCFNWSsw3Ug== } + "@volar/kit@2.4.28": resolution: { integrity: sha512-cKX4vK9dtZvDRaAzeoUdaAJEew6IdxHNCRrdp5Kvcl6zZOqb6jTOfk3kXkIkG3T7oTFXguEMt5+9ptyqYR84Pg== } @@ -18376,6 +25748,10 @@ packages: resolution: { integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g== } + "@vue/devtools-api@7.7.9": + resolution: + { integrity: sha512-kIE8wvwlcZ6TJTbNeU2HQNtaxLx3a84aotTITUuL/4bzfPxzajGBOoqjMhwZJ8L9qFYDU/lAYMEEm11dnZOD6g== } + "@vue/devtools-api@8.1.1": resolution: { integrity: sha512-bsDMJ07b3GN1puVwJb/fyFnj/U2imyswK5UQVLZwVl7O05jDrt6BHxeG5XffmOOdasOj/bOmIjxJvGPxU7pcqw== } @@ -18386,10 +25762,18 @@ packages: peerDependencies: vue: ^3.0.0 + "@vue/devtools-kit@7.7.9": + resolution: + { integrity: sha512-PyQ6odHSgiDVd4hnTP+aDk2X4gl2HmLDfiyEnn3/oV+ckFDuswRs4IbBT7vacMuGdwY/XemxBoh302ctbsptuA== } + "@vue/devtools-kit@8.1.1": resolution: { integrity: sha512-gVBaBv++i+adg4JpH71k9ppl4soyR7Y2McEqO5YNgv0BI1kMZ7BDX5gnwkZ5COYgiCyhejZG+yGNrBAjj6Coqg== } + "@vue/devtools-shared@7.7.9": + resolution: + { integrity: sha512-iWAb0v2WYf0QWmxCGy0seZNDPdO3Sp5+u78ORnyeonS6MT4PC7VPrryX2BpMJrwlDeaZ6BD4vP4XKjK0SZqaeA== } + "@vue/devtools-shared@8.1.1": resolution: { integrity: sha512-+h4ttmJYl/txpxHKaoZcaKpC+pvckgLzIDiSQlaQ7kKthKh8KuwoLW2D8hPJEnqKzXOvu15UHEoGyngAXCz0EQ== } @@ -18464,6 +25848,60 @@ packages: resolution: { integrity: sha512-Iu8Tbg3f+emIIMmI2ycSI8QcEuAUgPTgHwesDU1eKMLE4YC/c/sFbGc70QgMq31ijRftV0R7vCm9co6rldCeOA== } + "@vueuse/core@12.8.2": + resolution: + { integrity: sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ== } + + "@vueuse/integrations@12.8.2": + resolution: + { integrity: sha512-fbGYivgK5uBTRt7p5F3zy6VrETlV9RtZjBqd1/HxGdjdckBgBM4ugP8LHpjolqTj14TXTxSK1ZfgPbHYyGuH7g== } + peerDependencies: + async-validator: ^4 + axios: ^1 + change-case: ^5 + drauu: ^0.4 + focus-trap: ^7 + fuse.js: ^7 + idb-keyval: ^6 + jwt-decode: ^4 + nprogress: ^0.2 + qrcode: ^1.5 + sortablejs: ^1 + universal-cookie: ^7 + peerDependenciesMeta: + async-validator: + optional: true + axios: + optional: true + change-case: + optional: true + drauu: + optional: true + focus-trap: + optional: true + fuse.js: + optional: true + idb-keyval: + optional: true + jwt-decode: + optional: true + nprogress: + optional: true + qrcode: + optional: true + sortablejs: + optional: true + universal-cookie: + optional: true + + "@vueuse/metadata@12.8.2": + resolution: + { integrity: sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A== } + + "@vueuse/shared@12.8.2": + resolution: + { integrity: sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w== } + "@web/browser-logs@0.4.1": resolution: { integrity: sha512-ypmMG+72ERm+LvP+loj9A64MTXvWMXHUOu773cPO4L1SV/VWg6xA9Pv7vkvkXQX+ItJtCJt+KQ+U6ui2HhSFUw== } @@ -18683,151 +26121,146 @@ packages: webpack-dev-server: optional: true - "@wordpress/a11y@4.43.0": + "@wordpress/a11y@4.45.0": resolution: - { integrity: sha512-AWNmSi+Cjx5m03JhG/XjDqgRufqCFcIpYddWw7/0vR6rMk/DK5O+Jx6yJcJOwgmz2KFSgjMnjFfqbh3EtX8rRg== } + { integrity: sha512-KOgdBsZP34nAi+UfrhIAZDt2I1ZDb3DXAgIeQk7QxTIc9OlQKMNfrYwPG0jidgfKwmjFxh8vV8HbZcBzTD29Rw== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } - "@wordpress/api-fetch@7.43.0": + "@wordpress/autop@4.45.0": resolution: - { integrity: sha512-1Tetm4VIEKDIwrCsvDY0KjjrHvkEaSa2Qvld5gguY2ofcIszL3mR0tGezFaaaB14FHd7Zl0MpfpQY3KeQ+BatQ== } + { integrity: sha512-BJAdQOVqMC7t5cTWxD7Q8P+EWu3JopXD/yaf0Qc6tuFzihngIDvV9Ck03jGY4uXJVeO5SXNqARmU1JFn8YHNcA== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } - "@wordpress/autop@4.43.0": + "@wordpress/babel-preset-default@8.45.0": resolution: - { integrity: sha512-ODEGv8CZmL12DRKyYCCUXwTHS8aI2/K1C4WuVLeQ5uhPmFk0QHAHQ2sGga509K9F0Nj/DY7fgkD0YlE9T1stbA== } + { integrity: sha512-xlrFFf8bsVDpOjzDW4dwkY8w040YupOIeRSVPB1FJyHBae8ObR+p2siM6E8/DrLNuDznudYoUFRnojYQ16ImjQ== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } - "@wordpress/babel-preset-default@8.43.0": + "@wordpress/base-styles@7.0.0": resolution: - { integrity: sha512-L2EOVoc0EXlz/QJRW1KuJxiKtVntD5bqFzMTizPmNdwr6BIyVOWs7mDOCldTTCKcYcLSGMbTFj7F24rKNC4Cmw== } + { integrity: sha512-Q0BbZzfeYbQZKHnyNT4RF8RGVugN5jStGtpRKhBYQW7ut7sS61LbbpP7jR0D0sDPYoEEC8jKZQSZwSM23B4jow== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } - "@wordpress/base-styles@6.19.0": + "@wordpress/blob@4.45.0": resolution: - { integrity: sha512-SAZA6dhfC5X00s9PRrL9diY59WegiF0MuAWupkoKnYk3a2IAQbRUUTrh3j3wRyr08ljqefmifX5GR3hz/VwQaw== } + { integrity: sha512-B/3pz4aF/0lTdn7uZd6PXS5FEtBXeVS9/CLm9ECE4dtyqKPIvpMcDcLdTv4QfQeu7BoObV1KIpGIbrflyJvcQg== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } - "@wordpress/blob@4.43.0": + "@wordpress/block-editor@15.18.0": resolution: - { integrity: sha512-wNYpE1DMabI9wDIVBcwsakbnVnvskAj0eJ+7A1njEdmJFYEQ0wc6kTqJ6ma4pLYYPrgw2svWl8vI3HIIB50qhg== } - engines: { node: ">=18.12.0", npm: ">=8.19.2" } - - "@wordpress/block-editor@15.16.0": - resolution: - { integrity: sha512-gTTsrN3F1uWKmzOldi4t+IbbSbF/oEd/mxyhjZvvZ0mJV6cQM2q8q3FuWEx9mlqh1jsnh+ycuc//L556KXdIHA== } + { integrity: sha512-g1sMgapiMonuDenMK9HC6klS94SrmUsZafsd7iCI2txlZxml6QKPHIVfpk+5WW9xowEAQIteZclNflHdeYG8vA== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - "@wordpress/block-serialization-default-parser@5.43.0": + "@wordpress/block-serialization-default-parser@5.45.0": resolution: - { integrity: sha512-1P2eujRuY9VmhFT8Kp7hghxbxbw6dIcHWGLlo/V3YVaHor1WZ3P5p6k+ELQRJTyrbWYV+qu/zYWGYCGGDtEvsA== } + { integrity: sha512-48Pj6o9iDGf7fCprXoXD8nvDgBigrQ6uZEb+VMrcvabn59ymKHzx/Ex9O3mpp7Ft2NMJRGpO3w0mNocoDfCksA== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } - "@wordpress/blocks@15.16.0": + "@wordpress/blocks@15.18.0": resolution: - { integrity: sha512-vyr87vwJvDErB19jVsBscpTC/x4+VhNGXGel4zawY3CdbyfBIHZrrdiOTjwwUnijLVspkv0nWkiUtYIxWP/SMQ== } + { integrity: sha512-orpiOWWmG9qdacqMC4WIdHgZRJNLLmCqTLj/5HQcBAfOXjbUQcjOj6f4lZx9HS89kJ350KJOkqWVPWrZoJE9og== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } peerDependencies: react: ^18.0.0 - "@wordpress/browserslist-config@6.43.0": + "@wordpress/browserslist-config@6.45.0": resolution: - { integrity: sha512-W6Htq0S8g9RE02zwIB4HgbxwFeL9tijIleAIjp3pMuodP6ReRcWjvOX9O3DyfaRKrhl7JCFhT/M1RkKK3hQnYg== } + { integrity: sha512-iSRD/0bxD9PUHWssZN1zZa+xZ2E9FtpgNYKeceTPLKV3rd+rRPqI1h2a2iHboLzex80c1vaxe6eQ9kyZQfGtiA== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } - "@wordpress/commands@1.43.0": + "@wordpress/commands@1.45.0": resolution: - { integrity: sha512-oD2uurR7HYgQ3lXhukcWX0/mc+PHEFEfB2lu/mi5IvX8xYMV8e/l/uoP6BJ+Krm7EqtOkSwoaoGi6KcYoR4sMw== } + { integrity: sha512-R71ZtwwqEkrQ/098HyiOeYq7Iu13770BroqtuTjBkNY2tWIR3WNUnMlK3UKDO70QhPtkLZaoz79AWKRCfVUTnw== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - "@wordpress/components@32.5.0": + "@wordpress/components@33.0.0": resolution: - { integrity: sha512-UEBNEqxHfOvTVbVepoLPS2wSzIjcZoCHMv6P2iN0om819x3aLIKAZqpxjNF8x0nz2z/gnj5Bj9GpXTW0+Bvfcw== } + { integrity: sha512-VeLDtfz8612bdRqgQiSMtIIEGDi4ZByj0XUvjT7E6RVLgczQyV9DTpGOPyL6PbTyAluIx6hjt9bzsaC+bM6G+w== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - "@wordpress/compose@7.43.0": + "@wordpress/compose@7.45.0": resolution: - { integrity: sha512-soLT1qavMSyIP/n8Bd+nWRvhZpQVf5YqqjB/ibTGHU8782oaV6Qw2fd6SVXL0kx6/3YzC9FHTPy69v5gxuM6XQ== } + { integrity: sha512-/keWdRFUe7bnzh2ZtOYLexknpj0K0G56WFw7RLZehl54a9EmzjYjAODBOF9DB3c07pJuNuy7c5QgqMPi0cqLlw== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } peerDependencies: react: ^18.0.0 - "@wordpress/data@10.43.0": + "@wordpress/data@10.45.0": resolution: - { integrity: sha512-LKjxBrub1qkMm8Oyj6ynHAGix5eJcJqN9Pq0aX9UYLPjc1T/zkhhAopFL7It2S4muKMNcAHizR+e1eZNA3k4fQ== } + { integrity: sha512-OR/uMpcEbCh1aBkbzateXffNrL829M+N92qtuD+Gt08Mey129WIEVR9kBC2Tf02VtXs644OKZD6cz77KlxH8XA== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } peerDependencies: react: ^18.0.0 - "@wordpress/dataviews@14.0.0": + "@wordpress/dataviews@14.2.0": resolution: - { integrity: sha512-DTfJiwNL+Yt60P4BmLvYLjpd/QeOmJJry/DRdMqcPyt6w98rRFwr32hcbn0FwVkADJXmW8l2Y2vczf01StnZJw== } + { integrity: sha512-jTsXH3fDEQbvtK7N/giZJtE/NdDYN/LOlf6dkbfh89GyJmvwuikQZjpX10DexqOjc8AcNPUd1hU2b1sL8d99HA== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - "@wordpress/date@5.43.0": + "@wordpress/date@5.45.0": resolution: - { integrity: sha512-8DiFlE7YzP7F/P59Hr6h5fWJxJlvt6eZgU1C7huM9XhANh8Y3dZfepsySL6K7h1yE66SQDSq07cEefFQgJW31g== } + { integrity: sha512-34v3hCxn68kYzWs8bhuAt8cfMxdFX9ukKn3a3FB+tAJXpxafnPCcZoWfJHn4I8hepCbreFrf3UiGdA+id2kQ4A== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } - "@wordpress/dependency-extraction-webpack-plugin@6.43.0": + "@wordpress/dependency-extraction-webpack-plugin@6.45.0": resolution: - { integrity: sha512-4u7AvCEISGv9Q/sLHnV1+msZMKvHrDJ+R52Ezn3x2chIiOWFZWvr109BctwyUxvcn6SZgz9l0Ag88ffzdsjbqA== } + { integrity: sha512-x/CvPKJXe53/ff2R9oj0IwAjshSlUFAxq47BXkb8HKMXD1LJTabQKT1dfDJXj3BeUpERxsZ1ltOmQ6Q8GblGAw== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } peerDependencies: webpack: ^5.0.0 - "@wordpress/deprecated@4.43.0": + "@wordpress/deprecated@4.45.0": resolution: - { integrity: sha512-Pxn+nUmCVAaKBiZun2tEVweVdevMvWFWyCRqIqsAKdWCLsD8Uk6o27EwXc1u8BlO65VmK8D2zF9uWKGKfdZbCw== } + { integrity: sha512-qer/fk/lgmmisb8/hj1xZtsbJbZhCoOblhyxI2k7RRul7rQDdk+fm28LJYV+eIF0ldSVX30f4dmz1pvcVHQEEg== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } - "@wordpress/dom-ready@4.43.0": + "@wordpress/dom-ready@4.45.0": resolution: - { integrity: sha512-Y3oNeAdVzw9tACCgL7HuimhpSlhdU5RfRGtLp2kgewWHl5I6tzfi7XypG7FdBmS+dI+j2SaYYdTNPen/kFsZlA== } + { integrity: sha512-0lFImpg9DGXcGCDQePdoU8haz7QYsKOFXUMTpRvi/Te38LFXzgZtOUBQbY8fRBlLxrgrj4FsAIc7bzdLn73wNQ== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } - "@wordpress/dom@4.43.0": + "@wordpress/dom@4.45.0": resolution: - { integrity: sha512-OxPYbiwW3sCXmImkDjV7TMkoSG3wCB8mA5FQ4cBcXx1ZYjfHn3ZUSSJ7wwb52kJ6dNJ5p8dFNroy7dk8PVtwKQ== } + { integrity: sha512-6RObr/KEZS1FnZwpcDAsKlJ3qw2KLF5+A/LsxlM9fSWDGSO05CEaTp+VmWgx9pwjQWbPEa7N73ijEy8cCNSZWA== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } - "@wordpress/e2e-test-utils-playwright@1.43.0": + "@wordpress/e2e-test-utils-playwright@1.45.0": resolution: - { integrity: sha512-suQCgtDVLRnGhdD7yWUVOTCGefW5perb0vTwQqWUbc/JyCdGnEztvGvpINXs7LV36U3YX7MYPEimCCcJc5frJA== } + { integrity: sha512-2hqpRI6J8UcDyP1ObSCGP2lcc2VG15AyG/DwnzMdpgIUC/1zNvQwD9eNlyvHAISgnQ8m41aifE0FVtx5BTLuRQ== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } peerDependencies: "@playwright/test": ">=1" "@types/node": ^20.17.10 - "@wordpress/element@6.43.0": + "@wordpress/element@6.45.0": resolution: - { integrity: sha512-eUWSBXnwO2y6ejg0RsZUnAk0E+tnuuCbCReZsZAgGJZykqek1Rt2hqxtvLZXPyuqzOR2XcR7k4hSf5l5BAJbhA== } + { integrity: sha512-WFrGNPEnj8uE+XhFW9NVbxvqraYpConaEokLv9IszFYVfyg8juXSQcHOAfEnxjC08HBPfVcayr2igu/XUgGOAw== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } - "@wordpress/escape-html@3.43.0": + "@wordpress/escape-html@3.45.0": resolution: - { integrity: sha512-Mo6b0y1vEnj/x7MVp+pe5IYYLs2X5ke5spuncrReO2Qb+iXw/d7694kpMGHyIVzBPj3ekwxEYezirW5OQrppOw== } + { integrity: sha512-IW4mnA+65XKhABuBkwrQNAlbq97luC6ZIBfdSq0Tkq+AFPqE1lJTMlLo7iBkTpsHsBLyznViPXultq40fz8L7w== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } - "@wordpress/eslint-plugin@24.5.0": + "@wordpress/eslint-plugin@25.1.0": resolution: - { integrity: sha512-Kd6DReqgLib710txDLFhhktNOFBYzR3Tv4hgeNJ4S3JGpflrq6Cvoku7SL3wBbugddF/1u6dF1B5+0utX0nwdQ== } + { integrity: sha512-tZVfrpAZoUNQ2A03XA8nVgfejb5lINPZUvbZcg8ZlTB4Bf58daLx5XOw3zIH4ubdS+t4paRslgrdnbCCpqX4Zg== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } peerDependencies: "@babel/core": ">=7" - eslint: ">=8" + eslint: ^9.0.0 || ^10.0.0 prettier: ">=3" typescript: ">=5" peerDependenciesMeta: @@ -18836,149 +26269,149 @@ packages: typescript: optional: true - "@wordpress/global-styles-engine@1.10.0": + "@wordpress/global-styles-engine@1.12.0": resolution: - { integrity: sha512-vlvboNnpCZwA5rWC5ptGqY/IzkQ8Hm3xpKtpdKsOXrIhVyXMpQudtW8H6cB7zIK4eTX84pq6yfhGyo6lJUdUSQ== } + { integrity: sha512-4RWpN50E9OEhd3nBP9CXOc1gybSCFulDzqHQLHkNS9iCPhpn7J3tE32XcCVVMHis9atO+PAktVKkWiPzQf+0Qw== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } - "@wordpress/hooks@4.43.0": + "@wordpress/hooks@4.45.0": resolution: - { integrity: sha512-BY7GPjEwhOlgkavVak40E3RtA8Z9ehydqTZckRoesMRjXYfxKSzr1C1FT4wAPS5uXM1pNlWivfofMaJjVNQu5w== } + { integrity: sha512-+gOlu8TdohqL1INQNxS/7CxhM4T4MuYnKietWV9zWDmNQV2ysM0SdamNk5pWERJ4w0yY9XhtMBcwR/piJtePZg== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } - "@wordpress/html-entities@4.43.0": + "@wordpress/html-entities@4.45.0": resolution: - { integrity: sha512-z7C782VfH3E5dWYO4VOtN8EEhzfID2kiJmGTINiVPD8kywxp5BsBU2KJSSPvkUjqOCMNJ2XhkYPgADKi9O1U7A== } + { integrity: sha512-7W95xaOv4UgMSWlEmyO7YkBsUae3QlQu3GKENVH7Pt/osbJGSPInAJ1ruO4oeUwGPygWOL7b7IzRsgTNP0M/Wg== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } - "@wordpress/i18n@6.16.0": + "@wordpress/i18n@6.18.0": resolution: - { integrity: sha512-D8yiDLzOrs9Aa4Cc1nm7m2OMilZeG9Qd7zHauMIDQujwHOe9xrOyH9ppDDko6AAWb+GeUYsf5zf2Efu5saLq0w== } + { integrity: sha512-6dYCih4wUwi7Csu4RNfHiAKkgWhpSQdl8YthvQUF59Sfsoia3RCdtd4K2l7W4f18ldFA/RXjShMjvSexWy6OyQ== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } hasBin: true - "@wordpress/icons@12.1.0": + "@wordpress/icons@13.0.0": resolution: - { integrity: sha512-JOEVd94kZQsGYyLhjq1edfaMOTPON/7qUDuzT74uSwSCJ6OiHf3yJHfxMlLOMoh12dQshWPciLVLagkYLCldag== } + { integrity: sha512-+CLbvNdzMUHxQK5I6gFdHb3X6EVAH6SOSIj0xtMWm6PZO+Nnf7tXHfNBuxqTnGfxT5grtfb6D3A9ZMBU+Tpv+Q== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } peerDependencies: react: ^18.0.0 - "@wordpress/image-cropper@1.7.0": + "@wordpress/image-cropper@1.9.0": resolution: - { integrity: sha512-yVY8+V39Jv15HDIAFOLP7wjUeacX5Ws6Tu7bIijak92i0nYfi190u93PS1bIjBWqwLZMh+jwdNu0qS0LHwylBQ== } + { integrity: sha512-cHkLNS/ePQIAAOnQy9lgaAWzLjDGYHHkziHXq/EOLN75FW0mxj6nmsHoa5N5YebKEVAeqc7UfyRNNp0Bbflsig== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - "@wordpress/interactivity@6.43.0": + "@wordpress/interactivity@6.45.0": resolution: - { integrity: sha512-v+7isar/S6XECBF3NbRr3+PW8lSGo+c8nt80NHqb+LIPQmG6/0xZ7GourL7OZLkY1cRSSqvSokV6zwQ2kfmRhg== } + { integrity: sha512-QL/ANMn1lO+O+E/hxHtzE3yMx2mB2MxfKwN24f58HiVgKQ8ufUSYwcZfH2gLY+n9MfDoKbnvtkSpsEdL6I7y3A== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } - "@wordpress/is-shallow-equal@5.43.0": + "@wordpress/is-shallow-equal@5.45.0": resolution: - { integrity: sha512-KHm4AXUXz+a30RR/bb7gQjwUU7XL5m068BAo3MC2idQXPmYVvq4zooaiVogRvX95R/kOd7m+Au+HLftXPxu77w== } + { integrity: sha512-saamGjAuhZOiFOyznsriPGrO8GRDremImMO4q92qjQqmDqssC+FRDQnwr9D8BaedSnVvUDcriGeYBObEEnIJ2A== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } - "@wordpress/jest-console@8.43.0": + "@wordpress/jest-console@8.45.0": resolution: - { integrity: sha512-cKkbZGXAwRc9GkQ6U0QQs3aa6N/dV/F6QZdMdcObb3cg+jXSw1N6k86Q5ZFSlpzYXrBgqNl3I59xq1cRifAA4Q== } + { integrity: sha512-5hB2D170aZdYpXganoI4UXvfUEAchpqvICaFjkKteSF3IY60k27GAKBY5hYBNsGkICV2CF2sEHuAO/fYRKhuuQ== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } peerDependencies: jest: ">=29" - "@wordpress/jest-preset-default@12.43.0": + "@wordpress/jest-preset-default@12.45.0": resolution: - { integrity: sha512-PY5HoTa5oQ+oIzxh6f4J9h0P1mqNDC0MoJuLGaw4/Yu+zBSvQuW67B9D29pQcSuLsLMtaR6R1Um/HmU+M//3rw== } + { integrity: sha512-8esXkIgiMi1mQ2WCCieb9/ZU51GQY9mTfPBe3VhIaxvLXUQwhBnw8ytyW1VS+t/pk3H305BA9fW+hNlMQrzElg== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } peerDependencies: "@babel/core": ">=7" jest: ">=29" - "@wordpress/keyboard-shortcuts@5.43.0": + "@wordpress/keyboard-shortcuts@5.45.0": resolution: - { integrity: sha512-JJThUTTiJZgzzOIYHgK5CHPHwD6plK1O45e/0RpsOEe4vLCuLH0RoVAWoy/9Z4jIxXLGbwE5WdJIQkTStf+KMQ== } + { integrity: sha512-icOA81P50p1xe1LmK2epxmpXrKrq0BYrrUjDOaMQZbH+giZfGvMyvt47bvNVuZqg6BBzTLqZ4X8PUFcCiO6osQ== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } peerDependencies: react: ^18.0.0 - "@wordpress/keycodes@4.43.0": + "@wordpress/keycodes@4.45.0": resolution: - { integrity: sha512-1F0BS9qGwYFGgMgzXFSSoBdVGqpU1mCA9UVQ1wJxi/qTMIH+sQcvD8KGoSMJLvTDjbiFc4axLilYOL7DJ0EG/A== } + { integrity: sha512-N+Wp572xZovLM45cYo6HfUNTQNDfEqakAYIOcY8bUqA2iFelN6AUkNfUIkIxmrE0EqkQAQ5odES03g8ym7e1IA== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } - "@wordpress/notices@5.43.0": + "@wordpress/notices@5.45.0": resolution: - { integrity: sha512-EvYerIJQ9wc5tT/ibfKhqP3Ja75JJpcSUc11zaQECdTpG3leXGIsUBgl9GDFbd70GpDj1ZCU7NmVcTYl+y0b7w== } + { integrity: sha512-V0uRC/zMktet66jdICkr9iuZsLV2vEY/LhuWNFaJ3veIdLMBZ5EIMYwiLOGA1DagtDll0vi7/ab/xXVij7vK/Q== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } peerDependencies: react: ^18.0.0 - "@wordpress/npm-package-json-lint-config@5.43.0": + "@wordpress/npm-package-json-lint-config@5.45.0": resolution: - { integrity: sha512-W98SP/WpGaQ9VziO1Ez88J5Lhr7l63d44RWtANueHvAndCMm2E6PgVSQTMEKUzimWI+RqQlY8AcHBx1DPyacxA== } + { integrity: sha512-0SrEJxgEuxSpVwK8Fr0NfoPAuA+m00O7WXp7icAsGsZ34I5PaHH3Vt++ddL4GIU56bUTmHIqik9VaKDKydFr4A== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } peerDependencies: npm-package-json-lint: ">=6.0.0" - "@wordpress/postcss-plugins-preset@5.43.0": + "@wordpress/postcss-plugins-preset@5.45.0": resolution: - { integrity: sha512-BlyQK1nb5TK0wLqnBiHpaz1ENngpZR8vf6gv3g2KCLstXJPl9WkM2g6GvKaDBOjodzVnGM2xs6tqlBlvfjKYxw== } + { integrity: sha512-9uoIZAyNFNefuQnPrM5mJjLF2u5LUPBvnU4Evr1mLLeKIOB6SRmd50lxIsahI1k4Dlh63dh5ztmOK1y/fnTrJQ== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } peerDependencies: postcss: ^8.0.0 - "@wordpress/preferences@4.43.0": + "@wordpress/preferences@4.45.0": resolution: - { integrity: sha512-di93xiAo2IT0lnAzV6J+3d+HB1vkOKs3eAfo500STGx10akGN1NgOqSmu6O+tdzlViLzz8q1mkIZ0j3KraKkPA== } + { integrity: sha512-ZM9W7T05NeVOLc+4WhCpFsCUb6r6BqBYvWgK7KCpMRVnvYqUDAqzh9HuuTFfiLabotOJm2Hpm8G1M+iqIEehvA== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - "@wordpress/prettier-config@4.43.0": + "@wordpress/prettier-config@4.45.0": resolution: - { integrity: sha512-l52vxzgp61vfWq6fLIbAZl2efFMbEQ+BLGoekcyHw7h0rmg3u6YWTPdRRnzIfKAkSiArF8K80uvJ1eHYWiTMUg== } + { integrity: sha512-Tj8wdH/+uwFOYbyhaQKrfe9WjtCnmGEoOi2i5zQ5KF3NgrdYgfv7ADMnd/fMW2vffxWAZvGjelvH1jybhY6XJA== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } peerDependencies: prettier: ">=3" - "@wordpress/primitives@4.43.0": + "@wordpress/primitives@4.45.0": resolution: - { integrity: sha512-lU1vBSDyRkAYFEfbLyzjophDvIVCeQ7uuEXv5dBAbxkSLSsCcX6oLbWSwjkCEHp1R+9UtukLvbmXDdAbDYiEOA== } + { integrity: sha512-x+i6EKUvz96EkUb2KuBTLNGm8d5+ZS0FYjUEnIhp5dtWxjMe8dJT6LS+n363vg+K28LVvjptiTAaByccnNKc9w== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } peerDependencies: react: ^18.0.0 - "@wordpress/priority-queue@3.43.0": + "@wordpress/priority-queue@3.45.0": resolution: - { integrity: sha512-sWQ3ibq7/I/Ta4oLDORKLfROcc01CYSUU1t35kxcMUna4I9u5O3gpVp6dAfKAllNPmd2Wn/yVnpFCG4Pu/Q7Ug== } + { integrity: sha512-0sIX2PRPzo5nk252f60xpPj3/BUZxEOLcabCC7FuvQDYPGZrRyS6Dy0vDDzozZxHGuUYCT65t8ubBwXx37wXCw== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } - "@wordpress/private-apis@1.43.0": + "@wordpress/private-apis@1.45.0": resolution: - { integrity: sha512-ADZB20UjyQgdL43uFkFE9tm49URMRphydi+ngaxbAJnT/3n5x7WSzfXMBqrdQOuBpdy44O9yHz7JtzLXRapkjQ== } + { integrity: sha512-UjhIDpoyKKUghPM0tkqd5Whsuk4kqfAfhb5VYGoEYtunDs0rB8IxgFO7hE0PhimHL74QVgaJOlprRZVRCCoQ6w== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } - "@wordpress/redux-routine@5.43.0": + "@wordpress/redux-routine@5.45.0": resolution: - { integrity: sha512-3QIt7jBhhwhE1AybMeYfeo5Vj7Rn+7l7QBYiqXiWHWBYGEJtI0VXiEjcC34ctTZKdVGBPvYJZUhBbNHOjLtgMw== } + { integrity: sha512-6ShpBns4jIBFXrYFBcKA5pnFm/kjr1SqFvLj5DwLgMV61eI3Rr9LyZwIzNR2BGg067ryxu4W172Uqjke/mZjcQ== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } peerDependencies: redux: ">=4" - "@wordpress/rich-text@7.43.0": + "@wordpress/rich-text@7.45.0": resolution: - { integrity: sha512-qoCnzUFZVfWLg7iuaqVifPO+y92gRWX+yz3ILKFxxduTHc1Avy9woNsy3nLaS6xgQhxYIUjEgb8jFShb3eR3OQ== } + { integrity: sha512-C5+JQqNzA3fiQq0hN9pQPKsjcwO/fczouHqubq3847kAUrClROqqI1GJHE34WLl1Vp+/tWQuBkIjQ/95olKteA== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } peerDependencies: react: ^18.0.0 - "@wordpress/scripts@31.8.0": + "@wordpress/scripts@32.1.0": resolution: - { integrity: sha512-cV/P5YDB6HZaY2JxdXu5pT1mwH4QG47WA7N91b+fTwOM6o4Jmk2///70bDkYaDOpd9hUlaesdisjP/c4DhriIw== } + { integrity: sha512-sxtibypx47GdibpWFaeAjHXLevcwNyNA0qu7fBUTFt+vgBPxAdx2FIhvg7m7eWjVx6Zr5xjgXQWUE5cFrBpweA== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } hasBin: true peerDependencies: @@ -18990,27 +26423,27 @@ packages: "@wordpress/env": optional: true - "@wordpress/shortcode@4.43.0": + "@wordpress/shortcode@4.45.0": resolution: - { integrity: sha512-mSpGnX6Wlzd8wx5GED2D188Mxvtc2FrflDPI39Tlysz4OW+9PNAKueRzvcQ7QLwZhIzaDQ8pvonyal5i8PryIQ== } + { integrity: sha512-lHuE3BOOV6hWieDCW0pRUk/jP+qEKjhZs/G5EAko5t7IcNmaihmBBos8RpvZDEzkK8CoH8vfoAQAmYW0xP146A== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } - "@wordpress/style-engine@2.43.0": + "@wordpress/style-engine@2.45.0": resolution: - { integrity: sha512-pP+HHwq8Rbv2vfXBO3aMcybxQnjX7nKqELGMzHDT3s3oRH8cyFzuuVbvkDTlfAF//MJx+Jg+zUzBFQu1mQfbeQ== } + { integrity: sha512-TQZbdLiDsQL1EATq4HKkmKCn99+l6eK3fmBpwOgXeOscQB9ta/Na64KYLoilZBuXnAelmFOXsWpz0c8ijRRniw== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } - "@wordpress/stylelint-config@23.35.0": + "@wordpress/stylelint-config@23.37.0": resolution: - { integrity: sha512-rBgpD6St0tJZpX5OSipeZ8oAFRU3hQZAfF1BT+DTU+O821YWtwYYiUsIA/z7jCCfL4gUuNA9/ndIAffKMQZOtg== } + { integrity: sha512-1IYD9qro2/+h8+jGosIFzxQtjEEyTT7t679LzzoWdeWX7kacnIdDv4QZzK2JAzW+PaZit3cnZQgqxZvgBoXk4w== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } peerDependencies: stylelint: ^16.8.2 stylelint-scss: ^6.4.0 - "@wordpress/theme@0.10.0": + "@wordpress/theme@0.12.0": resolution: - { integrity: sha512-U8CaRvGzeQtFfGQFsKarcbzPEH+jfXJmpOlIpt4bq2goW9CgeWFlDC29p0oyzoMn1Ga9hX+c8ay3nUgSbhmSSA== } + { integrity: sha512-AmEVO0B+kI9tsxkLnna/S+7yi+EPCMTuaPqagje7pnlXeDfykVQfeDeWJfU+QvhcqHXCySn89vvw1Ihep0rj7w== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } peerDependencies: react: ^18.0.0 @@ -19020,65 +26453,66 @@ packages: stylelint: optional: true - "@wordpress/token-list@3.43.0": + "@wordpress/token-list@3.45.0": resolution: - { integrity: sha512-hNbN9Mrt2F14BguLVxQ2AtoO1gTTZtOuKJJ7D4c/fHCNh7QiSV03A/Zc629WIPIfgfIt4diASMVQpJ3hvKaUbw== } + { integrity: sha512-4BT2u4/M88h7IvoLC0yswbOPpf7UcsKWh7XXdsDdQc3aWJ1q6dDZB7jQ7tJ8WGQGgztKMcweo3bkZULgzJkECw== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } - "@wordpress/ui@0.10.0": + "@wordpress/ui@0.12.0": resolution: - { integrity: sha512-HnS8/yCxcgpoVOw0ssiKjFa0WfGbC3BDYeDaitE9iLPOUtk1YxuuljKcXt21T6BZvtV1f/8SKhIUOqTwDMWo2Q== } + { integrity: sha512-n/xfyagM90CcikLtlvNcjsFZtpt1wTpboOZPyCp9wqF6akAyJ4SUg9hXb/UA7pC8JqGe1Dg/hXJnFn/td8pvRA== } engines: { node: ">=20.10.0", npm: ">=10.2.3" } peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - "@wordpress/undo-manager@1.43.0": + "@wordpress/undo-manager@1.45.0": resolution: - { integrity: sha512-G1hP30a1iV6QaUQ+oouUgFN2VetBVcMPmL+zD04TO1Gs0Dq+4Dgego7/GFuOPBZWO2qiuXTMJUUmi1wO6FSh9A== } + { integrity: sha512-BqclZIPjzBYIjLqLZFihs+Ce+w+yBQuj44VYSrRDOj56AbMtwmClIUqgIVBZAe2En/2ncixTTWOZG9KluvEXfA== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } - "@wordpress/upload-media@0.28.0": + "@wordpress/upload-media@0.30.0": resolution: - { integrity: sha512-t4iGWFVEObjkozYvRQ/y0j/BKpQCo3kqv2TUHkhq0vd26rse3vuFQPCxhgfJJfA1YIM8Wl726WApnhcvvj7/5Q== } + { integrity: sha512-8KjMTNY/6j0x2bQ799KGGfFhvlGP7OCw1ZGdNDK5q4y5ABDmVrv/dVPQywUavnFs5epQxG9vDXjN4lcD2rgtkQ== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - "@wordpress/url@4.43.0": + "@wordpress/url@4.45.0": resolution: - { integrity: sha512-FFq/KZUlhAszI9y232BpQ83+58CtRV5M0SFuv7pQq+DxNDuWNHp8gjdX9WOnHkO/MrKAyVTI0jX9YoWF2RNEZw== } + { integrity: sha512-Uh29Th3EEAK/6wsBy7d9hNj2UhDzV0H7cT7xi3s4uAKOUYsIx7scawZakVRa73d3z+lnAkk0lyneIQPPosFHaQ== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } - "@wordpress/vips@1.3.0": + "@wordpress/vips@1.5.0": resolution: - { integrity: sha512-ECQ8iFLRRsMI71+wkBW41+5MRUfCl8AWWOSQ4iskTAqzW2G0LpldNj0J6noX8lrq7MZkCpCRWUMPE626m9odPA== } + { integrity: sha512-BxTy86EHy3pXYkpJtMZGMhxipC2YQqN9xKDGlL3GZPIBjJ5A+/Xe3ZlVvGaQRc9qWz3ifOgMF4ElKpc6RK8giA== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } - "@wordpress/warning@3.43.0": + "@wordpress/warning@3.45.0": resolution: - { integrity: sha512-hZn++Njsops73oG2DHpjgriUkHTgk1ykvZtHEDllPSNx5Zf6S8KJ00kcToHjIj/4p1iiDjag2zSX5Yi9ySJHvg== } + { integrity: sha512-NQ9tAhPdwhfceVIzWra1rbumvgAFAEDTgZlWsX880zLiq1F8JTwBouwW6wfIhA3XLcY6Yj7cBBYLa8vnNiDZDw== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } - "@wordpress/wordcount@4.43.0": + "@wordpress/wordcount@4.45.0": resolution: - { integrity: sha512-kz1qrK57bkyoPYKFVkHln09HCUH2D4YRxMrMT02VHypwdjUQBN23R/bkzxhIy/Vl5k1yLjeYTRB2pWSYyWle/A== } + { integrity: sha512-pv81+OANhvWSkMKD6QP429drE1GT4MQnoqAFcQItJyPSMJ58sO731Xui1wWKLkrwh9s/QhokAnyo+eRasjY7LQ== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } - "@wordpress/worker-threads@1.3.0": + "@wordpress/worker-threads@1.5.0": resolution: - { integrity: sha512-V0LEupaw1AqO3BX6FtFBpVs/UYYjBkbc2u3ODl6syHT+ojRhfHahE7S+JX9z131wDwXqMFX36c/d+YS3PkMsyw== } + { integrity: sha512-X4jVjyy6k2cbXzrXN7tcqYDBRiEV8DfFGdbDJrglrA/yAtKKe4l+h/yjyEfjzMJQNcwxKmwzFnzkW0ZJQILFTg== } engines: { node: ">=18.12.0", npm: ">=8.19.2" } "@xmldom/xmldom@0.8.12": resolution: { integrity: sha512-9k/gHF6n/pAi/9tqr3m3aqkuiNosYTurLLUtc7xQ9sxB/wm7WPygCv8GYa6mS0fLJEHhqMC1ATYhz++U/lRHqg== } engines: { node: ">=10.0.0" } + deprecated: this version has critical issues, please update to the latest version - "@xmldom/xmldom@0.9.9": + "@xmldom/xmldom@0.9.10": resolution: - { integrity: sha512-qycIHAucxy/LXAYIjmLmtQ8q9GPnMbnjG1KXhWm9o5sCr6pOYDATkMPiTNa6/v8eELyqOQ2FsEqeoFYmgv/gJg== } + { integrity: sha512-A9gOqLdi6cV4ibazAjcQufGj0B1y/vDqYrcuP6d/6x8P27gRS8643Dj9o1dEKtB6O7fwxb2FgBmJS2mX7gpvdw== } engines: { node: ">=14.6" } "@xtuc/ieee754@1.2.0": @@ -19093,11 +26527,6 @@ packages: resolution: { integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== } - "@yarnpkg/parsers@3.0.2": - resolution: - { integrity: sha512-/HcYgtUSiJiot/XWGLOlGxPYUG65+/31V8oqk17vZLW1xlCoR4PampyePljOxY2n8/3jz9+tIFzICsyGujJZoA== } - engines: { node: ">=18.12.0" } - "@zkochan/js-yaml@0.0.7": resolution: { integrity: sha512-nrUSn7hzt7J6JWgWGz78ZYI8wj+gdIJdk0Ynjpp8l+trkn58Uqsf6RYrYkEK+3X18EX+TNdtJI0WxAtc+L84SQ== } @@ -19824,6 +27253,12 @@ packages: engines: { node: ">=22.12.0", npm: ">=9.6.5", pnpm: ">=7.1.0" } hasBin: true + astro@6.2.2: + resolution: + { integrity: sha512-zkne2lZU+iTZPBK8F4gbMfrw5f11bT4VXiBxcdFHcPvYyH+Hox7V1sZu97RDpvwmHi+wQ0efKv89KY5744a0jQ== } + engines: { node: ">=22.12.0", npm: ">=9.6.5", pnpm: ">=7.1.0" } + hasBin: true + async-disk-cache@1.3.5: resolution: { integrity: sha512-VZpqfR0R7CEOJZ/0FOTgWq70lCrZyS1rkI8PXugDUkTKyyAUgZ2zQ09gLhMkEn+wN8LYeUTPxZdXtlX/kmbXKQ== } @@ -19895,6 +27330,11 @@ packages: resolution: { integrity: sha512-P4w9o2dqARji6P7MHprklbfiArZAWvo07yW7qs3pdljb3BWr12FIB7W+p0zJiuiVsUpRO0iZn1kFFcpPegg0tQ== } + author-regex@1.0.0: + resolution: + { integrity: sha512-KbWgR8wOYRAPekEmMXrYYdc7BRyhn2Ftk7KWfMUnQ43hFdojWEFRxhhRUm3/OFEdPa1r0KAvTTg9YQK57xTe0g== } + engines: { node: ">=0.8" } + autoprefixer@10.4.27: resolution: { integrity: sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA== } @@ -20076,6 +27516,12 @@ packages: resolution: { integrity: sha512-B1M5KBP29248dViEo1owyY32lk1ZSH2DaNNrXLGt8lyjjHm7pBqAdQ7VKUPR6EEDO323+OvT3MQXbCin8ooWdA== } + babel-plugin-const-enum@1.2.0: + resolution: + { integrity: sha512-o1m/6iyyFnp9MRsK1dHF3bneqyf3AlM2q3A/YbgQr2pCat6B6XJVDv2TXqzfY2RYUi4mak6WAksSBPlyYGx9dg== } + peerDependencies: + "@babel/core": ^7.0.0-0 + babel-plugin-debug-macros@0.2.0: resolution: { integrity: sha512-Wpmw4TbhR3Eq2t3W51eBAQSdKlr+uAyF0GI4GtPfMCD12Y4cIdpKC9l0RjNTH/P9isFypSqqewMPm7//fnZlNA== } @@ -20308,6 +27754,16 @@ packages: resolution: { integrity: sha512-j3KtSpjyLSJxNoCDrhwiJad8kw0gJ9REGj8/CqL0HeRyLnvUNYV9zcqluL6QJSXh3nfsLEmSLvwRfGzrgR96Pw== } + babel-plugin-transform-typescript-metadata@0.3.2: + resolution: + { integrity: sha512-mWEvCQTgXQf48yDqgN7CH50waTyYBeP2Lpqx4nNWab9sxEpdXVeKgfj1qYI2/TgUPQtNFZ85i3PemRtnXVYYJg== } + peerDependencies: + "@babel/core": ^7 + "@babel/traverse": ^7 + peerDependenciesMeta: + "@babel/traverse": + optional: true + babel-preset-current-node-syntax@1.2.0: resolution: { integrity: sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg== } @@ -20398,6 +27854,11 @@ packages: resolution: { integrity: sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA== } + balanced-match@4.0.3: + resolution: + { integrity: sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g== } + engines: { node: 20 || >=22 } + balanced-match@4.0.4: resolution: { integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA== } @@ -20666,10 +28127,6 @@ packages: { integrity: sha512-apC2+fspHGI3mMKj+dGevkGo/tCqVB8jMb6i+OX+E29p0Iposz07fABkRIfVUPNd5A5VbuOz1bZbnmkKLYF+wQ== } engines: { node: ">= 5.10.0" } - brace-expansion@1.1.11: - resolution: - { integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== } - brace-expansion@1.1.14: resolution: { integrity: sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g== } @@ -20678,6 +28135,11 @@ packages: resolution: { integrity: sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w== } + brace-expansion@5.0.2: + resolution: + { integrity: sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw== } + engines: { node: 20 || >=22 } + brace-expansion@5.0.5: resolution: { integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ== } @@ -21044,11 +28506,6 @@ packages: { integrity: sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A== } engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 } - cacache@20.0.3: - resolution: - { integrity: sha512-3pUp4e8hv07k1QlijZu6Kn7c9+ZpWWk4j3F8N3xPuCExULobqJydKYOTj1FTq58srkJsXvO7LbGAH4C0ZU3WGw== } - engines: { node: ^20.17.0 || >=22.9.0 } - cacache@20.0.4: resolution: { integrity: sha512-M3Lab8NPYlZU2exsL3bMVvMrMqgwCnMWfdZbK28bn3pK6APT/Te/I8hjRPNu1uwORY9a1eEQoifXbKPQMfMTOA== } @@ -21412,11 +28869,6 @@ packages: resolution: { integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== } - ci-info@3.8.0: - resolution: - { integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== } - engines: { node: ">=8" } - ci-info@3.9.0: resolution: { integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== } @@ -21525,11 +28977,6 @@ packages: { integrity: sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== } engines: { node: ">=6" } - cli-spinners@2.9.0: - resolution: - { integrity: sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g== } - engines: { node: ">=6" } - cli-spinners@2.9.2: resolution: { integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== } @@ -21876,6 +29323,11 @@ packages: { integrity: sha512-JJfP2saEKbQqvW+FI93OYUB4ByV5cizMpFMiiJI8xDbBvQvSkIk0VvQdn1CZ8mqAO8Loq2h0gYTYtDFUZUeERw== } engines: { node: ^12.20.0 || >=14 } + commander@9.5.0: + resolution: + { integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== } + engines: { node: ^12.20.0 || >=14 } + comment-parser@1.4.1: resolution: { integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg== } @@ -22427,9 +29879,9 @@ packages: { integrity: sha512-qy9XbdSLmVnwnvzEisjxdDiLA4OmV3o8db+Zdg4WiFw14fP3B6XNz98X0swPPpkTd/pc1K7+adKgEDM1JCUMiA== } engines: { node: ">=14" } - conventional-changelog-writer@6.0.0: + conventional-changelog-writer@6.0.1: resolution: - { integrity: sha512-8PyWTnn7zBIt9l4hj4UusFs1TyG+9Ulu1zlOAc72L7Sdv9Hsc8E86ot7htY3HXCVhXHB/NO0pVGvZpwsyJvFfw== } + { integrity: sha512-359t9aHorPw+U+nHzUXHS5ZnPBOizRxfQsWT5ZDHBfvfxQOAik+yfuhKXG66CN5LEWPpMNnIMHUTCKeYNprvHQ== } engines: { node: ">=14" } hasBin: true @@ -22524,6 +29976,11 @@ packages: { integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w== } engines: { node: ">=12.13" } + copy-anything@4.0.5: + resolution: + { integrity: sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA== } + engines: { node: ">=18" } + copy-concurrently@1.0.5: resolution: { integrity: sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== } @@ -22669,6 +30126,12 @@ packages: typescript: optional: true + cpx2@8.0.2: + resolution: + { integrity: sha512-exLFEIh8XgWthEtrEq8hs+S6jxM5ZHpjQnRH6D7VU+2uAYS3amLSVOUSuirfx3HeN7WBCq+xFygHpt7l+gQtUA== } + engines: { node: ^20.0.0 || >=22.0.0, npm: ">=10" } + hasBin: true + crc-32@1.2.2: resolution: { integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== } @@ -23253,6 +30716,11 @@ packages: resolution: { integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug== } + debounce@3.0.0: + resolution: + { integrity: sha512-64byRbF0/AirwbuHqB3/ZpMG9/nckDa6ZA0yd6UnaQNwbbemCOwvz2sL5sjXLHhZHADyiwLm0M5qMhltUUx+TA== } + engines: { node: ">=20" } + debug@2.6.9: resolution: { integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== } @@ -23300,16 +30768,6 @@ packages: supports-color: optional: true - debug@4.3.6: - resolution: - { integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg== } - engines: { node: ">=6.0" } - peerDependencies: - supports-color: "*" - peerDependenciesMeta: - supports-color: - optional: true - debug@4.4.3: resolution: { integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== } @@ -23538,9 +30996,9 @@ packages: { integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== } engines: { node: ">= 0.8" } - dependency-cruiser@17.3.10: + dependency-cruiser@17.4.0: resolution: - { integrity: sha512-jF5WaIb+O+wLabXrQE7iBY2zYBEW8VlnuuL0+iZPvZHGhTaAYdLk31DI0zkwhcGE8CiHcDwGhMnn3PfOAYnVdQ== } + { integrity: sha512-+WdFoOb+fT1XNC0iPqOyLpfhLd8xVh7eLXJxPAtiXCS+YmXzGrjqVTte7+L8SZIsnJj0aFhb8LxECIBJY5TTIA== } engines: { node: ^20.12||^22||>=24 } hasBin: true @@ -23619,6 +31077,12 @@ packages: resolution: { integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== } + detect-port@1.6.1: + resolution: + { integrity: sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q== } + engines: { node: ">= 4.0.0" } + hasBin: true + dev-ip@1.0.1: resolution: { integrity: sha512-LmVkry/oDShEgSZPNgqCIp2/TlqtExeGmymru3uCELnfyjY11IzpAproLYs+1X88fXO6DBoYP3ul2Xo2yz2j6A== } @@ -23645,9 +31109,13 @@ packages: resolution: { integrity: sha512-OjaNE7qpk6GRTXtqQjAE5bGx6+c4F1zZH0YXtpZQLM92HNXx4zMAaqlKhP4T52DosG6hDW8gPMNhGOF8xbwk/w== } - devtools-protocol@0.0.1581282: + devtools-protocol@0.0.1595872: resolution: - { integrity: sha512-nv7iKtNZQshSW2hKzYNr46nM/Cfh5SEvE2oV0/SEGgc9XupIY5ggf84Cz8eJIkBce7S3bmTAauFD6aysMpnqsQ== } + { integrity: sha512-kRfgp8vWVjBu/fbYCiVFiOqsCk3CrMKEo3WbgGT2NXK2dG7vawWPBljixajVgGK9II8rDO9G0oD0zLt3I1daRg== } + + devtools-protocol@0.0.1608973: + resolution: + { integrity: sha512-Tpm17fxYzt+J7VrGdc1k8YdRqS3YV7se/M6KeemEqvUbq/n7At1rWVuXMxQgpWkdwSdIEKYbU//Bve+Shm4YNQ== } di@0.0.1: resolution: @@ -23720,11 +31188,6 @@ packages: { integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== } engines: { node: ">=0.10.0" } - doctrine@3.0.0: - resolution: - { integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== } - engines: { node: ">=6.0.0" } - doctypes@1.1.0: resolution: { integrity: sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ== } @@ -23824,9 +31287,9 @@ packages: { integrity: sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ== } engines: { node: ">=18" } - dotenv-expand@11.0.6: + dotenv-expand@12.0.3: resolution: - { integrity: sha512-8NHi73otpWsZGBSZwwknTXS5pqMOrk9+Ssrna8xCaxkzEpU9OTf9R5ArQGVw03//Zmk9MOwLPng9WwndvpAJ5g== } + { integrity: sha512-uc47g4b+4k/M/SeaW1y4OApx+mtLWl92l5LMPP0GNXctZqELk+YGgOPIIC5elYmUH4OuoK3JLhuRUYegeySiFA== } engines: { node: ">=12" } dotenv-expand@5.1.0: @@ -23843,9 +31306,14 @@ packages: { integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== } engines: { node: ">=12" } - dotenv@17.4.1: + dotenv@16.4.7: + resolution: + { integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ== } + engines: { node: ">=12" } + + dotenv@17.4.2: resolution: - { integrity: sha512-k8DaKGP6r1G30Lx8V4+pCsLzKr8vLmV2paqEj1Y55GdAgJuIqpRp5FfajGF8KtwMxCz9qJc6wUIJnm053d/WCw== } + { integrity: sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw== } engines: { node: ">=12" } dotenv@9.0.2: @@ -23911,6 +31379,12 @@ packages: { integrity: sha512-ptGvkwTvGdGfC0hfhKg0MT+TRLRKGtUiWGBInxOm5pz7ssADezahjCUaYuZ8Dr+C05FW0AECIIPt4WBxVINEhA== } engines: { node: ">=0.8" } + editorconfig@3.0.2: + resolution: + { integrity: sha512-T0ix8GhtxyKVfUFEcvdNDt3YGqlwkFHbD4/5bgFUDgFmxhI/cSRAeJ87/Sz//Cq8Eam6JX/e23RkoFO71P7aAA== } + engines: { node: ">=20" } + hasBin: true + ee-first@1.1.1: resolution: { integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== } @@ -23935,9 +31409,9 @@ packages: resolution: { integrity: sha512-IbxXrsTlD3hRodkLnbxAPP4OuJYdWCeM3IOdT+CpcMoIwIoDfCmRpEtSPfwBXxVkg9xmBeY7Lz2Eo2TDn/HC3Q== } - electron@41.2.0: + electron@41.3.0: resolution: - { integrity: sha512-0OKLiymqfV0WK68RBXqAm3Myad2TpI5wwxLCBEUcH5Nugo3YfSk7p1Js/AL9266qTz5xZioUnxt9hG8FFwax0g== } + { integrity: sha512-2Q5aeocmFdeheZGDUTrAvSR3t+n0c3d104AJWWEnt7syJU0tE4VdibMYaPtQ47QuXSoUf0/xSsfUUvu/uSXIfg== } engines: { node: ">= 12.20.55" } hasBin: true @@ -23988,6 +31462,13 @@ packages: peerDependencies: ember-cli: ^3.2.0 || >=4.0.0 + ember-cli-dependency-checker@3.4.0: + resolution: + { integrity: sha512-hlQRRCz2W2ZVg1l2Lz7zO0vfeYEXOYVc6hI1CUoy8mBvETauPtvo3Pi+CECUOa2kjXjyuNtclPc3ged6kNMumw== } + engines: { node: ">= 20" } + peerDependencies: + ember-cli: ^3.2.0 || >=4.0.0 + ember-cli-get-component-path-option@1.0.0: resolution: { integrity: sha512-k47TDwcJ2zPideBCZE8sCiShSxQSpebY2BHcX2DdipMmBox5gsfyVrbKJWIHeSTTKyEUgmBIvQkqTOozEziCZA== } @@ -24081,6 +31562,16 @@ packages: { integrity: sha512-SB9NcZ27OtoUk+gfalsc3QU17+54OoqR668qHcuvHByk4KAhGxCKlkm9EBlKJcGr7yceOOAJqohTcCEBqfRw9g== } engines: { node: ">= 0.10.0" } + ember-eslint-parser@0.10.0: + resolution: + { integrity: sha512-oq37TDYDBqR4fTGhJy/Yecw5VHlPJrSCd26KkwCKlhzAHMCzac+/HSln99COihKei2mMaaob17IrV3I9XL83YQ== } + engines: { node: ">=16.0.0" } + peerDependencies: + "@typescript-eslint/parser": "*" + peerDependenciesMeta: + "@typescript-eslint/parser": + optional: true + ember-eslint-parser@0.5.13: resolution: { integrity: sha512-b6ALDaxs9Bb4v0uagWud/5lECb78qpXHFv7M340dUHFW4Y0RuhlsfA4Rb+765X1+6KHp8G7TaAs0UgggWUqD3g== } @@ -24092,6 +31583,10 @@ packages: "@typescript-eslint/parser": optional: true + ember-estree@0.4.3: + resolution: + { integrity: sha512-742Wp/Dx2g9IZFOd9+JaRTpyflptxhtdMaG7MA2nl8lZOM9zTzlD+FfT3Vx/o+CZX976ZGDBbKg/gr5WErfqxA== } + ember-load-initializers@3.0.1: resolution: { integrity: sha512-qV3vxJKw5+7TVDdtdLPy8PhVsh58MlK8jwzqh5xeOwJPNP7o0+BlhvwoIlLYTPzGaHdfjEIFCgVSyMRGd74E1g== } @@ -24179,6 +31674,10 @@ packages: resolution: { integrity: sha512-23QPJB3moh/U9sT4rQzGgeyyGIrcM+GH5uVYg2C6wZIxAIJq7Ng3QLT79tl8FUwDXhyq9SusfknOrofAKqvgyQ== } + emoji-regex-xs@1.0.0: + resolution: + { integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg== } + emoji-regex@10.4.0: resolution: { integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw== } @@ -24264,6 +31763,11 @@ packages: { integrity: sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA== } engines: { node: ">=10.13.0" } + enhanced-resolve@5.21.0: + resolution: + { integrity: sha512-otxSQPw4lkOZWkHpB3zaEQs6gWYEsmX4xQF68ElXC/TWvGxGMSGOvoNbaLXm6/cS/fSfHtsEdw90y20PCd+sCA== } + engines: { node: ">=10.13.0" } + enquirer@2.3.6: resolution: { integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== } @@ -24311,6 +31815,16 @@ packages: { integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== } engines: { node: ">=6" } + env-paths@3.0.0: + resolution: + { integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A== } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + + env-paths@4.0.0: + resolution: + { integrity: sha512-pxP8eL2SwwaTRi/KHYwLYXinDs7gL3jxFcBYmEdYfZmZXbaVDvdppd0XBU8qVz03rDfKZMXg1omHCbsJjZrMsw== } + engines: { node: ">=20" } + envinfo@7.13.0: resolution: { integrity: sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q== } @@ -24351,6 +31865,10 @@ packages: resolution: { integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== } + err-code@3.0.1: + resolution: + { integrity: sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA== } + erre@3.0.1: resolution: { integrity: sha512-NoexRasUiWU1CcBMh997iybzdKRw4RPhjjiVjPwh1h+aK0PglsR6+7A3osXP5829hXNnarn9Yr1Zi9ThwwV4aA== } @@ -24463,6 +31981,10 @@ packages: resolution: { integrity: sha512-/jhoOj/Fx+A+IIyDNOvO3TItGmlMKhtX8ISAHKE90c4b/k1tqaqEZ+uUqfpU8DMnW5cgNJv606zS55jGvza0Xw== } + es-toolkit@1.46.1: + resolution: + { integrity: sha512-5eNtXOs3tbfxXOj04tjjseeWkRWaoCjdEI+96DgwzZoe6c9juL49pXlzAFTI72aWC9Y8p7168g6XIKjh7k6pyQ== } + es6-error@4.1.1: resolution: { integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== } @@ -24511,12 +32033,6 @@ packages: engines: { node: ">=18" } hasBin: true - esbuild@0.27.2: - resolution: - { integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw== } - engines: { node: ">=18" } - hasBin: true - esbuild@0.27.3: resolution: { integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg== } @@ -24529,12 +32045,6 @@ packages: engines: { node: ">=18" } hasBin: true - esbuild@0.28.0: - resolution: - { integrity: sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw== } - engines: { node: ">=18" } - hasBin: true - escalade@3.1.1: resolution: { integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== } @@ -24621,20 +32131,6 @@ packages: peerDependencies: eslint: ">=7.0.0" - eslint-config-prettier@8.10.2: - resolution: - { integrity: sha512-/IGJ6+Dka158JnP5n5YFMOszjDWrXggGz1LaK/guZq9vZTmniaKlHcsscvkAhn9y4U+BU3JuUdYvtAMcv30y4A== } - hasBin: true - peerDependencies: - eslint: ">=7.0.0" - - eslint-config-prettier@9.1.2: - resolution: - { integrity: sha512-iI1f+D2ViGn+uvv5HuHVUamg8ll4tN+JRHGc6IJi4TP9Kl976C57fzPXgseXNs8v0iA8aSJpHsTWjDb9QJamGQ== } - hasBin: true - peerDependencies: - eslint: ">=7.0.0" - eslint-config-standard@17.1.0: resolution: { integrity: sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q== } @@ -24727,6 +32223,17 @@ packages: "@typescript-eslint/parser": optional: true + eslint-plugin-ember@13.0.0: + resolution: + { integrity: sha512-/gy9n49JE5j/1FgNEWDcyXL6K8o0uVafIbHdeqYitlUyZ9wx9Ibo/rMM/AxuRjaQ6q0knmvokivEkzxfpBA78g== } + engines: { node: ">= 20.19" } + peerDependencies: + "@typescript-eslint/parser": "*" + eslint: ">= 8.40.0" + peerDependenciesMeta: + "@typescript-eslint/parser": + optional: true + eslint-plugin-es@3.0.1: resolution: { integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ== } @@ -24759,13 +32266,13 @@ packages: "@typescript-eslint/parser": optional: true - eslint-plugin-jest@27.9.0: + eslint-plugin-jest@28.14.0: resolution: - { integrity: sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug== } - engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + { integrity: sha512-P9s/qXSMTpRTerE2FQ0qJet2gKbcGyFTPAJipoKxmWqR6uuFqIqk8FuEfg5yBieOezVrEfAMZrEwJ6yEp+1MFQ== } + engines: { node: ^16.10.0 || ^18.12.0 || >=20.0.0 } peerDependencies: - "@typescript-eslint/eslint-plugin": ^5.0.0 || ^6.0.0 || ^7.0.0 - eslint: ^7.0.0 || ^8.0.0 + "@typescript-eslint/eslint-plugin": ^6.0.0 || ^7.0.0 || ^8.0.0 + eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 jest: "*" peerDependenciesMeta: "@typescript-eslint/eslint-plugin": @@ -24773,10 +32280,10 @@ packages: jest: optional: true - eslint-plugin-jsdoc@46.10.1: + eslint-plugin-jsdoc@50.8.0: resolution: - { integrity: sha512-x8wxIpv00Y50NyweDUpa+58ffgSAI5sqe+zcZh33xphD0AVh+1kqr1ombaTRb7Fhpove1zfUuujlX9DWWBP5ag== } - engines: { node: ">=16" } + { integrity: sha512-UyGb5755LMFWPrZTEqqvTJ3urLz1iqj+bYOHFNag+sw3NvaMWP9K2z+uIn37XfNALmQLQyrBlJ5mkiVPL7ADEg== } + engines: { node: ">=18" } peerDependencies: eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 @@ -24817,15 +32324,12 @@ packages: resolution: { integrity: sha512-v3Vwdk8YKe52bAz8eSIDqQuTtfL/T1r9dSl1uhC5SyR5pgLxgKkQdxXVf/Bf6Ax7uyd9rHqiAuYVdqqDb7ILdA== } - eslint-plugin-playwright@0.15.3: + eslint-plugin-playwright@2.10.2: resolution: - { integrity: sha512-LQMW5y0DLK5Fnpya7JR1oAYL2/7Y9wDiYw6VZqlKqcRGSgjbVKNqxraphk7ra1U3Bb5EK444xMgUlQPbMg2M1g== } + { integrity: sha512-0N+2OWc3NZbOZ0gK8mp2TK6Qu3UWcJTQ9rqU0UM2yRJXgT758pvpY0lsOLIySfbyFrLqn3TcXjixbmcK90VnuQ== } + engines: { node: ">=16.9.0" } peerDependencies: - eslint: ">=7" - eslint-plugin-jest: ">=25" - peerDependenciesMeta: - eslint-plugin-jest: - optional: true + eslint: ">=8.40.0" eslint-plugin-prefer-arrow@1.2.3: resolution: @@ -24876,6 +32380,13 @@ packages: peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + eslint-plugin-react-hooks@5.2.0: + resolution: + { integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg== } + engines: { node: ">=10" } + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 + eslint-plugin-react-hooks@7.0.1: resolution: { integrity: sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA== } @@ -25032,12 +32543,27 @@ packages: jiti: optional: true - eslint@8.57.1: + eslint@10.2.1: resolution: - { integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA== } - engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } - deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. + { integrity: sha512-wiyGaKsDgqXvF40P8mDwiUp/KQjE1FdrIEJsM8PZ3XCiniTMXS3OHWWUe5FI5agoCnr8x4xPrTDZuxsBlNHl+Q== } + engines: { node: ^20.19.0 || ^22.13.0 || >=24 } + hasBin: true + peerDependencies: + jiti: "*" + peerDependenciesMeta: + jiti: + optional: true + + eslint@10.3.0: + resolution: + { integrity: sha512-XbEXaRva5cF0ZQB8w6MluHA0kZZfV2DuCMJ3ozyEOHLwDpZX2Lmm/7Pp0xdJmI0GL1W05VH5VwIFHEm1Vcw2gw== } + engines: { node: ^20.19.0 || ^22.13.0 || >=24 } hasBin: true + peerDependencies: + jiti: "*" + peerDependenciesMeta: + jiti: + optional: true esm-env@1.2.2: resolution: @@ -25286,6 +32812,13 @@ packages: peerDependencies: express: ">= 4.11" + express-rate-limit@8.4.1: + resolution: + { integrity: sha512-NGVYwQSAyEQgzxX1iCM978PP9AdO/hW93gMcF6ZwQCm+rFvLsBH6w4xcXWTcliS8La5EPRN3p9wzItqBwJrfNw== } + engines: { node: ">= 16" } + peerDependencies: + express: ">= 4.11" + express@4.22.1: resolution: { integrity: sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g== } @@ -25510,11 +33043,6 @@ packages: resolution: { integrity: sha512-N2WFfK12gmrK1c1GXOqiAJ1tc5YE+R53zvQ+t5P8S5XhnmKYVB5eZEiLNZKDSmoG8wqqbF9EXYBBW/nef19log== } - file-entry-cache@6.0.1: - resolution: - { integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== } - engines: { node: ^10.12.0 || >=12.0.0 } - file-entry-cache@8.0.0: resolution: { integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ== } @@ -25540,11 +33068,31 @@ packages: { integrity: sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ== } engines: { node: ">=4" } + filename-reserved-regex@3.0.0: + resolution: + { integrity: sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw== } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + + filename-reserved-regex@4.0.0: + resolution: + { integrity: sha512-9ZT504KxEQDamsOogZImAWGEN24R1uFAxU3ZS4AZqn2ooidmN68Olh7n4/RcA4lLatZztjA0ZSuxeLHVoCc8JA== } + engines: { node: ">=20" } + filenamify@4.3.0: resolution: { integrity: sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg== } engines: { node: ">=8" } + filenamify@6.0.0: + resolution: + { integrity: sha512-vqIlNogKeyD3yzrm0yhRMQg8hOVwYcYRfjEoODd49iCprMn4HL85gK3HcykQE53EPIpX3HcAbGA5ELQv216dAQ== } + engines: { node: ">=16" } + + filenamify@7.0.1: + resolution: + { integrity: sha512-9b4rfnaX2MkJCgp27wypV6DAMvj4WMOSgJ+TdcpJIO84Dql+Cv6iJjdG4XDTLubOWkfNiBv3joO59sau/TXw+Q== } + engines: { node: ">=20" } + filesize@11.0.15: resolution: { integrity: sha512-30TpbYxQxCpi4XdVjkwXYQ37CzZltV38+P7MYroQ+4NK/Dmx9mxixFNrolzcmEIBsjT/uowC9T7kiy2+C12r1A== } @@ -25614,6 +33162,10 @@ packages: { integrity: sha512-mBxmNbVyjg1LQIIpgO8hN+ybWBgDQK8qjht+EbrTCGmmPV/sc7RF1i9stPTD6bpvXZywBdrwRYxhSdJv867L6A== } engines: { node: ">=0.10.0" } + find-index@0.1.1: + resolution: + { integrity: sha512-uJ5vWrfBKMcE6y2Z8834dwEZj9mNGxYa3t3I53OwFeuZ8D9oc2E5zcsrkuhX6h4iYrjhiv0T3szQmxlAV9uxDg== } + find-index@1.1.1: resolution: { integrity: sha512-XYKutXMrIK99YMUPf91KX5QVJoG31/OsgftD6YoTPAObfQIxM4ziA9f0J1AsqKhJmo+IeaIPP0CFopTD4bdUBw== } @@ -25708,11 +33260,6 @@ packages: { integrity: sha512-Gq/a6YCi8zexmGHMuJwahTGzXlAZAOsbCVKduWXC6TlLCjjFRlExMJc4GC2NYPYZ0r/brw9P7CpRgQmlPVeOoA== } engines: { node: ">= 10.13.0" } - flat-cache@3.2.0: - resolution: - { integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== } - engines: { node: ^10.12.0 || >=12.0.0 } - flat-cache@4.0.1: resolution: { integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw== } @@ -25745,6 +33292,11 @@ packages: { integrity: sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ== } engines: { node: ">=8" } + flora-colossus@3.0.2: + resolution: + { integrity: sha512-Jk78K/Tzt6saxQPGChlJw69xuFGpWyTSAS8EdU0h/FyXwD2K46yNOXmo6nRHcZ9ooekyBAzMkwmiGNt7wOC5zg== } + engines: { node: ">=22.12.0" } + flush-write-stream@1.1.1: resolution: { integrity: sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== } @@ -25753,6 +33305,10 @@ packages: resolution: { integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== } + focus-trap@7.8.0: + resolution: + { integrity: sha512-/yNdlIkpWbM0ptxno3ONTuf+2g318kh2ez3KSeZN5dZ8YC6AAmgeWz+GasYYiBJPFaYcSAPeu4GfhUaChzIJXA== } + follow-redirects@1.15.11: resolution: { integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ== } @@ -25895,10 +33451,6 @@ packages: resolution: { integrity: sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg== } - front-matter@4.0.2: - resolution: - { integrity: sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg== } - fs-constants@1.0.0: resolution: { integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== } @@ -25922,6 +33474,11 @@ packages: { integrity: sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA== } engines: { node: ">=14.14" } + fs-extra@11.3.5: + resolution: + { integrity: sha512-eKpRKAovdpZtR1WopLHxlBWvAgPny3c4gX1G5Jhwmmw4XJj0ifSD5qB5TOo8hmA0wlRKDAOAhEE1yVPgs6Fgcg== } + engines: { node: ">=14.14" } + fs-extra@4.0.3: resolution: { integrity: sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg== } @@ -25966,11 +33523,6 @@ packages: { integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== } engines: { node: ">= 8" } - fs-minipass@3.0.2: - resolution: - { integrity: sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g== } - engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 } - fs-minipass@3.0.3: resolution: { integrity: sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw== } @@ -26049,6 +33601,11 @@ packages: resolution: { integrity: sha512-Tt4kuxLXFKHy8KT40zwsUPUkg1CrsgY25FxA2U/j/0WgEDCk3ddc/zLTCCcbSHX9FcKtLuVaDGtGE/STWC+j3Q== } + galactus@2.0.2: + resolution: + { integrity: sha512-HmKyTFGomdAchz4umx8MwBnrnfFmdpwiTyGA4ZOF7rya2Lmgbc9qate4yweInL+0gUBVImhaz12SBGpW3SY4Yg== } + engines: { node: ">=22.12.0" } + gauge@4.0.4: resolution: { integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== } @@ -26180,6 +33737,11 @@ packages: resolution: { integrity: sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q== } + get-tsconfig@5.0.0-beta.4: + resolution: + { integrity: sha512-7nF7C9fIPFEMHgEMEfgIlO9wDdZ8CyHw27rWciFZfHvHDReIiPhsYuzPRXsfvBCqFy1l8RRyyWV7QLM+ZhUJsQ== } + engines: { node: ">=20.20.0" } + get-uri@6.0.5: resolution: { integrity: sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg== } @@ -26245,9 +33807,9 @@ packages: { integrity: sha512-8aCohiDo4jwjOwma4FmYFd3i97urZulL8XL24nIPxuE+GZnfsAyy/g2Shqx6OjUiFKUXZM+Yy+KHnOmmA3FVcg== } engines: { node: ">= 4.0" } - git-semver-tags@5.0.0: + git-semver-tags@5.0.1: resolution: - { integrity: sha512-fZ+tmZ1O5aXW/T5nLzZLbxWAHdQTLLXalOECMNAmhoEQSfqZjtaeMjpsXH4C5qVhrICTkVQeQFujB1lKzIHljA== } + { integrity: sha512-hIvOeZwRbQ+7YEUmCkHqo8FOLQZCEn18yevLHADlFPZY02KJGsu5FZt9YW/lybfK2uhWFI7Qg/07LekJiTv7iA== } engines: { node: ">=14" } deprecated: This package is no longer maintained. For the JavaScript API, please use @conventional-changelog/git-client instead. hasBin: true @@ -26324,11 +33886,10 @@ packages: { integrity: sha512-wGM28Ehmcnk2NqRORXFOTOR064L4imSw3EeOqU5bIwUf62eXGwg89WivH6VMahL8zlQHeodzvHpXplrqzrz3Nw== } engines: { node: ">= 10.13.0" } - glob@10.4.5: + glob2base@0.0.12: resolution: - { integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== } - deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me - hasBin: true + { integrity: sha512-ZyqlgowMbfj2NPjxaZZ/EtsXlOch28FRXgMd64vqZWk1bT9+wvSRLYD1om9M7QfQru51zJPAT17qXm4/zd+9QA== } + engines: { node: ">= 0.10" } glob@10.5.0: resolution: @@ -26385,6 +33946,11 @@ packages: { integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q== } engines: { node: ">=18" } + global-directory@5.0.0: + resolution: + { integrity: sha512-1pgFdhK3J2LeM+dVf2Pd424yHx2ou338lC0ErNP2hPx4j8eW1Sp0XqSjNxtk6Tc4Kr5wlWtSvz8cn2yb7/SG/w== } + engines: { node: ">=20" } + global-dirs@3.0.1: resolution: { integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA== } @@ -26435,6 +34001,11 @@ packages: { integrity: sha512-qoV+HK2yFl/366t2/Cb3+xxPUo5BuMynomoDmiaZBIdbs+0pYbjfZU+twLhGKp4uCZ/+NbtpVepH5bGCxRyy2g== } engines: { node: ">=18" } + globals@17.6.0: + resolution: + { integrity: sha512-sepffkT8stwnIYbsMBpoCHJuJM5l98FUF2AnE07hfvE0m/qp3R586hw4jF4uadbhvg1ooIdzuu7CsfD2jzCaNA== } + engines: { node: ">=18" } + globals@9.18.0: resolution: { integrity: sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== } @@ -26577,12 +34148,6 @@ packages: resolution: { integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== } - handlebars@4.7.7: - resolution: - { integrity: sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== } - engines: { node: ">=0.4.7" } - hasBin: true - handlebars@4.7.9: resolution: { integrity: sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ== } @@ -27006,6 +34571,11 @@ packages: { integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ== } engines: { node: ">=8" } + html-tags@5.1.0: + resolution: + { integrity: sha512-n6l5uca7/y5joxZ3LUePhzmBFUJ+U2YWzhMa8XUTecSeSlQiZdF5XAd/Q3/WUl0VsXgUwWi8I7CNIwdI5WN1SQ== } + engines: { node: ">=20.10" } + html-void-elements@3.0.0: resolution: { integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg== } @@ -27043,6 +34613,19 @@ packages: webpack: optional: true + html-webpack-plugin@5.6.7: + resolution: + { integrity: sha512-md+vXtdCAe60s1k6AU3dUyMJnDxUyQAwfwPKoLisvgUF1IXjtlLsk2se54+qfL9Mdm26bbwvjJybpNx48NKRLw== } + engines: { node: ">=10.13.0" } + peerDependencies: + "@rspack/core": 0.x || 1.x + webpack: ^5.20.0 + peerDependenciesMeta: + "@rspack/core": + optional: true + webpack: + optional: true + htmlparser2@10.1.0: resolution: { integrity: sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ== } @@ -27385,18 +34968,10 @@ packages: resolution: { integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== } - inferno-vnode-flags@8.2.3: - resolution: - { integrity: sha512-dfC0MIwFv9PCbZCUsuk9ISejFS3fKJODC0rZ/LjxxzE+OrCk+PMwPLsUnGU6O9/jbBnPACVz1BkACDf5LWgU5Q== } - inferno-vnode-flags@9.1.0: resolution: { integrity: sha512-pyM4YQbYGiKS/YHgXUBsrrG6VHDZCqtas4Ba3OQqxZE6UMNWDO9Sz9q3y2hLHO7Ue1e4gcBV9S1BCr5gnUuQ8A== } - inferno@8.2.3: - resolution: - { integrity: sha512-LMeRlCe+RlXw8kHCLyOWRk2PsZ3Fo4jkESyAR1g4FfPT48N78i11YhTVXW2ukCx5MFjv+qrfa73JzJWU9sg4CQ== } - inferno@9.1.0: resolution: { integrity: sha512-Cw7iu5Yn//PDZKZPZGy2+7b7hCaVhbKuPP1ikyyOvXILZno1faIfcQOyfQkNKh4h6LSQ6VhImaG7sxvS0IrhuA== } @@ -27734,6 +35309,12 @@ packages: engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } hasBin: true + is-docker@4.0.0: + resolution: + { integrity: sha512-LHE+wROyG/Y/0ZnbktRCoTix2c1RhgWaZraMZ8o1Q7zCh0VSrICJQO5oqIIISrcSBtrXv0o233w1IYwsWCjTzA== } + engines: { node: ">=20" } + hasBin: true + is-expression@4.0.0: resolution: { integrity: sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A== } @@ -28044,6 +35625,11 @@ packages: resolution: { integrity: sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== } + is-safe-filename@0.1.1: + resolution: + { integrity: sha512-4SrR7AdnY11LHfDKTZY1u6Ga3RuxZdl3YKWWShO5iyuG5h8QS4GD2tOb04peBJ5I7pXbR+CGBNEhTcwK+FzN3g== } + engines: { node: ">=20" } + is-scoped@3.0.0: resolution: { integrity: sha512-ezxLUq30kiTvP0w/5n9tj4qTOKlrA07Oty1hwTQ+lcqw11x6uc8sp7VRb2OVGRzKfCHZ2A22T5Zsau/Q2Akb0g== } @@ -28175,6 +35761,11 @@ packages: { integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A== } engines: { node: ">=12.13" } + is-what@5.5.0: + resolution: + { integrity: sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw== } + engines: { node: ">=18" } + is-whitespace-character@1.0.4: resolution: { integrity: sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w== } @@ -28243,6 +35834,11 @@ packages: { integrity: sha512-gnWD14Jh3FzS3CPhF0AxNOJ8CxqeblPTADzI38r0wt8ZyQl5edpy75myt08EG2oKvpyiqSqsx+Wkz9vtkbTqYQ== } engines: { node: ">= 18.0.0" } + isbinaryfile@6.0.0: + resolution: + { integrity: sha512-2FN2B8MAqKv6d5TaKsLvMrwMcghxwHTpcKy0L5mhNbRqjNqo2++SpCqN6eG1lCC1GmTQgvrYJYXv2+Chvyevag== } + engines: { node: ">= 24.0.0" } + isexe@2.0.0: resolution: { integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== } @@ -28458,11 +36054,6 @@ packages: { integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== } engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - jest-diff@30.2.0: - resolution: - { integrity: sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A== } - engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 } - jest-diff@30.3.0: resolution: { integrity: sha512-n3q4PDQjS4LrKxfWB3Z5KNk1XjXtZTBwQp71OP0Jo03Z6V60x++K5L8k6ZrW8MY8pOFylZvHM0zsjS1RqlHJZQ== } @@ -28639,6 +36230,11 @@ packages: { integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ== } hasBin: true + jiti@2.7.0: + resolution: + { integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ== } + hasBin: true + jju@1.4.0: resolution: { integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA== } @@ -28741,9 +36337,9 @@ packages: resolution: { integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== } - jsdoc-type-pratt-parser@4.0.0: + jsdoc-type-pratt-parser@4.1.0: resolution: - { integrity: sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ== } + { integrity: sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg== } engines: { node: ">=12.0.0" } jsdoc-type-pratt-parser@7.2.0: @@ -28969,6 +36565,11 @@ packages: { integrity: sha512-3KF80UaaSSxo8jVnRYtMKNGFOoVPBdkkVPsw+Ad0y4oxKXPduS6G6iHkrf69yJVff/VAaYXkV42rtZ7daJxU3w== } engines: { node: ">=0.10.0" } + junk@4.0.1: + resolution: + { integrity: sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ== } + engines: { node: ">=12.20" } + just-diff-apply@5.5.0: resolution: { integrity: sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw== } @@ -29823,22 +37424,10 @@ packages: resolution: { integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== } - lodash.mergewith@4.6.2: - resolution: - { integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ== } - - lodash.snakecase@4.1.1: - resolution: - { integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw== } - lodash.sortby@4.7.0: resolution: { integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== } - lodash.startcase@4.4.0: - resolution: - { integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg== } - lodash.template@4.18.1: resolution: { integrity: sha512-5urZrLnV/VD6zHK5KsVtZgt7H19v51mIzoS0aBNH8yp3I8tbswrEjOABOPY8m8uB7NuibubLrMX+Y0PXsU9X+w== } @@ -29856,10 +37445,6 @@ packages: resolution: { integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== } - lodash.upperfirst@4.3.1: - resolution: - { integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg== } - lodash.zip@4.2.0: resolution: { integrity: sha512-C7IOaBBK/0gMORRBd8OETNx3kmOkgIWIPvyDpZSCTwUrpYmgZwJkjZeOD8ww4xbOUOs4/attY+pciKvadNfFbg== } @@ -29974,11 +37559,6 @@ packages: resolution: { integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== } - lru-cache@11.3.2: - resolution: - { integrity: sha512-wgWa6FWQ3QRRJbIjbsldRJZxdxYngT/dO0I5Ynmlnin8qy7tC6xYzbcJjtN4wHLXtkbVwHzk0C+OejVw1XM+DQ== } - engines: { node: 20 || >=22 } - lru-cache@11.3.5: resolution: { integrity: sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw== } @@ -30133,6 +37713,10 @@ packages: { integrity: sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w== } engines: { node: ">=0.10.0" } + mark.js@8.11.1: + resolution: + { integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ== } + markdown-escapes@1.0.4: resolution: { integrity: sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg== } @@ -30208,6 +37792,10 @@ packages: resolution: { integrity: sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg== } + mathml-tag-names@4.0.0: + resolution: + { integrity: sha512-aa6AU2Pcx0VP/XWnh8IGL0SYSgQHDT6Ucror2j2mXeFAlN3ahaNs8EZtG1YiticMkSLj3Gt6VPFfZogt7G5iFQ== } + maximatch@0.1.0: resolution: { integrity: sha512-9ORVtDUFk4u/NFfo0vG/ND/z7UQCVZBL539YW0+U1I7H1BkZwizcPx5foFv7LCPcBnm2U6RjFnQOsIvN4/Vm2A== } @@ -30666,11 +38254,6 @@ packages: resolution: { integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== } - minimatch@10.2.2: - resolution: - { integrity: sha512-+G4CpNBxa5MprY+04MbgOw1v7So6n5JY166pFi9KfYwT78fxScCeSNQSNzp6dpPSW2rONOps6Ocam1wFhCgoVw== } - engines: { node: 18 || 20 || >=22 } - minimatch@10.2.3: resolution: { integrity: sha512-Rwi3pnapEqirPSbWbrZaa6N3nmqq4Xer/2XooiOKyV3q12ML06f7MOuc5DVH8ONZIFhwIYQ3yzPH4nt7iWHaTg== } @@ -30832,6 +38415,10 @@ packages: { integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A== } engines: { node: ">=16 || 14 >=14.17" } + minisearch@7.2.0: + resolution: + { integrity: sha512-dqT2XBYUOZOiC5t2HRnwADjhNS2cecp9u+TJRiJ1Qp/f5qjkeT5APcGPjHw+bz89Ms8Jp+cG4AlE+QZ/QnDglg== } + minizlib@1.3.3: resolution: { integrity: sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== } @@ -30996,10 +38583,6 @@ packages: resolution: { integrity: sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== } - ms@2.1.2: - resolution: - { integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== } - ms@2.1.3: resolution: { integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== } @@ -31112,10 +38695,6 @@ packages: resolution: { integrity: sha512-6iM8R99ze45ivyH8vybJ7X0yekIcPf5GgLV5K0ENCbmRcaRIDoj37BC8iLEmaaBfqqb8enuZ5p0uhY+lVAbAcA== } - natural-compare-lite@1.4.0: - resolution: - { integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== } - natural-compare@1.4.0: resolution: { integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== } @@ -31692,9 +39271,9 @@ packages: { integrity: sha512-fY0MnE4tJOERMq6HnAD/ILI2w1r1z3BNMXyEszr4kg+py2bFtpM211cP9WLhJKwTMg3Mv/ut89g37EZY9IOKgg== } hasBin: true - nx@22.6.5: + nx@22.7.1: resolution: - { integrity: sha512-VRKhDAt684dXNSz9MNjE7MekkCfQF41P2PSx5jEWQjDEP1Z4jFZbyeygWs5ZyOroG7/n0MoWAJTe6ftvIcBOAg== } + { integrity: sha512-SadJUQY57MiwRIetm9rhZhdpFeOe1Csib2Vg9C423Pw/h0fZE14qUo6+OBby9vLh5QCkRfRZ0WaHkeO5q6yNtA== } hasBin: true peerDependencies: "@swc-node/register": ^1.11.1 @@ -31887,6 +39466,10 @@ packages: resolution: { integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w== } + oniguruma-to-es@3.1.1: + resolution: + { integrity: sha512-bUH8SDvPkH3ho3dvwJwfonjlQ4R80vjyvrU8YpxuROddv55vAEJrTuCuCVUhhsHbtlD9tGGbaNApGQckXhS8iQ== } + oniguruma-to-es@4.3.5: resolution: { integrity: sha512-Zjygswjpsewa0NLTsiizVuMQZbp0MDyM6lIt66OxsF21npUDlzpHi1Mgb/qhQdkb+dWFTzJmFbEWdvZgRho8eQ== } @@ -32023,6 +39606,11 @@ packages: { integrity: sha512-l3cbgK5wUvWDVNWM/JFU77qDdGZK1wudnLsFcrRyNo/bL1CyU8pC25vDhMHikVY29lbK2InTWsX42RxVSutUdQ== } engines: { node: ^20.19.0 || >=22.12.0 } + oxc-parser@0.119.0: + resolution: + { integrity: sha512-fNiKvO0ZHSUmINQlVY2It+vGbHxCvhpqJi0rZYFFOESoOy3fs5E4erKYGZtB/J1aULkjtY06aWNil4JxMsKXGg== } + engines: { node: ^20.19.0 || >=22.12.0 } + oxc-resolver@11.19.1: resolution: { integrity: sha512-qE/CIg/spwrTBFt5aKmwe3ifeDdLfA2NESN30E42X/lII5ClF8V7Wt6WIJhcGZjp0/Q+nQ+9vgxGk//xZNX2hg== } @@ -32269,12 +39857,6 @@ packages: engines: { node: ^20.17.0 || >=22.9.0 } hasBin: true - pacote@21.5.0: - resolution: - { integrity: sha512-VtZ0SB8mb5Tzw3dXDfVAIjhyVKUHZkS/ZH9/5mpKenwC9sFOXNI0JI7kEF7IMkwOnsWMFrvAZHzx1T5fmrp9FQ== } - engines: { node: ^20.17.0 || >=22.9.0 } - hasBin: true - pako@1.0.11: resolution: { integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== } @@ -32301,6 +39883,11 @@ packages: { integrity: sha512-fIYNuZ/HastSb80baGOuPRo1O9cf4baWw5WsAp7dBuUzeTD/BoaG8sVTdlPFksBE2lF21dN+A1AnrpIjSWqHHg== } engines: { node: ">= 0.10" } + parse-author@2.0.0: + resolution: + { integrity: sha512-yx5DfvkN8JsHL2xk2Os9oTia467qnvRgey4ahSm2X8epehBLx/gWLcy5KI+Y36ful5DzGbCS6RazqZGgy1gHNw== } + engines: { node: ">=0.10.0" } + parse-cache-control@1.0.1: resolution: { integrity: sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg== } @@ -32583,10 +40170,24 @@ packages: { integrity: sha512-Q3CG/cYvCO1ye4QKkuH7EXxs3VC/rI1/trd+qX2+PolbaKG0H+bgcZzrTt96mMyRtejk+JMCiLUn3y29W8qmFQ== } engines: { node: ">= 0.10" } + pe-library@1.0.1: + resolution: + { integrity: sha512-nh39Mo1eGWmZS7y+mK/dQIqg7S1lp38DpRxkyoHf0ZcUs/HDc+yyTjuOtTvSMZHmfSLuSQaX945u05Y2Q6UWZg== } + engines: { node: ">=14", npm: ">=7" } + + pe-library@2.0.1: + resolution: + { integrity: sha512-/qjYFqNSlq59B5DI36am++5/3gMgh02QnzpYigrwrW6s+QpU0mHf09/iA4wjTu21UUxodyV7ZCetV5MiDhaN/A== } + engines: { node: ">=20" } + pend@1.2.0: resolution: { integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== } + perfect-debounce@1.0.0: + resolution: + { integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA== } + perfect-debounce@2.1.0: resolution: { integrity: sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g== } @@ -32758,6 +40359,11 @@ packages: { integrity: sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ== } engines: { node: ">=10.4.0" } + plist@4.0.0: + resolution: + { integrity: sha512-4dOqNo0Y2NpfSf9q4+zr4bh7pzNWeckIam34Z0KYJhg8qtNNfh59VbD+Yna5SjwcxawVvLKx5w5FtuCijpEF4Q== } + engines: { node: ">=18" } + plur@4.0.0: resolution: { integrity: sha512-4UGewrYgqDFw9vV6zNV+ADmPAUAfJPKtGvb/VdpQAx25X5f3xXdGdyOEVFwkl8Hl/tl7+xbeHqSEM+D5/TirUg== } @@ -33887,6 +41493,11 @@ packages: { integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== } engines: { node: ^10 || ^12 || >=14 } + postcss@8.5.14: + resolution: + { integrity: sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg== } + engines: { node: ^10 || ^12 || >=14 } + postcss@8.5.6: resolution: { integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg== } @@ -33937,6 +41548,12 @@ packages: { integrity: sha512-7Hc+IvlQ7hlaIfQFZnxlRl0jnpWq2qwibORBhQYIb0QbNtuicc5ZxvKkVT71HJ4Py1wSZ/3VR1r8LfkCtoCzhw== } engines: { node: ">=12.0.0" } + postject@1.0.0-alpha.6: + resolution: + { integrity: sha512-b9Eb8h2eVqNE8edvKdwqkrY6O7kAwmI8kcnBv1NScolYJbo59XUF0noFq+lxbC1yN20bmC0WBEbDC5H/7ASb0A== } + engines: { node: ">=14.0.0" } + hasBin: true + powershell-utils@0.1.0: resolution: { integrity: sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A== } @@ -34022,9 +41639,14 @@ packages: { integrity: sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg== } engines: { node: ">=6.0.0" } - prettier-plugin-multiline-arrays@4.1.5: + prettier-plugin-astro@0.14.1: + resolution: + { integrity: sha512-RiBETaaP9veVstE4vUwSIcdATj6dKmXljouXc/DDNwBSPTp8FRkLGDSGFClKsAFeeg+13SB0Z1JZvbD76bigJw== } + engines: { node: ^14.15.0 || >=16.0.0 } + + prettier-plugin-multiline-arrays@4.1.8: resolution: - { integrity: sha512-eDrP12o6egIqvPg8eCAt94L/jxzMwU6vrOOBooe3FdUPh2h4cfu90ixH1keAkqPyArM2wPsNTBCZo+tY948UdA== } + { integrity: sha512-crMXJTtHLQMLKax6T4YFUU6ho4IiLBNaUM79PwN8jdwxaXzMEZS6LJxqTjxXMoCsLaCyEa+M8SCv2+JGCH5X7Q== } engines: { node: ">=20" } peerDependencies: prettier: ">=3.0.0 <4.0.0" @@ -34087,11 +41709,6 @@ packages: { integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== } engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } - pretty-format@30.2.0: - resolution: - { integrity: sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA== } - engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 } - pretty-format@30.3.0: resolution: { integrity: sha512-oG4T3wCbfeuvljnyAzhBvpN45E8iOTXCU/TD3zXW80HA3dQ4ahdqMkWGiPWZvjpQwlbyHrPTWUAqUzGzv4l1JQ== } @@ -34178,9 +41795,9 @@ packages: resolution: { integrity: sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw== } - promise-call-limit@3.0.1: + promise-call-limit@3.0.2: resolution: - { integrity: sha512-utl+0x8gIDasV5X+PI5qWEPqH6fJS0pFtQ/4gZ95xfEFb/89dmh+/b895TbFDBLiafBvxD/PGTKfvxl4kH/pQg== } + { integrity: sha512-mRPQO2T1QQVw11E7+UdCJu7S61eJVWknzml9sC1heAdj1jxl0fWMBypIt9ZOcLFf8FkG995ZD7RnVk7HH72fZw== } promise-each@2.2.0: resolution: @@ -34398,11 +42015,22 @@ packages: { integrity: sha512-3HZ2/7hdDKZvZQ7dhhITOUg4/wOrDRjyK2ZBllRB0ZCOi9u0cwq1ACHDjBB+nX+7+kltHjQvBRdeY7+W0T+7Gg== } engines: { node: ">=18" } - puppeteer-core@24.40.0: + puppeteer-core@24.42.0: + resolution: + { integrity: sha512-T4zXokk/izH01fYPhyyev1A4piWiOKrYq7CUFpdoYQxmOnXoV6YjUabmfIjCYkNspSoAXIxRid3Tw+Vg0fthYg== } + engines: { node: ">=18" } + + puppeteer-core@24.43.0: resolution: - { integrity: sha512-MWL3XbUCfVgGR0gRsidzT6oKJT2QydPLhMITU6HoVWiiv4gkb6gJi3pcdAa8q4HwjBTbqISOWVP4aJiiyUJvag== } + { integrity: sha512-cCRNXsUlhyPoKDz6+TiSpfZpRS3mD6Y1YFKhkdr6ik6TMfuJb7fAtXq9ThUFc4sphxObDk3BuAvdxc1Y6YOnqQ== } engines: { node: ">=18" } + puppeteer@24.43.0: + resolution: + { integrity: sha512-DRnMFz+J3s4lFUQcjqKl0/7h0jzlCZuUFU9lNjtKrnMl5WI1RwCaIItpHVu9empuPyUreYueN0sUW3/pnfdqsg== } + engines: { node: ">=18" } + hasBin: true + pure-rand@6.1.0: resolution: { integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA== } @@ -34496,6 +42124,10 @@ packages: resolution: { integrity: sha512-eemLM5bflWafzmBnwlYbjf9NrjEkV2j7NO7mTvsMzQBJbEaq2zFvUFDtHV9JaK0TT5mgRZt034LCUewYGmjjjQ== } + qunit-dom@3.5.1: + resolution: + { integrity: sha512-ZnvTADVXASdjLxrUDuS/8NaOzadhxN+fZgafjuQV1EOMFd3dJqLkP0RqsGdAxQBxZ7KzKg57AAJO20dM6/PxkA== } + qunit-theme-ember@1.0.0: resolution: { integrity: sha512-vdMVVo6ecdCkWttMTKeyq1ZTLGHcA6zdze2zhguNuc3ritlJMhOXY5RDseqazOwqZVfCg3rtlmL3fMUyIzUyFQ== } @@ -35130,6 +42762,16 @@ packages: resolution: { integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== } + resedit@2.0.3: + resolution: + { integrity: sha512-oTeemxwoMuxxTYxXUwjkrOPfngTQehlv0/HoYFNkB4uzsP1Un1A9nI8JQKGOFkxpqkC7qkMs0lUsGrvUlbLNUA== } + engines: { node: ">=14", npm: ">=7" } + + resedit@3.0.2: + resolution: + { integrity: sha512-FnqVDJYX4etlEnz2AaJYE1c1FTcgrsHiI2U4DXRxO4CIzbGP7r0jml9uZIMlvzCom2pbBLZjIhF26wj92y1cVQ== } + engines: { node: ">=20" } + reselect@3.0.1: resolution: { integrity: sha512-b/6tFZCmRhtBMa4xGqiiRp9jh9Aqi2A687Lo265cN0/QohJQEBPiQ52f4QB6i0eF3yp3hmLL21LSGBcML2dlxA== } @@ -35386,6 +43028,12 @@ packages: engines: { node: ^20.19.0 || >=22.12.0 } hasBin: true + rolldown@1.0.0-rc.18: + resolution: + { integrity: sha512-phmyKBpuBdRYDf4hgyynGAYn/rDDe+iZXKVJ7WX5b1zQzpLkP5oJRPGsfJuHdzPMlyyEO/4sPW6yfSx2gf7lVg== } + engines: { node: ^20.19.0 || >=22.12.0 } + hasBin: true + rolldown@1.0.0-rc.4: resolution: { integrity: sha512-V2tPDUrY3WSevrvU2E41ijZlpF+5PbZu4giH+VpNraaadsJGHa4fR6IFwsocVwEXDoAdIv5qgPPxgrvKAOIPtA== } @@ -35493,6 +43141,18 @@ packages: engines: { node: ">=18.0.0", npm: ">=8.0.0" } hasBin: true + rollup@4.60.2: + resolution: + { integrity: sha512-J9qZyW++QK/09NyN/zeO0dG/1GdGfyp9lV8ajHnRVLfo/uFsbji5mHnDgn/qYdUHyCkM2N+8VyspgZclfAh0eQ== } + engines: { node: ">=18.0.0", npm: ">=8.0.0" } + hasBin: true + + rollup@4.60.3: + resolution: + { integrity: sha512-pAQK9HalE84QSm4Po3EmWIZPd3FnjkShVkiMlz1iligWYkWQ7wHYd1PF/T7QZ5TVSD6uSTon5gBVMSM4JfBV+A== } + engines: { node: ">=18.0.0", npm: ">=8.0.0" } + hasBin: true + rou3@0.8.1: resolution: { integrity: sha512-ePa+XGk00/3HuCqrEnK3LxJW7I0SdNg6EFzKUJG73hMAdDcOUC/i/aSz7LSDwLrGr33kal/rqOGydzwl6U7zBA== } @@ -35596,6 +43256,10 @@ packages: resolution: { integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA== } + s.color@0.0.15: + resolution: + { integrity: sha512-AUNrbEUHeKY8XsYr/DYpl+qk5+aM+DChopnWOPEzn8YKzOhv4l2zH6LzZms3tOZP3wwdOyc0RmTciyi46HLIuA== } + sade@1.8.1: resolution: { integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A== } @@ -35655,25 +43319,9 @@ packages: engines: { node: 10.* || >= 12.* } hasBin: true - sass-loader@13.3.3: + sass-formatter@0.7.9: resolution: - { integrity: sha512-mt5YN2F1MOZr3d/wBRcZxeFgwgkH44wVc2zohO2YF6JiOMkiXe4BYRZpSu2sO1g71mo/j16txzUhsKZlqjVGzA== } - engines: { node: ">= 14.15.0" } - peerDependencies: - fibers: ">= 3.1.0" - node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 - sass: ^1.3.0 - sass-embedded: "*" - webpack: ^5.0.0 - peerDependenciesMeta: - fibers: - optional: true - node-sass: - optional: true - sass: - optional: true - sass-embedded: - optional: true + { integrity: sha512-CWZ8XiSim+fJVG0cFLStwDvft1VI7uvXdCNJYXhDvowiv+DsbD1nXLiQ4zrE5UBvj5DWZJ93cwN0NX5PMsr1Pw== } sass-loader@16.0.7: resolution: @@ -35790,6 +43438,10 @@ packages: resolution: { integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g== } + search-insights@2.17.3: + resolution: + { integrity: sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ== } + section-matter@1.0.0: resolution: { integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA== } @@ -36027,6 +43679,11 @@ packages: { integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== } engines: { node: ">=8" } + shebang-regex@4.0.0: + resolution: + { integrity: sha512-YSKeSljCliLkWidW84GWL1HCguI0iEqhnBOLhrVXw/fN9he9ngekCy8zqJ1jXTPYmJ3Xkf3gLuNDVHQWdRqinw== } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + shell-quote@1.8.3: resolution: { integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw== } @@ -36036,6 +43693,10 @@ packages: resolution: { integrity: sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== } + shiki@2.5.0: + resolution: + { integrity: sha512-mI//trrsaiCIPsja5CNfsyNOqgAZUb6VpJA+340toL42UpzQlXpwRV9nch69X6gaUxrr9kaOOa6e3y3uAkGFxQ== } + shiki@4.0.2: resolution: { integrity: sha512-eAVKTMedR5ckPo4xne/PjYQYrU3qx78gtJZ+sHlXEg5IHhhoQhMfZVzetTYuaJS0L2Ef3AcCRzCHV8T0WI6nIQ== } @@ -36393,6 +44054,10 @@ packages: resolution: { integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== } + source-map-support@0.5.19: + resolution: + { integrity: sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== } + source-map-support@0.5.21: resolution: { integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== } @@ -36510,6 +44175,11 @@ packages: { integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== } engines: { node: ">=6.0.0" } + speakingurl@14.0.1: + resolution: + { integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ== } + engines: { node: ">=0.10.0" } + speedline-core@1.4.3: resolution: { integrity: sha512-DI7/OuAUD+GMpR6dmu8lliO2Wg5zfeh+/xsdyJZCzd8o5JgFUjCeLsBDuZjIQJdwXS3J0L/uZYrELKYqx+PXog== } @@ -36863,11 +44533,6 @@ packages: { integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== } engines: { node: ">=8" } - strip-ansi@7.1.0: - resolution: - { integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== } - engines: { node: ">=12" } - strip-ansi@7.2.0: resolution: { integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w== } @@ -37084,6 +44749,10 @@ packages: engines: { node: ">=16" } hasBin: true + subarg@1.0.0: + resolution: + { integrity: sha512-RIrIdRY0X1xojthNcVtgT9sjpOGagEUKpZdgBUi054OEPFo282yg+zE+t1Rj3+RqKq2xStL7uUHhY+AjbC4BXg== } + subsume@4.0.0: resolution: { integrity: sha512-BWnYJElmHbYZ/zKevy+TG+SsyoFCmRPDHJbR1MzLxkPOv1Jp/4hGhVUtP98s+wZBsBsHwCXvPTP0x287/WMjGg== } @@ -37095,11 +44764,20 @@ packages: engines: { node: ">=16 || 14 >=14.17" } hasBin: true + suf-log@2.5.3: + resolution: + { integrity: sha512-KvC8OPjzdNOe+xQ4XWJV2whQA0aM1kGVczMQ8+dStAO6KfEB140JEVQ9dE76ONZ0/Ylf67ni4tILPJB41U0eow== } + sumchecker@3.0.1: resolution: { integrity: sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg== } engines: { node: ">= 8.0" } + superjson@2.2.6: + resolution: + { integrity: sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA== } + engines: { node: ">=16" } + supports-color@10.2.2: resolution: { integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g== } @@ -37382,6 +45060,11 @@ packages: { integrity: sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA== } engines: { node: ">=6" } + tapable@2.3.3: + resolution: + { integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A== } + engines: { node: ">=6" } + tar-fs@2.1.4: resolution: { integrity: sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ== } @@ -37454,9 +45137,9 @@ packages: peerDependencies: webpack: ^4.0.0 || ^5.0.0 - terser-webpack-plugin@5.4.0: + terser-webpack-plugin@5.5.0: resolution: - { integrity: sha512-Bn5vxm48flOIfkdl5CaD2+1CiUVbonWQ3KQPyP7/EuIl9Gbzq/gQFOzaMFUEgVjB1396tcK0SG8XcNJ/2kDH8g== } + { integrity: sha512-UYhptBwhWvfIjKd/UuFo6D8uq9xpGLDK+z8EDsj/zWhrTaH34cKEbrkMKfV5YWqGBvAYA3tlzZbs2R+qYrbQJA== } engines: { node: ">= 10.13.0" } peerDependencies: "@swc/core": "*" @@ -37471,6 +45154,50 @@ packages: uglify-js: optional: true + terser-webpack-plugin@5.6.0: + resolution: + { integrity: sha512-Eum+5ajkaOhf5KbM26osvv21kLD7BaGqQ1UA4Ami4arYwylmGUQTgHFpHDdmJod1q4QXa66p0to/FBKID+J1vA== } + engines: { node: ">= 10.13.0" } + peerDependencies: + "@minify-html/node": "*" + "@swc/core": "*" + "@swc/css": "*" + "@swc/html": "*" + clean-css: "*" + cssnano: "*" + csso: "*" + esbuild: "*" + html-minifier-terser: "*" + lightningcss: "*" + postcss: "*" + uglify-js: "*" + webpack: ^5.1.0 + peerDependenciesMeta: + "@minify-html/node": + optional: true + "@swc/core": + optional: true + "@swc/css": + optional: true + "@swc/html": + optional: true + clean-css: + optional: true + cssnano: + optional: true + csso: + optional: true + esbuild: + optional: true + html-minifier-terser: + optional: true + lightningcss: + optional: true + postcss: + optional: true + uglify-js: + optional: true + terser@4.8.1: resolution: { integrity: sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw== } @@ -37529,10 +45256,6 @@ packages: resolution: { integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg== } - text-table@0.2.0: - resolution: - { integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== } - textextensions@2.6.0: resolution: { integrity: sha512-49WtAWS+tcsy93dRt6P0P3AMD2m5PvXRhuEA0kaXos5ZLlujtYmpmFsB+QvWUSxE1ZsstmYXfQ7L40+EcQgpAQ== } @@ -37638,11 +45361,6 @@ packages: resolution: { integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA== } - tinyexec@1.0.2: - resolution: - { integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg== } - engines: { node: ">=18" } - tinyexec@1.1.1: resolution: { integrity: sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg== } @@ -37725,6 +45443,11 @@ packages: { integrity: sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== } engines: { node: ">=8.17.0" } + tmp@0.2.4: + resolution: + { integrity: sha512-UdiSoX6ypifLmrfQ/XfiawN6hkjSBpCjhKxxZcWlUUmoXLaCKQU0bx4HF/tdDK2uzRuchf1txGvrWBzYREssoQ== } + engines: { node: ">=14.14" } + tmp@0.2.5: resolution: { integrity: sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow== } @@ -38063,13 +45786,6 @@ packages: typescript: optional: true - tsutils@3.21.0: - resolution: - { integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== } - engines: { node: ">= 6" } - peerDependencies: - typescript: ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - tsyringe@4.10.0: resolution: { integrity: sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw== } @@ -38172,11 +45888,6 @@ packages: { integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA== } engines: { node: ">=16" } - type-fest@5.4.4: - resolution: - { integrity: sha512-JnTrzGu+zPV3aXIUhnyWJj4z/wigMsdYajGLIYakqyOW1nPllzXEJee0QQbHj+CTIQtXGlAjuK0UY+2xTyjVAw== } - engines: { node: ">=20" } - type-fest@5.5.0: resolution: { integrity: sha512-PlBfpQwiUvGViBNX84Yxwjsdhd1TUlXr6zjX7eoirtCPIr08NAmxwa+fcYBTeRQxHo9YC9wwF3m9i700sHma8g== } @@ -38220,15 +45931,19 @@ packages: resolution: { integrity: sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg== } - typed-event-target@4.1.0: + typed-event-target@4.3.0: resolution: - { integrity: sha512-fDFhZb7ofywLsVv8mYePD6ONfCpVHyM1t2dboEJx/XMsnflljnu3GQ5qH09hS1USuypGMR7wRbdWQPydgJ8nGQ== } + { integrity: sha512-21TH+1pkLuMNjwsDDXY5272CWmxgwszWd7kOoTsxgc87kcSkH9wiandsyVQbOXC2e85H8k+xKL3OEfKxt/pwxg== } engines: { node: ">=22" } typed-query-selector@2.12.1: resolution: { integrity: sha512-uzR+FzI8qrUEIu96oaeBJmd9E7CFEiQ3goA5qCVgc4s5llSubcfGHq9yUstZx/k4s9dXHVKsE35YWoFyvEqEHA== } + typed-query-selector@2.12.2: + resolution: + { integrity: sha512-EOPFbyIub4ngnEdqi2yOcNeDLaX/0jcE1JoAXQDDMIthap7FoN795lc/SHfIq2d416VufXpM8z/lD+WRm2gfOQ== } + typedarray-to-buffer@3.1.5: resolution: { integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== } @@ -38290,9 +46005,9 @@ packages: resolution: { integrity: sha512-RpuHXrknHdVdK7wv/8ug3Fr0WNsNi5l5aB8MYYuXhq2UH5lnEB1htJ1smhtD5VeCsGr2p8mUDtd83LCQDFVgjQ== } - typescript-eslint@8.58.2: + typescript-eslint@8.59.2: resolution: - { integrity: sha512-V8iSng9mRbdZjl54VJ9NKr6ZB+dW0J3TzRXRGcSbLIej9jV86ZRtlYeTKDR/QLxXykocJ5icNzbsl2+5TzIvcQ== } + { integrity: sha512-pJw051uomb3ZeCzGTpRb8RbEqB5Y4WWet8gl/GcTlU35BSx0PVdZ86/bqkQCyKKuraVQEK7r6kBHQXF+fBhkoQ== } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 @@ -38332,6 +46047,12 @@ packages: engines: { node: ">=14.17" } hasBin: true + typescript@6.0.3: + resolution: + { integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw== } + engines: { node: ">=14.17" } + hasBin: true + typical@4.0.0: resolution: { integrity: sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw== } @@ -38450,6 +46171,10 @@ packages: resolution: { integrity: sha512-XA+gOBkzYD3C74sZowtCLTpgtaCdqZhqCvR6y9LXvrKTt/IVU6bz49T4D+BPi475scshCCkb0IklJRw6T1ZlgQ== } + undici-types@8.1.0: + resolution: + { integrity: sha512-JlLXdMmH4kxyn2JPtGK/cajzKY7F15OKYG8sO5HfkIC1AC09sLUeptGFKjnMWnprDQ2EwzYDO3kgzkK3aaoHCA== } + undici@7.24.4: resolution: { integrity: sha512-BM/JzwwaRXxrLdElV2Uo6cTLEjhSb3WXboncJamZ15NgUURmvlXvxa6xkwIOILIjPNo9i8ku136ZvWV0Uly8+w== } @@ -38559,11 +46284,6 @@ packages: { integrity: sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g== } engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 } - unique-filename@5.0.0: - resolution: - { integrity: sha512-2RaJTAvAb4owyjllTfXzFClJ7WsGxlykkPvCr9pA//LD9goVq+m4PPAeBgNodGZ7nSrntT/auWpJ6Y5IFXcfjg== } - engines: { node: ^20.17.0 || >=22.9.0 } - unique-slug@2.0.2: resolution: { integrity: sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== } @@ -38578,11 +46298,6 @@ packages: { integrity: sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ== } engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 } - unique-slug@6.0.0: - resolution: - { integrity: sha512-4Lup7Ezn8W3d52/xBhZBVdx323ckxa7DEvd9kPQHppTkLoJXw6ltrBCyj5pnrxj0qKDxYMJ56CoxNuFCscdTiw== } - engines: { node: ^20.17.0 || >=22.9.0 } - unique-string@2.0.0: resolution: { integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== } @@ -38649,9 +46364,9 @@ packages: resolution: { integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg== } - universal-user-agent@6.0.0: + universal-user-agent@6.0.1: resolution: - { integrity: sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== } + { integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ== } universalify@0.1.2: resolution: @@ -38950,7 +46665,7 @@ packages: uuid@3.4.0: resolution: { integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== } - deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. + deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). hasBin: true uuid@8.3.2: @@ -38961,6 +46676,7 @@ packages: uuid@9.0.1: resolution: { integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== } + deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). hasBin: true v8-compile-cache-lib@3.0.1: @@ -39265,16 +46981,58 @@ packages: yaml: optional: true - vite@7.3.2: + vite@7.3.2: + resolution: + { integrity: sha512-Bby3NOsna2jsjfLVOHKes8sGwgl4TT0E6vvpYgnAYDIF/tie7MRaFthmKuHx1NSXjiTueXH3do80FMQgvEktRg== } + engines: { node: ^20.19.0 || >=22.12.0 } + hasBin: true + peerDependencies: + "@types/node": ^20.19.0 || >=22.12.0 + jiti: ">=1.21.0" + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: ">=0.54.8" + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + "@types/node": + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vite@8.0.11: resolution: - { integrity: sha512-Bby3NOsna2jsjfLVOHKes8sGwgl4TT0E6vvpYgnAYDIF/tie7MRaFthmKuHx1NSXjiTueXH3do80FMQgvEktRg== } + { integrity: sha512-Jz1mxtUBR5xTT65VOdJZUUeoyLtqljmFkiUXhPTLZka3RDc9vpi/xXkyrnsdRcm2lIi3l3GPMnAidTsEGIj3Ow== } engines: { node: ^20.19.0 || >=22.12.0 } hasBin: true peerDependencies: "@types/node": ^20.19.0 || >=22.12.0 + "@vitejs/devtools": ^0.1.18 + esbuild: ^0.27.0 || ^0.28.0 jiti: ">=1.21.0" less: ^4.0.0 - lightningcss: ^1.21.0 sass: ^1.70.0 sass-embedded: ^1.70.0 stylus: ">=0.54.8" @@ -39285,12 +47043,14 @@ packages: peerDependenciesMeta: "@types/node": optional: true + "@vitejs/devtools": + optional: true + esbuild: + optional: true jiti: optional: true less: optional: true - lightningcss: - optional: true sass: optional: true sass-embedded: @@ -39368,6 +47128,19 @@ packages: vite: optional: true + vitepress@1.6.4: + resolution: + { integrity: sha512-+2ym1/+0VVrbhNyRoFFesVvBvHAVMZMK0rw60E3X/5349M1GuVdKeazuksqopEdvkKwKGs21Q729jX81/bkBJg== } + hasBin: true + peerDependencies: + markdown-it-mathjax3: ^4 + postcss: ^8 + peerDependenciesMeta: + markdown-it-mathjax3: + optional: true + postcss: + optional: true + vitest@1.6.1: resolution: { integrity: sha512-Ljb1cnSJSivGN0LqXd/zmDbWEM0RNNg2t1QW/XUhYl/qPqyu7CsqeWtqQXHVaJsecLPuDoak2oJcZN2QoRIOag== } @@ -39436,6 +47209,48 @@ packages: jsdom: optional: true + vitest@4.1.5: + resolution: + { integrity: sha512-9Xx1v3/ih3m9hN+SbfkUyy0JAs72ap3r7joc87XL6jwF0jGg6mFBvQ1SrwaX+h8BlkX6Hz9shdd1uo6AF+ZGpg== } + engines: { node: ^20.0.0 || ^22.0.0 || >=24.0.0 } + hasBin: true + peerDependencies: + "@edge-runtime/vm": "*" + "@opentelemetry/api": ^1.9.0 + "@types/node": ^20.0.0 || ^22.0.0 || >=24.0.0 + "@vitest/browser-playwright": 4.1.5 + "@vitest/browser-preview": 4.1.5 + "@vitest/browser-webdriverio": 4.1.5 + "@vitest/coverage-istanbul": 4.1.5 + "@vitest/coverage-v8": 4.1.5 + "@vitest/ui": 4.1.5 + happy-dom: "*" + jsdom: "*" + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + "@edge-runtime/vm": + optional: true + "@opentelemetry/api": + optional: true + "@types/node": + optional: true + "@vitest/browser-playwright": + optional: true + "@vitest/browser-preview": + optional: true + "@vitest/browser-webdriverio": + optional: true + "@vitest/coverage-istanbul": + optional: true + "@vitest/coverage-v8": + optional: true + "@vitest/ui": + optional: true + happy-dom: + optional: true + jsdom: + optional: true + vm-browserify@1.1.2: resolution: { integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== } @@ -40093,6 +47908,17 @@ packages: webpack-cli: optional: true + webpack@5.106.2: + resolution: + { integrity: sha512-wGN3qcrBQIFmQ/c0AiOAQBvrZ5lmY8vbbMv4Mxfgzqd/B6+9pXtLo73WuS1dSGXM5QYY3hZnIbvx+K1xxe6FyA== } + engines: { node: ">=10.13.0" } + hasBin: true + peerDependencies: + webpack-cli: "*" + peerDependenciesMeta: + webpack-cli: + optional: true + webpackbar@6.0.1: resolution: { integrity: sha512-TnErZpmuKdwWBdMoexjio3KKX6ZtoKHRVvLIU0A47R0VVBDtx3ZyOJDktgYixhoJokZTYTt1Z37OkO9pnGJa9Q== } @@ -40419,11 +48245,6 @@ packages: { integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== } engines: { node: ">=12" } - wrap-ansi@9.0.0: - resolution: - { integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q== } - engines: { node: ">=18" } - wrap-ansi@9.0.2: resolution: { integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww== } @@ -40659,6 +48480,12 @@ packages: engines: { node: ">= 14" } hasBin: true + yaml@2.8.0: + resolution: + { integrity: sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ== } + engines: { node: ">= 14.6" } + hasBin: true + yaml@2.8.3: resolution: { integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg== } @@ -40739,6 +48566,11 @@ packages: resolution: { integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== } + yauzl@3.3.0: + resolution: + { integrity: sha512-PtGEvEP30p7sbIBJKUBjUnqgTVOyMURc4dLo9iNyAJnNIEz9pm88cCXF21w94Kg3k6RXkeZh5DHOGS0qEONvNQ== } + engines: { node: ">=12" } + yeast@0.1.2: resolution: { integrity: sha512-8HFIh676uyGYP6wP13R/j6OJ/1HwJ46snpvzE7aHAN3Ryqh2yX6Xox2B4CUmTwwOIzlG3Bs7ocsP5dZH/R1Qbg== } @@ -40870,7 +48702,7 @@ snapshots: graceful-fs: 4.2.11 gray-matter: 4.0.3 hamljs: 0.6.2 - handlebars: 4.7.7 + handlebars: 4.7.9 is-glob: 4.0.3 iso-639-1: 2.1.15 kleur: 4.1.5 @@ -40918,6 +48750,34 @@ snapshots: "@algolia/requester-fetch": 5.48.1 "@algolia/requester-node-http": 5.48.1 + "@algolia/autocomplete-core@1.17.7(@algolia/client-search@5.48.1)(algoliasearch@5.48.1)(search-insights@2.17.3)": + dependencies: + "@algolia/autocomplete-plugin-algolia-insights": 1.17.7(@algolia/client-search@5.48.1)(algoliasearch@5.48.1)(search-insights@2.17.3) + "@algolia/autocomplete-shared": 1.17.7(@algolia/client-search@5.48.1)(algoliasearch@5.48.1) + transitivePeerDependencies: + - "@algolia/client-search" + - algoliasearch + - search-insights + + "@algolia/autocomplete-plugin-algolia-insights@1.17.7(@algolia/client-search@5.48.1)(algoliasearch@5.48.1)(search-insights@2.17.3)": + dependencies: + "@algolia/autocomplete-shared": 1.17.7(@algolia/client-search@5.48.1)(algoliasearch@5.48.1) + search-insights: 2.17.3 + transitivePeerDependencies: + - "@algolia/client-search" + - algoliasearch + + "@algolia/autocomplete-preset-algolia@1.17.7(@algolia/client-search@5.48.1)(algoliasearch@5.48.1)": + dependencies: + "@algolia/autocomplete-shared": 1.17.7(@algolia/client-search@5.48.1)(algoliasearch@5.48.1) + "@algolia/client-search": 5.48.1 + algoliasearch: 5.48.1 + + "@algolia/autocomplete-shared@1.17.7(@algolia/client-search@5.48.1)(algoliasearch@5.48.1)": + dependencies: + "@algolia/client-search": 5.48.1 + algoliasearch: 5.48.1 + "@algolia/client-abtesting@5.48.1": dependencies: "@algolia/client-common": 5.48.1 @@ -41007,14 +48867,14 @@ snapshots: transitivePeerDependencies: - chokidar - "@angular-devkit/build-angular@21.2.7(89e501c24d06f141aeb1b036fb75d7da)": + "@angular-devkit/build-angular@21.2.7(11aad3ff90c627164ed7012b1f438aef)": dependencies: "@ampproject/remapping": 2.3.0 "@angular-devkit/architect": 0.2102.7(chokidar@5.0.0) - "@angular-devkit/build-webpack": 0.2102.7(chokidar@5.0.0)(webpack-dev-server@5.2.3(tslib@2.8.1)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))(webpack@5.105.2(@swc/core@1.15.26)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))))(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + "@angular-devkit/build-webpack": 0.2102.7(chokidar@5.0.0)(webpack-dev-server@5.2.3(tslib@2.8.1)(webpack-cli@7.0.2)(webpack@5.106.2))(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) "@angular-devkit/core": 21.2.7(chokidar@5.0.0) - "@angular/build": 21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@5.9.3))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/node@25.6.0)(chokidar@5.0.0)(jiti@2.6.1)(karma@6.4.4)(less@4.4.2)(lightningcss@1.32.0)(ng-packagr@21.2.2(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3))(postcss@8.5.6)(stylus@0.64.0)(terser@5.46.0)(tslib@2.8.1)(typescript@5.9.3)(vitest@4.1.4)(yaml@2.8.3) - "@angular/compiler-cli": 21.2.8(@angular/compiler@21.2.8)(typescript@5.9.3) + "@angular/build": 21.2.7(8a0da38d6d5b58a0856c7d28ce26258a) + "@angular/compiler-cli": 21.2.9(@angular/compiler@21.2.9)(typescript@5.9.3) "@babel/core": 7.29.0 "@babel/generator": 7.29.1 "@babel/helper-annotate-as-pure": 7.27.3 @@ -41025,53 +48885,53 @@ snapshots: "@babel/preset-env": 7.29.0(@babel/core@7.29.0) "@babel/runtime": 7.28.6 "@discoveryjs/json-ext": 0.6.3 - "@ngtools/webpack": 21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@5.9.3))(typescript@5.9.3)(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + "@ngtools/webpack": 21.2.7(@angular/compiler-cli@21.2.9(@angular/compiler@21.2.9)(typescript@5.9.3))(typescript@5.9.3)(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) ansi-colors: 4.1.3 autoprefixer: 10.4.27(postcss@8.5.6) - babel-loader: 10.0.0(@babel/core@7.29.0)(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + babel-loader: 10.0.0(@babel/core@7.29.0)(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) browserslist: 4.28.2 - copy-webpack-plugin: 14.0.0(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) - css-loader: 7.1.3(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + copy-webpack-plugin: 14.0.0(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) + css-loader: 7.1.3(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) esbuild-wasm: 0.27.3 http-proxy-middleware: 3.0.5 istanbul-lib-instrument: 6.0.3 jsonc-parser: 3.3.1 karma-source-map-support: 1.4.0 less: 4.4.2 - less-loader: 12.3.1(less@4.4.2)(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) - license-webpack-plugin: 4.0.2(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + less-loader: 12.3.1(less@4.4.2)(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) + license-webpack-plugin: 4.0.2(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) loader-utils: 3.3.1 - mini-css-extract-plugin: 2.10.0(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + mini-css-extract-plugin: 2.10.0(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) open: 11.0.0 ora: 9.3.0 picomatch: 4.0.4 piscina: 5.1.4 postcss: 8.5.6 - postcss-loader: 8.2.0(postcss@8.5.6)(typescript@5.9.3)(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + postcss-loader: 8.2.0(postcss@8.5.6)(typescript@5.9.3)(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) resolve-url-loader: 5.0.0 rxjs: 7.8.2 sass: 1.97.3 - sass-loader: 16.0.7(sass@1.97.3)(webpack@5.105.2(@swc/core@1.15.26)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + sass-loader: 16.0.7(sass@1.97.3)(webpack@5.105.2(@swc/core@1.15.33)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) semver: 7.7.4 - source-map-loader: 5.0.0(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + source-map-loader: 5.0.0(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) source-map-support: 0.5.21 terser: 5.46.0 tinyglobby: 0.2.15 tree-kill: 1.2.2 tslib: 2.8.1 typescript: 5.9.3 - webpack: 5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) - webpack-dev-middleware: 7.4.5(tslib@2.8.1)(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) - webpack-dev-server: 5.2.3(tslib@2.8.1)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + webpack: 5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) + webpack-dev-middleware: 7.4.5(tslib@2.8.1)(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) + webpack-dev-server: 5.2.3(tslib@2.8.1)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) webpack-merge: 6.0.1 - webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.6.6(webpack@5.105.2(@swc/core@1.15.26)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))))(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.6.7(webpack@5.106.2(@swc/core@1.15.33)(esbuild@0.27.7)(webpack-cli@7.0.2)))(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) optionalDependencies: - "@angular/core": 21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1) - "@angular/platform-browser": 21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)) + "@angular/core": 21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1) + "@angular/platform-browser": 21.2.9(@angular/animations@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1)) esbuild: 0.27.3 jest-environment-jsdom: 30.3.0(canvas@3.2.3) karma: 6.4.4 - ng-packagr: 21.2.2(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3) + ng-packagr: 21.2.2(@angular/compiler-cli@21.2.9(@angular/compiler@21.2.9)(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3) protractor: 7.0.0 transitivePeerDependencies: - "@angular/compiler" @@ -41098,13 +48958,13 @@ snapshots: - webpack-cli - yaml - "@angular-devkit/build-angular@21.2.7(abd474a72fce5c55ab9d1bbe6c9cd57f)": + "@angular-devkit/build-angular@21.2.7(596b57332a365a5c66657886d9849dbc)": dependencies: "@ampproject/remapping": 2.3.0 "@angular-devkit/architect": 0.2102.7(chokidar@5.0.0) - "@angular-devkit/build-webpack": 0.2102.7(chokidar@5.0.0)(webpack-dev-server@5.2.3(tslib@2.8.1)(webpack-cli@7.0.2)(webpack@5.106.1))(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + "@angular-devkit/build-webpack": 0.2102.7(chokidar@5.0.0)(webpack-dev-server@5.2.3(tslib@2.8.1)(webpack-cli@7.0.2)(webpack@5.106.2))(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) "@angular-devkit/core": 21.2.7(chokidar@5.0.0) - "@angular/build": 21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@5.9.3))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/node@25.6.0)(chokidar@5.0.0)(jiti@2.6.1)(karma@6.4.4)(less@4.4.2)(lightningcss@1.32.0)(ng-packagr@21.2.2(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3))(postcss@8.5.6)(stylus@0.64.0)(terser@5.46.0)(tslib@2.8.1)(typescript@5.9.3)(vitest@4.1.4)(yaml@2.8.3) + "@angular/build": 21.2.7(e5c93fb54c0a0b2d9c27b21a4e677246) "@angular/compiler-cli": 21.2.8(@angular/compiler@21.2.8)(typescript@5.9.3) "@babel/core": 7.29.0 "@babel/generator": 7.29.1 @@ -41116,46 +48976,46 @@ snapshots: "@babel/preset-env": 7.29.0(@babel/core@7.29.0) "@babel/runtime": 7.28.6 "@discoveryjs/json-ext": 0.6.3 - "@ngtools/webpack": 21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@5.9.3))(typescript@5.9.3)(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + "@ngtools/webpack": 21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@5.9.3))(typescript@5.9.3)(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) ansi-colors: 4.1.3 autoprefixer: 10.4.27(postcss@8.5.6) - babel-loader: 10.0.0(@babel/core@7.29.0)(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + babel-loader: 10.0.0(@babel/core@7.29.0)(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) browserslist: 4.28.2 - copy-webpack-plugin: 14.0.0(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) - css-loader: 7.1.3(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + copy-webpack-plugin: 14.0.0(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) + css-loader: 7.1.3(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) esbuild-wasm: 0.27.3 http-proxy-middleware: 3.0.5 istanbul-lib-instrument: 6.0.3 jsonc-parser: 3.3.1 karma-source-map-support: 1.4.0 less: 4.4.2 - less-loader: 12.3.1(less@4.4.2)(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) - license-webpack-plugin: 4.0.2(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + less-loader: 12.3.1(less@4.4.2)(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) + license-webpack-plugin: 4.0.2(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) loader-utils: 3.3.1 - mini-css-extract-plugin: 2.10.0(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + mini-css-extract-plugin: 2.10.0(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) open: 11.0.0 ora: 9.3.0 picomatch: 4.0.4 piscina: 5.1.4 postcss: 8.5.6 - postcss-loader: 8.2.0(postcss@8.5.6)(typescript@5.9.3)(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + postcss-loader: 8.2.0(postcss@8.5.6)(typescript@5.9.3)(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) resolve-url-loader: 5.0.0 rxjs: 7.8.2 sass: 1.97.3 - sass-loader: 16.0.7(sass@1.97.3)(webpack@5.105.2(@swc/core@1.15.26)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + sass-loader: 16.0.7(sass@1.97.3)(webpack@5.105.2(@swc/core@1.15.33)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) semver: 7.7.4 - source-map-loader: 5.0.0(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + source-map-loader: 5.0.0(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) source-map-support: 0.5.21 terser: 5.46.0 tinyglobby: 0.2.15 tree-kill: 1.2.2 tslib: 2.8.1 typescript: 5.9.3 - webpack: 5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) - webpack-dev-middleware: 7.4.5(tslib@2.8.1)(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) - webpack-dev-server: 5.2.3(tslib@2.8.1)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + webpack: 5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) + webpack-dev-middleware: 7.4.5(tslib@2.8.1)(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) + webpack-dev-server: 5.2.3(tslib@2.8.1)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) webpack-merge: 6.0.1 - webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.6.6(webpack@5.106.1(@swc/core@1.15.26)(esbuild@0.28.0)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))))(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.6.7(webpack@5.106.2(@swc/core@1.15.33)(esbuild@0.27.7)(webpack-cli@7.0.2)))(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) optionalDependencies: "@angular/core": 21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1) "@angular/platform-browser": 21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)) @@ -41189,13 +49049,13 @@ snapshots: - webpack-cli - yaml - "@angular-devkit/build-angular@21.2.7(ce2bc26fd64eb08b8f5db928ff713ad3)": + "@angular-devkit/build-angular@21.2.7(eb2fcdc8f74b5622af37fecb20cf3ebf)": dependencies: "@ampproject/remapping": 2.3.0 "@angular-devkit/architect": 0.2102.7(chokidar@5.0.0) - "@angular-devkit/build-webpack": 0.2102.7(chokidar@5.0.0)(webpack-dev-server@5.2.3(tslib@2.8.1)(webpack-cli@7.0.2)(webpack@5.106.1))(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + "@angular-devkit/build-webpack": 0.2102.7(chokidar@5.0.0)(webpack-dev-server@5.2.3(tslib@2.8.1)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))(webpack@5.105.2(@swc/core@1.15.33)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))))(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) "@angular-devkit/core": 21.2.7(chokidar@5.0.0) - "@angular/build": 21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@5.9.3))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/node@25.6.0)(jiti@2.6.1)(karma@6.4.4)(less@4.4.2)(lightningcss@1.32.0)(ng-packagr@21.2.2(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3))(postcss@8.5.6)(stylus@0.64.0)(terser@5.46.0)(tslib@2.8.1)(typescript@5.9.3)(vitest@4.1.4)(yaml@2.8.3) + "@angular/build": 21.2.7(70a92fd9708947e746e0a10c4869acf7) "@angular/compiler-cli": 21.2.8(@angular/compiler@21.2.8)(typescript@5.9.3) "@babel/core": 7.29.0 "@babel/generator": 7.29.1 @@ -41207,46 +49067,46 @@ snapshots: "@babel/preset-env": 7.29.0(@babel/core@7.29.0) "@babel/runtime": 7.28.6 "@discoveryjs/json-ext": 0.6.3 - "@ngtools/webpack": 21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@5.9.3))(typescript@5.9.3)(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + "@ngtools/webpack": 21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@5.9.3))(typescript@5.9.3)(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) ansi-colors: 4.1.3 autoprefixer: 10.4.27(postcss@8.5.6) - babel-loader: 10.0.0(@babel/core@7.29.0)(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + babel-loader: 10.0.0(@babel/core@7.29.0)(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) browserslist: 4.28.2 - copy-webpack-plugin: 14.0.0(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) - css-loader: 7.1.3(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + copy-webpack-plugin: 14.0.0(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) + css-loader: 7.1.3(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) esbuild-wasm: 0.27.3 http-proxy-middleware: 3.0.5 istanbul-lib-instrument: 6.0.3 jsonc-parser: 3.3.1 karma-source-map-support: 1.4.0 less: 4.4.2 - less-loader: 12.3.1(less@4.4.2)(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) - license-webpack-plugin: 4.0.2(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + less-loader: 12.3.1(less@4.4.2)(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) + license-webpack-plugin: 4.0.2(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) loader-utils: 3.3.1 - mini-css-extract-plugin: 2.10.0(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + mini-css-extract-plugin: 2.10.0(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) open: 11.0.0 ora: 9.3.0 picomatch: 4.0.4 piscina: 5.1.4 postcss: 8.5.6 - postcss-loader: 8.2.0(postcss@8.5.6)(typescript@5.9.3)(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + postcss-loader: 8.2.0(postcss@8.5.6)(typescript@5.9.3)(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) resolve-url-loader: 5.0.0 rxjs: 7.8.2 sass: 1.97.3 - sass-loader: 16.0.7(sass@1.97.3)(webpack@5.105.2(@swc/core@1.15.26)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + sass-loader: 16.0.7(sass@1.97.3)(webpack@5.105.2(@swc/core@1.15.33)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) semver: 7.7.4 - source-map-loader: 5.0.0(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + source-map-loader: 5.0.0(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) source-map-support: 0.5.21 terser: 5.46.0 tinyglobby: 0.2.15 tree-kill: 1.2.2 tslib: 2.8.1 typescript: 5.9.3 - webpack: 5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) - webpack-dev-middleware: 7.4.5(tslib@2.8.1)(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) - webpack-dev-server: 5.2.3(tslib@2.8.1)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + webpack: 5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) + webpack-dev-middleware: 7.4.5(tslib@2.8.1)(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) + webpack-dev-server: 5.2.3(tslib@2.8.1)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) webpack-merge: 6.0.1 - webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.6.6(webpack@5.106.1(@swc/core@1.15.26)(esbuild@0.28.0)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))))(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.6.7(webpack@5.105.2(@swc/core@1.15.33)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))))(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) optionalDependencies: "@angular/core": 21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1) "@angular/platform-browser": 21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)) @@ -41280,21 +49140,21 @@ snapshots: - webpack-cli - yaml - "@angular-devkit/build-webpack@0.2102.7(chokidar@5.0.0)(webpack-dev-server@5.2.3(tslib@2.8.1)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))(webpack@5.105.2(@swc/core@1.15.26)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))))(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)))": + "@angular-devkit/build-webpack@0.2102.7(chokidar@5.0.0)(webpack-dev-server@5.2.3(tslib@2.8.1)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))(webpack@5.105.2(@swc/core@1.15.33)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))))(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)))": dependencies: "@angular-devkit/architect": 0.2102.7(chokidar@5.0.0) rxjs: 7.8.2 - webpack: 5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) - webpack-dev-server: 5.2.3(tslib@2.8.1)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + webpack: 5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) + webpack-dev-server: 5.2.3(tslib@2.8.1)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) transitivePeerDependencies: - chokidar - "@angular-devkit/build-webpack@0.2102.7(chokidar@5.0.0)(webpack-dev-server@5.2.3(tslib@2.8.1)(webpack-cli@7.0.2)(webpack@5.106.1))(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)))": + "@angular-devkit/build-webpack@0.2102.7(chokidar@5.0.0)(webpack-dev-server@5.2.3(tslib@2.8.1)(webpack-cli@7.0.2)(webpack@5.106.2))(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)))": dependencies: "@angular-devkit/architect": 0.2102.7(chokidar@5.0.0) rxjs: 7.8.2 - webpack: 5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) - webpack-dev-server: 5.2.3(tslib@2.8.1)(webpack-cli@7.0.2)(webpack@5.106.1) + webpack: 5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) + webpack-dev-server: 5.2.3(tslib@2.8.1)(webpack-cli@7.0.2)(webpack@5.106.2) transitivePeerDependencies: - chokidar @@ -41338,51 +49198,51 @@ snapshots: transitivePeerDependencies: - chokidar - "@angular-eslint/builder@21.3.1(@angular/cli@21.2.7(@types/node@25.6.0))(eslint@8.57.1)(typescript@5.9.3)": + "@angular-eslint/builder@21.3.1(@angular/cli@21.2.7(@types/node@25.6.0))(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3)": dependencies: "@angular-devkit/architect": 0.2102.7(chokidar@5.0.0) "@angular-devkit/core": 21.2.7(chokidar@5.0.0) "@angular/cli": 21.2.7(@types/node@25.6.0)(chokidar@5.0.0) - eslint: 8.57.1 + eslint: 10.3.0(jiti@2.7.0) typescript: 5.9.3 transitivePeerDependencies: - chokidar "@angular-eslint/bundled-angular-compiler@21.3.1": {} - "@angular-eslint/eslint-plugin-template@21.3.1(@angular-eslint/template-parser@21.3.1(eslint@8.57.1)(typescript@5.9.3))(@typescript-eslint/types@8.58.2)(@typescript-eslint/utils@8.58.2(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3)": + "@angular-eslint/eslint-plugin-template@21.3.1(@angular-eslint/template-parser@21.3.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3))(@typescript-eslint/types@8.59.2)(@typescript-eslint/utils@8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3)": dependencies: "@angular-eslint/bundled-angular-compiler": 21.3.1 - "@angular-eslint/template-parser": 21.3.1(eslint@8.57.1)(typescript@5.9.3) - "@angular-eslint/utils": 21.3.1(@typescript-eslint/utils@8.58.2(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) - "@typescript-eslint/types": 8.58.2 - "@typescript-eslint/utils": 8.58.2(eslint@8.57.1)(typescript@5.9.3) + "@angular-eslint/template-parser": 21.3.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3) + "@angular-eslint/utils": 21.3.1(@typescript-eslint/utils@8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3) + "@typescript-eslint/types": 8.59.2 + "@typescript-eslint/utils": 8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3) aria-query: 5.3.2 axobject-query: 4.1.0 - eslint: 8.57.1 + eslint: 10.3.0(jiti@2.7.0) typescript: 5.9.3 - "@angular-eslint/eslint-plugin@21.3.1(@typescript-eslint/utils@8.58.2(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3)": + "@angular-eslint/eslint-plugin@21.3.1(@typescript-eslint/utils@8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3)": dependencies: "@angular-eslint/bundled-angular-compiler": 21.3.1 - "@angular-eslint/utils": 21.3.1(@typescript-eslint/utils@8.58.2(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) - "@typescript-eslint/utils": 8.58.2(eslint@8.57.1)(typescript@5.9.3) - eslint: 8.57.1 + "@angular-eslint/utils": 21.3.1(@typescript-eslint/utils@8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3) + "@typescript-eslint/utils": 8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3) + eslint: 10.3.0(jiti@2.7.0) ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 - "@angular-eslint/template-parser@21.3.1(eslint@8.57.1)(typescript@5.9.3)": + "@angular-eslint/template-parser@21.3.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3)": dependencies: "@angular-eslint/bundled-angular-compiler": 21.3.1 - eslint: 8.57.1 + eslint: 10.3.0(jiti@2.7.0) eslint-scope: 9.1.2 typescript: 5.9.3 - "@angular-eslint/utils@21.3.1(@typescript-eslint/utils@8.58.2(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3)": + "@angular-eslint/utils@21.3.1(@typescript-eslint/utils@8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3)": dependencies: "@angular-eslint/bundled-angular-compiler": 21.3.1 - "@typescript-eslint/utils": 8.58.2(eslint@8.57.1)(typescript@5.9.3) - eslint: 8.57.1 + "@typescript-eslint/utils": 8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3) + eslint: 10.3.0(jiti@2.7.0) typescript: 5.9.3 "@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))": @@ -41390,7 +49250,12 @@ snapshots: "@angular/core": 21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1) tslib: 2.8.1 - "@angular/build@21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@5.9.3))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/node@25.6.0)(chokidar@5.0.0)(jiti@2.6.1)(karma@6.4.4)(less@4.4.2)(lightningcss@1.32.0)(ng-packagr@21.2.2(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3))(postcss@8.5.6)(stylus@0.64.0)(terser@5.46.0)(tslib@2.8.1)(typescript@5.9.3)(vitest@4.1.4)(yaml@2.8.3)": + "@angular/animations@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))": + dependencies: + "@angular/core": 21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1) + tslib: 2.8.1 + + "@angular/build@21.2.7(70a92fd9708947e746e0a10c4869acf7)": dependencies: "@ampproject/remapping": 2.3.0 "@angular-devkit/architect": 0.2102.7(chokidar@5.0.0) @@ -41400,7 +49265,7 @@ snapshots: "@babel/helper-annotate-as-pure": 7.27.3 "@babel/helper-split-export-declaration": 7.24.7 "@inquirer/confirm": 5.1.21(@types/node@25.6.0) - "@vitejs/plugin-basic-ssl": 2.1.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.32.0)(sass@1.97.3)(stylus@0.64.0)(terser@5.46.0)(yaml@2.8.3)) + "@vitejs/plugin-basic-ssl": 2.1.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.7.0)(less@4.4.2)(lightningcss@1.32.0)(sass@1.97.3)(stylus@0.64.0)(terser@5.46.0)(yaml@2.8.3)) beasties: 0.4.1 browserslist: 4.28.2 esbuild: 0.27.3 @@ -41413,7 +49278,7 @@ snapshots: parse5-html-rewriting-stream: 8.0.0 picomatch: 4.0.4 piscina: 5.1.4 - rolldown: 1.0.0-rc.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + rolldown: 1.0.0-rc.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) sass: 1.97.3 semver: 7.7.4 source-map-support: 0.5.21 @@ -41421,7 +49286,7 @@ snapshots: tslib: 2.8.1 typescript: 5.9.3 undici: 7.24.4 - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.32.0)(sass@1.97.3)(stylus@0.64.0)(terser@5.46.0)(yaml@2.8.3) + vite: 7.3.2(@types/node@25.6.0)(jiti@2.7.0)(less@4.4.2)(lightningcss@1.32.0)(sass@1.97.3)(stylus@0.64.0)(terser@5.46.0)(yaml@2.8.3) watchpack: 2.5.1 optionalDependencies: "@angular/core": 21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1) @@ -41431,7 +49296,64 @@ snapshots: lmdb: 3.5.1 ng-packagr: 21.2.2(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3) postcss: 8.5.6 - vitest: 4.1.4(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(jsdom@29.0.2(canvas@3.2.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.32.0)(sass@1.97.3)(stylus@0.64.0)(terser@5.46.0)(yaml@2.8.3)) + vitest: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(jsdom@29.0.2(canvas@3.2.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.7.0)(less@4.4.2)(lightningcss@1.32.0)(sass@1.97.3)(stylus@0.64.0)(terser@5.46.0)(yaml@2.8.3)) + transitivePeerDependencies: + - "@emnapi/core" + - "@emnapi/runtime" + - "@types/node" + - chokidar + - jiti + - lightningcss + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + + "@angular/build@21.2.7(8a0da38d6d5b58a0856c7d28ce26258a)": + dependencies: + "@ampproject/remapping": 2.3.0 + "@angular-devkit/architect": 0.2102.7(chokidar@5.0.0) + "@angular/compiler": 21.2.9 + "@angular/compiler-cli": 21.2.9(@angular/compiler@21.2.9)(typescript@5.9.3) + "@babel/core": 7.29.0 + "@babel/helper-annotate-as-pure": 7.27.3 + "@babel/helper-split-export-declaration": 7.24.7 + "@inquirer/confirm": 5.1.21(@types/node@25.6.0) + "@vitejs/plugin-basic-ssl": 2.1.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.7.0)(less@4.4.2)(lightningcss@1.32.0)(sass@1.97.3)(stylus@0.64.0)(terser@5.46.0)(yaml@2.8.3)) + beasties: 0.4.1 + browserslist: 4.28.2 + esbuild: 0.27.3 + https-proxy-agent: 7.0.6 + istanbul-lib-instrument: 6.0.3 + jsonc-parser: 3.3.1 + listr2: 9.0.5 + magic-string: 0.30.21 + mrmime: 2.0.1 + parse5-html-rewriting-stream: 8.0.0 + picomatch: 4.0.4 + piscina: 5.1.4 + rolldown: 1.0.0-rc.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + sass: 1.97.3 + semver: 7.7.4 + source-map-support: 0.5.21 + tinyglobby: 0.2.15 + tslib: 2.8.1 + typescript: 5.9.3 + undici: 7.24.4 + vite: 7.3.2(@types/node@25.6.0)(jiti@2.7.0)(less@4.4.2)(lightningcss@1.32.0)(sass@1.97.3)(stylus@0.64.0)(terser@5.46.0)(yaml@2.8.3) + watchpack: 2.5.1 + optionalDependencies: + "@angular/core": 21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1) + "@angular/platform-browser": 21.2.9(@angular/animations@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1)) + karma: 6.4.4 + less: 4.4.2 + lmdb: 3.5.1 + ng-packagr: 21.2.2(@angular/compiler-cli@21.2.9(@angular/compiler@21.2.9)(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3) + postcss: 8.5.6 + vitest: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(jsdom@29.0.2(canvas@3.2.3))(vite@8.0.11(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) transitivePeerDependencies: - "@emnapi/core" - "@emnapi/runtime" @@ -41447,7 +49369,7 @@ snapshots: - tsx - yaml - "@angular/build@21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@5.9.3))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@types/node@25.6.0)(jiti@2.6.1)(karma@6.4.4)(less@4.4.2)(lightningcss@1.32.0)(ng-packagr@21.2.2(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3))(postcss@8.5.6)(stylus@0.64.0)(terser@5.46.0)(tslib@2.8.1)(typescript@5.9.3)(vitest@4.1.4)(yaml@2.8.3)": + "@angular/build@21.2.7(e5c93fb54c0a0b2d9c27b21a4e677246)": dependencies: "@ampproject/remapping": 2.3.0 "@angular-devkit/architect": 0.2102.7(chokidar@5.0.0) @@ -41457,7 +49379,7 @@ snapshots: "@babel/helper-annotate-as-pure": 7.27.3 "@babel/helper-split-export-declaration": 7.24.7 "@inquirer/confirm": 5.1.21(@types/node@25.6.0) - "@vitejs/plugin-basic-ssl": 2.1.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.32.0)(sass@1.97.3)(stylus@0.64.0)(terser@5.46.0)(yaml@2.8.3)) + "@vitejs/plugin-basic-ssl": 2.1.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.7.0)(less@4.4.2)(lightningcss@1.32.0)(sass@1.97.3)(stylus@0.64.0)(terser@5.46.0)(yaml@2.8.3)) beasties: 0.4.1 browserslist: 4.28.2 esbuild: 0.27.3 @@ -41470,7 +49392,7 @@ snapshots: parse5-html-rewriting-stream: 8.0.0 picomatch: 4.0.4 piscina: 5.1.4 - rolldown: 1.0.0-rc.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + rolldown: 1.0.0-rc.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) sass: 1.97.3 semver: 7.7.4 source-map-support: 0.5.21 @@ -41478,7 +49400,7 @@ snapshots: tslib: 2.8.1 typescript: 5.9.3 undici: 7.24.4 - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.32.0)(sass@1.97.3)(stylus@0.64.0)(terser@5.46.0)(yaml@2.8.3) + vite: 7.3.2(@types/node@25.6.0)(jiti@2.7.0)(less@4.4.2)(lightningcss@1.32.0)(sass@1.97.3)(stylus@0.64.0)(terser@5.46.0)(yaml@2.8.3) watchpack: 2.5.1 optionalDependencies: "@angular/core": 21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1) @@ -41488,7 +49410,7 @@ snapshots: lmdb: 3.5.1 ng-packagr: 21.2.2(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3) postcss: 8.5.6 - vitest: 4.1.4(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(jsdom@29.0.2(canvas@3.2.3))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) + vitest: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(jsdom@29.0.2(canvas@3.2.3))(vite@8.0.11(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) transitivePeerDependencies: - "@emnapi/core" - "@emnapi/runtime" @@ -41536,6 +49458,12 @@ snapshots: rxjs: 7.8.2 tslib: 2.8.1 + "@angular/common@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2)": + dependencies: + "@angular/core": 21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1) + rxjs: 7.8.2 + tslib: 2.8.1 + "@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@5.9.3)": dependencies: "@angular/compiler": 21.2.8 @@ -41552,10 +49480,30 @@ snapshots: transitivePeerDependencies: - supports-color + "@angular/compiler-cli@21.2.9(@angular/compiler@21.2.9)(typescript@5.9.3)": + dependencies: + "@angular/compiler": 21.2.9 + "@babel/core": 7.29.0 + "@jridgewell/sourcemap-codec": 1.5.5 + chokidar: 5.0.0 + convert-source-map: 1.9.0 + reflect-metadata: 0.2.2 + semver: 7.7.4 + tslib: 2.8.1 + yargs: 18.0.0 + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + "@angular/compiler@21.2.8": dependencies: tslib: 2.8.1 + "@angular/compiler@21.2.9": + dependencies: + tslib: 2.8.1 + "@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)": dependencies: rxjs: 7.8.2 @@ -41564,6 +49512,14 @@ snapshots: "@angular/compiler": 21.2.8 zone.js: 0.16.1 + "@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1)": + dependencies: + rxjs: 7.8.2 + tslib: 2.8.1 + optionalDependencies: + "@angular/compiler": 21.2.9 + zone.js: 0.16.1 + "@angular/forms@21.2.8(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)": dependencies: "@angular/common": 21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) @@ -41573,6 +49529,15 @@ snapshots: rxjs: 7.8.2 tslib: 2.8.1 + "@angular/forms@21.2.9(@angular/common@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.9(@angular/animations@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)": + dependencies: + "@angular/common": 21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + "@angular/core": 21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1) + "@angular/platform-browser": 21.2.9(@angular/animations@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1)) + "@standard-schema/spec": 1.1.0 + rxjs: 7.8.2 + tslib: 2.8.1 + "@angular/language-service@21.2.8": {} "@angular/platform-browser-dynamic@21.2.8(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@21.2.8)(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))": @@ -41583,6 +49548,14 @@ snapshots: "@angular/platform-browser": 21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)) tslib: 2.8.1 + "@angular/platform-browser-dynamic@21.2.9(@angular/common@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@21.2.9)(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.9(@angular/animations@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1)))": + dependencies: + "@angular/common": 21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + "@angular/compiler": 21.2.9 + "@angular/core": 21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1) + "@angular/platform-browser": 21.2.9(@angular/animations@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1)) + tslib: 2.8.1 + "@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))": dependencies: "@angular/common": 21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) @@ -41591,6 +49564,14 @@ snapshots: optionalDependencies: "@angular/animations": 21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)) + "@angular/platform-browser@21.2.9(@angular/animations@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))": + dependencies: + "@angular/common": 21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + "@angular/core": 21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1) + tslib: 2.8.1 + optionalDependencies: + "@angular/animations": 21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1)) + "@angular/router@21.2.8(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.8(@angular/animations@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)": dependencies: "@angular/common": 21.2.8(@angular/core@21.2.8(@angular/compiler@21.2.8)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) @@ -41599,6 +49580,14 @@ snapshots: rxjs: 7.8.2 tslib: 2.8.1 + "@angular/router@21.2.9(@angular/common@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.9(@angular/animations@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)": + dependencies: + "@angular/common": 21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + "@angular/core": 21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1) + "@angular/platform-browser": 21.2.9(@angular/animations@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.9(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.9(@angular/compiler@21.2.9)(rxjs@7.8.2)(zone.js@0.16.1)) + rxjs: 7.8.2 + tslib: 2.8.1 + "@apideck/better-ajv-errors@0.3.7(ajv@8.18.0)": dependencies: ajv: 8.18.0 @@ -41607,19 +49596,19 @@ snapshots: "@ariakit/core@0.4.19": {} - "@ariakit/react-core@0.4.25(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": + "@ariakit/react-core@0.4.25(react-dom@19.2.5(react@19.2.5))(react@19.2.5)": dependencies: "@ariakit/core": 0.4.19 "@floating-ui/dom": 1.7.6 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - use-sync-external-store: 1.6.0(react@18.3.1) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + use-sync-external-store: 1.6.0(react@19.2.5) - "@ariakit/react@0.4.25(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": + "@ariakit/react@0.4.25(react-dom@19.2.5(react@19.2.5))(react@19.2.5)": dependencies: - "@ariakit/react-core": 0.4.25(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + "@ariakit/react-core": 0.4.25(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) "@asamuzakjp/css-color@3.2.0": dependencies: @@ -41684,9 +49673,9 @@ snapshots: "@ast-grep/napi-win32-ia32-msvc": 0.36.3 "@ast-grep/napi-win32-x64-msvc": 0.36.3 - "@astrojs/check@0.9.8(prettier@3.8.3)(typescript@5.9.3)": + "@astrojs/check@0.9.8(prettier-plugin-astro@0.14.1)(prettier@3.8.3)(typescript@5.9.3)": dependencies: - "@astrojs/language-server": 2.16.6(prettier@3.8.3)(typescript@5.9.3) + "@astrojs/language-server": 2.16.6(prettier-plugin-astro@0.14.1)(prettier@3.8.3)(typescript@5.9.3) chokidar: 4.0.3 kleur: 4.1.5 typescript: 5.9.3 @@ -41699,11 +49688,17 @@ snapshots: "@astrojs/compiler@3.0.1": {} + "@astrojs/compiler@4.0.0": {} + "@astrojs/internal-helpers@0.8.0": dependencies: picomatch: 4.0.4 - "@astrojs/language-server@2.16.6(prettier@3.8.3)(typescript@5.9.3)": + "@astrojs/internal-helpers@0.9.0": + dependencies: + picomatch: 4.0.4 + + "@astrojs/language-server@2.16.6(prettier-plugin-astro@0.14.1)(prettier@3.8.3)(typescript@5.9.3)": dependencies: "@astrojs/compiler": 2.13.1 "@astrojs/yaml2ts": 0.2.3 @@ -41725,6 +49720,7 @@ snapshots: vscode-uri: 3.1.0 optionalDependencies: prettier: 3.8.3 + prettier-plugin-astro: 0.14.1 transitivePeerDependencies: - typescript @@ -41754,6 +49750,32 @@ snapshots: transitivePeerDependencies: - supports-color + "@astrojs/markdown-remark@7.1.1": + dependencies: + "@astrojs/internal-helpers": 0.9.0 + "@astrojs/prism": 4.0.1 + github-slugger: 2.0.0 + hast-util-from-html: 2.0.3 + hast-util-to-text: 4.0.2 + js-yaml: 4.1.1 + mdast-util-definitions: 6.0.0 + rehype-raw: 7.0.0 + rehype-stringify: 10.0.1 + remark-gfm: 4.0.1 + remark-parse: 11.0.0 + remark-rehype: 11.1.2 + remark-smartypants: 3.0.2 + retext-smartypants: 6.2.0 + shiki: 4.0.2 + smol-toml: 1.6.1 + unified: 11.0.5 + unist-util-remove-position: 5.0.0 + unist-util-visit: 5.1.0 + unist-util-visit-parents: 6.0.2 + vfile: 6.0.3 + transitivePeerDependencies: + - supports-color + "@astrojs/prism@4.0.1": dependencies: prismjs: 1.30.0 @@ -41770,36 +49792,45 @@ snapshots: transitivePeerDependencies: - supports-color + "@astrojs/telemetry@3.3.1": + dependencies: + ci-info: 4.4.0 + dlv: 1.1.3 + dset: 3.1.4 + is-docker: 4.0.0 + is-wsl: 3.1.1 + which-pm-runs: 1.1.0 + "@astrojs/yaml2ts@0.2.3": dependencies: yaml: 2.8.3 - "@augment-vir/assert@31.59.3": + "@augment-vir/assert@31.68.4": dependencies: - "@augment-vir/core": 31.59.3 - "@date-vir/duration": 8.1.0 + "@augment-vir/core": 31.68.4 + "@date-vir/duration": 8.3.2 deep-eql: 5.0.2 expect-type: 1.3.0 - type-fest: 5.4.4 + type-fest: 5.5.0 - "@augment-vir/common@31.59.3": + "@augment-vir/common@31.68.4": dependencies: - "@augment-vir/assert": 31.59.3 - "@augment-vir/core": 31.59.3 - "@date-vir/duration": 8.1.0 + "@augment-vir/assert": 31.68.4 + "@augment-vir/core": 31.68.4 + "@date-vir/duration": 8.3.2 ansi-styles: 6.2.3 deepcopy-esm: 2.1.1 json5: 2.2.3 - type-fest: 5.4.4 - typed-event-target: 4.1.0 + type-fest: 5.5.0 + typed-event-target: 4.3.0 - "@augment-vir/core@31.59.3": + "@augment-vir/core@31.68.4": dependencies: - "@date-vir/duration": 8.1.0 + "@date-vir/duration": 8.3.2 browser-or-node: 3.0.0 diff: 8.0.4 json5: 2.2.3 - type-fest: 5.4.4 + type-fest: 5.5.0 "@babel/code-frame@7.29.0": dependencies: @@ -41849,27 +49880,35 @@ snapshots: transitivePeerDependencies: - supports-color - "@babel/eslint-parser@7.25.7(@babel/core@7.25.7)(eslint@8.57.1)": + "@babel/eslint-parser@7.28.6(@babel/core@7.25.7)(eslint@10.3.0(jiti@2.7.0))": dependencies: "@babel/core": 7.25.7 "@nicolo-ribaudo/eslint-scope-5-internals": 5.1.1-v1 - eslint: 8.57.1 + eslint: 10.3.0(jiti@2.7.0) eslint-visitor-keys: 2.1.0 semver: 6.3.1 - "@babel/eslint-parser@7.28.6(@babel/core@7.29.0)(eslint@10.2.0(jiti@2.6.1))": + "@babel/eslint-parser@7.28.6(@babel/core@7.29.0)(eslint@10.2.0(jiti@2.7.0))": dependencies: "@babel/core": 7.29.0 "@nicolo-ribaudo/eslint-scope-5-internals": 5.1.1-v1 - eslint: 10.2.0(jiti@2.6.1) + eslint: 10.2.0(jiti@2.7.0) + eslint-visitor-keys: 2.1.0 + semver: 6.3.1 + + "@babel/eslint-parser@7.28.6(@babel/core@7.29.0)(eslint@10.2.1(jiti@2.7.0))": + dependencies: + "@babel/core": 7.29.0 + "@nicolo-ribaudo/eslint-scope-5-internals": 5.1.1-v1 + eslint: 10.2.1(jiti@2.7.0) eslint-visitor-keys: 2.1.0 semver: 6.3.1 - "@babel/eslint-parser@7.28.6(@babel/core@7.29.0)(eslint@8.57.1)": + "@babel/eslint-parser@7.28.6(@babel/core@7.29.0)(eslint@10.3.0(jiti@2.7.0))": dependencies: "@babel/core": 7.29.0 "@nicolo-ribaudo/eslint-scope-5-internals": 5.1.1-v1 - eslint: 8.57.1 + eslint: 10.3.0(jiti@2.7.0) eslint-visitor-keys: 2.1.0 semver: 6.3.1 @@ -43511,28 +51550,28 @@ snapshots: "@babel/helper-string-parser": 7.27.1 "@babel/helper-validator-identifier": 7.28.5 - "@base-ui/react@1.4.0(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": + "@base-ui/react@1.4.1(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)": dependencies: "@babel/runtime": 7.29.2 - "@base-ui/utils": 0.2.7(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - "@date-fns/tz": 1.4.1 - "@floating-ui/react-dom": 2.1.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@base-ui/utils": 0.2.8(@types/react@18.3.28)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + "@floating-ui/react-dom": 2.1.8(react-dom@19.2.5(react@19.2.5))(react@19.2.5) "@floating-ui/utils": 0.2.11 - date-fns: 4.1.0 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - use-sync-external-store: 1.6.0(react@18.3.1) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + use-sync-external-store: 1.6.0(react@19.2.5) optionalDependencies: + "@date-fns/tz": 1.4.1 "@types/react": 18.3.28 + date-fns: 4.1.0 - "@base-ui/utils@0.2.7(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": + "@base-ui/utils@0.2.8(@types/react@18.3.28)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)": dependencies: "@babel/runtime": 7.29.2 "@floating-ui/utils": 0.2.11 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) reselect: 5.1.1 - use-sync-external-store: 1.6.0(react@18.3.1) + use-sync-external-store: 1.6.0(react@19.2.5) optionalDependencies: "@types/react": 18.3.28 @@ -43550,12 +51589,12 @@ snapshots: dependencies: css-tree: 3.2.1 - "@builder.io/qwik@1.19.2(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))": + "@builder.io/qwik@1.19.2(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))": dependencies: csstype: 3.2.3 launch-editor: 2.13.2 - rollup: 4.60.1 - vite: 8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + rollup: 4.60.2 + vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) "@cacheable/memory@2.0.8": dependencies: @@ -43640,116 +51679,110 @@ snapshots: "@colors/colors@1.6.0": {} - "@commitlint/cli@20.5.0(@types/node@25.6.0)(conventional-commits-parser@6.3.0)(typescript@6.0.2)": + "@commitlint/cli@21.0.0(@types/node@25.6.2)(conventional-commits-parser@6.3.0)(typescript@6.0.3)": dependencies: - "@commitlint/format": 20.5.0 - "@commitlint/lint": 20.5.0 - "@commitlint/load": 20.5.0(@types/node@25.6.0)(typescript@6.0.2) - "@commitlint/read": 20.5.0(conventional-commits-parser@6.3.0) - "@commitlint/types": 20.5.0 - tinyexec: 1.0.2 - yargs: 17.7.2 + "@commitlint/format": 21.0.0 + "@commitlint/lint": 21.0.0 + "@commitlint/load": 21.0.0(@types/node@25.6.2)(typescript@6.0.3) + "@commitlint/read": 21.0.0(conventional-commits-parser@6.3.0) + "@commitlint/types": 21.0.0 + tinyexec: 1.1.1 + yargs: 18.0.0 transitivePeerDependencies: - "@types/node" - conventional-commits-filter - conventional-commits-parser - typescript - "@commitlint/config-conventional@20.5.0": + "@commitlint/config-conventional@21.0.0": dependencies: - "@commitlint/types": 20.5.0 + "@commitlint/types": 21.0.0 conventional-changelog-conventionalcommits: 9.3.0 - "@commitlint/config-validator@20.5.0": + "@commitlint/config-validator@21.0.0": dependencies: - "@commitlint/types": 20.5.0 + "@commitlint/types": 21.0.0 ajv: 8.18.0 - "@commitlint/ensure@20.5.0": + "@commitlint/ensure@21.0.0": dependencies: - "@commitlint/types": 20.5.0 - lodash.camelcase: 4.3.0 - lodash.kebabcase: 4.1.1 - lodash.snakecase: 4.1.1 - lodash.startcase: 4.4.0 - lodash.upperfirst: 4.3.1 + "@commitlint/types": 21.0.0 + es-toolkit: 1.46.1 - "@commitlint/execute-rule@20.0.0": {} + "@commitlint/execute-rule@21.0.0": {} - "@commitlint/format@20.5.0": + "@commitlint/format@21.0.0": dependencies: - "@commitlint/types": 20.5.0 + "@commitlint/types": 21.0.0 picocolors: 1.1.1 - "@commitlint/is-ignored@20.5.0": + "@commitlint/is-ignored@21.0.0": dependencies: - "@commitlint/types": 20.5.0 + "@commitlint/types": 21.0.0 semver: 7.7.4 - "@commitlint/lint@20.5.0": + "@commitlint/lint@21.0.0": dependencies: - "@commitlint/is-ignored": 20.5.0 - "@commitlint/parse": 20.5.0 - "@commitlint/rules": 20.5.0 - "@commitlint/types": 20.5.0 + "@commitlint/is-ignored": 21.0.0 + "@commitlint/parse": 21.0.0 + "@commitlint/rules": 21.0.0 + "@commitlint/types": 21.0.0 - "@commitlint/load@20.5.0(@types/node@25.6.0)(typescript@6.0.2)": + "@commitlint/load@21.0.0(@types/node@25.6.2)(typescript@6.0.3)": dependencies: - "@commitlint/config-validator": 20.5.0 - "@commitlint/execute-rule": 20.0.0 - "@commitlint/resolve-extends": 20.5.0 - "@commitlint/types": 20.5.0 - cosmiconfig: 9.0.1(typescript@6.0.2) - cosmiconfig-typescript-loader: 6.1.0(@types/node@25.6.0)(cosmiconfig@9.0.1(typescript@6.0.2))(typescript@6.0.2) + "@commitlint/config-validator": 21.0.0 + "@commitlint/execute-rule": 21.0.0 + "@commitlint/resolve-extends": 21.0.0 + "@commitlint/types": 21.0.0 + cosmiconfig: 9.0.1(typescript@6.0.3) + cosmiconfig-typescript-loader: 6.1.0(@types/node@25.6.2)(cosmiconfig@9.0.1(typescript@6.0.3))(typescript@6.0.3) + es-toolkit: 1.46.1 is-plain-obj: 4.1.0 - lodash.mergewith: 4.6.2 picocolors: 1.1.1 transitivePeerDependencies: - "@types/node" - typescript - "@commitlint/message@20.4.3": {} + "@commitlint/message@21.0.0": {} - "@commitlint/parse@20.5.0": + "@commitlint/parse@21.0.0": dependencies: - "@commitlint/types": 20.5.0 + "@commitlint/types": 21.0.0 conventional-changelog-angular: 8.3.0 conventional-commits-parser: 6.3.0 - "@commitlint/read@20.5.0(conventional-commits-parser@6.3.0)": + "@commitlint/read@21.0.0(conventional-commits-parser@6.3.0)": dependencies: - "@commitlint/top-level": 20.4.3 - "@commitlint/types": 20.5.0 + "@commitlint/top-level": 21.0.0 + "@commitlint/types": 21.0.0 git-raw-commits: 5.0.1(conventional-commits-parser@6.3.0) - minimist: 1.2.8 - tinyexec: 1.0.2 + tinyexec: 1.1.1 transitivePeerDependencies: - conventional-commits-filter - conventional-commits-parser - "@commitlint/resolve-extends@20.5.0": + "@commitlint/resolve-extends@21.0.0": dependencies: - "@commitlint/config-validator": 20.5.0 - "@commitlint/types": 20.5.0 - global-directory: 4.0.1 - import-meta-resolve: 4.2.0 - lodash.mergewith: 4.6.2 + "@commitlint/config-validator": 21.0.0 + "@commitlint/types": 21.0.0 + es-toolkit: 1.46.1 + global-directory: 5.0.0 resolve-from: 5.0.0 - "@commitlint/rules@20.5.0": + "@commitlint/rules@21.0.0": dependencies: - "@commitlint/ensure": 20.5.0 - "@commitlint/message": 20.4.3 - "@commitlint/to-lines": 20.0.0 - "@commitlint/types": 20.5.0 + "@commitlint/ensure": 21.0.0 + "@commitlint/message": 21.0.0 + "@commitlint/to-lines": 21.0.0 + "@commitlint/types": 21.0.0 - "@commitlint/to-lines@20.0.0": {} + "@commitlint/to-lines@21.0.0": {} - "@commitlint/top-level@20.4.3": + "@commitlint/top-level@21.0.0": dependencies: escalade: 3.2.0 - "@commitlint/types@20.5.0": + "@commitlint/types@21.0.0": dependencies: conventional-commits-parser: 6.3.0 picocolors: 1.1.1 @@ -44080,11 +52113,12 @@ snapshots: "@date-fns/utc@2.1.1": {} - "@date-vir/duration@8.1.0": + "@date-vir/duration@8.3.2": dependencies: + "@augment-vir/assert": 31.68.4 "@types/luxon": 3.7.1 luxon: 3.7.2 - type-fest: 5.4.4 + type-fest: 5.5.0 "@discoveryjs/json-ext@0.5.7": {} @@ -44092,6 +52126,33 @@ snapshots: "@discoveryjs/json-ext@1.0.0": {} + "@docsearch/css@3.8.2": {} + + "@docsearch/js@3.8.2(@algolia/client-search@5.48.1)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)": + dependencies: + "@docsearch/react": 3.8.2(@algolia/client-search@5.48.1)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3) + preact: 10.29.1 + transitivePeerDependencies: + - "@algolia/client-search" + - "@types/react" + - react + - react-dom + - search-insights + + "@docsearch/react@3.8.2(@algolia/client-search@5.48.1)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)": + dependencies: + "@algolia/autocomplete-core": 1.17.7(@algolia/client-search@5.48.1)(algoliasearch@5.48.1)(search-insights@2.17.3) + "@algolia/autocomplete-preset-algolia": 1.17.7(@algolia/client-search@5.48.1)(algoliasearch@5.48.1) + "@docsearch/css": 3.8.2 + algoliasearch: 5.48.1 + optionalDependencies: + "@types/react": 18.3.28 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + search-insights: 2.17.3 + transitivePeerDependencies: + - "@algolia/client-search" + "@dual-bundle/import-meta-resolve@4.2.1": {} "@dxup/nuxt@0.4.0(magicast@0.5.2)(typescript@6.0.2)": @@ -44107,6 +52168,12 @@ snapshots: "@dxup/unimport@0.1.2": {} + "@electron/asar@4.2.0": + dependencies: + commander: 13.1.0 + glob: 13.0.6 + minimatch: 10.2.5 + "@electron/get@2.0.3": dependencies: debug: 4.4.3(supports-color@5.5.0) @@ -44121,6 +52188,74 @@ snapshots: transitivePeerDependencies: - supports-color + "@electron/get@5.0.0": + dependencies: + debug: 4.4.3(supports-color@5.5.0) + env-paths: 3.0.0 + graceful-fs: 4.2.11 + progress: 2.0.3 + semver: 7.7.4 + sumchecker: 3.0.1 + optionalDependencies: + undici: 7.24.7 + transitivePeerDependencies: + - supports-color + + "@electron/notarize@3.1.1": + dependencies: + debug: 4.4.3(supports-color@5.5.0) + promise-retry: 2.0.1 + transitivePeerDependencies: + - supports-color + + "@electron/osx-sign@2.4.0": + dependencies: + debug: 4.4.3(supports-color@5.5.0) + isbinaryfile: 4.0.10 + plist: 3.1.0 + semver: 7.7.4 + transitivePeerDependencies: + - supports-color + + "@electron/packager@20.0.0": + dependencies: + "@electron/asar": 4.2.0 + "@electron/get": 5.0.0 + "@electron/notarize": 3.1.1 + "@electron/osx-sign": 2.4.0 + "@electron/universal": 3.0.4 + "@electron/windows-sign": 2.0.3 + "@malept/cross-spawn-promise": 2.0.0 + debug: 4.4.3(supports-color@5.5.0) + extract-zip: 2.0.1 + filenamify: 6.0.0 + galactus: 2.0.2 + graceful-fs: 4.2.11 + junk: 4.0.1 + parse-author: 2.0.0 + plist: 3.1.0 + resedit: 2.0.3 + semver: 7.7.4 + yargs-parser: 22.0.0 + transitivePeerDependencies: + - supports-color + + "@electron/universal@3.0.4": + dependencies: + "@electron/asar": 4.2.0 + debug: 4.4.3(supports-color@5.5.0) + plist: 3.1.0 + transitivePeerDependencies: + - supports-color + + "@electron/windows-sign@2.0.3": + dependencies: + debug: 4.4.3(supports-color@5.5.0) + graceful-fs: 4.2.11 + postject: 1.0.0-alpha.6 + transitivePeerDependencies: + - supports-color + "@ember-data/rfc395-data@0.0.4": {} "@ember-tooling/blueprint-blueprint@0.2.1": {} @@ -44180,6 +52315,16 @@ snapshots: - "@types/node" - supports-color + "@ember/optional-features@3.0.0(@types/node@25.6.2)": + dependencies: + ember-cli-version-checker: 5.1.2 + inquirer: 13.4.1(@types/node@25.6.2) + silent-error: 1.1.1 + tinyglobby: 0.2.16 + transitivePeerDependencies: + - "@types/node" + - supports-color + "@ember/test-helpers@5.4.1(@babel/core@7.29.0)": dependencies: "@ember/test-waiters": 3.1.0 @@ -44293,25 +52438,38 @@ snapshots: "@emmetio/stream-reader@2.2.0": {} - "@emnapi/core@1.8.1": + "@emnapi/core@1.10.0": dependencies: - "@emnapi/wasi-threads": 1.1.0 + "@emnapi/wasi-threads": 1.2.1 tslib: 2.8.1 optional: true + "@emnapi/core@1.4.5": + dependencies: + "@emnapi/wasi-threads": 1.0.4 + tslib: 2.8.1 + "@emnapi/core@1.9.2": dependencies: "@emnapi/wasi-threads": 1.2.1 tslib: 2.8.1 + "@emnapi/runtime@1.10.0": + dependencies: + tslib: 2.8.1 + optional: true + + "@emnapi/runtime@1.4.5": + dependencies: + tslib: 2.8.1 + "@emnapi/runtime@1.9.2": dependencies: tslib: 2.8.1 - "@emnapi/wasi-threads@1.1.0": + "@emnapi/wasi-threads@1.0.4": dependencies: tslib: 2.8.1 - optional: true "@emnapi/wasi-threads@1.2.1": dependencies: @@ -44359,17 +52517,17 @@ snapshots: "@emotion/memoize@0.9.0": {} - "@emotion/react@11.14.0(@types/react@18.3.28)(react@18.3.1)": + "@emotion/react@11.14.0(@types/react@18.3.28)(react@19.2.5)": dependencies: "@babel/runtime": 7.29.2 "@emotion/babel-plugin": 11.13.5 "@emotion/cache": 11.14.0 "@emotion/serialize": 1.3.3 - "@emotion/use-insertion-effect-with-fallbacks": 1.2.0(react@18.3.1) + "@emotion/use-insertion-effect-with-fallbacks": 1.2.0(react@19.2.5) "@emotion/utils": 1.4.2 "@emotion/weak-memoize": 0.4.0 hoist-non-react-statics: 3.3.2 - react: 18.3.1 + react: 19.2.5 optionalDependencies: "@types/react": 18.3.28 transitivePeerDependencies: @@ -44385,16 +52543,16 @@ snapshots: "@emotion/sheet@1.4.0": {} - "@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@18.3.28)(react@18.3.1))(@types/react@18.3.28)(react@18.3.1)": + "@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@18.3.28)(react@19.2.5))(@types/react@18.3.28)(react@19.2.5)": dependencies: "@babel/runtime": 7.29.2 "@emotion/babel-plugin": 11.13.5 "@emotion/is-prop-valid": 1.4.0 - "@emotion/react": 11.14.0(@types/react@18.3.28)(react@18.3.1) + "@emotion/react": 11.14.0(@types/react@18.3.28)(react@19.2.5) "@emotion/serialize": 1.3.3 - "@emotion/use-insertion-effect-with-fallbacks": 1.2.0(react@18.3.1) + "@emotion/use-insertion-effect-with-fallbacks": 1.2.0(react@19.2.5) "@emotion/utils": 1.4.2 - react: 18.3.1 + react: 19.2.5 optionalDependencies: "@types/react": 18.3.28 transitivePeerDependencies: @@ -44402,9 +52560,9 @@ snapshots: "@emotion/unitless@0.10.0": {} - "@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@18.3.1)": + "@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@19.2.5)": dependencies: - react: 18.3.1 + react: 19.2.5 "@emotion/utils@1.4.2": {} @@ -44412,15 +52570,17 @@ snapshots: "@epic-web/invariant@1.0.0": {} - "@es-joy/jsdoccomment@0.41.0": + "@es-joy/jsdoccomment@0.50.2": dependencies: + "@types/estree": 1.0.9 + "@typescript-eslint/types": 8.59.1 comment-parser: 1.4.1 esquery: 1.7.0 - jsdoc-type-pratt-parser: 4.0.0 + jsdoc-type-pratt-parser: 4.1.0 "@es-joy/jsdoccomment@0.86.0": dependencies: - "@types/estree": 1.0.8 + "@types/estree": 1.0.9 "@typescript-eslint/types": 8.58.0 comment-parser: 1.4.6 esquery: 1.7.0 @@ -44434,471 +52594,337 @@ snapshots: "@esbuild/aix-ppc64@0.25.12": optional: true - "@esbuild/aix-ppc64@0.27.2": - optional: true - "@esbuild/aix-ppc64@0.27.3": optional: true "@esbuild/aix-ppc64@0.27.7": optional: true - "@esbuild/aix-ppc64@0.28.0": - optional: true - "@esbuild/android-arm64@0.21.5": optional: true "@esbuild/android-arm64@0.25.12": optional: true - "@esbuild/android-arm64@0.27.2": - optional: true - "@esbuild/android-arm64@0.27.3": optional: true "@esbuild/android-arm64@0.27.7": optional: true - "@esbuild/android-arm64@0.28.0": - optional: true - "@esbuild/android-arm@0.21.5": optional: true "@esbuild/android-arm@0.25.12": optional: true - "@esbuild/android-arm@0.27.2": - optional: true - "@esbuild/android-arm@0.27.3": optional: true "@esbuild/android-arm@0.27.7": optional: true - "@esbuild/android-arm@0.28.0": - optional: true - "@esbuild/android-x64@0.21.5": optional: true "@esbuild/android-x64@0.25.12": optional: true - "@esbuild/android-x64@0.27.2": - optional: true - "@esbuild/android-x64@0.27.3": optional: true "@esbuild/android-x64@0.27.7": optional: true - "@esbuild/android-x64@0.28.0": - optional: true - "@esbuild/darwin-arm64@0.21.5": optional: true "@esbuild/darwin-arm64@0.25.12": optional: true - "@esbuild/darwin-arm64@0.27.2": - optional: true - "@esbuild/darwin-arm64@0.27.3": optional: true "@esbuild/darwin-arm64@0.27.7": optional: true - "@esbuild/darwin-arm64@0.28.0": - optional: true - "@esbuild/darwin-x64@0.21.5": optional: true "@esbuild/darwin-x64@0.25.12": optional: true - "@esbuild/darwin-x64@0.27.2": - optional: true - "@esbuild/darwin-x64@0.27.3": optional: true "@esbuild/darwin-x64@0.27.7": optional: true - "@esbuild/darwin-x64@0.28.0": - optional: true - "@esbuild/freebsd-arm64@0.21.5": optional: true "@esbuild/freebsd-arm64@0.25.12": optional: true - "@esbuild/freebsd-arm64@0.27.2": - optional: true - "@esbuild/freebsd-arm64@0.27.3": optional: true "@esbuild/freebsd-arm64@0.27.7": optional: true - "@esbuild/freebsd-arm64@0.28.0": - optional: true - "@esbuild/freebsd-x64@0.21.5": optional: true "@esbuild/freebsd-x64@0.25.12": optional: true - "@esbuild/freebsd-x64@0.27.2": - optional: true - "@esbuild/freebsd-x64@0.27.3": optional: true "@esbuild/freebsd-x64@0.27.7": optional: true - "@esbuild/freebsd-x64@0.28.0": - optional: true - "@esbuild/linux-arm64@0.21.5": optional: true "@esbuild/linux-arm64@0.25.12": optional: true - "@esbuild/linux-arm64@0.27.2": - optional: true - "@esbuild/linux-arm64@0.27.3": optional: true "@esbuild/linux-arm64@0.27.7": optional: true - "@esbuild/linux-arm64@0.28.0": - optional: true - "@esbuild/linux-arm@0.21.5": optional: true "@esbuild/linux-arm@0.25.12": optional: true - "@esbuild/linux-arm@0.27.2": - optional: true - "@esbuild/linux-arm@0.27.3": optional: true "@esbuild/linux-arm@0.27.7": optional: true - "@esbuild/linux-arm@0.28.0": - optional: true - "@esbuild/linux-ia32@0.21.5": optional: true "@esbuild/linux-ia32@0.25.12": optional: true - "@esbuild/linux-ia32@0.27.2": - optional: true - "@esbuild/linux-ia32@0.27.3": optional: true "@esbuild/linux-ia32@0.27.7": optional: true - "@esbuild/linux-ia32@0.28.0": - optional: true - "@esbuild/linux-loong64@0.21.5": optional: true "@esbuild/linux-loong64@0.25.12": optional: true - "@esbuild/linux-loong64@0.27.2": - optional: true - "@esbuild/linux-loong64@0.27.3": optional: true "@esbuild/linux-loong64@0.27.7": optional: true - "@esbuild/linux-loong64@0.28.0": - optional: true - "@esbuild/linux-mips64el@0.21.5": optional: true "@esbuild/linux-mips64el@0.25.12": optional: true - "@esbuild/linux-mips64el@0.27.2": - optional: true - "@esbuild/linux-mips64el@0.27.3": optional: true "@esbuild/linux-mips64el@0.27.7": optional: true - "@esbuild/linux-mips64el@0.28.0": - optional: true - "@esbuild/linux-ppc64@0.21.5": optional: true "@esbuild/linux-ppc64@0.25.12": optional: true - "@esbuild/linux-ppc64@0.27.2": - optional: true - "@esbuild/linux-ppc64@0.27.3": optional: true "@esbuild/linux-ppc64@0.27.7": optional: true - "@esbuild/linux-ppc64@0.28.0": - optional: true - "@esbuild/linux-riscv64@0.21.5": optional: true "@esbuild/linux-riscv64@0.25.12": optional: true - "@esbuild/linux-riscv64@0.27.2": - optional: true - "@esbuild/linux-riscv64@0.27.3": optional: true "@esbuild/linux-riscv64@0.27.7": optional: true - "@esbuild/linux-riscv64@0.28.0": - optional: true - "@esbuild/linux-s390x@0.21.5": optional: true "@esbuild/linux-s390x@0.25.12": optional: true - "@esbuild/linux-s390x@0.27.2": - optional: true - "@esbuild/linux-s390x@0.27.3": optional: true "@esbuild/linux-s390x@0.27.7": optional: true - "@esbuild/linux-s390x@0.28.0": - optional: true - "@esbuild/linux-x64@0.21.5": optional: true "@esbuild/linux-x64@0.25.12": optional: true - "@esbuild/linux-x64@0.27.2": - optional: true - "@esbuild/linux-x64@0.27.3": optional: true "@esbuild/linux-x64@0.27.7": optional: true - "@esbuild/linux-x64@0.28.0": - optional: true - "@esbuild/netbsd-arm64@0.25.12": optional: true - "@esbuild/netbsd-arm64@0.27.2": - optional: true - "@esbuild/netbsd-arm64@0.27.3": optional: true "@esbuild/netbsd-arm64@0.27.7": optional: true - "@esbuild/netbsd-arm64@0.28.0": - optional: true - "@esbuild/netbsd-x64@0.21.5": optional: true "@esbuild/netbsd-x64@0.25.12": optional: true - "@esbuild/netbsd-x64@0.27.2": - optional: true - "@esbuild/netbsd-x64@0.27.3": optional: true "@esbuild/netbsd-x64@0.27.7": optional: true - "@esbuild/netbsd-x64@0.28.0": - optional: true - "@esbuild/openbsd-arm64@0.25.12": optional: true - "@esbuild/openbsd-arm64@0.27.2": - optional: true - "@esbuild/openbsd-arm64@0.27.3": optional: true "@esbuild/openbsd-arm64@0.27.7": optional: true - "@esbuild/openbsd-arm64@0.28.0": - optional: true - "@esbuild/openbsd-x64@0.21.5": optional: true "@esbuild/openbsd-x64@0.25.12": optional: true - "@esbuild/openbsd-x64@0.27.2": - optional: true - "@esbuild/openbsd-x64@0.27.3": optional: true "@esbuild/openbsd-x64@0.27.7": optional: true - "@esbuild/openbsd-x64@0.28.0": - optional: true - "@esbuild/openharmony-arm64@0.25.12": optional: true - "@esbuild/openharmony-arm64@0.27.2": - optional: true - "@esbuild/openharmony-arm64@0.27.3": optional: true "@esbuild/openharmony-arm64@0.27.7": optional: true - "@esbuild/openharmony-arm64@0.28.0": - optional: true - "@esbuild/sunos-x64@0.21.5": optional: true "@esbuild/sunos-x64@0.25.12": optional: true - "@esbuild/sunos-x64@0.27.2": - optional: true - "@esbuild/sunos-x64@0.27.3": optional: true "@esbuild/sunos-x64@0.27.7": optional: true - "@esbuild/sunos-x64@0.28.0": - optional: true - "@esbuild/win32-arm64@0.21.5": optional: true "@esbuild/win32-arm64@0.25.12": optional: true - "@esbuild/win32-arm64@0.27.2": - optional: true - "@esbuild/win32-arm64@0.27.3": optional: true "@esbuild/win32-arm64@0.27.7": optional: true - "@esbuild/win32-arm64@0.28.0": - optional: true - "@esbuild/win32-ia32@0.21.5": optional: true "@esbuild/win32-ia32@0.25.12": optional: true - "@esbuild/win32-ia32@0.27.2": - optional: true - "@esbuild/win32-ia32@0.27.3": optional: true "@esbuild/win32-ia32@0.27.7": optional: true - "@esbuild/win32-ia32@0.28.0": - optional: true - "@esbuild/win32-x64@0.21.5": optional: true "@esbuild/win32-x64@0.25.12": optional: true - "@esbuild/win32-x64@0.27.2": - optional: true - "@esbuild/win32-x64@0.27.3": optional: true "@esbuild/win32-x64@0.27.7": optional: true - "@esbuild/win32-x64@0.28.0": - optional: true + "@eslint-community/eslint-plugin-eslint-comments@4.7.1(eslint@10.3.0(jiti@2.7.0))": + dependencies: + escape-string-regexp: 4.0.0 + eslint: 10.3.0(jiti@2.7.0) + ignore: 7.0.5 "@eslint-community/eslint-utils@4.9.1(eslint@10.2.0(jiti@2.6.1))": dependencies: eslint: 10.2.0(jiti@2.6.1) eslint-visitor-keys: 3.4.3 - "@eslint-community/eslint-utils@4.9.1(eslint@8.57.1)": + "@eslint-community/eslint-utils@4.9.1(eslint@10.2.0(jiti@2.7.0))": dependencies: - eslint: 8.57.1 + eslint: 10.2.0(jiti@2.7.0) + eslint-visitor-keys: 3.4.3 + + "@eslint-community/eslint-utils@4.9.1(eslint@10.2.1(jiti@2.7.0))": + dependencies: + eslint: 10.2.1(jiti@2.7.0) + eslint-visitor-keys: 3.4.3 + + "@eslint-community/eslint-utils@4.9.1(eslint@10.3.0(jiti@2.7.0))": + dependencies: + eslint: 10.3.0(jiti@2.7.0) eslint-visitor-keys: 3.4.3 "@eslint-community/regexpp@4.12.2": {} + "@eslint/compat@2.0.5(eslint@10.3.0(jiti@2.7.0))": + dependencies: + "@eslint/core": 1.2.1 + optionalDependencies: + eslint: 10.3.0(jiti@2.7.0) + "@eslint/config-array@0.23.4": dependencies: "@eslint/object-schema": 3.0.4 @@ -44907,39 +52933,54 @@ snapshots: transitivePeerDependencies: - supports-color + "@eslint/config-array@0.23.5": + dependencies: + "@eslint/object-schema": 3.0.5 + debug: 4.4.3(supports-color@5.5.0) + minimatch: 10.2.5 + transitivePeerDependencies: + - supports-color + "@eslint/config-helpers@0.5.4": dependencies: - "@eslint/core": 1.2.0 + "@eslint/core": 1.2.1 + + "@eslint/config-helpers@0.5.5": + dependencies: + "@eslint/core": 1.2.1 "@eslint/core@1.2.0": dependencies: "@types/json-schema": 7.0.15 - "@eslint/eslintrc@2.1.4": + "@eslint/core@1.2.1": dependencies: - ajv: 6.14.0 - debug: 4.4.3(supports-color@5.5.0) - espree: 9.6.1 - globals: 13.24.0 - ignore: 5.3.1 - import-fresh: 3.3.0 - js-yaml: 4.1.1 - minimatch: 3.1.5 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color + "@types/json-schema": 7.0.15 "@eslint/js@10.0.1(eslint@10.2.0(jiti@2.6.1))": optionalDependencies: eslint: 10.2.0(jiti@2.6.1) - "@eslint/js@8.57.1": {} + "@eslint/js@10.0.1(eslint@10.2.0(jiti@2.7.0))": + optionalDependencies: + eslint: 10.2.0(jiti@2.7.0) + + "@eslint/js@10.0.1(eslint@10.3.0(jiti@2.7.0))": + optionalDependencies: + eslint: 10.3.0(jiti@2.7.0) "@eslint/object-schema@3.0.4": {} + "@eslint/object-schema@3.0.5": {} + "@eslint/plugin-kit@0.7.0": dependencies: - "@eslint/core": 1.2.0 + "@eslint/core": 1.2.1 + levn: 0.4.1 + + "@eslint/plugin-kit@0.7.1": + dependencies: + "@eslint/core": 1.2.1 levn: 0.4.1 "@esm-bundle/chai@4.3.4-fix.0": @@ -44957,17 +52998,17 @@ snapshots: "@floating-ui/core": 1.7.5 "@floating-ui/utils": 0.2.11 - "@floating-ui/react-dom@2.0.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": + "@floating-ui/react-dom@2.0.8(react-dom@19.2.5(react@19.2.5))(react@19.2.5)": dependencies: "@floating-ui/dom": 1.7.6 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) - "@floating-ui/react-dom@2.1.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": + "@floating-ui/react-dom@2.1.8(react-dom@19.2.5(react@19.2.5))(react@19.2.5)": dependencies: "@floating-ui/dom": 1.7.6 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) "@floating-ui/utils@0.2.11": {} @@ -45122,18 +53163,8 @@ snapshots: "@humanfs/core": 0.19.1 "@humanwhocodes/retry": 0.3.1 - "@humanwhocodes/config-array@0.13.0": - dependencies: - "@humanwhocodes/object-schema": 2.0.3 - debug: 4.4.3(supports-color@5.5.0) - minimatch: 3.1.5 - transitivePeerDependencies: - - supports-color - "@humanwhocodes/module-importer@1.0.1": {} - "@humanwhocodes/object-schema@2.0.3": {} - "@humanwhocodes/retry@0.3.1": {} "@humanwhocodes/retry@0.4.3": {} @@ -45142,6 +53173,12 @@ snapshots: "@iarna/toml@2.2.5": {} + "@iconify-json/simple-icons@1.2.80": + dependencies: + "@iconify/types": 2.0.0 + + "@iconify/types@2.0.0": {} + "@img/colour@1.1.0": optional: true @@ -45253,6 +53290,16 @@ snapshots: optionalDependencies: "@types/node": 25.6.0 + "@inquirer/checkbox@4.3.2(@types/node@25.6.2)": + dependencies: + "@inquirer/ansi": 1.0.2 + "@inquirer/core": 10.3.2(@types/node@25.6.2) + "@inquirer/figures": 1.0.15 + "@inquirer/type": 3.0.10(@types/node@25.6.2) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + "@types/node": 25.6.2 + "@inquirer/checkbox@5.1.3(@types/node@25.6.0)": dependencies: "@inquirer/ansi": 2.0.5 @@ -45262,6 +53309,15 @@ snapshots: optionalDependencies: "@types/node": 25.6.0 + "@inquirer/checkbox@5.1.3(@types/node@25.6.2)": + dependencies: + "@inquirer/ansi": 2.0.5 + "@inquirer/core": 11.1.8(@types/node@25.6.2) + "@inquirer/figures": 2.0.5 + "@inquirer/type": 4.0.5(@types/node@25.6.2) + optionalDependencies: + "@types/node": 25.6.2 + "@inquirer/confirm@5.1.21(@types/node@25.6.0)": dependencies: "@inquirer/core": 10.3.2(@types/node@25.6.0) @@ -45269,6 +53325,13 @@ snapshots: optionalDependencies: "@types/node": 25.6.0 + "@inquirer/confirm@5.1.21(@types/node@25.6.2)": + dependencies: + "@inquirer/core": 10.3.2(@types/node@25.6.2) + "@inquirer/type": 3.0.10(@types/node@25.6.2) + optionalDependencies: + "@types/node": 25.6.2 + "@inquirer/confirm@6.0.11(@types/node@25.6.0)": dependencies: "@inquirer/core": 11.1.8(@types/node@25.6.0) @@ -45276,6 +53339,13 @@ snapshots: optionalDependencies: "@types/node": 25.6.0 + "@inquirer/confirm@6.0.11(@types/node@25.6.2)": + dependencies: + "@inquirer/core": 11.1.8(@types/node@25.6.2) + "@inquirer/type": 4.0.5(@types/node@25.6.2) + optionalDependencies: + "@types/node": 25.6.2 + "@inquirer/core@10.3.2(@types/node@25.6.0)": dependencies: "@inquirer/ansi": 1.0.2 @@ -45289,6 +53359,19 @@ snapshots: optionalDependencies: "@types/node": 25.6.0 + "@inquirer/core@10.3.2(@types/node@25.6.2)": + dependencies: + "@inquirer/ansi": 1.0.2 + "@inquirer/figures": 1.0.15 + "@inquirer/type": 3.0.10(@types/node@25.6.2) + cli-width: 4.1.0 + mute-stream: 2.0.0 + signal-exit: 4.1.0 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.3 + optionalDependencies: + "@types/node": 25.6.2 + "@inquirer/core@11.1.8(@types/node@25.6.0)": dependencies: "@inquirer/ansi": 2.0.5 @@ -45301,6 +53384,18 @@ snapshots: optionalDependencies: "@types/node": 25.6.0 + "@inquirer/core@11.1.8(@types/node@25.6.2)": + dependencies: + "@inquirer/ansi": 2.0.5 + "@inquirer/figures": 2.0.5 + "@inquirer/type": 4.0.5(@types/node@25.6.2) + cli-width: 4.1.0 + fast-wrap-ansi: 0.2.0 + mute-stream: 3.0.0 + signal-exit: 4.1.0 + optionalDependencies: + "@types/node": 25.6.2 + "@inquirer/editor@4.2.23(@types/node@25.6.0)": dependencies: "@inquirer/core": 10.3.2(@types/node@25.6.0) @@ -45309,6 +53404,14 @@ snapshots: optionalDependencies: "@types/node": 25.6.0 + "@inquirer/editor@4.2.23(@types/node@25.6.2)": + dependencies: + "@inquirer/core": 10.3.2(@types/node@25.6.2) + "@inquirer/external-editor": 1.0.3(@types/node@25.6.2) + "@inquirer/type": 3.0.10(@types/node@25.6.2) + optionalDependencies: + "@types/node": 25.6.2 + "@inquirer/editor@5.1.0(@types/node@25.6.0)": dependencies: "@inquirer/core": 11.1.8(@types/node@25.6.0) @@ -45317,6 +53420,14 @@ snapshots: optionalDependencies: "@types/node": 25.6.0 + "@inquirer/editor@5.1.0(@types/node@25.6.2)": + dependencies: + "@inquirer/core": 11.1.8(@types/node@25.6.2) + "@inquirer/external-editor": 3.0.0(@types/node@25.6.2) + "@inquirer/type": 4.0.5(@types/node@25.6.2) + optionalDependencies: + "@types/node": 25.6.2 + "@inquirer/expand@4.0.23(@types/node@25.6.0)": dependencies: "@inquirer/core": 10.3.2(@types/node@25.6.0) @@ -45325,6 +53436,14 @@ snapshots: optionalDependencies: "@types/node": 25.6.0 + "@inquirer/expand@4.0.23(@types/node@25.6.2)": + dependencies: + "@inquirer/core": 10.3.2(@types/node@25.6.2) + "@inquirer/type": 3.0.10(@types/node@25.6.2) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + "@types/node": 25.6.2 + "@inquirer/expand@5.0.12(@types/node@25.6.0)": dependencies: "@inquirer/core": 11.1.8(@types/node@25.6.0) @@ -45332,6 +53451,13 @@ snapshots: optionalDependencies: "@types/node": 25.6.0 + "@inquirer/expand@5.0.12(@types/node@25.6.2)": + dependencies: + "@inquirer/core": 11.1.8(@types/node@25.6.2) + "@inquirer/type": 4.0.5(@types/node@25.6.2) + optionalDependencies: + "@types/node": 25.6.2 + "@inquirer/external-editor@1.0.3(@types/node@25.6.0)": dependencies: chardet: 2.1.1 @@ -45339,6 +53465,13 @@ snapshots: optionalDependencies: "@types/node": 25.6.0 + "@inquirer/external-editor@1.0.3(@types/node@25.6.2)": + dependencies: + chardet: 2.1.1 + iconv-lite: 0.7.2 + optionalDependencies: + "@types/node": 25.6.2 + "@inquirer/external-editor@3.0.0(@types/node@25.6.0)": dependencies: chardet: 2.1.1 @@ -45346,6 +53479,13 @@ snapshots: optionalDependencies: "@types/node": 25.6.0 + "@inquirer/external-editor@3.0.0(@types/node@25.6.2)": + dependencies: + chardet: 2.1.1 + iconv-lite: 0.7.2 + optionalDependencies: + "@types/node": 25.6.2 + "@inquirer/figures@1.0.15": {} "@inquirer/figures@2.0.5": {} @@ -45357,6 +53497,13 @@ snapshots: optionalDependencies: "@types/node": 25.6.0 + "@inquirer/input@4.3.1(@types/node@25.6.2)": + dependencies: + "@inquirer/core": 10.3.2(@types/node@25.6.2) + "@inquirer/type": 3.0.10(@types/node@25.6.2) + optionalDependencies: + "@types/node": 25.6.2 + "@inquirer/input@5.0.11(@types/node@25.6.0)": dependencies: "@inquirer/core": 11.1.8(@types/node@25.6.0) @@ -45364,6 +53511,13 @@ snapshots: optionalDependencies: "@types/node": 25.6.0 + "@inquirer/input@5.0.11(@types/node@25.6.2)": + dependencies: + "@inquirer/core": 11.1.8(@types/node@25.6.2) + "@inquirer/type": 4.0.5(@types/node@25.6.2) + optionalDependencies: + "@types/node": 25.6.2 + "@inquirer/number@3.0.23(@types/node@25.6.0)": dependencies: "@inquirer/core": 10.3.2(@types/node@25.6.0) @@ -45371,6 +53525,13 @@ snapshots: optionalDependencies: "@types/node": 25.6.0 + "@inquirer/number@3.0.23(@types/node@25.6.2)": + dependencies: + "@inquirer/core": 10.3.2(@types/node@25.6.2) + "@inquirer/type": 3.0.10(@types/node@25.6.2) + optionalDependencies: + "@types/node": 25.6.2 + "@inquirer/number@4.0.11(@types/node@25.6.0)": dependencies: "@inquirer/core": 11.1.8(@types/node@25.6.0) @@ -45378,6 +53539,13 @@ snapshots: optionalDependencies: "@types/node": 25.6.0 + "@inquirer/number@4.0.11(@types/node@25.6.2)": + dependencies: + "@inquirer/core": 11.1.8(@types/node@25.6.2) + "@inquirer/type": 4.0.5(@types/node@25.6.2) + optionalDependencies: + "@types/node": 25.6.2 + "@inquirer/password@4.0.23(@types/node@25.6.0)": dependencies: "@inquirer/ansi": 1.0.2 @@ -45386,6 +53554,14 @@ snapshots: optionalDependencies: "@types/node": 25.6.0 + "@inquirer/password@4.0.23(@types/node@25.6.2)": + dependencies: + "@inquirer/ansi": 1.0.2 + "@inquirer/core": 10.3.2(@types/node@25.6.2) + "@inquirer/type": 3.0.10(@types/node@25.6.2) + optionalDependencies: + "@types/node": 25.6.2 + "@inquirer/password@5.0.11(@types/node@25.6.0)": dependencies: "@inquirer/ansi": 2.0.5 @@ -45394,6 +53570,14 @@ snapshots: optionalDependencies: "@types/node": 25.6.0 + "@inquirer/password@5.0.11(@types/node@25.6.2)": + dependencies: + "@inquirer/ansi": 2.0.5 + "@inquirer/core": 11.1.8(@types/node@25.6.2) + "@inquirer/type": 4.0.5(@types/node@25.6.2) + optionalDependencies: + "@types/node": 25.6.2 + "@inquirer/prompts@7.10.1(@types/node@25.6.0)": dependencies: "@inquirer/checkbox": 4.3.2(@types/node@25.6.0) @@ -45409,6 +53593,21 @@ snapshots: optionalDependencies: "@types/node": 25.6.0 + "@inquirer/prompts@7.10.1(@types/node@25.6.2)": + dependencies: + "@inquirer/checkbox": 4.3.2(@types/node@25.6.2) + "@inquirer/confirm": 5.1.21(@types/node@25.6.2) + "@inquirer/editor": 4.2.23(@types/node@25.6.2) + "@inquirer/expand": 4.0.23(@types/node@25.6.2) + "@inquirer/input": 4.3.1(@types/node@25.6.2) + "@inquirer/number": 3.0.23(@types/node@25.6.2) + "@inquirer/password": 4.0.23(@types/node@25.6.2) + "@inquirer/rawlist": 4.1.11(@types/node@25.6.2) + "@inquirer/search": 3.2.2(@types/node@25.6.2) + "@inquirer/select": 4.4.2(@types/node@25.6.2) + optionalDependencies: + "@types/node": 25.6.2 + "@inquirer/prompts@8.4.1(@types/node@25.6.0)": dependencies: "@inquirer/checkbox": 5.1.3(@types/node@25.6.0) @@ -45424,6 +53623,21 @@ snapshots: optionalDependencies: "@types/node": 25.6.0 + "@inquirer/prompts@8.4.1(@types/node@25.6.2)": + dependencies: + "@inquirer/checkbox": 5.1.3(@types/node@25.6.2) + "@inquirer/confirm": 6.0.11(@types/node@25.6.2) + "@inquirer/editor": 5.1.0(@types/node@25.6.2) + "@inquirer/expand": 5.0.12(@types/node@25.6.2) + "@inquirer/input": 5.0.11(@types/node@25.6.2) + "@inquirer/number": 4.0.11(@types/node@25.6.2) + "@inquirer/password": 5.0.11(@types/node@25.6.2) + "@inquirer/rawlist": 5.2.7(@types/node@25.6.2) + "@inquirer/search": 4.1.7(@types/node@25.6.2) + "@inquirer/select": 5.1.3(@types/node@25.6.2) + optionalDependencies: + "@types/node": 25.6.2 + "@inquirer/rawlist@4.1.11(@types/node@25.6.0)": dependencies: "@inquirer/core": 10.3.2(@types/node@25.6.0) @@ -45432,6 +53646,14 @@ snapshots: optionalDependencies: "@types/node": 25.6.0 + "@inquirer/rawlist@4.1.11(@types/node@25.6.2)": + dependencies: + "@inquirer/core": 10.3.2(@types/node@25.6.2) + "@inquirer/type": 3.0.10(@types/node@25.6.2) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + "@types/node": 25.6.2 + "@inquirer/rawlist@5.2.7(@types/node@25.6.0)": dependencies: "@inquirer/core": 11.1.8(@types/node@25.6.0) @@ -45439,6 +53661,13 @@ snapshots: optionalDependencies: "@types/node": 25.6.0 + "@inquirer/rawlist@5.2.7(@types/node@25.6.2)": + dependencies: + "@inquirer/core": 11.1.8(@types/node@25.6.2) + "@inquirer/type": 4.0.5(@types/node@25.6.2) + optionalDependencies: + "@types/node": 25.6.2 + "@inquirer/search@3.2.2(@types/node@25.6.0)": dependencies: "@inquirer/core": 10.3.2(@types/node@25.6.0) @@ -45448,6 +53677,15 @@ snapshots: optionalDependencies: "@types/node": 25.6.0 + "@inquirer/search@3.2.2(@types/node@25.6.2)": + dependencies: + "@inquirer/core": 10.3.2(@types/node@25.6.2) + "@inquirer/figures": 1.0.15 + "@inquirer/type": 3.0.10(@types/node@25.6.2) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + "@types/node": 25.6.2 + "@inquirer/search@4.1.7(@types/node@25.6.0)": dependencies: "@inquirer/core": 11.1.8(@types/node@25.6.0) @@ -45456,6 +53694,14 @@ snapshots: optionalDependencies: "@types/node": 25.6.0 + "@inquirer/search@4.1.7(@types/node@25.6.2)": + dependencies: + "@inquirer/core": 11.1.8(@types/node@25.6.2) + "@inquirer/figures": 2.0.5 + "@inquirer/type": 4.0.5(@types/node@25.6.2) + optionalDependencies: + "@types/node": 25.6.2 + "@inquirer/select@4.4.2(@types/node@25.6.0)": dependencies: "@inquirer/ansi": 1.0.2 @@ -45466,6 +53712,16 @@ snapshots: optionalDependencies: "@types/node": 25.6.0 + "@inquirer/select@4.4.2(@types/node@25.6.2)": + dependencies: + "@inquirer/ansi": 1.0.2 + "@inquirer/core": 10.3.2(@types/node@25.6.2) + "@inquirer/figures": 1.0.15 + "@inquirer/type": 3.0.10(@types/node@25.6.2) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + "@types/node": 25.6.2 + "@inquirer/select@5.1.3(@types/node@25.6.0)": dependencies: "@inquirer/ansi": 2.0.5 @@ -45475,14 +53731,31 @@ snapshots: optionalDependencies: "@types/node": 25.6.0 + "@inquirer/select@5.1.3(@types/node@25.6.2)": + dependencies: + "@inquirer/ansi": 2.0.5 + "@inquirer/core": 11.1.8(@types/node@25.6.2) + "@inquirer/figures": 2.0.5 + "@inquirer/type": 4.0.5(@types/node@25.6.2) + optionalDependencies: + "@types/node": 25.6.2 + "@inquirer/type@3.0.10(@types/node@25.6.0)": optionalDependencies: "@types/node": 25.6.0 + "@inquirer/type@3.0.10(@types/node@25.6.2)": + optionalDependencies: + "@types/node": 25.6.2 + "@inquirer/type@4.0.5(@types/node@25.6.0)": optionalDependencies: "@types/node": 25.6.0 + "@inquirer/type@4.0.5(@types/node@25.6.2)": + optionalDependencies: + "@types/node": 25.6.2 + "@ionic/angular-toolkit@12.3.0": dependencies: "@angular-devkit/core": 20.3.23 @@ -45621,7 +53894,7 @@ snapshots: jest-util: 29.7.0 slash: 3.0.0 - "@jest/core@29.7.0(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.9.3))": + "@jest/core@29.7.0(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3))": dependencies: "@jest/console": 29.7.0 "@jest/reporters": 29.7.0(node-notifier@10.0.1) @@ -45635,7 +53908,7 @@ snapshots: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.19.39)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.9.3)) + jest-config: 29.7.0(@types/node@20.19.39)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -45853,11 +54126,6 @@ snapshots: "@jridgewell/gen-mapping": 0.3.13 "@jridgewell/trace-mapping": 0.3.31 - "@jridgewell/source-map@0.3.5": - dependencies: - "@jridgewell/gen-mapping": 0.3.13 - "@jridgewell/trace-mapping": 0.3.31 - "@jridgewell/sourcemap-codec@1.5.5": {} "@jridgewell/trace-mapping@0.3.31": @@ -46068,6 +54336,10 @@ snapshots: "@lmdb/lmdb-win32-x64@3.5.1": optional: true + "@malept/cross-spawn-promise@2.0.0": + dependencies: + cross-spawn: 7.0.6 + "@mapbox/node-pre-gyp@2.0.3(encoding@0.1.13)": dependencies: consola: 3.4.2 @@ -46100,6 +54372,14 @@ snapshots: transitivePeerDependencies: - "@types/node" + "@microsoft/api-extractor-model@7.33.6(@types/node@25.6.2)": + dependencies: + "@microsoft/tsdoc": 0.16.0 + "@microsoft/tsdoc-config": 0.18.1 + "@rushstack/node-core-library": 5.22.0(@types/node@25.6.2) + transitivePeerDependencies: + - "@types/node" + "@microsoft/api-extractor@7.58.2(@types/node@20.19.39)": dependencies: "@microsoft/api-extractor-model": 7.33.6(@types/node@20.19.39) @@ -46139,6 +54419,25 @@ snapshots: transitivePeerDependencies: - "@types/node" + "@microsoft/api-extractor@7.58.2(@types/node@25.6.2)": + dependencies: + "@microsoft/api-extractor-model": 7.33.6(@types/node@25.6.2) + "@microsoft/tsdoc": 0.16.0 + "@microsoft/tsdoc-config": 0.18.1 + "@rushstack/node-core-library": 5.22.0(@types/node@25.6.2) + "@rushstack/rig-package": 0.7.2 + "@rushstack/terminal": 0.22.5(@types/node@25.6.2) + "@rushstack/ts-command-line": 5.3.5(@types/node@25.6.2) + diff: 8.0.3 + lodash: 4.18.1 + minimatch: 10.2.3 + resolve: 1.22.12 + semver: 7.5.4 + source-map: 0.6.1 + typescript: 5.9.3 + transitivePeerDependencies: + - "@types/node" + "@microsoft/tsdoc-config@0.18.1": dependencies: "@microsoft/tsdoc": 0.16.0 @@ -46278,10 +54577,10 @@ snapshots: "@emnapi/runtime": 1.9.2 "@tybys/wasm-util": 0.9.0 - "@napi-rs/wasm-runtime@1.1.1": + "@napi-rs/wasm-runtime@1.1.3(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)": dependencies: - "@emnapi/core": 1.8.1 - "@emnapi/runtime": 1.9.2 + "@emnapi/core": 1.10.0 + "@emnapi/runtime": 1.10.0 "@tybys/wasm-util": 0.10.1 optional: true @@ -46292,6 +54591,13 @@ snapshots: "@tybys/wasm-util": 0.10.1 optional: true + "@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)": + dependencies: + "@emnapi/core": 1.10.0 + "@emnapi/runtime": 1.10.0 + "@tybys/wasm-util": 0.10.1 + optional: true + "@next/env@16.2.3": {} "@next/eslint-plugin-next@16.2.3": @@ -46322,11 +54628,17 @@ snapshots: "@next/swc-win32-x64-msvc@16.2.3": optional: true - "@ngtools/webpack@21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@5.9.3))(typescript@5.9.3)(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)))": + "@ngtools/webpack@21.2.7(@angular/compiler-cli@21.2.8(@angular/compiler@21.2.8)(typescript@5.9.3))(typescript@5.9.3)(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)))": dependencies: "@angular/compiler-cli": 21.2.8(@angular/compiler@21.2.8)(typescript@5.9.3) typescript: 5.9.3 - webpack: 5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) + + "@ngtools/webpack@21.2.7(@angular/compiler-cli@21.2.9(@angular/compiler@21.2.9)(typescript@5.9.3))(typescript@5.9.3)(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)))": + dependencies: + "@angular/compiler-cli": 21.2.9(@angular/compiler@21.2.9)(typescript@5.9.3) + typescript: 5.9.3 + webpack: 5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) "@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1": dependencies: @@ -46375,28 +54687,28 @@ snapshots: "@npmcli/metavuln-calculator": 9.0.3 "@npmcli/name-from-folder": 3.0.0 "@npmcli/node-gyp": 4.0.0 - "@npmcli/package-json": 7.0.2 + "@npmcli/package-json": 7.0.5 "@npmcli/query": 4.0.1 "@npmcli/redact": 3.2.2 - "@npmcli/run-script": 10.0.3 + "@npmcli/run-script": 10.0.4 bin-links: 5.0.0 - cacache: 20.0.3 + cacache: 20.0.4 common-ancestor-path: 1.0.1 hosted-git-info: 9.0.2 json-stringify-nice: 1.1.4 - lru-cache: 11.3.2 + lru-cache: 11.3.5 minimatch: 10.2.5 nopt: 8.1.0 npm-install-checks: 7.1.2 - npm-package-arg: 13.0.1 + npm-package-arg: 13.0.2 npm-pick-manifest: 11.0.3 - npm-registry-fetch: 19.1.0 - pacote: 21.5.0 + npm-registry-fetch: 19.1.1 + pacote: 21.3.1 parse-conflict-json: 4.0.0 proc-log: 5.0.0 proggy: 3.0.0 promise-all-reject-late: 1.0.1 - promise-call-limit: 3.0.1 + promise-call-limit: 3.0.2 semver: 7.7.4 ssri: 12.0.0 treeverse: 3.0.0 @@ -46447,19 +54759,8 @@ snapshots: npm-pick-manifest: 10.0.0 proc-log: 5.0.0 promise-retry: 2.0.1 - semver: 7.7.2 - which: 5.0.0 - - "@npmcli/git@7.0.1": - dependencies: - "@npmcli/promise-spawn": 9.0.1 - ini: 6.0.0 - lru-cache: 11.3.5 - npm-pick-manifest: 11.0.3 - proc-log: 6.1.0 - promise-retry: 2.0.1 semver: 7.7.4 - which: 6.0.1 + which: 5.0.0 "@npmcli/git@7.0.2": dependencies: @@ -46490,15 +54791,15 @@ snapshots: "@npmcli/map-workspaces@5.0.3": dependencies: "@npmcli/name-from-folder": 4.0.0 - "@npmcli/package-json": 7.0.2 + "@npmcli/package-json": 7.0.5 glob: 13.0.6 minimatch: 10.2.5 "@npmcli/metavuln-calculator@9.0.3": dependencies: - cacache: 20.0.3 + cacache: 20.0.4 json-parse-even-better-errors: 5.0.0 - pacote: 21.5.0 + pacote: 21.3.1 proc-log: 6.1.0 semver: 7.7.4 transitivePeerDependencies: @@ -46526,7 +54827,7 @@ snapshots: "@npmcli/package-json@7.0.2": dependencies: - "@npmcli/git": 7.0.1 + "@npmcli/git": 7.0.2 glob: 11.1.0 hosted-git-info: 9.0.2 json-parse-even-better-errors: 5.0.0 @@ -46567,7 +54868,7 @@ snapshots: "@npmcli/run-script@10.0.3": dependencies: "@npmcli/node-gyp": 5.0.0 - "@npmcli/package-json": 7.0.2 + "@npmcli/package-json": 7.0.5 "@npmcli/promise-spawn": 9.0.1 node-gyp: 12.2.0 proc-log: 6.1.0 @@ -46619,12 +54920,12 @@ snapshots: - supports-color - vue - "@nuxt/builder@2.18.1(@vue/compiler-sfc@3.5.32)(ejs@3.1.10)(hamljs@0.6.2)(handlebars@4.7.9)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(tslib@2.8.1)(typescript@6.0.2)(underscore@1.13.8)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))": + "@nuxt/builder@2.18.1(@vue/compiler-sfc@3.5.32)(ejs@3.1.10)(hamljs@0.6.2)(handlebars@4.7.9)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(tslib@2.8.1)(typescript@6.0.3)(underscore@1.13.8)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))": dependencies: "@nuxt/devalue": 2.0.2 "@nuxt/utils": 2.18.1 "@nuxt/vue-app": 2.18.1 - "@nuxt/webpack": 2.18.1(@vue/compiler-sfc@3.5.32)(ejs@3.1.10)(hamljs@0.6.2)(handlebars@4.7.9)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(tslib@2.8.1)(typescript@6.0.2)(underscore@1.13.8)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + "@nuxt/webpack": 2.18.1(@vue/compiler-sfc@3.5.32)(ejs@3.1.10)(hamljs@0.6.2)(handlebars@4.7.9)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(tslib@2.8.1)(typescript@6.0.3)(underscore@1.13.8)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) chalk: 4.1.2 chokidar: 3.6.0 consola: 3.4.2 @@ -46701,12 +55002,12 @@ snapshots: - webpack-command - whiskers - "@nuxt/builder@2.18.1(@vue/compiler-sfc@3.5.32)(prettier@3.8.3)(tslib@2.8.1)(typescript@6.0.2)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))": + "@nuxt/builder@2.18.1(@vue/compiler-sfc@3.5.32)(prettier@3.8.3)(tslib@2.8.1)(typescript@6.0.2)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))": dependencies: "@nuxt/devalue": 2.0.2 "@nuxt/utils": 2.18.1 "@nuxt/vue-app": 2.18.1 - "@nuxt/webpack": 2.18.1(@vue/compiler-sfc@3.5.32)(prettier@3.8.3)(tslib@2.8.1)(typescript@6.0.2)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + "@nuxt/webpack": 2.18.1(@vue/compiler-sfc@3.5.32)(prettier@3.8.3)(tslib@2.8.1)(typescript@6.0.2)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) chalk: 4.1.2 chokidar: 3.6.0 consola: 3.4.2 @@ -46907,7 +55208,7 @@ snapshots: consola: 3.4.2 defu: 6.1.7 destr: 2.0.5 - dotenv: 16.4.5 + dotenv: 16.4.7 lodash: 4.18.1 rc9: 2.1.2 std-env: 3.10.0 @@ -46928,11 +55229,19 @@ snapshots: "@nuxt/devalue@2.0.2": {} - "@nuxt/devtools-kit@3.2.4(magicast@0.5.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))": + "@nuxt/devtools-kit@3.2.4(magicast@0.5.2)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))": + dependencies: + "@nuxt/kit": 4.4.2(magicast@0.5.2) + execa: 8.0.1 + vite: 8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + transitivePeerDependencies: + - magicast + + "@nuxt/devtools-kit@3.2.4(magicast@0.5.2)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))": dependencies: "@nuxt/kit": 4.4.2(magicast@0.5.2) execa: 8.0.1 - vite: 8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + vite: 8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) transitivePeerDependencies: - magicast @@ -46947,9 +55256,9 @@ snapshots: pkg-types: 2.3.0 semver: 7.7.4 - "@nuxt/devtools@3.2.4(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2))": + "@nuxt/devtools@3.2.4(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2))": dependencies: - "@nuxt/devtools-kit": 3.2.4(magicast@0.5.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) + "@nuxt/devtools-kit": 3.2.4(magicast@0.5.2)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) "@nuxt/devtools-wizard": 3.2.4 "@nuxt/kit": 4.4.2(magicast@0.5.2) "@vue/devtools-core": 8.1.1(vue@3.5.32(typescript@6.0.2)) @@ -46977,24 +55286,65 @@ snapshots: sirv: 3.0.2 structured-clone-es: 2.0.0 tinyglobby: 0.2.16 - vite: 8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) - vite-plugin-inspect: 11.3.3(@nuxt/kit@4.4.2(magicast@0.5.2))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) - vite-plugin-vue-tracer: 1.3.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2)) + vite: 8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + vite-plugin-inspect: 11.3.3(@nuxt/kit@4.4.2(magicast@0.5.2))(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) + vite-plugin-vue-tracer: 1.3.0(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2)) which: 6.0.1 - ws: 8.19.0 + ws: 8.20.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + - vue + + "@nuxt/devtools@3.2.4(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2))": + dependencies: + "@nuxt/devtools-kit": 3.2.4(magicast@0.5.2)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) + "@nuxt/devtools-wizard": 3.2.4 + "@nuxt/kit": 4.4.2(magicast@0.5.2) + "@vue/devtools-core": 8.1.1(vue@3.5.32(typescript@6.0.2)) + "@vue/devtools-kit": 8.1.1 + birpc: 4.0.0 + consola: 3.4.2 + destr: 2.0.5 + error-stack-parser-es: 1.0.5 + execa: 8.0.1 + fast-npm-meta: 1.4.2 + get-port-please: 3.2.0 + hookable: 6.1.0 + image-meta: 0.2.2 + is-installed-globally: 1.0.0 + launch-editor: 2.13.2 + local-pkg: 1.1.2 + magicast: 0.5.2 + nypm: 0.6.5 + ohash: 2.0.11 + pathe: 2.0.3 + perfect-debounce: 2.1.0 + pkg-types: 2.3.0 + semver: 7.7.4 + simple-git: 3.36.0 + sirv: 3.0.2 + structured-clone-es: 2.0.0 + tinyglobby: 0.2.16 + vite: 8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + vite-plugin-inspect: 11.3.3(@nuxt/kit@4.4.2(magicast@0.5.2))(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) + vite-plugin-vue-tracer: 1.3.0(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2)) + which: 6.0.1 + ws: 8.20.0 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - vue - "@nuxt/friendly-errors-webpack-plugin@2.6.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)))": + "@nuxt/friendly-errors-webpack-plugin@2.6.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)))": dependencies: chalk: 2.4.2 consola: 3.4.2 error-stack-parser: 2.1.4 string-width: 4.2.3 - webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) "@nuxt/generator@2.18.1": dependencies: @@ -47069,7 +55419,7 @@ snapshots: transitivePeerDependencies: - supports-color - "@nuxt/nitro-server@3.21.2(db0@0.3.4)(encoding@0.1.13)(ioredis@5.10.1)(magicast@0.5.2)(nuxt@3.21.2(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(encoding@0.1.13)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.1)(less@4.6.4)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rolldown@1.0.0-rc.15)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.15)(rollup@4.60.1))(rollup@4.60.1)(sass@1.99.0)(srvx@0.11.15)(stylelint@16.26.1(typescript@6.0.2))(stylus@0.64.0)(terser@5.46.1)(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(xml2js@0.6.2)(yaml@2.8.3))(rolldown@1.0.0-rc.15)(srvx@0.11.15)(typescript@6.0.2)(xml2js@0.6.2)": + "@nuxt/nitro-server@3.21.2(db0@0.3.4)(encoding@0.1.13)(ioredis@5.10.1)(magicast@0.5.2)(nuxt@3.21.2(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@types/node@25.6.2)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(encoding@0.1.13)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.1)(less@4.6.4)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rolldown@1.0.0-rc.18)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.18)(rollup@4.60.2))(rollup@4.60.2)(sass@1.99.0)(srvx@0.11.15)(stylelint@16.26.1(typescript@6.0.2))(stylus@0.64.0)(terser@5.46.1)(typescript@6.0.2)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(xml2js@0.6.2)(yaml@2.8.3))(rolldown@1.0.0-rc.18)(srvx@0.11.15)(typescript@6.0.2)(xml2js@0.6.2)": dependencies: "@nuxt/devalue": 2.0.2 "@nuxt/kit": 3.21.2(magicast@0.5.2) @@ -47086,8 +55436,8 @@ snapshots: impound: 1.1.5 klona: 2.0.6 mocked-exports: 0.1.1 - nitropack: 2.13.3(encoding@0.1.13)(rolldown@1.0.0-rc.15)(srvx@0.11.15)(xml2js@0.6.2) - nuxt: 3.21.2(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(encoding@0.1.13)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.1)(less@4.6.4)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rolldown@1.0.0-rc.15)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.15)(rollup@4.60.1))(rollup@4.60.1)(sass@1.99.0)(srvx@0.11.15)(stylelint@16.26.1(typescript@6.0.2))(stylus@0.64.0)(terser@5.46.1)(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(xml2js@0.6.2)(yaml@2.8.3) + nitropack: 2.13.3(encoding@0.1.13)(rolldown@1.0.0-rc.18)(srvx@0.11.15)(xml2js@0.6.2) + nuxt: 3.21.2(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@types/node@25.6.2)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(encoding@0.1.13)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.1)(less@4.6.4)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rolldown@1.0.0-rc.18)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.18)(rollup@4.60.2))(rollup@4.60.2)(sass@1.99.0)(srvx@0.11.15)(stylelint@16.26.1(typescript@6.0.2))(stylus@0.64.0)(terser@5.46.1)(typescript@6.0.2)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(xml2js@0.6.2)(yaml@2.8.3) ohash: 2.0.11 pathe: 2.0.3 pkg-types: 2.3.0 @@ -47136,7 +55486,7 @@ snapshots: - uploadthing - xml2js - "@nuxt/nitro-server@3.21.2(db0@0.3.4)(encoding@0.1.13)(ioredis@5.10.1)(magicast@0.5.2)(nuxt@3.21.2(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(encoding@0.1.13)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.1)(less@4.6.4)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rolldown@1.0.0-rc.15)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.15)(rollup@4.60.1))(rollup@4.60.1)(sass@1.99.0)(stylelint@16.26.1(typescript@6.0.2))(stylus@0.64.0)(terser@5.46.1)(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(xml2js@0.6.2)(yaml@2.8.3))(rolldown@1.0.0-rc.15)(typescript@6.0.2)(xml2js@0.6.2)": + "@nuxt/nitro-server@3.21.2(db0@0.3.4)(encoding@0.1.13)(ioredis@5.10.1)(magicast@0.5.2)(nuxt@3.21.2(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@types/node@25.6.2)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(encoding@0.1.13)(eslint@10.2.0(jiti@2.7.0))(ioredis@5.10.1)(less@4.6.4)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rolldown@1.0.0-rc.18)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.18)(rollup@4.60.3))(rollup@4.60.3)(sass@1.99.0)(stylelint@16.26.1(typescript@6.0.2))(stylus@0.64.0)(terser@5.46.1)(typescript@6.0.2)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(xml2js@0.6.2)(yaml@2.8.3))(rolldown@1.0.0-rc.18)(typescript@6.0.2)(xml2js@0.6.2)": dependencies: "@nuxt/devalue": 2.0.2 "@nuxt/kit": 3.21.2(magicast@0.5.2) @@ -47153,8 +55503,8 @@ snapshots: impound: 1.1.5 klona: 2.0.6 mocked-exports: 0.1.1 - nitropack: 2.13.3(encoding@0.1.13)(rolldown@1.0.0-rc.15)(srvx@0.11.15)(xml2js@0.6.2) - nuxt: 3.21.2(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(encoding@0.1.13)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.1)(less@4.6.4)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rolldown@1.0.0-rc.15)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.15)(rollup@4.60.1))(rollup@4.60.1)(sass@1.99.0)(stylelint@16.26.1(typescript@6.0.2))(stylus@0.64.0)(terser@5.46.1)(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(xml2js@0.6.2)(yaml@2.8.3) + nitropack: 2.13.3(encoding@0.1.13)(rolldown@1.0.0-rc.18)(srvx@0.11.15)(xml2js@0.6.2) + nuxt: 3.21.2(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@types/node@25.6.2)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(encoding@0.1.13)(eslint@10.2.0(jiti@2.7.0))(ioredis@5.10.1)(less@4.6.4)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rolldown@1.0.0-rc.18)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.18)(rollup@4.60.3))(rollup@4.60.3)(sass@1.99.0)(stylelint@16.26.1(typescript@6.0.2))(stylus@0.64.0)(terser@5.46.1)(typescript@6.0.2)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(xml2js@0.6.2)(yaml@2.8.3) ohash: 2.0.11 pathe: 2.0.3 pkg-types: 2.3.0 @@ -47203,7 +55553,7 @@ snapshots: - uploadthing - xml2js - "@nuxt/nitro-server@4.4.2(96fe65e772b58376cb5d9f5730d18291)": + "@nuxt/nitro-server@4.4.2(21198b66d883338b021d40c908e5486f)": dependencies: "@babel/plugin-syntax-typescript": 7.28.6(@babel/core@7.29.0) "@nuxt/devalue": 2.0.2 @@ -47221,8 +55571,8 @@ snapshots: impound: 1.1.5 klona: 2.0.6 mocked-exports: 0.1.1 - nitropack: 2.13.3(encoding@0.1.13)(rolldown@1.0.0-rc.15)(srvx@0.11.15)(xml2js@0.6.2) - nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.29.0))(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@rollup/plugin-babel@7.0.0(@babel/core@7.29.0)(@types/babel__core@7.20.5)(rollup@4.60.1))(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(encoding@0.1.13)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.1)(less@4.6.4)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rolldown@1.0.0-rc.15)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.15)(rollup@4.60.1))(rollup@4.60.1)(sass@1.99.0)(stylelint@16.26.1(typescript@6.0.2))(stylus@0.64.0)(terser@5.46.1)(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(xml2js@0.6.2)(yaml@2.8.3) + nitropack: 2.13.3(encoding@0.1.13)(rolldown@1.0.0-rc.18)(srvx@0.11.15)(xml2js@0.6.2) + nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.29.0))(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@rollup/plugin-babel@7.0.0(@babel/core@7.29.0)(@types/babel__core@7.20.5)(rollup@4.60.3))(@types/node@25.6.2)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(encoding@0.1.13)(eslint@10.2.0(jiti@2.7.0))(ioredis@5.10.1)(less@4.6.4)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rolldown@1.0.0-rc.18)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.18)(rollup@4.60.3))(rollup@4.60.3)(sass@1.99.0)(stylelint@16.26.1(typescript@6.0.2))(stylus@0.64.0)(terser@5.46.1)(typescript@6.0.2)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(xml2js@0.6.2)(yaml@2.8.3) nypm: 0.6.5 ohash: 2.0.11 pathe: 2.0.3 @@ -47237,7 +55587,80 @@ snapshots: vue-devtools-stub: 0.1.0 optionalDependencies: "@babel/plugin-proposal-decorators": 7.29.0(@babel/core@7.29.0) - "@rollup/plugin-babel": 7.0.0(@babel/core@7.29.0)(@types/babel__core@7.20.5)(rollup@4.60.1) + "@rollup/plugin-babel": 7.0.0(@babel/core@7.29.0)(@types/babel__core@7.20.5)(rollup@4.60.3) + transitivePeerDependencies: + - "@azure/app-configuration" + - "@azure/cosmos" + - "@azure/data-tables" + - "@azure/identity" + - "@azure/keyvault-secrets" + - "@azure/storage-blob" + - "@babel/core" + - "@capacitor/preferences" + - "@deno/kv" + - "@electric-sql/pglite" + - "@libsql/client" + - "@netlify/blobs" + - "@planetscale/database" + - "@upstash/redis" + - "@vercel/blob" + - "@vercel/functions" + - "@vercel/kv" + - aws4fetch + - bare-abort-controller + - bare-buffer + - better-sqlite3 + - db0 + - drizzle-orm + - encoding + - idb-keyval + - ioredis + - magicast + - mysql2 + - react-native-b4a + - rolldown + - sqlite3 + - srvx + - supports-color + - typescript + - uploadthing + - xml2js + + "@nuxt/nitro-server@4.4.2(71c8714d8e0ee00eb16d0aa4be22e9ad)": + dependencies: + "@babel/plugin-syntax-typescript": 7.28.6(@babel/core@7.29.0) + "@nuxt/devalue": 2.0.2 + "@nuxt/kit": 4.4.2(magicast@0.5.2) + "@unhead/vue": 2.1.13(vue@3.5.32(typescript@6.0.2)) + "@vue/shared": 3.5.32 + consola: 3.4.2 + defu: 6.1.7 + destr: 2.0.5 + devalue: 5.7.1 + errx: 0.1.0 + escape-string-regexp: 5.0.0 + exsolve: 1.0.8 + h3: 1.15.11 + impound: 1.1.5 + klona: 2.0.6 + mocked-exports: 0.1.1 + nitropack: 2.13.3(encoding@0.1.13)(rolldown@1.0.0-rc.18)(srvx@0.11.15)(xml2js@0.6.2) + nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.29.0))(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@rollup/plugin-babel@7.0.0(@babel/core@7.29.0)(@types/babel__core@7.20.5)(rollup@4.60.3))(@types/node@25.6.2)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(encoding@0.1.13)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.1)(less@4.6.4)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rolldown@1.0.0-rc.18)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.18)(rollup@4.60.3))(rollup@4.60.3)(sass@1.99.0)(stylelint@16.26.1(typescript@6.0.2))(stylus@0.64.0)(terser@5.46.1)(typescript@6.0.2)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(xml2js@0.6.2)(yaml@2.8.3) + nypm: 0.6.5 + ohash: 2.0.11 + pathe: 2.0.3 + pkg-types: 2.3.0 + rou3: 0.8.1 + std-env: 4.0.0 + ufo: 1.6.3 + unctx: 2.5.0 + unstorage: 1.17.5(db0@0.3.4)(ioredis@5.10.1) + vue: 3.5.32(typescript@6.0.2) + vue-bundle-renderer: 2.2.0 + vue-devtools-stub: 0.1.0 + optionalDependencies: + "@babel/plugin-proposal-decorators": 7.29.0(@babel/core@7.29.0) + "@rollup/plugin-babel": 7.0.0(@babel/core@7.29.0)(@types/babel__core@7.20.5)(rollup@4.60.3) transitivePeerDependencies: - "@azure/app-configuration" - "@azure/cosmos" @@ -47322,7 +55745,7 @@ snapshots: dependencies: arg: 5.0.2 chalk: 4.1.2 - ci-info: 3.8.0 + ci-info: 3.9.0 consola: 3.4.2 create-require: 1.1.1 defu: 6.1.7 @@ -47376,14 +55799,14 @@ snapshots: "@types/webpack-bundle-analyzer": 3.9.5 "@types/webpack-hot-middleware": 2.25.5 - "@nuxt/typescript-build@3.0.2(@nuxt/types@2.18.1)(eslint@8.57.1)(typescript@6.0.2)(vue-template-compiler@2.7.16)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)))": + "@nuxt/typescript-build@3.0.2(@nuxt/types@2.18.1)(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3)(vue-template-compiler@2.7.16)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)))": dependencies: "@nuxt/types": 2.18.1 consola: 3.4.2 defu: 6.1.7 - fork-ts-checker-webpack-plugin: 6.5.3(eslint@8.57.1)(typescript@6.0.2)(vue-template-compiler@2.7.16)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) - ts-loader: 8.4.0(typescript@6.0.2)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) - typescript: 6.0.2 + fork-ts-checker-webpack-plugin: 6.5.3(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3)(vue-template-compiler@2.7.16)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) + ts-loader: 8.4.0(typescript@6.0.3)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) + typescript: 6.0.3 transitivePeerDependencies: - eslint - vue-template-compiler @@ -47404,12 +55827,12 @@ snapshots: ua-parser-js: 1.0.41 ufo: 1.6.3 - "@nuxt/vite-builder@3.21.2(06271fe1f28b15e1977effb173641ca0)": + "@nuxt/vite-builder@3.21.2(2f7e50dd0d0b2285381997eb5f561088)": dependencies: "@nuxt/kit": 3.21.2(magicast@0.5.2) - "@rollup/plugin-replace": 6.0.3(rollup@4.60.1) - "@vitejs/plugin-vue": 6.0.5(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2)) - "@vitejs/plugin-vue-jsx": 5.1.5(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2)) + "@rollup/plugin-replace": 6.0.3(rollup@4.60.2) + "@vitejs/plugin-vue": 6.0.5(vite@7.3.2(@types/node@25.6.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2)) + "@vitejs/plugin-vue-jsx": 5.1.5(vite@7.3.2(@types/node@25.6.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2)) autoprefixer: 10.4.27(postcss@8.5.9) consola: 3.4.2 cssnano: 7.1.4(postcss@8.5.9) @@ -47423,7 +55846,7 @@ snapshots: magic-string: 0.30.21 mlly: 1.8.2 mocked-exports: 0.1.1 - nuxt: 3.21.2(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(encoding@0.1.13)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.1)(less@4.6.4)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rolldown@1.0.0-rc.15)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.15)(rollup@4.60.1))(rollup@4.60.1)(sass@1.99.0)(srvx@0.11.15)(stylelint@16.26.1(typescript@6.0.2))(stylus@0.64.0)(terser@5.46.1)(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(xml2js@0.6.2)(yaml@2.8.3) + nuxt: 3.21.2(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@types/node@25.6.2)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(encoding@0.1.13)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.1)(less@4.6.4)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rolldown@1.0.0-rc.18)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.18)(rollup@4.60.2))(rollup@4.60.2)(sass@1.99.0)(srvx@0.11.15)(stylelint@16.26.1(typescript@6.0.2))(stylus@0.64.0)(terser@5.46.1)(typescript@6.0.2)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(xml2js@0.6.2)(yaml@2.8.3) nypm: 0.6.5 ohash: 2.0.11 pathe: 2.0.3 @@ -47434,14 +55857,14 @@ snapshots: std-env: 4.0.0 ufo: 1.6.3 unenv: 2.0.0-rc.24 - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) - vite-node: 5.3.0(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) - vite-plugin-checker: 0.12.0(eslint@10.2.0(jiti@2.6.1))(meow@13.2.0)(optionator@0.9.4)(stylelint@16.26.1(typescript@6.0.2))(typescript@6.0.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2)) + vite: 7.3.2(@types/node@25.6.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + vite-node: 5.3.0(@types/node@25.6.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + vite-plugin-checker: 0.12.0(eslint@10.2.0(jiti@2.6.1))(meow@13.2.0)(optionator@0.9.4)(stylelint@16.26.1(typescript@6.0.2))(typescript@6.0.2)(vite@7.3.2(@types/node@25.6.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2)) vue: 3.5.32(typescript@6.0.2) vue-bundle-renderer: 2.2.0 optionalDependencies: - rolldown: 1.0.0-rc.15 - rollup-plugin-visualizer: 7.0.1(rolldown@1.0.0-rc.15)(rollup@4.60.1) + rolldown: 1.0.0-rc.18 + rollup-plugin-visualizer: 7.0.1(rolldown@1.0.0-rc.18)(rollup@4.60.2) transitivePeerDependencies: - "@biomejs/biome" - "@types/node" @@ -47467,12 +55890,12 @@ snapshots: - vue-tsc - yaml - "@nuxt/vite-builder@3.21.2(9508cf87a4ba09f7bc16602c35a5e209)": + "@nuxt/vite-builder@3.21.2(95e4565a2bfb8fb443f4fb2474cc74d8)": dependencies: "@nuxt/kit": 3.21.2(magicast@0.5.2) - "@rollup/plugin-replace": 6.0.3(rollup@4.60.1) - "@vitejs/plugin-vue": 6.0.5(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2)) - "@vitejs/plugin-vue-jsx": 5.1.5(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2)) + "@rollup/plugin-replace": 6.0.3(rollup@4.60.3) + "@vitejs/plugin-vue": 6.0.5(vite@7.3.2(@types/node@25.6.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2)) + "@vitejs/plugin-vue-jsx": 5.1.5(vite@7.3.2(@types/node@25.6.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2)) autoprefixer: 10.4.27(postcss@8.5.9) consola: 3.4.2 cssnano: 7.1.4(postcss@8.5.9) @@ -47486,7 +55909,7 @@ snapshots: magic-string: 0.30.21 mlly: 1.8.2 mocked-exports: 0.1.1 - nuxt: 3.21.2(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(encoding@0.1.13)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.1)(less@4.6.4)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rolldown@1.0.0-rc.15)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.15)(rollup@4.60.1))(rollup@4.60.1)(sass@1.99.0)(stylelint@16.26.1(typescript@6.0.2))(stylus@0.64.0)(terser@5.46.1)(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(xml2js@0.6.2)(yaml@2.8.3) + nuxt: 3.21.2(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@types/node@25.6.2)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(encoding@0.1.13)(eslint@10.2.0(jiti@2.7.0))(ioredis@5.10.1)(less@4.6.4)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rolldown@1.0.0-rc.18)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.18)(rollup@4.60.3))(rollup@4.60.3)(sass@1.99.0)(stylelint@16.26.1(typescript@6.0.2))(stylus@0.64.0)(terser@5.46.1)(typescript@6.0.2)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(xml2js@0.6.2)(yaml@2.8.3) nypm: 0.6.5 ohash: 2.0.11 pathe: 2.0.3 @@ -47497,14 +55920,14 @@ snapshots: std-env: 4.0.0 ufo: 1.6.3 unenv: 2.0.0-rc.24 - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) - vite-node: 5.3.0(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) - vite-plugin-checker: 0.12.0(eslint@10.2.0(jiti@2.6.1))(meow@13.2.0)(optionator@0.9.4)(stylelint@16.26.1(typescript@6.0.2))(typescript@6.0.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2)) + vite: 7.3.2(@types/node@25.6.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + vite-node: 5.3.0(@types/node@25.6.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + vite-plugin-checker: 0.12.0(eslint@10.2.0(jiti@2.7.0))(meow@13.2.0)(optionator@0.9.4)(stylelint@16.26.1(typescript@6.0.2))(typescript@6.0.2)(vite@7.3.2(@types/node@25.6.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2)) vue: 3.5.32(typescript@6.0.2) vue-bundle-renderer: 2.2.0 optionalDependencies: - rolldown: 1.0.0-rc.15 - rollup-plugin-visualizer: 7.0.1(rolldown@1.0.0-rc.15)(rollup@4.60.1) + rolldown: 1.0.0-rc.18 + rollup-plugin-visualizer: 7.0.1(rolldown@1.0.0-rc.18)(rollup@4.60.3) transitivePeerDependencies: - "@biomejs/biome" - "@types/node" @@ -47530,12 +55953,12 @@ snapshots: - vue-tsc - yaml - "@nuxt/vite-builder@4.4.2(10b39c1f15186638e7bebea75110a60c)": + "@nuxt/vite-builder@4.4.2(0864ba137dd56230aafddb13bfb8e686)": dependencies: "@nuxt/kit": 4.4.2(magicast@0.5.2) - "@rollup/plugin-replace": 6.0.3(rollup@4.60.1) - "@vitejs/plugin-vue": 6.0.5(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2)) - "@vitejs/plugin-vue-jsx": 5.1.5(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2)) + "@rollup/plugin-replace": 6.0.3(rollup@4.60.3) + "@vitejs/plugin-vue": 6.0.5(vite@7.3.2(@types/node@25.6.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2)) + "@vitejs/plugin-vue-jsx": 5.1.5(vite@7.3.2(@types/node@25.6.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2)) autoprefixer: 10.4.27(postcss@8.5.9) consola: 3.4.2 cssnano: 7.1.4(postcss@8.5.9) @@ -47548,7 +55971,7 @@ snapshots: magic-string: 0.30.21 mlly: 1.8.2 mocked-exports: 0.1.1 - nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.29.0))(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@rollup/plugin-babel@7.0.0(@babel/core@7.29.0)(@types/babel__core@7.20.5)(rollup@4.60.1))(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(encoding@0.1.13)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.1)(less@4.6.4)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rolldown@1.0.0-rc.15)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.15)(rollup@4.60.1))(rollup@4.60.1)(sass@1.99.0)(stylelint@16.26.1(typescript@6.0.2))(stylus@0.64.0)(terser@5.46.1)(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(xml2js@0.6.2)(yaml@2.8.3) + nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.29.0))(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@rollup/plugin-babel@7.0.0(@babel/core@7.29.0)(@types/babel__core@7.20.5)(rollup@4.60.3))(@types/node@25.6.2)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(encoding@0.1.13)(eslint@10.2.0(jiti@2.7.0))(ioredis@5.10.1)(less@4.6.4)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rolldown@1.0.0-rc.18)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.18)(rollup@4.60.3))(rollup@4.60.3)(sass@1.99.0)(stylelint@16.26.1(typescript@6.0.2))(stylus@0.64.0)(terser@5.46.1)(typescript@6.0.2)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(xml2js@0.6.2)(yaml@2.8.3) nypm: 0.6.5 pathe: 2.0.3 pkg-types: 2.3.0 @@ -47557,16 +55980,78 @@ snapshots: std-env: 4.0.0 ufo: 1.6.3 unenv: 2.0.0-rc.24 - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) - vite-node: 5.3.0(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) - vite-plugin-checker: 0.12.0(eslint@10.2.0(jiti@2.6.1))(meow@13.2.0)(optionator@0.9.4)(stylelint@16.26.1(typescript@6.0.2))(typescript@6.0.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2)) + vite: 7.3.2(@types/node@25.6.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + vite-node: 5.3.0(@types/node@25.6.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + vite-plugin-checker: 0.12.0(eslint@10.2.0(jiti@2.7.0))(meow@13.2.0)(optionator@0.9.4)(stylelint@16.26.1(typescript@6.0.2))(typescript@6.0.2)(vite@7.3.2(@types/node@25.6.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2)) vue: 3.5.32(typescript@6.0.2) vue-bundle-renderer: 2.2.0 optionalDependencies: "@babel/plugin-proposal-decorators": 7.29.0(@babel/core@7.29.0) "@babel/plugin-syntax-jsx": 7.28.6(@babel/core@7.29.0) - rolldown: 1.0.0-rc.15 - rollup-plugin-visualizer: 7.0.1(rolldown@1.0.0-rc.15)(rollup@4.60.1) + rolldown: 1.0.0-rc.18 + rollup-plugin-visualizer: 7.0.1(rolldown@1.0.0-rc.18)(rollup@4.60.3) + transitivePeerDependencies: + - "@biomejs/biome" + - "@types/node" + - eslint + - less + - lightningcss + - magicast + - meow + - optionator + - oxlint + - rollup + - sass + - sass-embedded + - stylelint + - stylus + - sugarss + - supports-color + - terser + - tsx + - typescript + - vls + - vti + - vue-tsc + - yaml + + "@nuxt/vite-builder@4.4.2(bac551a9abb1ca17b05060e8fac85ad0)": + dependencies: + "@nuxt/kit": 4.4.2(magicast@0.5.2) + "@rollup/plugin-replace": 6.0.3(rollup@4.60.3) + "@vitejs/plugin-vue": 6.0.5(vite@7.3.2(@types/node@25.6.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2)) + "@vitejs/plugin-vue-jsx": 5.1.5(vite@7.3.2(@types/node@25.6.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2)) + autoprefixer: 10.4.27(postcss@8.5.9) + consola: 3.4.2 + cssnano: 7.1.4(postcss@8.5.9) + defu: 6.1.7 + escape-string-regexp: 5.0.0 + exsolve: 1.0.8 + get-port-please: 3.2.0 + jiti: 2.6.1 + knitwork: 1.3.0 + magic-string: 0.30.21 + mlly: 1.8.2 + mocked-exports: 0.1.1 + nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.29.0))(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@rollup/plugin-babel@7.0.0(@babel/core@7.29.0)(@types/babel__core@7.20.5)(rollup@4.60.3))(@types/node@25.6.2)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(encoding@0.1.13)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.1)(less@4.6.4)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rolldown@1.0.0-rc.18)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.18)(rollup@4.60.3))(rollup@4.60.3)(sass@1.99.0)(stylelint@16.26.1(typescript@6.0.2))(stylus@0.64.0)(terser@5.46.1)(typescript@6.0.2)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(xml2js@0.6.2)(yaml@2.8.3) + nypm: 0.6.5 + pathe: 2.0.3 + pkg-types: 2.3.0 + postcss: 8.5.9 + seroval: 1.5.2 + std-env: 4.0.0 + ufo: 1.6.3 + unenv: 2.0.0-rc.24 + vite: 7.3.2(@types/node@25.6.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + vite-node: 5.3.0(@types/node@25.6.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + vite-plugin-checker: 0.12.0(eslint@10.2.0(jiti@2.6.1))(meow@13.2.0)(optionator@0.9.4)(stylelint@16.26.1(typescript@6.0.2))(typescript@6.0.2)(vite@7.3.2(@types/node@25.6.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2)) + vue: 3.5.32(typescript@6.0.2) + vue-bundle-renderer: 2.2.0 + optionalDependencies: + "@babel/plugin-proposal-decorators": 7.29.0(@babel/core@7.29.0) + "@babel/plugin-syntax-jsx": 7.28.6(@babel/core@7.29.0) + rolldown: 1.0.0-rc.18 + rollup-plugin-visualizer: 7.0.1(rolldown@1.0.0-rc.18)(rollup@4.60.3) transitivePeerDependencies: - "@biomejs/biome" - "@types/node" @@ -47617,58 +56102,58 @@ snapshots: ufo: 1.6.3 vue: 2.7.16 vue-meta: 2.4.0 - vue-server-renderer: 2.7.16 + vue-server-renderer: 2.7.16(patch_hash=7374e4bf5b7956d7097feec494aaea43bf8f6a02e2b64e8a3cc57e19c2f65132) - "@nuxt/webpack@2.18.1(@vue/compiler-sfc@3.5.32)(ejs@3.1.10)(hamljs@0.6.2)(handlebars@4.7.9)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(tslib@2.8.1)(typescript@6.0.2)(underscore@1.13.8)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))": + "@nuxt/webpack@2.18.1(@vue/compiler-sfc@3.5.32)(ejs@3.1.10)(hamljs@0.6.2)(handlebars@4.7.9)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(tslib@2.8.1)(typescript@6.0.3)(underscore@1.13.8)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))": dependencies: "@babel/core": 7.29.0 "@nuxt/babel-preset-app": 2.18.1(vue@2.7.16) - "@nuxt/friendly-errors-webpack-plugin": 2.6.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + "@nuxt/friendly-errors-webpack-plugin": 2.6.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) "@nuxt/utils": 2.18.1 - babel-loader: 8.4.1(@babel/core@7.29.0)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) - cache-loader: 4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) - caniuse-lite: 1.0.30001784 + babel-loader: 8.4.1(@babel/core@7.29.0)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) + cache-loader: 4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) + caniuse-lite: 1.0.30001787 consola: 3.4.2 - css-loader: 5.2.7(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + css-loader: 5.2.7(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) cssnano: 7.1.4(postcss@8.5.9) eventsource-polyfill: 0.9.6 - extract-css-chunks-webpack-plugin: 4.10.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) - file-loader: 6.2.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + extract-css-chunks-webpack-plugin: 4.10.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) + file-loader: 6.2.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) glob: 8.1.0 - hard-source-webpack-plugin: 0.13.1(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + hard-source-webpack-plugin: 0.13.1(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) hash-sum: 2.0.0 - html-webpack-plugin: 4.5.2(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + html-webpack-plugin: 4.5.2(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) lodash: 4.18.1 memfs: 4.57.1(tslib@2.8.1) mkdirp: 0.5.6 - optimize-css-assets-webpack-plugin: 6.0.1(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + optimize-css-assets-webpack-plugin: 6.0.1(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) pify: 5.0.0 - pnp-webpack-plugin: 1.7.0(typescript@6.0.2) + pnp-webpack-plugin: 1.7.0(typescript@6.0.3) postcss: 8.5.9 postcss-import: 15.1.0(postcss@8.5.9) postcss-import-resolver: 2.0.0 - postcss-loader: 4.3.0(postcss@8.5.9)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + postcss-loader: 4.3.0(postcss@8.5.9)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) postcss-preset-env: 9.6.0(postcss@8.5.9) postcss-url: 10.1.3(postcss@8.5.9) semver: 7.7.4 std-env: 3.10.0 - style-resources-loader: 1.5.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) - terser-webpack-plugin: 4.2.3(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) - thread-loader: 3.0.4(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) - time-fix-plugin: 2.0.7(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + style-resources-loader: 1.5.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) + terser-webpack-plugin: 4.2.3(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) + thread-loader: 3.0.4(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) + time-fix-plugin: 2.0.7(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) ufo: 1.6.3 upath: 2.0.1 - url-loader: 4.1.1(file-loader@6.2.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))))(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) - vue-loader: 15.11.1(@vue/compiler-sfc@3.5.32)(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))))(css-loader@5.2.7(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))))(ejs@3.1.10)(hamljs@0.6.2)(handlebars@4.7.9)(lodash@4.18.1)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(underscore@1.13.8)(vue-template-compiler@2.7.16)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + url-loader: 4.1.1(file-loader@6.2.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))))(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) + vue-loader: 15.11.1(@vue/compiler-sfc@3.5.32)(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))))(css-loader@5.2.7(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))))(ejs@3.1.10)(hamljs@0.6.2)(handlebars@4.7.9)(lodash@4.18.1)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(underscore@1.13.8)(vue-template-compiler@2.7.16)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) vue-style-loader: 4.1.3 vue-template-compiler: 2.7.16 watchpack: 2.5.1 - webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) webpack-bundle-analyzer: 4.10.2 - webpack-dev-middleware: 5.3.4(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + webpack-dev-middleware: 5.3.4(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) webpack-hot-middleware: 2.26.1 webpack-node-externals: 3.0.0 - webpackbar: 6.0.1(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + webpackbar: 6.0.1(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) transitivePeerDependencies: - "@vue/compiler-sfc" - arc-templates @@ -47734,56 +56219,56 @@ snapshots: - webpack-command - whiskers - "@nuxt/webpack@2.18.1(@vue/compiler-sfc@3.5.32)(prettier@3.8.3)(tslib@2.8.1)(typescript@6.0.2)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))": + "@nuxt/webpack@2.18.1(@vue/compiler-sfc@3.5.32)(prettier@3.8.3)(tslib@2.8.1)(typescript@6.0.2)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))": dependencies: "@babel/core": 7.29.0 "@nuxt/babel-preset-app": 2.18.1(vue@2.7.16) - "@nuxt/friendly-errors-webpack-plugin": 2.6.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + "@nuxt/friendly-errors-webpack-plugin": 2.6.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) "@nuxt/utils": 2.18.1 - babel-loader: 8.4.1(@babel/core@7.29.0)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) - cache-loader: 4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) - caniuse-lite: 1.0.30001784 + babel-loader: 8.4.1(@babel/core@7.29.0)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) + cache-loader: 4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) + caniuse-lite: 1.0.30001787 consola: 3.4.2 - css-loader: 5.2.7(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + css-loader: 5.2.7(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) cssnano: 7.1.4(postcss@8.5.9) eventsource-polyfill: 0.9.6 - extract-css-chunks-webpack-plugin: 4.10.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) - file-loader: 6.2.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + extract-css-chunks-webpack-plugin: 4.10.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) + file-loader: 6.2.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) glob: 8.1.0 - hard-source-webpack-plugin: 0.13.1(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + hard-source-webpack-plugin: 0.13.1(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) hash-sum: 2.0.0 - html-webpack-plugin: 4.5.2(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + html-webpack-plugin: 4.5.2(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) lodash: 4.18.1 memfs: 4.57.1(tslib@2.8.1) mkdirp: 0.5.6 - optimize-css-assets-webpack-plugin: 6.0.1(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + optimize-css-assets-webpack-plugin: 6.0.1(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) pify: 5.0.0 pnp-webpack-plugin: 1.7.0(typescript@6.0.2) postcss: 8.5.9 postcss-import: 15.1.0(postcss@8.5.9) postcss-import-resolver: 2.0.0 - postcss-loader: 4.3.0(postcss@8.5.9)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + postcss-loader: 4.3.0(postcss@8.5.9)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) postcss-preset-env: 9.6.0(postcss@8.5.9) postcss-url: 10.1.3(postcss@8.5.9) semver: 7.7.4 std-env: 3.10.0 - style-resources-loader: 1.5.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) - terser-webpack-plugin: 4.2.3(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) - thread-loader: 3.0.4(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) - time-fix-plugin: 2.0.7(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + style-resources-loader: 1.5.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) + terser-webpack-plugin: 4.2.3(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) + thread-loader: 3.0.4(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) + time-fix-plugin: 2.0.7(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) ufo: 1.6.3 upath: 2.0.1 - url-loader: 4.1.1(file-loader@6.2.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))))(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) - vue-loader: 15.11.1(@vue/compiler-sfc@3.5.32)(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))))(css-loader@5.2.7(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))))(lodash@4.18.1)(prettier@3.8.3)(vue-template-compiler@2.7.16)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + url-loader: 4.1.1(file-loader@6.2.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))))(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) + vue-loader: 15.11.1(@vue/compiler-sfc@3.5.32)(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))))(css-loader@5.2.7(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))))(lodash@4.18.1)(prettier@3.8.3)(vue-template-compiler@2.7.16)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) vue-style-loader: 4.1.3 vue-template-compiler: 2.7.16 watchpack: 2.5.1 - webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) webpack-bundle-analyzer: 4.10.2 - webpack-dev-middleware: 5.3.4(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + webpack-dev-middleware: 5.3.4(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) webpack-hot-middleware: 2.26.1 webpack-node-externals: 3.0.0 - webpackbar: 6.0.1(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + webpackbar: 6.0.1(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) transitivePeerDependencies: - "@vue/compiler-sfc" - arc-templates @@ -47849,31 +56334,31 @@ snapshots: - webpack-command - whiskers - "@nuxtjs/eslint-config-typescript@12.1.0(eslint@8.57.1)(typescript@6.0.2)": + "@nuxtjs/eslint-config-typescript@12.1.0(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3)": dependencies: - "@nuxtjs/eslint-config": 12.0.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@6.0.2))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1) - "@typescript-eslint/eslint-plugin": 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@6.0.2))(eslint@8.57.1)(typescript@6.0.2) - "@typescript-eslint/parser": 6.21.0(eslint@8.57.1)(typescript@6.0.2) - eslint: 8.57.1 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@8.57.1) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@6.0.2))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1) - eslint-plugin-vue: 9.33.0(eslint@8.57.1) + "@nuxtjs/eslint-config": 12.0.0(@typescript-eslint/parser@6.21.0(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint-import-resolver-typescript@3.10.1)(eslint@10.3.0(jiti@2.7.0)) + "@typescript-eslint/eslint-plugin": 6.21.0(@typescript-eslint/parser@6.21.0(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + "@typescript-eslint/parser": 6.21.0(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + eslint: 10.3.0(jiti@2.7.0) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-vue: 9.33.0(eslint@10.3.0(jiti@2.7.0)) transitivePeerDependencies: - eslint-import-resolver-webpack - eslint-plugin-import-x - supports-color - typescript - "@nuxtjs/eslint-config@12.0.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@6.0.2))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1)": + "@nuxtjs/eslint-config@12.0.0(@typescript-eslint/parser@6.21.0(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint-import-resolver-typescript@3.10.1)(eslint@10.3.0(jiti@2.7.0))": dependencies: - eslint: 8.57.1 - eslint-config-standard: 17.1.0(eslint-plugin-import@2.32.0)(eslint-plugin-n@15.7.0(eslint@8.57.1))(eslint-plugin-promise@6.6.0(eslint@8.57.1))(eslint@8.57.1) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@6.0.2))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1) - eslint-plugin-n: 15.7.0(eslint@8.57.1) - eslint-plugin-node: 11.1.0(eslint@8.57.1) - eslint-plugin-promise: 6.6.0(eslint@8.57.1) - eslint-plugin-unicorn: 44.0.2(eslint@8.57.1) - eslint-plugin-vue: 9.33.0(eslint@8.57.1) + eslint: 10.3.0(jiti@2.7.0) + eslint-config-standard: 17.1.0(eslint-plugin-import@2.32.0)(eslint-plugin-n@15.7.0(eslint@10.3.0(jiti@2.7.0)))(eslint-plugin-promise@6.6.0(eslint@10.3.0(jiti@2.7.0)))(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@6.21.0(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint-import-resolver-typescript@3.10.1)(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-n: 15.7.0(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-node: 11.1.0(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-promise: 6.6.0(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-unicorn: 44.0.2(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-vue: 9.33.0(eslint@10.3.0(jiti@2.7.0)) local-pkg: 0.4.3 transitivePeerDependencies: - "@typescript-eslint/parser" @@ -47881,14 +56366,14 @@ snapshots: - eslint-import-resolver-webpack - supports-color - "@nuxtjs/eslint-module@4.1.0(eslint@8.57.1)(magicast@0.5.2)(vite@8.0.8(@types/node@20.19.39)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)))": + "@nuxtjs/eslint-module@4.1.0(eslint@10.3.0(jiti@2.7.0))(vite@8.0.11(@types/node@20.19.39)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)))": dependencies: "@nuxt/kit": 3.21.2(magicast@0.5.2) chokidar: 3.5.3 - eslint: 8.57.1 - eslint-webpack-plugin: 4.2.0(eslint@8.57.1)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + eslint: 10.3.0(jiti@2.7.0) + eslint-webpack-plugin: 4.2.0(eslint@10.3.0(jiti@2.7.0))(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) pathe: 1.1.2 - vite-plugin-eslint: 1.8.1(eslint@8.57.1)(vite@8.0.8(@types/node@20.19.39)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) + vite-plugin-eslint: 1.8.1(eslint@10.3.0(jiti@2.7.0))(vite@8.0.11(@types/node@20.19.39)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) transitivePeerDependencies: - magicast - vite @@ -47900,50 +56385,102 @@ snapshots: mustache: 2.3.2 stack-trace: 0.0.10 - "@nx/devkit@22.6.5(nx@22.6.5(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.26)(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.26))": + "@nx/devkit@22.7.1(nx@22.7.1(@swc-node/register@1.11.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@swc/core@1.15.33)(@swc/types@0.1.26)(typescript@6.0.3))(@swc/core@1.15.33))": dependencies: "@zkochan/js-yaml": 0.0.7 ejs: 5.0.1 enquirer: 2.3.6 minimatch: 10.2.4 - nx: 22.6.5(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.26)(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.26) + nx: 22.7.1(@swc-node/register@1.11.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@swc/core@1.15.33)(@swc/types@0.1.26)(typescript@6.0.3))(@swc/core@1.15.33) semver: 7.7.4 tslib: 2.8.1 yargs-parser: 21.1.1 - "@nx/nx-darwin-arm64@22.6.5": + "@nx/js@22.7.1(@babel/traverse@7.29.0)(@swc-node/register@1.11.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@swc/core@1.15.33)(@swc/types@0.1.26)(typescript@6.0.3))(@swc/core@1.15.33)(nx@22.7.1(@swc-node/register@1.11.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@swc/core@1.15.33)(@swc/types@0.1.26)(typescript@6.0.3))(@swc/core@1.15.33))": + dependencies: + "@babel/core": 7.29.0 + "@babel/plugin-proposal-decorators": 7.29.0(@babel/core@7.29.0) + "@babel/plugin-transform-class-properties": 7.28.6(@babel/core@7.29.0) + "@babel/plugin-transform-runtime": 7.29.0(@babel/core@7.29.0) + "@babel/preset-env": 7.29.2(@babel/core@7.29.0) + "@babel/preset-typescript": 7.28.5(@babel/core@7.29.0) + "@babel/runtime": 7.29.2 + "@nx/devkit": 22.7.1(nx@22.7.1(@swc-node/register@1.11.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@swc/core@1.15.33)(@swc/types@0.1.26)(typescript@6.0.3))(@swc/core@1.15.33)) + "@nx/workspace": 22.7.1(@swc-node/register@1.11.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@swc/core@1.15.33)(@swc/types@0.1.26)(typescript@6.0.3))(@swc/core@1.15.33) + "@zkochan/js-yaml": 0.0.7 + babel-plugin-const-enum: 1.2.0(@babel/core@7.29.0) + babel-plugin-macros: 3.1.0 + babel-plugin-transform-typescript-metadata: 0.3.2(@babel/core@7.29.0)(@babel/traverse@7.29.0) + chalk: 4.1.2 + columnify: 1.6.0 + detect-port: 1.6.1 + ignore: 5.3.1 + js-tokens: 4.0.0 + jsonc-parser: 3.2.0 + npm-run-path: 4.0.1 + picocolors: 1.1.1 + picomatch: 4.0.4 + semver: 7.7.4 + source-map-support: 0.5.19 + tinyglobby: 0.2.16 + tslib: 2.8.1 + transitivePeerDependencies: + - "@babel/traverse" + - "@swc-node/register" + - "@swc/core" + - debug + - nx + - supports-color + + "@nx/nx-darwin-arm64@22.7.1": optional: true - "@nx/nx-darwin-x64@22.6.5": + "@nx/nx-darwin-x64@22.7.1": optional: true - "@nx/nx-freebsd-x64@22.6.5": + "@nx/nx-freebsd-x64@22.7.1": optional: true - "@nx/nx-linux-arm-gnueabihf@22.6.5": + "@nx/nx-linux-arm-gnueabihf@22.7.1": optional: true - "@nx/nx-linux-arm64-gnu@22.6.5": + "@nx/nx-linux-arm64-gnu@22.7.1": optional: true - "@nx/nx-linux-arm64-musl@22.6.5": + "@nx/nx-linux-arm64-musl@22.7.1": optional: true - "@nx/nx-linux-x64-gnu@22.6.5": + "@nx/nx-linux-x64-gnu@22.7.1": optional: true - "@nx/nx-linux-x64-musl@22.6.5": + "@nx/nx-linux-x64-musl@22.7.1": optional: true - "@nx/nx-win32-arm64-msvc@22.6.5": + "@nx/nx-win32-arm64-msvc@22.7.1": optional: true - "@nx/nx-win32-x64-msvc@22.6.5": + "@nx/nx-win32-x64-msvc@22.7.1": optional: true + "@nx/workspace@22.7.1(@swc-node/register@1.11.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@swc/core@1.15.33)(@swc/types@0.1.26)(typescript@6.0.3))(@swc/core@1.15.33)": + dependencies: + "@nx/devkit": 22.7.1(nx@22.7.1(@swc-node/register@1.11.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@swc/core@1.15.33)(@swc/types@0.1.26)(typescript@6.0.3))(@swc/core@1.15.33)) + "@zkochan/js-yaml": 0.0.7 + chalk: 4.1.2 + enquirer: 2.3.6 + nx: 22.7.1(@swc-node/register@1.11.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@swc/core@1.15.33)(@swc/types@0.1.26)(typescript@6.0.3))(@swc/core@1.15.33) + picomatch: 4.0.4 + semver: 7.7.4 + tslib: 2.8.1 + yargs-parser: 21.1.1 + transitivePeerDependencies: + - "@swc-node/register" + - "@swc/core" + - debug + "@octokit/auth-token@4.0.0": {} - "@octokit/core@5.2.1": + "@octokit/core@5.2.2": dependencies: "@octokit/auth-token": 4.0.0 "@octokit/graphql": 7.1.1 @@ -47951,35 +56488,35 @@ snapshots: "@octokit/request-error": 5.1.1 "@octokit/types": 13.10.0 before-after-hook: 2.2.3 - universal-user-agent: 6.0.0 + universal-user-agent: 6.0.1 "@octokit/endpoint@9.0.6": dependencies: "@octokit/types": 13.10.0 - universal-user-agent: 6.0.0 + universal-user-agent: 6.0.1 "@octokit/graphql@7.1.1": dependencies: "@octokit/request": 8.4.1 "@octokit/types": 13.10.0 - universal-user-agent: 6.0.0 + universal-user-agent: 6.0.1 "@octokit/openapi-types@24.2.0": {} "@octokit/plugin-enterprise-rest@6.0.1": {} - "@octokit/plugin-paginate-rest@11.4.4-cjs.2(@octokit/core@5.2.1)": + "@octokit/plugin-paginate-rest@11.4.4-cjs.2(@octokit/core@5.2.2)": dependencies: - "@octokit/core": 5.2.1 + "@octokit/core": 5.2.2 "@octokit/types": 13.10.0 - "@octokit/plugin-request-log@4.0.1(@octokit/core@5.2.1)": + "@octokit/plugin-request-log@4.0.1(@octokit/core@5.2.2)": dependencies: - "@octokit/core": 5.2.1 + "@octokit/core": 5.2.2 - "@octokit/plugin-rest-endpoint-methods@13.3.2-cjs.1(@octokit/core@5.2.1)": + "@octokit/plugin-rest-endpoint-methods@13.3.2-cjs.1(@octokit/core@5.2.2)": dependencies: - "@octokit/core": 5.2.1 + "@octokit/core": 5.2.2 "@octokit/types": 13.10.0 "@octokit/request-error@5.1.1": @@ -47993,19 +56530,21 @@ snapshots: "@octokit/endpoint": 9.0.6 "@octokit/request-error": 5.1.1 "@octokit/types": 13.10.0 - universal-user-agent: 6.0.0 + universal-user-agent: 6.0.1 "@octokit/rest@20.1.2": dependencies: - "@octokit/core": 5.2.1 - "@octokit/plugin-paginate-rest": 11.4.4-cjs.2(@octokit/core@5.2.1) - "@octokit/plugin-request-log": 4.0.1(@octokit/core@5.2.1) - "@octokit/plugin-rest-endpoint-methods": 13.3.2-cjs.1(@octokit/core@5.2.1) + "@octokit/core": 5.2.2 + "@octokit/plugin-paginate-rest": 11.4.4-cjs.2(@octokit/core@5.2.2) + "@octokit/plugin-request-log": 4.0.1(@octokit/core@5.2.2) + "@octokit/plugin-rest-endpoint-methods": 13.3.2-cjs.1(@octokit/core@5.2.2) "@octokit/types@13.10.0": dependencies: "@octokit/openapi-types": 24.2.0 + "@one-ini/wasm@0.2.1": {} + "@open-wc/building-utils@2.21.1": dependencies: "@babel/core": 7.29.0 @@ -48452,14 +56991,17 @@ snapshots: "@oxc-minify/binding-openharmony-arm64@0.117.0": optional: true - "@oxc-minify/binding-wasm32-wasi@0.116.0": + "@oxc-minify/binding-wasm32-wasi@0.116.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)": dependencies: - "@napi-rs/wasm-runtime": 1.1.1 + "@napi-rs/wasm-runtime": 1.1.3(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + transitivePeerDependencies: + - "@emnapi/core" + - "@emnapi/runtime" optional: true - "@oxc-minify/binding-wasm32-wasi@0.117.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)": + "@oxc-minify/binding-wasm32-wasi@0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)": dependencies: - "@napi-rs/wasm-runtime": 1.1.3(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + "@napi-rs/wasm-runtime": 1.1.3(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) transitivePeerDependencies: - "@emnapi/core" - "@emnapi/runtime" @@ -48486,54 +57028,110 @@ snapshots: "@oxc-parser/binding-android-arm-eabi@0.117.0": optional: true + "@oxc-parser/binding-android-arm-eabi@0.119.0": + optional: true + "@oxc-parser/binding-android-arm64@0.117.0": optional: true + "@oxc-parser/binding-android-arm64@0.119.0": + optional: true + "@oxc-parser/binding-darwin-arm64@0.117.0": optional: true + "@oxc-parser/binding-darwin-arm64@0.119.0": + optional: true + "@oxc-parser/binding-darwin-x64@0.117.0": optional: true + "@oxc-parser/binding-darwin-x64@0.119.0": + optional: true + "@oxc-parser/binding-freebsd-x64@0.117.0": optional: true + "@oxc-parser/binding-freebsd-x64@0.119.0": + optional: true + "@oxc-parser/binding-linux-arm-gnueabihf@0.117.0": optional: true + "@oxc-parser/binding-linux-arm-gnueabihf@0.119.0": + optional: true + "@oxc-parser/binding-linux-arm-musleabihf@0.117.0": optional: true + "@oxc-parser/binding-linux-arm-musleabihf@0.119.0": + optional: true + "@oxc-parser/binding-linux-arm64-gnu@0.117.0": optional: true + "@oxc-parser/binding-linux-arm64-gnu@0.119.0": + optional: true + "@oxc-parser/binding-linux-arm64-musl@0.117.0": optional: true + "@oxc-parser/binding-linux-arm64-musl@0.119.0": + optional: true + "@oxc-parser/binding-linux-ppc64-gnu@0.117.0": optional: true + "@oxc-parser/binding-linux-ppc64-gnu@0.119.0": + optional: true + "@oxc-parser/binding-linux-riscv64-gnu@0.117.0": optional: true + "@oxc-parser/binding-linux-riscv64-gnu@0.119.0": + optional: true + "@oxc-parser/binding-linux-riscv64-musl@0.117.0": optional: true + "@oxc-parser/binding-linux-riscv64-musl@0.119.0": + optional: true + "@oxc-parser/binding-linux-s390x-gnu@0.117.0": optional: true + "@oxc-parser/binding-linux-s390x-gnu@0.119.0": + optional: true + "@oxc-parser/binding-linux-x64-gnu@0.117.0": optional: true + "@oxc-parser/binding-linux-x64-gnu@0.119.0": + optional: true + "@oxc-parser/binding-linux-x64-musl@0.117.0": optional: true + "@oxc-parser/binding-linux-x64-musl@0.119.0": + optional: true + "@oxc-parser/binding-openharmony-arm64@0.117.0": optional: true - "@oxc-parser/binding-wasm32-wasi@0.117.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)": + "@oxc-parser/binding-openharmony-arm64@0.119.0": + optional: true + + "@oxc-parser/binding-wasm32-wasi@0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)": dependencies: - "@napi-rs/wasm-runtime": 1.1.3(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + "@napi-rs/wasm-runtime": 1.1.3(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + transitivePeerDependencies: + - "@emnapi/core" + - "@emnapi/runtime" + optional: true + + "@oxc-parser/binding-wasm32-wasi@0.119.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)": + dependencies: + "@napi-rs/wasm-runtime": 1.1.3(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) transitivePeerDependencies: - "@emnapi/core" - "@emnapi/runtime" @@ -48542,18 +57140,31 @@ snapshots: "@oxc-parser/binding-win32-arm64-msvc@0.117.0": optional: true + "@oxc-parser/binding-win32-arm64-msvc@0.119.0": + optional: true + "@oxc-parser/binding-win32-ia32-msvc@0.117.0": optional: true + "@oxc-parser/binding-win32-ia32-msvc@0.119.0": + optional: true + "@oxc-parser/binding-win32-x64-msvc@0.117.0": optional: true + "@oxc-parser/binding-win32-x64-msvc@0.119.0": + optional: true + "@oxc-project/types@0.113.0": {} "@oxc-project/types@0.117.0": {} + "@oxc-project/types@0.119.0": {} + "@oxc-project/types@0.124.0": {} + "@oxc-project/types@0.128.0": {} + "@oxc-resolver/binding-android-arm-eabi@11.19.1": optional: true @@ -48602,9 +57213,9 @@ snapshots: "@oxc-resolver/binding-openharmony-arm64@11.19.1": optional: true - "@oxc-resolver/binding-wasm32-wasi@11.19.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)": + "@oxc-resolver/binding-wasm32-wasi@11.19.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)": dependencies: - "@napi-rs/wasm-runtime": 1.1.3(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + "@napi-rs/wasm-runtime": 1.1.3(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) transitivePeerDependencies: - "@emnapi/core" - "@emnapi/runtime" @@ -48667,9 +57278,9 @@ snapshots: "@oxc-transform/binding-openharmony-arm64@0.117.0": optional: true - "@oxc-transform/binding-wasm32-wasi@0.117.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)": + "@oxc-transform/binding-wasm32-wasi@0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)": dependencies: - "@napi-rs/wasm-runtime": 1.1.3(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + "@napi-rs/wasm-runtime": 1.1.3(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) transitivePeerDependencies: - "@emnapi/core" - "@emnapi/runtime" @@ -48853,7 +57464,7 @@ snapshots: dependencies: playwright: 1.59.1 - "@pmmmwh/react-refresh-webpack-plugin@0.5.17(@types/webpack@4.41.40)(react-refresh@0.14.2)(type-fest@4.41.0)(webpack-dev-server@4.15.2)(webpack-hot-middleware@2.26.1)(webpack@5.106.1)": + "@pmmmwh/react-refresh-webpack-plugin@0.5.17(@types/webpack@4.41.40)(react-refresh@0.14.2)(type-fest@4.41.0)(webpack-dev-server@4.15.2)(webpack-hot-middleware@2.26.1)(webpack@5.106.2)": dependencies: ansi-html: 0.0.9 core-js-pure: 3.49.0 @@ -48863,11 +57474,11 @@ snapshots: react-refresh: 0.14.2 schema-utils: 4.3.3 source-map: 0.7.6 - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2) + webpack: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) optionalDependencies: "@types/webpack": 4.41.40 type-fest: 4.41.0 - webpack-dev-server: 4.15.2(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))(webpack@5.106.1) + webpack-dev-server: 4.15.2(debug@4.4.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))(webpack@5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2)) webpack-hot-middleware: 2.26.1 "@pnpm/config.env-replace@1.1.0": {} @@ -48930,13 +57541,13 @@ snapshots: "@prefresh/utils@1.2.1": {} - "@prefresh/webpack@3.3.4(@prefresh/babel-plugin@0.4.4)(preact@10.29.1)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)))": + "@prefresh/webpack@3.3.4(@prefresh/babel-plugin@0.4.4)(preact@10.29.1)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)))": dependencies: "@prefresh/babel-plugin": 0.4.4 "@prefresh/core": 1.5.9(preact@10.29.1) "@prefresh/utils": 1.2.1 preact: 10.29.1 - webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) "@prisma/instrumentation@6.11.1(@opentelemetry/api@1.9.1)": dependencies: @@ -48962,6 +57573,21 @@ snapshots: - react-native-b4a - supports-color + "@puppeteer/browsers@2.13.1": + dependencies: + debug: 4.4.3(supports-color@5.5.0) + extract-zip: 2.0.1 + progress: 2.0.3 + proxy-agent: 6.5.0 + semver: 7.7.4 + tar-fs: 3.1.2 + yargs: 17.7.2 + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - react-native-b4a + - supports-color + "@puppeteer/browsers@2.6.1": dependencies: debug: 4.4.3(supports-color@5.5.0) @@ -48982,210 +57608,210 @@ snapshots: "@radix-ui/primitive@1.1.3": {} - "@radix-ui/react-compose-refs@1.1.2(@types/react@18.3.28)(react@18.3.1)": + "@radix-ui/react-compose-refs@1.1.2(@types/react@18.3.28)(react@19.2.5)": dependencies: - react: 18.3.1 + react: 19.2.5 optionalDependencies: "@types/react": 18.3.28 - "@radix-ui/react-context@1.1.2(@types/react@18.3.28)(react@18.3.1)": + "@radix-ui/react-context@1.1.2(@types/react@18.3.28)(react@19.2.5)": dependencies: - react: 18.3.1 + react: 19.2.5 optionalDependencies: "@types/react": 18.3.28 - "@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": + "@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)": dependencies: "@radix-ui/primitive": 1.1.3 - "@radix-ui/react-compose-refs": 1.1.2(@types/react@18.3.28)(react@18.3.1) - "@radix-ui/react-context": 1.1.2(@types/react@18.3.28)(react@18.3.1) - "@radix-ui/react-dismissable-layer": 1.1.11(@types/react-dom@19.2.3(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - "@radix-ui/react-focus-guards": 1.1.3(@types/react@18.3.28)(react@18.3.1) - "@radix-ui/react-focus-scope": 1.1.7(@types/react-dom@19.2.3(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - "@radix-ui/react-id": 1.1.1(@types/react@18.3.28)(react@18.3.1) - "@radix-ui/react-portal": 1.1.9(@types/react-dom@19.2.3(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - "@radix-ui/react-presence": 1.1.5(@types/react-dom@19.2.3(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - "@radix-ui/react-slot": 1.2.3(@types/react@18.3.28)(react@18.3.1) - "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@18.3.28)(react@18.3.1) + "@radix-ui/react-compose-refs": 1.1.2(@types/react@18.3.28)(react@19.2.5) + "@radix-ui/react-context": 1.1.2(@types/react@18.3.28)(react@19.2.5) + "@radix-ui/react-dismissable-layer": 1.1.11(@types/react-dom@19.2.3(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + "@radix-ui/react-focus-guards": 1.1.3(@types/react@18.3.28)(react@19.2.5) + "@radix-ui/react-focus-scope": 1.1.7(@types/react-dom@19.2.3(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + "@radix-ui/react-id": 1.1.1(@types/react@18.3.28)(react@19.2.5) + "@radix-ui/react-portal": 1.1.9(@types/react-dom@19.2.3(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + "@radix-ui/react-presence": 1.1.5(@types/react-dom@19.2.3(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + "@radix-ui/react-slot": 1.2.3(@types/react@18.3.28)(react@19.2.5) + "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@18.3.28)(react@19.2.5) aria-hidden: 1.2.6 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - react-remove-scroll: 2.7.2(@types/react@18.3.28)(react@18.3.1) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + react-remove-scroll: 2.7.2(@types/react@18.3.28)(react@19.2.5) optionalDependencies: "@types/react": 18.3.28 "@types/react-dom": 19.2.3(@types/react@18.3.28) - "@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.3(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": + "@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.3(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)": dependencies: "@radix-ui/primitive": 1.1.3 - "@radix-ui/react-compose-refs": 1.1.2(@types/react@18.3.28)(react@18.3.1) - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@18.3.28)(react@18.3.1) - "@radix-ui/react-use-escape-keydown": 1.1.1(@types/react@18.3.28)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + "@radix-ui/react-compose-refs": 1.1.2(@types/react@18.3.28)(react@19.2.5) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@18.3.28)(react@19.2.5) + "@radix-ui/react-use-escape-keydown": 1.1.1(@types/react@18.3.28)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: "@types/react": 18.3.28 "@types/react-dom": 19.2.3(@types/react@18.3.28) - "@radix-ui/react-focus-guards@1.1.3(@types/react@18.3.28)(react@18.3.1)": + "@radix-ui/react-focus-guards@1.1.3(@types/react@18.3.28)(react@19.2.5)": dependencies: - react: 18.3.1 + react: 19.2.5 optionalDependencies: "@types/react": 18.3.28 - "@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.3(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": + "@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.3(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)": dependencies: - "@radix-ui/react-compose-refs": 1.1.2(@types/react@18.3.28)(react@18.3.1) - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@18.3.28)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + "@radix-ui/react-compose-refs": 1.1.2(@types/react@18.3.28)(react@19.2.5) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@18.3.28)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: "@types/react": 18.3.28 "@types/react-dom": 19.2.3(@types/react@18.3.28) - "@radix-ui/react-id@1.1.1(@types/react@18.3.28)(react@18.3.1)": + "@radix-ui/react-id@1.1.1(@types/react@18.3.28)(react@19.2.5)": dependencies: - "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@18.3.28)(react@18.3.1) - react: 18.3.1 + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@18.3.28)(react@19.2.5) + react: 19.2.5 optionalDependencies: "@types/react": 18.3.28 - "@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.3(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": + "@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.3(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)": dependencies: - "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@18.3.28)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@18.3.28)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: "@types/react": 18.3.28 "@types/react-dom": 19.2.3(@types/react@18.3.28) - "@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": + "@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)": dependencies: - "@radix-ui/react-compose-refs": 1.1.2(@types/react@18.3.28)(react@18.3.1) - "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@18.3.28)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + "@radix-ui/react-compose-refs": 1.1.2(@types/react@18.3.28)(react@19.2.5) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@18.3.28)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: "@types/react": 18.3.28 "@types/react-dom": 19.2.3(@types/react@18.3.28) - "@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": + "@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)": dependencies: - "@radix-ui/react-slot": 1.2.3(@types/react@18.3.28)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + "@radix-ui/react-slot": 1.2.3(@types/react@18.3.28)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: "@types/react": 18.3.28 "@types/react-dom": 19.2.3(@types/react@18.3.28) - "@radix-ui/react-primitive@2.1.4(@types/react-dom@19.2.3(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": + "@radix-ui/react-primitive@2.1.4(@types/react-dom@19.2.3(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)": dependencies: - "@radix-ui/react-slot": 1.2.4(@types/react@18.3.28)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + "@radix-ui/react-slot": 1.2.4(@types/react@18.3.28)(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: "@types/react": 18.3.28 "@types/react-dom": 19.2.3(@types/react@18.3.28) - "@radix-ui/react-slot@1.2.3(@types/react@18.3.28)(react@18.3.1)": + "@radix-ui/react-slot@1.2.3(@types/react@18.3.28)(react@19.2.5)": dependencies: - "@radix-ui/react-compose-refs": 1.1.2(@types/react@18.3.28)(react@18.3.1) - react: 18.3.1 + "@radix-ui/react-compose-refs": 1.1.2(@types/react@18.3.28)(react@19.2.5) + react: 19.2.5 optionalDependencies: "@types/react": 18.3.28 - "@radix-ui/react-slot@1.2.4(@types/react@18.3.28)(react@18.3.1)": + "@radix-ui/react-slot@1.2.4(@types/react@18.3.28)(react@19.2.5)": dependencies: - "@radix-ui/react-compose-refs": 1.1.2(@types/react@18.3.28)(react@18.3.1) - react: 18.3.1 + "@radix-ui/react-compose-refs": 1.1.2(@types/react@18.3.28)(react@19.2.5) + react: 19.2.5 optionalDependencies: "@types/react": 18.3.28 - "@radix-ui/react-use-callback-ref@1.1.1(@types/react@18.3.28)(react@18.3.1)": + "@radix-ui/react-use-callback-ref@1.1.1(@types/react@18.3.28)(react@19.2.5)": dependencies: - react: 18.3.1 + react: 19.2.5 optionalDependencies: "@types/react": 18.3.28 - "@radix-ui/react-use-controllable-state@1.2.2(@types/react@18.3.28)(react@18.3.1)": + "@radix-ui/react-use-controllable-state@1.2.2(@types/react@18.3.28)(react@19.2.5)": dependencies: - "@radix-ui/react-use-effect-event": 0.0.2(@types/react@18.3.28)(react@18.3.1) - "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@18.3.28)(react@18.3.1) - react: 18.3.1 + "@radix-ui/react-use-effect-event": 0.0.2(@types/react@18.3.28)(react@19.2.5) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@18.3.28)(react@19.2.5) + react: 19.2.5 optionalDependencies: "@types/react": 18.3.28 - "@radix-ui/react-use-effect-event@0.0.2(@types/react@18.3.28)(react@18.3.1)": + "@radix-ui/react-use-effect-event@0.0.2(@types/react@18.3.28)(react@19.2.5)": dependencies: - "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@18.3.28)(react@18.3.1) - react: 18.3.1 + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@18.3.28)(react@19.2.5) + react: 19.2.5 optionalDependencies: "@types/react": 18.3.28 - "@radix-ui/react-use-escape-keydown@1.1.1(@types/react@18.3.28)(react@18.3.1)": + "@radix-ui/react-use-escape-keydown@1.1.1(@types/react@18.3.28)(react@19.2.5)": dependencies: - "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@18.3.28)(react@18.3.1) - react: 18.3.1 + "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@18.3.28)(react@19.2.5) + react: 19.2.5 optionalDependencies: "@types/react": 18.3.28 - "@radix-ui/react-use-layout-effect@1.1.1(@types/react@18.3.28)(react@18.3.1)": + "@radix-ui/react-use-layout-effect@1.1.1(@types/react@18.3.28)(react@19.2.5)": dependencies: - react: 18.3.1 + react: 19.2.5 optionalDependencies: "@types/react": 18.3.28 - "@react-spring/animated@9.7.5(react@18.3.1)": + "@react-spring/animated@9.7.5(react@19.2.5)": dependencies: - "@react-spring/shared": 9.7.5(react@18.3.1) + "@react-spring/shared": 9.7.5(react@19.2.5) "@react-spring/types": 9.7.5 - react: 18.3.1 + react: 19.2.5 - "@react-spring/core@9.7.5(react@18.3.1)": + "@react-spring/core@9.7.5(react@19.2.5)": dependencies: - "@react-spring/animated": 9.7.5(react@18.3.1) - "@react-spring/shared": 9.7.5(react@18.3.1) + "@react-spring/animated": 9.7.5(react@19.2.5) + "@react-spring/shared": 9.7.5(react@19.2.5) "@react-spring/types": 9.7.5 - react: 18.3.1 + react: 19.2.5 "@react-spring/rafz@9.7.5": {} - "@react-spring/shared@9.7.5(react@18.3.1)": + "@react-spring/shared@9.7.5(react@19.2.5)": dependencies: "@react-spring/rafz": 9.7.5 "@react-spring/types": 9.7.5 - react: 18.3.1 + react: 19.2.5 "@react-spring/types@9.7.5": {} - "@react-spring/web@9.7.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": + "@react-spring/web@9.7.5(react-dom@19.2.5(react@19.2.5))(react@19.2.5)": dependencies: - "@react-spring/animated": 9.7.5(react@18.3.1) - "@react-spring/core": 9.7.5(react@18.3.1) - "@react-spring/shared": 9.7.5(react@18.3.1) + "@react-spring/animated": 9.7.5(react@19.2.5) + "@react-spring/core": 9.7.5(react@19.2.5) + "@react-spring/shared": 9.7.5(react@19.2.5) "@react-spring/types": 9.7.5 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) "@riotjs/cli@10.0.0(@babel/core@7.29.0)(@types/babel__core@7.20.5)": dependencies: "@babel/preset-typescript": 7.28.5(@babel/core@7.29.0) "@riotjs/compiler": 10.0.1 - "@rollup/plugin-babel": 6.1.0(@babel/core@7.29.0)(@types/babel__core@7.20.5)(rollup@4.60.1) - "@rollup/plugin-commonjs": 28.0.9(rollup@4.60.1) - "@rollup/plugin-json": 6.1.0(rollup@4.60.1) - "@rollup/plugin-node-resolve": 16.0.3(rollup@4.60.1) + "@rollup/plugin-babel": 6.1.0(@babel/core@7.29.0)(@types/babel__core@7.20.5)(rollup@4.60.2) + "@rollup/plugin-commonjs": 28.0.9(rollup@4.60.2) + "@rollup/plugin-json": 6.1.0(rollup@4.60.2) + "@rollup/plugin-node-resolve": 16.0.3(rollup@4.60.2) chalk: 5.6.2 chokidar: 4.0.3 cumpa: 2.0.1 glob: 11.1.0 optionator: 0.9.4 - rollup: 4.60.1 - rollup-plugin-riot: 10.0.0(rollup@4.60.1) + rollup: 4.60.2 + rollup-plugin-riot: 10.0.0(rollup@4.60.2) transitivePeerDependencies: - "@babel/core" - "@types/babel__core" @@ -49269,71 +57895,107 @@ snapshots: "@riotjs/webpack-loader@9.0.1(@riotjs/compiler@9.4.9)(webpack@5.106.1)": dependencies: "@riotjs/compiler": 9.4.9 - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@5.1.4) + webpack: 5.106.1(@swc/core@1.15.33)(webpack-cli@5.1.4) "@rolldown/binding-android-arm64@1.0.0-rc.15": optional: true + "@rolldown/binding-android-arm64@1.0.0-rc.18": + optional: true + "@rolldown/binding-android-arm64@1.0.0-rc.4": optional: true "@rolldown/binding-darwin-arm64@1.0.0-rc.15": optional: true + "@rolldown/binding-darwin-arm64@1.0.0-rc.18": + optional: true + "@rolldown/binding-darwin-arm64@1.0.0-rc.4": optional: true "@rolldown/binding-darwin-x64@1.0.0-rc.15": optional: true + "@rolldown/binding-darwin-x64@1.0.0-rc.18": + optional: true + "@rolldown/binding-darwin-x64@1.0.0-rc.4": optional: true "@rolldown/binding-freebsd-x64@1.0.0-rc.15": optional: true + "@rolldown/binding-freebsd-x64@1.0.0-rc.18": + optional: true + "@rolldown/binding-freebsd-x64@1.0.0-rc.4": optional: true "@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.15": optional: true + "@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.18": + optional: true + "@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.4": optional: true "@rolldown/binding-linux-arm64-gnu@1.0.0-rc.15": optional: true + "@rolldown/binding-linux-arm64-gnu@1.0.0-rc.18": + optional: true + "@rolldown/binding-linux-arm64-gnu@1.0.0-rc.4": optional: true "@rolldown/binding-linux-arm64-musl@1.0.0-rc.15": optional: true + "@rolldown/binding-linux-arm64-musl@1.0.0-rc.18": + optional: true + "@rolldown/binding-linux-arm64-musl@1.0.0-rc.4": optional: true "@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.15": optional: true + "@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.18": + optional: true + "@rolldown/binding-linux-s390x-gnu@1.0.0-rc.15": optional: true + "@rolldown/binding-linux-s390x-gnu@1.0.0-rc.18": + optional: true + "@rolldown/binding-linux-x64-gnu@1.0.0-rc.15": optional: true + "@rolldown/binding-linux-x64-gnu@1.0.0-rc.18": + optional: true + "@rolldown/binding-linux-x64-gnu@1.0.0-rc.4": optional: true "@rolldown/binding-linux-x64-musl@1.0.0-rc.15": optional: true + "@rolldown/binding-linux-x64-musl@1.0.0-rc.18": + optional: true + "@rolldown/binding-linux-x64-musl@1.0.0-rc.4": optional: true "@rolldown/binding-openharmony-arm64@1.0.0-rc.15": optional: true + "@rolldown/binding-openharmony-arm64@1.0.0-rc.18": + optional: true + "@rolldown/binding-openharmony-arm64@1.0.0-rc.4": optional: true @@ -49344,9 +58006,16 @@ snapshots: "@napi-rs/wasm-runtime": 1.1.3(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) optional: true - "@rolldown/binding-wasm32-wasi@1.0.0-rc.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)": + "@rolldown/binding-wasm32-wasi@1.0.0-rc.18": dependencies: - "@napi-rs/wasm-runtime": 1.1.3(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + "@emnapi/core": 1.10.0 + "@emnapi/runtime": 1.10.0 + "@napi-rs/wasm-runtime": 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + optional: true + + "@rolldown/binding-wasm32-wasi@1.0.0-rc.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)": + dependencies: + "@napi-rs/wasm-runtime": 1.1.3(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) transitivePeerDependencies: - "@emnapi/core" - "@emnapi/runtime" @@ -49355,26 +58024,34 @@ snapshots: "@rolldown/binding-win32-arm64-msvc@1.0.0-rc.15": optional: true + "@rolldown/binding-win32-arm64-msvc@1.0.0-rc.18": + optional: true + "@rolldown/binding-win32-arm64-msvc@1.0.0-rc.4": optional: true "@rolldown/binding-win32-x64-msvc@1.0.0-rc.15": optional: true + "@rolldown/binding-win32-x64-msvc@1.0.0-rc.18": + optional: true + "@rolldown/binding-win32-x64-msvc@1.0.0-rc.4": optional: true "@rolldown/pluginutils@1.0.0-rc.15": {} + "@rolldown/pluginutils@1.0.0-rc.18": {} + "@rolldown/pluginutils@1.0.0-rc.2": {} "@rolldown/pluginutils@1.0.0-rc.4": {} "@rolldown/pluginutils@1.0.0-rc.7": {} - "@rollup/plugin-alias@6.0.0(rollup@4.60.1)": + "@rollup/plugin-alias@6.0.0(rollup@4.60.2)": optionalDependencies: - rollup: 4.60.1 + rollup: 4.60.2 "@rollup/plugin-babel@5.3.1(@babel/core@7.29.0)(@types/babel__core@7.20.5)(rollup@2.80.0)": dependencies: @@ -49387,14 +58064,14 @@ snapshots: transitivePeerDependencies: - supports-color - "@rollup/plugin-babel@6.1.0(@babel/core@7.29.0)(@types/babel__core@7.20.5)(rollup@4.60.1)": + "@rollup/plugin-babel@6.1.0(@babel/core@7.29.0)(@types/babel__core@7.20.5)(rollup@4.60.2)": dependencies: "@babel/core": 7.29.0 "@babel/helper-module-imports": 7.28.6 - "@rollup/pluginutils": 5.3.0(rollup@4.60.1) + "@rollup/pluginutils": 5.3.0(rollup@4.60.2) optionalDependencies: "@types/babel__core": 7.20.5 - rollup: 4.60.1 + rollup: 4.60.2 transitivePeerDependencies: - supports-color @@ -49409,6 +58086,18 @@ snapshots: transitivePeerDependencies: - supports-color + "@rollup/plugin-babel@7.0.0(@babel/core@7.29.0)(@types/babel__core@7.20.5)(rollup@4.60.3)": + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-module-imports": 7.28.6 + "@rollup/pluginutils": 5.3.0(rollup@4.60.3) + optionalDependencies: + "@types/babel__core": 7.20.5 + rollup: 4.60.3 + transitivePeerDependencies: + - supports-color + optional: true + "@rollup/plugin-commonjs@25.0.8(rollup@4.60.1)": dependencies: "@rollup/pluginutils": 5.3.0(rollup@4.60.1) @@ -49420,9 +58109,9 @@ snapshots: optionalDependencies: rollup: 4.60.1 - "@rollup/plugin-commonjs@28.0.9(rollup@4.60.1)": + "@rollup/plugin-commonjs@28.0.9(rollup@4.60.2)": dependencies: - "@rollup/pluginutils": 5.3.0(rollup@4.60.1) + "@rollup/pluginutils": 5.3.0(rollup@4.60.2) commondir: 1.0.1 estree-walker: 2.0.2 fdir: 6.5.0(picomatch@4.0.4) @@ -49430,11 +58119,11 @@ snapshots: magic-string: 0.30.21 picomatch: 4.0.4 optionalDependencies: - rollup: 4.60.1 + rollup: 4.60.2 - "@rollup/plugin-commonjs@29.0.2(rollup@4.60.1)": + "@rollup/plugin-commonjs@29.0.2(rollup@4.60.2)": dependencies: - "@rollup/pluginutils": 5.3.0(rollup@4.60.1) + "@rollup/pluginutils": 5.3.0(rollup@4.60.2) commondir: 1.0.1 estree-walker: 2.0.2 fdir: 6.5.0(picomatch@4.0.4) @@ -49442,15 +58131,15 @@ snapshots: magic-string: 0.30.21 picomatch: 4.0.4 optionalDependencies: - rollup: 4.60.1 + rollup: 4.60.2 - "@rollup/plugin-inject@5.0.5(rollup@4.60.1)": + "@rollup/plugin-inject@5.0.5(rollup@4.60.2)": dependencies: - "@rollup/pluginutils": 5.3.0(rollup@4.60.1) + "@rollup/pluginutils": 5.3.0(rollup@4.60.2) estree-walker: 2.0.2 magic-string: 0.30.21 optionalDependencies: - rollup: 4.60.1 + rollup: 4.60.2 "@rollup/plugin-json@6.1.0(rollup@2.80.0)": dependencies: @@ -49464,6 +58153,12 @@ snapshots: optionalDependencies: rollup: 4.60.1 + "@rollup/plugin-json@6.1.0(rollup@4.60.2)": + dependencies: + "@rollup/pluginutils": 5.3.0(rollup@4.60.2) + optionalDependencies: + rollup: 4.60.2 + "@rollup/plugin-node-resolve@11.2.1(rollup@2.80.0)": dependencies: "@rollup/pluginutils": 3.1.0(rollup@2.80.0) @@ -49514,6 +58209,16 @@ snapshots: optionalDependencies: rollup: 4.60.1 + "@rollup/plugin-node-resolve@16.0.3(rollup@4.60.2)": + dependencies: + "@rollup/pluginutils": 5.3.0(rollup@4.60.2) + "@types/resolve": 1.20.2 + deepmerge: 4.3.1 + is-module: 1.0.0 + resolve: 1.22.12 + optionalDependencies: + rollup: 4.60.2 + "@rollup/plugin-node-resolve@6.1.0(rollup@3.30.0)": dependencies: "@rollup/pluginutils": 3.1.0(rollup@3.30.0) @@ -49559,6 +58264,20 @@ snapshots: optionalDependencies: rollup: 4.60.1 + "@rollup/plugin-replace@6.0.3(rollup@4.60.2)": + dependencies: + "@rollup/pluginutils": 5.3.0(rollup@4.60.2) + magic-string: 0.30.21 + optionalDependencies: + rollup: 4.60.2 + + "@rollup/plugin-replace@6.0.3(rollup@4.60.3)": + dependencies: + "@rollup/pluginutils": 5.3.0(rollup@4.60.3) + magic-string: 0.30.21 + optionalDependencies: + rollup: 4.60.3 + "@rollup/plugin-terser@0.4.4(rollup@4.60.1)": dependencies: serialize-javascript: 6.0.2 @@ -49575,6 +58294,14 @@ snapshots: optionalDependencies: rollup: 4.60.1 + "@rollup/plugin-terser@1.0.0(rollup@4.60.2)": + dependencies: + serialize-javascript: 7.0.5 + smob: 1.6.1 + terser: 5.46.1 + optionalDependencies: + rollup: 4.60.2 + "@rollup/plugin-typescript@11.1.6(rollup@4.60.1)(tslib@2.8.1)(typescript@5.4.5)": dependencies: "@rollup/pluginutils": 5.3.0(rollup@4.60.1) @@ -49593,6 +58320,15 @@ snapshots: rollup: 4.60.1 tslib: 2.8.1 + "@rollup/plugin-typescript@12.3.0(rollup@4.60.1)(tslib@2.8.1)(typescript@6.0.3)": + dependencies: + "@rollup/pluginutils": 5.3.0(rollup@4.60.1) + resolve: 1.22.12 + typescript: 6.0.3 + optionalDependencies: + rollup: 4.60.1 + tslib: 2.8.1 + "@rollup/pluginutils@3.1.0(rollup@2.80.0)": dependencies: "@types/estree": 0.0.39 @@ -49614,7 +58350,7 @@ snapshots: "@rollup/pluginutils@5.3.0(rollup@2.80.0)": dependencies: - "@types/estree": 1.0.8 + "@types/estree": 1.0.9 estree-walker: 2.0.2 picomatch: 4.0.4 optionalDependencies: @@ -49622,7 +58358,7 @@ snapshots: "@rollup/pluginutils@5.3.0(rollup@3.30.0)": dependencies: - "@types/estree": 1.0.8 + "@types/estree": 1.0.9 estree-walker: 2.0.2 picomatch: 4.0.4 optionalDependencies: @@ -49630,18 +58366,46 @@ snapshots: "@rollup/pluginutils@5.3.0(rollup@4.60.1)": dependencies: - "@types/estree": 1.0.8 + "@types/estree": 1.0.9 estree-walker: 2.0.2 picomatch: 4.0.4 optionalDependencies: rollup: 4.60.1 + "@rollup/pluginutils@5.3.0(rollup@4.60.2)": + dependencies: + "@types/estree": 1.0.9 + estree-walker: 2.0.2 + picomatch: 4.0.4 + optionalDependencies: + rollup: 4.60.2 + + "@rollup/pluginutils@5.3.0(rollup@4.60.3)": + dependencies: + "@types/estree": 1.0.9 + estree-walker: 2.0.2 + picomatch: 4.0.4 + optionalDependencies: + rollup: 4.60.3 + "@rollup/rollup-android-arm-eabi@4.60.1": optional: true + "@rollup/rollup-android-arm-eabi@4.60.2": + optional: true + + "@rollup/rollup-android-arm-eabi@4.60.3": + optional: true + "@rollup/rollup-android-arm64@4.60.1": optional: true + "@rollup/rollup-android-arm64@4.60.2": + optional: true + + "@rollup/rollup-android-arm64@4.60.3": + optional: true + "@rollup/rollup-darwin-arm64@4.34.9": optional: true @@ -49651,6 +58415,12 @@ snapshots: "@rollup/rollup-darwin-arm64@4.60.1": optional: true + "@rollup/rollup-darwin-arm64@4.60.2": + optional: true + + "@rollup/rollup-darwin-arm64@4.60.3": + optional: true + "@rollup/rollup-darwin-x64@4.34.9": optional: true @@ -49660,18 +58430,48 @@ snapshots: "@rollup/rollup-darwin-x64@4.60.1": optional: true + "@rollup/rollup-darwin-x64@4.60.2": + optional: true + + "@rollup/rollup-darwin-x64@4.60.3": + optional: true + "@rollup/rollup-freebsd-arm64@4.60.1": optional: true + "@rollup/rollup-freebsd-arm64@4.60.2": + optional: true + + "@rollup/rollup-freebsd-arm64@4.60.3": + optional: true + "@rollup/rollup-freebsd-x64@4.60.1": optional: true + "@rollup/rollup-freebsd-x64@4.60.2": + optional: true + + "@rollup/rollup-freebsd-x64@4.60.3": + optional: true + "@rollup/rollup-linux-arm-gnueabihf@4.60.1": optional: true + "@rollup/rollup-linux-arm-gnueabihf@4.60.2": + optional: true + + "@rollup/rollup-linux-arm-gnueabihf@4.60.3": + optional: true + "@rollup/rollup-linux-arm-musleabihf@4.60.1": optional: true + "@rollup/rollup-linux-arm-musleabihf@4.60.2": + optional: true + + "@rollup/rollup-linux-arm-musleabihf@4.60.3": + optional: true + "@rollup/rollup-linux-arm64-gnu@4.34.9": optional: true @@ -49681,6 +58481,12 @@ snapshots: "@rollup/rollup-linux-arm64-gnu@4.60.1": optional: true + "@rollup/rollup-linux-arm64-gnu@4.60.2": + optional: true + + "@rollup/rollup-linux-arm64-gnu@4.60.3": + optional: true + "@rollup/rollup-linux-arm64-musl@4.34.9": optional: true @@ -49690,27 +58496,75 @@ snapshots: "@rollup/rollup-linux-arm64-musl@4.60.1": optional: true + "@rollup/rollup-linux-arm64-musl@4.60.2": + optional: true + + "@rollup/rollup-linux-arm64-musl@4.60.3": + optional: true + "@rollup/rollup-linux-loong64-gnu@4.60.1": optional: true + "@rollup/rollup-linux-loong64-gnu@4.60.2": + optional: true + + "@rollup/rollup-linux-loong64-gnu@4.60.3": + optional: true + "@rollup/rollup-linux-loong64-musl@4.60.1": optional: true + "@rollup/rollup-linux-loong64-musl@4.60.2": + optional: true + + "@rollup/rollup-linux-loong64-musl@4.60.3": + optional: true + "@rollup/rollup-linux-ppc64-gnu@4.60.1": optional: true + "@rollup/rollup-linux-ppc64-gnu@4.60.2": + optional: true + + "@rollup/rollup-linux-ppc64-gnu@4.60.3": + optional: true + "@rollup/rollup-linux-ppc64-musl@4.60.1": optional: true + "@rollup/rollup-linux-ppc64-musl@4.60.2": + optional: true + + "@rollup/rollup-linux-ppc64-musl@4.60.3": + optional: true + "@rollup/rollup-linux-riscv64-gnu@4.60.1": optional: true + "@rollup/rollup-linux-riscv64-gnu@4.60.2": + optional: true + + "@rollup/rollup-linux-riscv64-gnu@4.60.3": + optional: true + "@rollup/rollup-linux-riscv64-musl@4.60.1": optional: true + "@rollup/rollup-linux-riscv64-musl@4.60.2": + optional: true + + "@rollup/rollup-linux-riscv64-musl@4.60.3": + optional: true + "@rollup/rollup-linux-s390x-gnu@4.60.1": optional: true + "@rollup/rollup-linux-s390x-gnu@4.60.2": + optional: true + + "@rollup/rollup-linux-s390x-gnu@4.60.3": + optional: true + "@rollup/rollup-linux-x64-gnu@4.34.9": optional: true @@ -49720,6 +58574,12 @@ snapshots: "@rollup/rollup-linux-x64-gnu@4.60.1": optional: true + "@rollup/rollup-linux-x64-gnu@4.60.2": + optional: true + + "@rollup/rollup-linux-x64-gnu@4.60.3": + optional: true + "@rollup/rollup-linux-x64-musl@4.34.9": optional: true @@ -49729,12 +58589,30 @@ snapshots: "@rollup/rollup-linux-x64-musl@4.60.1": optional: true + "@rollup/rollup-linux-x64-musl@4.60.2": + optional: true + + "@rollup/rollup-linux-x64-musl@4.60.3": + optional: true + "@rollup/rollup-openbsd-x64@4.60.1": optional: true + "@rollup/rollup-openbsd-x64@4.60.2": + optional: true + + "@rollup/rollup-openbsd-x64@4.60.3": + optional: true + "@rollup/rollup-openharmony-arm64@4.60.1": optional: true + "@rollup/rollup-openharmony-arm64@4.60.2": + optional: true + + "@rollup/rollup-openharmony-arm64@4.60.3": + optional: true + "@rollup/rollup-win32-arm64-msvc@4.34.9": optional: true @@ -49744,12 +58622,30 @@ snapshots: "@rollup/rollup-win32-arm64-msvc@4.60.1": optional: true + "@rollup/rollup-win32-arm64-msvc@4.60.2": + optional: true + + "@rollup/rollup-win32-arm64-msvc@4.60.3": + optional: true + "@rollup/rollup-win32-ia32-msvc@4.60.1": optional: true + "@rollup/rollup-win32-ia32-msvc@4.60.2": + optional: true + + "@rollup/rollup-win32-ia32-msvc@4.60.3": + optional: true + "@rollup/rollup-win32-x64-gnu@4.60.1": optional: true + "@rollup/rollup-win32-x64-gnu@4.60.2": + optional: true + + "@rollup/rollup-win32-x64-gnu@4.60.3": + optional: true + "@rollup/rollup-win32-x64-msvc@4.34.9": optional: true @@ -49759,6 +58655,12 @@ snapshots: "@rollup/rollup-win32-x64-msvc@4.60.1": optional: true + "@rollup/rollup-win32-x64-msvc@4.60.2": + optional: true + + "@rollup/rollup-win32-x64-msvc@4.60.3": + optional: true + "@rollup/wasm-node@4.60.1": dependencies: "@types/estree": 1.0.8 @@ -49796,6 +58698,19 @@ snapshots: optionalDependencies: "@types/node": 25.6.0 + "@rushstack/node-core-library@5.22.0(@types/node@25.6.2)": + dependencies: + ajv: 8.18.0 + ajv-draft-04: 1.0.0(ajv@8.18.0) + ajv-formats: 3.0.1(ajv@8.18.0) + fs-extra: 11.3.4 + import-lazy: 4.0.0 + jju: 1.4.0 + resolve: 1.22.12 + semver: 7.5.4 + optionalDependencies: + "@types/node": 25.6.2 + "@rushstack/problem-matcher@0.2.1(@types/node@20.19.39)": optionalDependencies: "@types/node": 20.19.39 @@ -49805,6 +58720,10 @@ snapshots: optionalDependencies: "@types/node": 25.6.0 + "@rushstack/problem-matcher@0.2.1(@types/node@25.6.2)": + optionalDependencies: + "@types/node": 25.6.2 + "@rushstack/rig-package@0.7.2": dependencies: resolve: 1.22.12 @@ -49827,6 +58746,14 @@ snapshots: optionalDependencies: "@types/node": 25.6.0 + "@rushstack/terminal@0.22.5(@types/node@25.6.2)": + dependencies: + "@rushstack/node-core-library": 5.22.0(@types/node@25.6.2) + "@rushstack/problem-matcher": 0.2.1(@types/node@25.6.2) + supports-color: 8.1.1 + optionalDependencies: + "@types/node": 25.6.2 + "@rushstack/ts-command-line@5.3.5(@types/node@20.19.39)": dependencies: "@rushstack/terminal": 0.22.5(@types/node@20.19.39) @@ -49846,6 +58773,15 @@ snapshots: transitivePeerDependencies: - "@types/node" + "@rushstack/ts-command-line@5.3.5(@types/node@25.6.2)": + dependencies: + "@rushstack/terminal": 0.22.5(@types/node@25.6.2) + "@types/argparse": 1.0.38 + argparse: 1.0.10 + string-argv: 0.3.2 + transitivePeerDependencies: + - "@types/node" + "@samverschueren/stream-to-observable@0.3.1(rxjs@6.6.7)": dependencies: any-observable: 0.3.0(rxjs@6.6.7) @@ -49872,6 +58808,8 @@ snapshots: "@sec-ant/readable-stream@0.4.1": {} + "@sec-ant/readable-stream@0.6.0": {} + "@sentry/core@9.47.1": {} "@sentry/node-core@9.47.1(@opentelemetry/api@1.9.1)(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.1))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.1))(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.1))(@opentelemetry/resources@1.30.1(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.40.0)": @@ -49936,6 +58874,15 @@ snapshots: "@opentelemetry/semantic-conventions": 1.40.0 "@sentry/core": 9.47.1 + "@shikijs/core@2.5.0": + dependencies: + "@shikijs/engine-javascript": 2.5.0 + "@shikijs/engine-oniguruma": 2.5.0 + "@shikijs/types": 2.5.0 + "@shikijs/vscode-textmate": 10.0.2 + "@types/hast": 3.0.4 + hast-util-to-html: 9.0.5 + "@shikijs/core@4.0.2": dependencies: "@shikijs/primitive": 4.0.2 @@ -49944,12 +58891,23 @@ snapshots: "@types/hast": 3.0.4 hast-util-to-html: 9.0.5 + "@shikijs/engine-javascript@2.5.0": + dependencies: + "@shikijs/types": 2.5.0 + "@shikijs/vscode-textmate": 10.0.2 + oniguruma-to-es: 3.1.1 + "@shikijs/engine-javascript@4.0.2": dependencies: "@shikijs/types": 4.0.2 "@shikijs/vscode-textmate": 10.0.2 oniguruma-to-es: 4.3.5 + "@shikijs/engine-oniguruma@2.5.0": + dependencies: + "@shikijs/types": 2.5.0 + "@shikijs/vscode-textmate": 10.0.2 + "@shikijs/engine-oniguruma@3.23.0": dependencies: "@shikijs/types": 3.23.0 @@ -49960,6 +58918,10 @@ snapshots: "@shikijs/types": 4.0.2 "@shikijs/vscode-textmate": 10.0.2 + "@shikijs/langs@2.5.0": + dependencies: + "@shikijs/types": 2.5.0 + "@shikijs/langs@3.23.0": dependencies: "@shikijs/types": 3.23.0 @@ -49974,6 +58936,10 @@ snapshots: "@shikijs/vscode-textmate": 10.0.2 "@types/hast": 3.0.4 + "@shikijs/themes@2.5.0": + dependencies: + "@shikijs/types": 2.5.0 + "@shikijs/themes@3.23.0": dependencies: "@shikijs/types": 3.23.0 @@ -49982,6 +58948,16 @@ snapshots: dependencies: "@shikijs/types": 4.0.2 + "@shikijs/transformers@2.5.0": + dependencies: + "@shikijs/core": 2.5.0 + "@shikijs/types": 2.5.0 + + "@shikijs/types@2.5.0": + dependencies: + "@shikijs/vscode-textmate": 10.0.2 + "@types/hast": 3.0.4 + "@shikijs/types@3.23.0": dependencies: "@shikijs/vscode-textmate": 10.0.2 @@ -50129,13 +59105,13 @@ snapshots: "@socket.io/component-emitter@3.1.2": {} - "@soda/friendly-errors-webpack-plugin@1.8.1(webpack@5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2))": + "@soda/friendly-errors-webpack-plugin@1.8.1(webpack@5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2))": dependencies: chalk: 3.0.0 error-stack-parser: 2.1.4 string-width: 4.2.3 strip-ansi: 6.0.1 - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2) + webpack: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) "@soda/get-current-script@1.0.2": {} @@ -50283,24 +59259,46 @@ snapshots: "@stylistic/eslint-plugin@5.10.0(eslint@10.2.0(jiti@2.6.1))": dependencies: "@eslint-community/eslint-utils": 4.9.1(eslint@10.2.0(jiti@2.6.1)) - "@typescript-eslint/types": 8.58.2 + "@typescript-eslint/types": 8.59.0 eslint: 10.2.0(jiti@2.6.1) eslint-visitor-keys: 4.2.1 espree: 10.4.0 estraverse: 5.3.0 picomatch: 4.0.4 + optional: true + + "@stylistic/eslint-plugin@5.10.0(eslint@10.2.0(jiti@2.7.0))": + dependencies: + "@eslint-community/eslint-utils": 4.9.1(eslint@10.2.0(jiti@2.7.0)) + "@typescript-eslint/types": 8.59.0 + eslint: 10.2.0(jiti@2.7.0) + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + estraverse: 5.3.0 + picomatch: 4.0.4 + optional: true + + "@stylistic/eslint-plugin@5.10.0(eslint@10.3.0(jiti@2.7.0))": + dependencies: + "@eslint-community/eslint-utils": 4.9.1(eslint@10.3.0(jiti@2.7.0)) + "@typescript-eslint/types": 8.59.0 + eslint: 10.3.0(jiti@2.7.0) + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + estraverse: 5.3.0 + picomatch: 4.0.4 - "@stylistic/stylelint-plugin@3.1.3(stylelint@16.26.1(typescript@5.9.3))": + "@stylistic/stylelint-plugin@3.1.3(stylelint@16.26.1(typescript@6.0.3))": dependencies: "@csstools/css-parser-algorithms": 3.0.5(@csstools/css-tokenizer@3.0.4) "@csstools/css-tokenizer": 3.0.4 "@csstools/media-query-list-parser": 3.0.1(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) is-plain-object: 5.0.0 - postcss: 8.5.9 + postcss: 8.5.14 postcss-selector-parser: 6.1.2 postcss-value-parser: 4.2.0 style-search: 0.1.0 - stylelint: 16.26.1(typescript@5.9.3) + stylelint: 16.26.1(typescript@6.0.3) "@surma/rollup-plugin-off-main-thread@2.2.3": dependencies: @@ -50313,20 +59311,20 @@ snapshots: dependencies: acorn: 8.16.0 - "@sveltejs/adapter-auto@3.3.1(@sveltejs/kit@2.57.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.20)(vite@5.4.21(@types/node@25.6.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)))(svelte@4.2.20)(typescript@5.9.3)(vite@5.4.21(@types/node@25.6.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)))": + "@sveltejs/adapter-auto@3.3.1(@sveltejs/kit@2.57.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.20)(vite@5.4.21(@types/node@25.6.2)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)))(svelte@4.2.20)(typescript@5.9.3)(vite@5.4.21(@types/node@25.6.2)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)))": dependencies: - "@sveltejs/kit": 2.57.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.20)(vite@5.4.21(@types/node@25.6.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)))(svelte@4.2.20)(typescript@5.9.3)(vite@5.4.21(@types/node@25.6.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)) + "@sveltejs/kit": 2.57.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.20)(vite@5.4.21(@types/node@25.6.2)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)))(svelte@4.2.20)(typescript@5.9.3)(vite@5.4.21(@types/node@25.6.2)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)) import-meta-resolve: 4.2.0 - "@sveltejs/adapter-auto@7.0.1(@sveltejs/kit@2.57.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.3(@typescript-eslint/types@8.58.2))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)))(svelte@5.55.3(@typescript-eslint/types@8.58.2))(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)))": + "@sveltejs/adapter-auto@7.0.1(@sveltejs/kit@2.57.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.3(@typescript-eslint/types@8.59.2))(vite@8.0.8(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)))(svelte@5.55.3(@typescript-eslint/types@8.59.2))(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)))": dependencies: - "@sveltejs/kit": 2.57.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.3(@typescript-eslint/types@8.58.2))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)))(svelte@5.55.3(@typescript-eslint/types@8.58.2))(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) + "@sveltejs/kit": 2.57.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.3(@typescript-eslint/types@8.59.2))(vite@8.0.8(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)))(svelte@5.55.3(@typescript-eslint/types@8.59.2))(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) - "@sveltejs/kit@2.57.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.20)(vite@5.4.21(@types/node@25.6.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)))(svelte@4.2.20)(typescript@5.9.3)(vite@5.4.21(@types/node@25.6.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1))": + "@sveltejs/kit@2.57.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.20)(vite@5.4.21(@types/node@25.6.2)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)))(svelte@4.2.20)(typescript@5.9.3)(vite@5.4.21(@types/node@25.6.2)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1))": dependencies: "@standard-schema/spec": 1.1.0 "@sveltejs/acorn-typescript": 1.0.9(acorn@8.16.0) - "@sveltejs/vite-plugin-svelte": 3.1.2(svelte@4.2.20)(vite@5.4.21(@types/node@25.6.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)) + "@sveltejs/vite-plugin-svelte": 3.1.2(svelte@4.2.20)(vite@5.4.21(@types/node@25.6.2)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)) "@types/cookie": 0.6.0 acorn: 8.16.0 cookie: 0.6.0 @@ -50338,16 +59336,16 @@ snapshots: set-cookie-parser: 3.1.0 sirv: 3.0.2 svelte: 4.2.20 - vite: 5.4.21(@types/node@25.6.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1) + vite: 5.4.21(@types/node@25.6.2)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1) optionalDependencies: "@opentelemetry/api": 1.9.1 typescript: 5.9.3 - "@sveltejs/kit@2.57.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.3(@typescript-eslint/types@8.58.2))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)))(svelte@5.55.3(@typescript-eslint/types@8.58.2))(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))": + "@sveltejs/kit@2.57.1(@opentelemetry/api@1.9.1)(@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.3(@typescript-eslint/types@8.59.2))(vite@8.0.8(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)))(svelte@5.55.3(@typescript-eslint/types@8.59.2))(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))": dependencies: "@standard-schema/spec": 1.1.0 "@sveltejs/acorn-typescript": 1.0.9(acorn@8.16.0) - "@sveltejs/vite-plugin-svelte": 7.0.0(svelte@5.55.3(@typescript-eslint/types@8.58.2))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) + "@sveltejs/vite-plugin-svelte": 7.0.0(svelte@5.55.3(@typescript-eslint/types@8.59.2))(vite@8.0.8(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) "@types/cookie": 0.6.0 acorn: 8.16.0 cookie: 0.6.0 @@ -50358,54 +59356,54 @@ snapshots: mrmime: 2.0.1 set-cookie-parser: 3.1.0 sirv: 3.0.2 - svelte: 5.55.3(@typescript-eslint/types@8.58.2) - vite: 8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + svelte: 5.55.3(@typescript-eslint/types@8.59.2) + vite: 8.0.8(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) optionalDependencies: "@opentelemetry/api": 1.9.1 typescript: 6.0.2 - "@sveltejs/package@2.5.7(svelte@5.55.3(@typescript-eslint/types@8.58.2))(typescript@6.0.2)": + "@sveltejs/package@2.5.7(svelte@5.55.3(@typescript-eslint/types@8.59.2))(typescript@6.0.2)": dependencies: chokidar: 5.0.0 kleur: 4.1.5 sade: 1.8.1 semver: 7.7.4 - svelte: 5.55.3(@typescript-eslint/types@8.58.2) - svelte2tsx: 0.7.53(svelte@5.55.3(@typescript-eslint/types@8.58.2))(typescript@6.0.2) + svelte: 5.55.3(@typescript-eslint/types@8.59.2) + svelte2tsx: 0.7.53(svelte@5.55.3(@typescript-eslint/types@8.59.2))(typescript@6.0.2) transitivePeerDependencies: - typescript - "@sveltejs/vite-plugin-svelte-inspector@2.1.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.20)(vite@5.4.21(@types/node@25.6.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)))(svelte@4.2.20)(vite@5.4.21(@types/node@25.6.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1))": + "@sveltejs/vite-plugin-svelte-inspector@2.1.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.20)(vite@5.4.21(@types/node@25.6.2)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)))(svelte@4.2.20)(vite@5.4.21(@types/node@25.6.2)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1))": dependencies: - "@sveltejs/vite-plugin-svelte": 3.1.2(svelte@4.2.20)(vite@5.4.21(@types/node@25.6.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)) + "@sveltejs/vite-plugin-svelte": 3.1.2(svelte@4.2.20)(vite@5.4.21(@types/node@25.6.2)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)) debug: 4.4.3(supports-color@5.5.0) svelte: 4.2.20 - vite: 5.4.21(@types/node@25.6.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1) + vite: 5.4.21(@types/node@25.6.2)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1) transitivePeerDependencies: - supports-color - "@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.20)(vite@5.4.21(@types/node@25.6.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1))": + "@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.20)(vite@5.4.21(@types/node@25.6.2)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1))": dependencies: - "@sveltejs/vite-plugin-svelte-inspector": 2.1.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.20)(vite@5.4.21(@types/node@25.6.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)))(svelte@4.2.20)(vite@5.4.21(@types/node@25.6.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)) + "@sveltejs/vite-plugin-svelte-inspector": 2.1.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.20)(vite@5.4.21(@types/node@25.6.2)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)))(svelte@4.2.20)(vite@5.4.21(@types/node@25.6.2)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)) debug: 4.4.3(supports-color@5.5.0) deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.30.21 svelte: 4.2.20 svelte-hmr: 0.16.0(svelte@4.2.20) - vite: 5.4.21(@types/node@25.6.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1) - vitefu: 0.2.5(vite@5.4.21(@types/node@25.6.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)) + vite: 5.4.21(@types/node@25.6.2)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1) + vitefu: 0.2.5(vite@5.4.21(@types/node@25.6.2)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)) transitivePeerDependencies: - supports-color - "@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.3(@typescript-eslint/types@8.58.2))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))": + "@sveltejs/vite-plugin-svelte@7.0.0(svelte@5.55.3(@typescript-eslint/types@8.59.2))(vite@8.0.8(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))": dependencies: deepmerge: 4.3.1 magic-string: 0.30.21 obug: 2.1.1 - svelte: 5.55.3(@typescript-eslint/types@8.58.2) - vite: 8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) - vitefu: 1.1.3(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) + svelte: 5.55.3(@typescript-eslint/types@8.59.2) + vite: 8.0.8(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + vitefu: 1.1.3(vite@8.0.8(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) "@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.29.0)": dependencies: @@ -50451,12 +59449,12 @@ snapshots: "@svgr/babel-plugin-transform-react-native-svg": 8.1.0(@babel/core@7.29.0) "@svgr/babel-plugin-transform-svg-component": 8.0.0(@babel/core@7.29.0) - "@svgr/core@8.1.0(typescript@5.9.3)": + "@svgr/core@8.1.0(typescript@6.0.3)": dependencies: "@babel/core": 7.29.0 "@svgr/babel-preset": 8.1.0(@babel/core@7.29.0) camelcase: 6.3.0 - cosmiconfig: 8.3.6(typescript@5.9.3) + cosmiconfig: 8.3.6(typescript@6.0.3) snake-case: 3.0.4 transitivePeerDependencies: - supports-color @@ -50467,55 +59465,55 @@ snapshots: "@babel/types": 7.29.0 entities: 4.5.0 - "@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@5.9.3))": + "@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@6.0.3))": dependencies: "@babel/core": 7.29.0 "@svgr/babel-preset": 8.1.0(@babel/core@7.29.0) - "@svgr/core": 8.1.0(typescript@5.9.3) + "@svgr/core": 8.1.0(typescript@6.0.3) "@svgr/hast-util-to-babel-ast": 8.0.0 svg-parser: 2.0.4 transitivePeerDependencies: - supports-color - "@svgr/plugin-svgo@8.1.0(@svgr/core@8.1.0(typescript@5.9.3))(typescript@5.9.3)": + "@svgr/plugin-svgo@8.1.0(@svgr/core@8.1.0(typescript@6.0.3))(typescript@6.0.3)": dependencies: - "@svgr/core": 8.1.0(typescript@5.9.3) - cosmiconfig: 8.3.6(typescript@5.9.3) + "@svgr/core": 8.1.0(typescript@6.0.3) + cosmiconfig: 8.3.6(typescript@6.0.3) deepmerge: 4.3.1 svgo: 3.3.3 transitivePeerDependencies: - typescript - "@svgr/webpack@8.1.0(typescript@5.9.3)": + "@svgr/webpack@8.1.0(typescript@6.0.3)": dependencies: "@babel/core": 7.29.0 "@babel/plugin-transform-react-constant-elements": 7.27.1(@babel/core@7.29.0) "@babel/preset-env": 7.29.2(@babel/core@7.29.0) "@babel/preset-react": 7.28.5(@babel/core@7.29.0) "@babel/preset-typescript": 7.28.5(@babel/core@7.29.0) - "@svgr/core": 8.1.0(typescript@5.9.3) - "@svgr/plugin-jsx": 8.1.0(@svgr/core@8.1.0(typescript@5.9.3)) - "@svgr/plugin-svgo": 8.1.0(@svgr/core@8.1.0(typescript@5.9.3))(typescript@5.9.3) + "@svgr/core": 8.1.0(typescript@6.0.3) + "@svgr/plugin-jsx": 8.1.0(@svgr/core@8.1.0(typescript@6.0.3)) + "@svgr/plugin-svgo": 8.1.0(@svgr/core@8.1.0(typescript@6.0.3))(typescript@6.0.3) transitivePeerDependencies: - supports-color - typescript - "@swc-node/core@1.14.1(@swc/core@1.15.26)(@swc/types@0.1.26)": + "@swc-node/core@1.14.1(@swc/core@1.15.33)(@swc/types@0.1.26)": dependencies: - "@swc/core": 1.15.26 + "@swc/core": 1.15.33 "@swc/types": 0.1.26 - "@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.26)(@swc/types@0.1.26)(typescript@6.0.2)": + "@swc-node/register@1.11.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@swc/core@1.15.33)(@swc/types@0.1.26)(typescript@6.0.3)": dependencies: - "@swc-node/core": 1.14.1(@swc/core@1.15.26)(@swc/types@0.1.26) + "@swc-node/core": 1.14.1(@swc/core@1.15.33)(@swc/types@0.1.26) "@swc-node/sourcemap-support": 0.6.1 - "@swc/core": 1.15.26 + "@swc/core": 1.15.33 colorette: 2.0.20 debug: 4.4.3(supports-color@5.5.0) - oxc-resolver: 11.19.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + oxc-resolver: 11.19.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) pirates: 4.0.7 tslib: 2.8.1 - typescript: 6.0.2 + typescript: 6.0.3 transitivePeerDependencies: - "@emnapi/core" - "@emnapi/runtime" @@ -50530,73 +59528,73 @@ snapshots: "@swc/core-darwin-arm64@1.15.24": optional: true - "@swc/core-darwin-arm64@1.15.26": + "@swc/core-darwin-arm64@1.15.33": optional: true "@swc/core-darwin-x64@1.15.24": optional: true - "@swc/core-darwin-x64@1.15.26": + "@swc/core-darwin-x64@1.15.33": optional: true "@swc/core-linux-arm-gnueabihf@1.15.24": optional: true - "@swc/core-linux-arm-gnueabihf@1.15.26": + "@swc/core-linux-arm-gnueabihf@1.15.33": optional: true "@swc/core-linux-arm64-gnu@1.15.24": optional: true - "@swc/core-linux-arm64-gnu@1.15.26": + "@swc/core-linux-arm64-gnu@1.15.33": optional: true "@swc/core-linux-arm64-musl@1.15.24": optional: true - "@swc/core-linux-arm64-musl@1.15.26": + "@swc/core-linux-arm64-musl@1.15.33": optional: true "@swc/core-linux-ppc64-gnu@1.15.24": optional: true - "@swc/core-linux-ppc64-gnu@1.15.26": + "@swc/core-linux-ppc64-gnu@1.15.33": optional: true "@swc/core-linux-s390x-gnu@1.15.24": optional: true - "@swc/core-linux-s390x-gnu@1.15.26": + "@swc/core-linux-s390x-gnu@1.15.33": optional: true "@swc/core-linux-x64-gnu@1.15.24": optional: true - "@swc/core-linux-x64-gnu@1.15.26": + "@swc/core-linux-x64-gnu@1.15.33": optional: true "@swc/core-linux-x64-musl@1.15.24": optional: true - "@swc/core-linux-x64-musl@1.15.26": + "@swc/core-linux-x64-musl@1.15.33": optional: true "@swc/core-win32-arm64-msvc@1.15.24": optional: true - "@swc/core-win32-arm64-msvc@1.15.26": + "@swc/core-win32-arm64-msvc@1.15.33": optional: true "@swc/core-win32-ia32-msvc@1.15.24": optional: true - "@swc/core-win32-ia32-msvc@1.15.26": + "@swc/core-win32-ia32-msvc@1.15.33": optional: true "@swc/core-win32-x64-msvc@1.15.24": optional: true - "@swc/core-win32-x64-msvc@1.15.26": + "@swc/core-win32-x64-msvc@1.15.33": optional: true "@swc/core@1.15.24": @@ -50617,23 +59615,23 @@ snapshots: "@swc/core-win32-ia32-msvc": 1.15.24 "@swc/core-win32-x64-msvc": 1.15.24 - "@swc/core@1.15.26": + "@swc/core@1.15.33": dependencies: "@swc/counter": 0.1.3 "@swc/types": 0.1.26 optionalDependencies: - "@swc/core-darwin-arm64": 1.15.26 - "@swc/core-darwin-x64": 1.15.26 - "@swc/core-linux-arm-gnueabihf": 1.15.26 - "@swc/core-linux-arm64-gnu": 1.15.26 - "@swc/core-linux-arm64-musl": 1.15.26 - "@swc/core-linux-ppc64-gnu": 1.15.26 - "@swc/core-linux-s390x-gnu": 1.15.26 - "@swc/core-linux-x64-gnu": 1.15.26 - "@swc/core-linux-x64-musl": 1.15.26 - "@swc/core-win32-arm64-msvc": 1.15.26 - "@swc/core-win32-ia32-msvc": 1.15.26 - "@swc/core-win32-x64-msvc": 1.15.26 + "@swc/core-darwin-arm64": 1.15.33 + "@swc/core-darwin-x64": 1.15.33 + "@swc/core-linux-arm-gnueabihf": 1.15.33 + "@swc/core-linux-arm64-gnu": 1.15.33 + "@swc/core-linux-arm64-musl": 1.15.33 + "@swc/core-linux-ppc64-gnu": 1.15.33 + "@swc/core-linux-s390x-gnu": 1.15.33 + "@swc/core-linux-x64-gnu": 1.15.33 + "@swc/core-linux-x64-musl": 1.15.33 + "@swc/core-win32-arm64-msvc": 1.15.33 + "@swc/core-win32-ia32-msvc": 1.15.33 + "@swc/core-win32-x64-msvc": 1.15.33 "@swc/counter@0.1.3": {} @@ -50722,134 +59720,6 @@ snapshots: "@tsconfig/svelte@5.0.8": {} - "@tsparticles/browserslist-config@3.4.7(browserslist@4.28.2)": - dependencies: - browserslist: 4.28.2 - - "@tsparticles/cli@3.4.6(@types/eslint@9.6.1)(jiti@2.6.1)(webpack-cli@7.0.2)(webpack-dev-server@5.2.3)": - dependencies: - "@swc/core": 1.15.26 - "@tsparticles/depcruise-config": 3.4.7(dependency-cruiser@17.3.10) - "@tsparticles/eslint-config": 3.4.7(@types/eslint@9.6.1)(eslint@10.2.0(jiti@2.6.1)) - "@tsparticles/prettier-config": 3.4.7(prettier@3.8.3) - "@tsparticles/tsconfig": 3.4.7(typescript@6.0.2) - "@tsparticles/webpack-plugin": 3.4.7(@types/eslint@9.6.1)(jiti@2.6.1)(webpack-dev-server@5.2.3) - commander: 14.0.3 - dependency-cruiser: 17.3.10 - eslint: 10.2.0(jiti@2.6.1) - eslint-config-prettier: 10.1.8(eslint@10.2.0(jiti@2.6.1)) - eslint-plugin-jsdoc: 62.9.0(eslint@10.2.0(jiti@2.6.1)) - eslint-plugin-prettier: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.2.0(jiti@2.6.1)))(eslint@10.2.0(jiti@2.6.1))(prettier@3.8.3) - eslint-plugin-tsdoc: 0.5.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) - klaw: 4.1.0 - lookpath: 1.2.3 - path-scurry: 2.0.2 - prettier: 3.8.3 - prettier-plugin-multiline-arrays: 4.1.5(prettier@3.8.3) - prompts: 2.4.2 - rimraf: 6.1.3 - swc-loader: 0.2.7(@swc/core@1.15.26)(webpack@5.106.1) - typescript: 6.0.2 - typescript-eslint: 8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2) - transitivePeerDependencies: - - "@swc/helpers" - - "@types/eslint" - - bufferutil - - esbuild - - jiti - - supports-color - - uglify-js - - utf-8-validate - - webpack-cli - - webpack-dev-server - - "@tsparticles/depcruise-config@3.4.7(dependency-cruiser@17.3.10)": - dependencies: - dependency-cruiser: 17.3.10 - - "@tsparticles/engine@3.9.1": {} - - "@tsparticles/eslint-config@3.4.7(@types/eslint@9.6.1)(eslint@10.2.0(jiti@2.6.1))": - dependencies: - "@eslint/js": 10.0.1(eslint@10.2.0(jiti@2.6.1)) - "@stylistic/eslint-plugin": 5.10.0(eslint@10.2.0(jiti@2.6.1)) - "@tsparticles/prettier-config": 3.4.7(prettier@3.8.3) - eslint: 10.2.0(jiti@2.6.1) - eslint-config-prettier: 10.1.8(eslint@10.2.0(jiti@2.6.1)) - eslint-plugin-jsdoc: 62.9.0(eslint@10.2.0(jiti@2.6.1)) - eslint-plugin-prettier: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.2.0(jiti@2.6.1)))(eslint@10.2.0(jiti@2.6.1))(prettier@3.8.3) - eslint-plugin-tsdoc: 0.5.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) - jiti: 2.6.1 - prettier: 3.8.3 - prettier-plugin-multiline-arrays: 4.1.5(prettier@3.8.3) - typescript: 6.0.2 - typescript-eslint: 8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) - transitivePeerDependencies: - - "@types/eslint" - - supports-color - - "@tsparticles/move-base@3.9.1": - dependencies: - "@tsparticles/engine": 3.9.1 - - "@tsparticles/move-parallax@3.9.1": - dependencies: - "@tsparticles/engine": 3.9.1 - - "@tsparticles/prettier-config@3.4.6(prettier@3.8.2)": - dependencies: - prettier: 3.8.2 - prettier-plugin-multiline-arrays: 4.1.5(prettier@3.8.2) - - "@tsparticles/prettier-config@3.4.7(prettier@3.8.3)": - dependencies: - prettier: 3.8.3 - prettier-plugin-multiline-arrays: 4.1.5(prettier@3.8.3) - - "@tsparticles/tsconfig@3.4.7(typescript@6.0.2)": - dependencies: - typescript: 6.0.2 - - "@tsparticles/updater-color@3.9.1": - dependencies: - "@tsparticles/engine": 3.9.1 - - "@tsparticles/updater-stroke-color@3.9.1": - dependencies: - "@tsparticles/engine": 3.9.1 - - "@tsparticles/webpack-plugin@3.4.7(@types/eslint@9.6.1)(jiti@2.6.1)(webpack-dev-server@5.2.3)": - dependencies: - "@stylistic/eslint-plugin": 5.10.0(eslint@10.2.0(jiti@2.6.1)) - "@swc/core": 1.15.26 - "@tsparticles/eslint-config": 3.4.7(@types/eslint@9.6.1)(eslint@10.2.0(jiti@2.6.1)) - "@tsparticles/prettier-config": 3.4.7(prettier@3.8.3) - browserslist: 4.28.2 - eslint: 10.2.0(jiti@2.6.1) - eslint-config-prettier: 10.1.8(eslint@10.2.0(jiti@2.6.1)) - eslint-plugin-jsdoc: 62.9.0(eslint@10.2.0(jiti@2.6.1)) - eslint-plugin-tsdoc: 0.5.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) - prettier: 3.8.3 - prettier-plugin-multiline-arrays: 4.1.5(prettier@3.8.3) - swc-loader: 0.2.7(@swc/core@1.15.26)(webpack@5.106.1) - terser-webpack-plugin: 5.4.0(@swc/core@1.15.26)(webpack@5.106.1) - typescript: 6.0.2 - typescript-eslint: 8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2) - webpack-bundle-analyzer: 5.3.0 - webpack-cli: 7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1) - transitivePeerDependencies: - - "@swc/helpers" - - "@types/eslint" - - bufferutil - - esbuild - - jiti - - supports-color - - uglify-js - - utf-8-validate - - webpack-dev-server - "@tufjs/canonical-json@1.0.0": {} "@tufjs/canonical-json@2.0.0": {} @@ -50906,7 +59776,7 @@ snapshots: "@types/body-parser@1.19.2": dependencies: - "@types/connect": 3.4.35 + "@types/connect": 3.4.38 "@types/node": 20.19.39 "@types/bonjour@3.5.13": @@ -51151,16 +60021,16 @@ snapshots: "@types/eslint-scope@3.7.7": dependencies: "@types/eslint": 9.6.1 - "@types/estree": 1.0.8 + "@types/estree": 1.0.9 "@types/eslint@8.56.12": dependencies: - "@types/estree": 1.0.8 + "@types/estree": 1.0.9 "@types/json-schema": 7.0.15 "@types/eslint@9.6.1": dependencies: - "@types/estree": 1.0.8 + "@types/estree": 1.0.9 "@types/json-schema": 7.0.15 "@types/esrecurse@4.3.1": {} @@ -51169,6 +60039,8 @@ snapshots: "@types/estree@1.0.8": {} + "@types/estree@1.0.9": {} + "@types/etag@1.8.3": dependencies: "@types/node": 20.19.39 @@ -51287,7 +60159,7 @@ snapshots: "@types/jsdom@28.0.1": dependencies: - "@types/node": 25.6.0 + "@types/node": 20.19.39 "@types/tough-cookie": 4.0.5 parse5: 7.3.0 undici-types: 7.24.7 @@ -51323,6 +60195,10 @@ snapshots: dependencies: "@types/node": 20.19.39 + "@types/klaw@3.0.7": + dependencies: + "@types/node": 20.19.39 + "@types/koa-compose@3.2.9": dependencies: "@types/koa": 2.15.0 @@ -51363,6 +60239,8 @@ snapshots: "@types/less@3.0.6": {} + "@types/linkify-it@5.0.0": {} + "@types/livereload@0.9.5": dependencies: "@types/ws": 8.5.4 @@ -51371,10 +60249,17 @@ snapshots: "@types/luxon@3.7.1": {} + "@types/markdown-it@14.1.2": + dependencies: + "@types/linkify-it": 5.0.0 + "@types/mdurl": 2.0.0 + "@types/mdast@4.0.4": dependencies: "@types/unist": 3.0.3 + "@types/mdurl@2.0.0": {} + "@types/mime-types@2.1.4": {} "@types/mime@1.3.2": {} @@ -51423,6 +60308,10 @@ snapshots: dependencies: undici-types: 7.19.2 + "@types/node@25.6.2": + dependencies: + undici-types: 7.19.2 + "@types/normalize-package-data@2.4.1": {} "@types/normalize-package-data@2.4.4": {} @@ -51447,6 +60336,11 @@ snapshots: pg-protocol: 1.13.0 pg-types: 2.2.0 + "@types/prompts@2.4.9": + dependencies: + "@types/node": 20.19.39 + kleur: 3.0.3 + "@types/prop-types@15.7.15": {} "@types/pug@2.0.10": {} @@ -51544,7 +60438,7 @@ snapshots: dependencies: "@types/http-errors": 2.0.5 "@types/node": 20.19.39 - "@types/send": 0.17.1 + "@types/send": 1.2.1 "@types/serve-static@2.2.0": dependencies: @@ -51580,7 +60474,7 @@ snapshots: "@types/stylus@0.48.43": dependencies: - "@types/node": 25.6.0 + "@types/node": 20.19.39 "@types/symlink-or-copy@1.2.2": {} @@ -51609,10 +60503,23 @@ snapshots: "@types/unist@3.0.3": {} + "@types/web-bluetooth@0.0.21": {} + "@types/webpack-bundle-analyzer@3.9.5": dependencies: "@types/webpack": 4.41.40 + "@types/webpack-bundle-analyzer@4.7.0(@swc/core@1.15.33)(webpack-cli@7.0.2)": + dependencies: + "@types/node": 20.19.39 + tapable: 2.3.2 + webpack: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) + transitivePeerDependencies: + - "@swc/core" + - esbuild + - uglify-js + - webpack-cli + "@types/webpack-env@1.18.8": {} "@types/webpack-hot-middleware@2.25.5": @@ -51662,92 +60569,35 @@ snapshots: "@types/node": 20.19.39 optional: true - "@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@4.9.5))(eslint@8.57.1)(typescript@4.9.5)": - dependencies: - "@eslint-community/regexpp": 4.12.2 - "@typescript-eslint/parser": 5.62.0(eslint@8.57.1)(typescript@4.9.5) - "@typescript-eslint/scope-manager": 5.62.0 - "@typescript-eslint/type-utils": 5.62.0(eslint@8.57.1)(typescript@4.9.5) - "@typescript-eslint/utils": 5.62.0(eslint@8.57.1)(typescript@4.9.5) - debug: 4.4.3(supports-color@5.5.0) - eslint: 8.57.1 - graphemer: 1.4.0 - ignore: 5.3.1 - natural-compare-lite: 1.4.0 - semver: 7.7.4 - tsutils: 3.21.0(typescript@4.9.5) - optionalDependencies: - typescript: 4.9.5 - transitivePeerDependencies: - - supports-color - - "@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3)": - dependencies: - "@eslint-community/regexpp": 4.12.2 - "@typescript-eslint/parser": 6.21.0(eslint@8.57.1)(typescript@5.9.3) - "@typescript-eslint/scope-manager": 6.21.0 - "@typescript-eslint/type-utils": 6.21.0(eslint@8.57.1)(typescript@5.9.3) - "@typescript-eslint/utils": 6.21.0(eslint@8.57.1)(typescript@5.9.3) - "@typescript-eslint/visitor-keys": 6.21.0 - debug: 4.4.3(supports-color@5.5.0) - eslint: 8.57.1 - graphemer: 1.4.0 - ignore: 5.3.1 - natural-compare: 1.4.0 - semver: 7.7.4 - ts-api-utils: 1.4.3(typescript@5.9.3) - optionalDependencies: - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - "@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@6.0.2))(eslint@8.57.1)(typescript@6.0.2)": + "@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3)": dependencies: "@eslint-community/regexpp": 4.12.2 - "@typescript-eslint/parser": 6.21.0(eslint@8.57.1)(typescript@6.0.2) + "@typescript-eslint/parser": 6.21.0(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) "@typescript-eslint/scope-manager": 6.21.0 - "@typescript-eslint/type-utils": 6.21.0(eslint@8.57.1)(typescript@6.0.2) - "@typescript-eslint/utils": 6.21.0(eslint@8.57.1)(typescript@6.0.2) + "@typescript-eslint/type-utils": 6.21.0(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + "@typescript-eslint/utils": 6.21.0(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) "@typescript-eslint/visitor-keys": 6.21.0 debug: 4.4.3(supports-color@5.5.0) - eslint: 8.57.1 + eslint: 10.3.0(jiti@2.7.0) graphemer: 1.4.0 ignore: 5.3.1 natural-compare: 1.4.0 semver: 7.7.4 - ts-api-utils: 1.4.3(typescript@6.0.2) - optionalDependencies: - typescript: 6.0.2 - transitivePeerDependencies: - - supports-color - - "@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3)": - dependencies: - "@eslint-community/regexpp": 4.12.2 - "@typescript-eslint/parser": 7.18.0(eslint@8.57.1)(typescript@5.9.3) - "@typescript-eslint/scope-manager": 7.18.0 - "@typescript-eslint/type-utils": 7.18.0(eslint@8.57.1)(typescript@5.9.3) - "@typescript-eslint/utils": 7.18.0(eslint@8.57.1)(typescript@5.9.3) - "@typescript-eslint/visitor-keys": 7.18.0 - eslint: 8.57.1 - graphemer: 1.4.0 - ignore: 5.3.1 - natural-compare: 1.4.0 - ts-api-utils: 1.4.3(typescript@5.9.3) + ts-api-utils: 1.4.3(typescript@6.0.3) optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.3 transitivePeerDependencies: - supports-color - "@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2)": + "@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2))(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2)": dependencies: "@eslint-community/regexpp": 4.12.2 - "@typescript-eslint/parser": 8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) + "@typescript-eslint/parser": 8.58.1(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) "@typescript-eslint/scope-manager": 8.58.1 - "@typescript-eslint/type-utils": 8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) - "@typescript-eslint/utils": 8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) + "@typescript-eslint/type-utils": 8.58.1(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) + "@typescript-eslint/utils": 8.58.1(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) "@typescript-eslint/visitor-keys": 8.58.1 - eslint: 10.2.0(jiti@2.6.1) + eslint: 10.2.0(jiti@2.7.0) ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.5.0(typescript@6.0.2) @@ -51755,15 +60605,15 @@ snapshots: transitivePeerDependencies: - supports-color - "@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3)": + "@typescript-eslint/eslint-plugin@8.58.1(@typescript-eslint/parser@8.58.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3)": dependencies: "@eslint-community/regexpp": 4.12.2 - "@typescript-eslint/parser": 8.58.1(eslint@8.57.1)(typescript@5.9.3) + "@typescript-eslint/parser": 8.58.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3) "@typescript-eslint/scope-manager": 8.58.1 - "@typescript-eslint/type-utils": 8.58.1(eslint@8.57.1)(typescript@5.9.3) - "@typescript-eslint/utils": 8.58.1(eslint@8.57.1)(typescript@5.9.3) + "@typescript-eslint/type-utils": 8.58.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3) + "@typescript-eslint/utils": 8.58.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3) "@typescript-eslint/visitor-keys": 8.58.1 - eslint: 8.57.1 + eslint: 10.3.0(jiti@2.7.0) ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.5.0(typescript@5.9.3) @@ -51771,15 +60621,15 @@ snapshots: transitivePeerDependencies: - supports-color - "@typescript-eslint/eslint-plugin@8.58.2(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2)": + "@typescript-eslint/eslint-plugin@8.58.2(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2))(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2)": dependencies: "@eslint-community/regexpp": 4.12.2 - "@typescript-eslint/parser": 8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) + "@typescript-eslint/parser": 8.58.2(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) "@typescript-eslint/scope-manager": 8.58.2 - "@typescript-eslint/type-utils": 8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) - "@typescript-eslint/utils": 8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) + "@typescript-eslint/type-utils": 8.58.2(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) + "@typescript-eslint/utils": 8.58.2(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) "@typescript-eslint/visitor-keys": 8.58.2 - eslint: 10.2.0(jiti@2.6.1) + eslint: 10.2.0(jiti@2.7.0) ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.5.0(typescript@6.0.2) @@ -51787,106 +60637,217 @@ snapshots: transitivePeerDependencies: - supports-color - "@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@4.9.5)": + "@typescript-eslint/eslint-plugin@8.59.1(@typescript-eslint/parser@8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@4.9.5))(eslint@10.3.0(jiti@2.7.0))(typescript@4.9.5)": dependencies: - "@typescript-eslint/scope-manager": 5.62.0 - "@typescript-eslint/types": 5.62.0 - "@typescript-eslint/typescript-estree": 5.62.0(typescript@4.9.5) - debug: 4.4.3(supports-color@5.5.0) - eslint: 8.57.1 - optionalDependencies: + "@eslint-community/regexpp": 4.12.2 + "@typescript-eslint/parser": 8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@4.9.5) + "@typescript-eslint/scope-manager": 8.59.1 + "@typescript-eslint/type-utils": 8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@4.9.5) + "@typescript-eslint/utils": 8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@4.9.5) + "@typescript-eslint/visitor-keys": 8.59.1 + eslint: 10.3.0(jiti@2.7.0) + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.5.0(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: - supports-color - "@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3)": + "@typescript-eslint/eslint-plugin@8.59.1(@typescript-eslint/parser@8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3)": dependencies: - "@typescript-eslint/scope-manager": 6.21.0 - "@typescript-eslint/types": 6.21.0 - "@typescript-eslint/typescript-estree": 6.21.0(typescript@5.9.3) - "@typescript-eslint/visitor-keys": 6.21.0 - debug: 4.4.3(supports-color@5.5.0) - eslint: 8.57.1 - optionalDependencies: + "@eslint-community/regexpp": 4.12.2 + "@typescript-eslint/parser": 8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3) + "@typescript-eslint/scope-manager": 8.59.1 + "@typescript-eslint/type-utils": 8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3) + "@typescript-eslint/utils": 8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3) + "@typescript-eslint/visitor-keys": 8.59.1 + eslint: 10.3.0(jiti@2.7.0) + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - "@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@6.0.2)": + "@typescript-eslint/eslint-plugin@8.59.2(@typescript-eslint/parser@8.59.2(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2))(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2)": + dependencies: + "@eslint-community/regexpp": 4.12.2 + "@typescript-eslint/parser": 8.59.2(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) + "@typescript-eslint/scope-manager": 8.59.2 + "@typescript-eslint/type-utils": 8.59.2(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) + "@typescript-eslint/utils": 8.59.2(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) + "@typescript-eslint/visitor-keys": 8.59.2 + eslint: 10.2.0(jiti@2.7.0) + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.5.0(typescript@6.0.2) + typescript: 6.0.2 + transitivePeerDependencies: + - supports-color + + "@typescript-eslint/eslint-plugin@8.59.2(@typescript-eslint/parser@8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3)": + dependencies: + "@eslint-community/regexpp": 4.12.2 + "@typescript-eslint/parser": 8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + "@typescript-eslint/scope-manager": 8.59.2 + "@typescript-eslint/type-utils": 8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + "@typescript-eslint/utils": 8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + "@typescript-eslint/visitor-keys": 8.59.2 + eslint: 10.3.0(jiti@2.7.0) + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.5.0(typescript@6.0.3) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + + "@typescript-eslint/parser@6.21.0(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3)": dependencies: "@typescript-eslint/scope-manager": 6.21.0 "@typescript-eslint/types": 6.21.0 - "@typescript-eslint/typescript-estree": 6.21.0(typescript@6.0.2) + "@typescript-eslint/typescript-estree": 6.21.0(typescript@6.0.3) "@typescript-eslint/visitor-keys": 6.21.0 debug: 4.4.3(supports-color@5.5.0) - eslint: 8.57.1 + eslint: 10.3.0(jiti@2.7.0) optionalDependencies: - typescript: 6.0.2 + typescript: 6.0.3 transitivePeerDependencies: - supports-color - "@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.9.3)": + "@typescript-eslint/parser@8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2)": dependencies: - "@typescript-eslint/scope-manager": 7.18.0 - "@typescript-eslint/types": 7.18.0 - "@typescript-eslint/typescript-estree": 7.18.0(typescript@5.9.3) - "@typescript-eslint/visitor-keys": 7.18.0 + "@typescript-eslint/scope-manager": 8.58.1 + "@typescript-eslint/types": 8.58.1 + "@typescript-eslint/typescript-estree": 8.58.1(typescript@6.0.2) + "@typescript-eslint/visitor-keys": 8.58.1 debug: 4.4.3(supports-color@5.5.0) - eslint: 8.57.1 - optionalDependencies: - typescript: 5.9.3 + eslint: 10.2.0(jiti@2.6.1) + typescript: 6.0.2 transitivePeerDependencies: - supports-color - "@typescript-eslint/parser@8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2)": + "@typescript-eslint/parser@8.58.1(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2)": dependencies: "@typescript-eslint/scope-manager": 8.58.1 "@typescript-eslint/types": 8.58.1 "@typescript-eslint/typescript-estree": 8.58.1(typescript@6.0.2) "@typescript-eslint/visitor-keys": 8.58.1 debug: 4.4.3(supports-color@5.5.0) - eslint: 10.2.0(jiti@2.6.1) + eslint: 10.2.0(jiti@2.7.0) typescript: 6.0.2 transitivePeerDependencies: - supports-color - "@typescript-eslint/parser@8.58.1(eslint@8.57.1)(typescript@5.9.3)": + "@typescript-eslint/parser@8.58.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3)": dependencies: "@typescript-eslint/scope-manager": 8.58.1 "@typescript-eslint/types": 8.58.1 "@typescript-eslint/typescript-estree": 8.58.1(typescript@5.9.3) "@typescript-eslint/visitor-keys": 8.58.1 debug: 4.4.3(supports-color@5.5.0) - eslint: 8.57.1 + eslint: 10.3.0(jiti@2.7.0) typescript: 5.9.3 transitivePeerDependencies: - supports-color - "@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2)": + "@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2)": dependencies: "@typescript-eslint/scope-manager": 8.58.2 "@typescript-eslint/types": 8.58.2 "@typescript-eslint/typescript-estree": 8.58.2(typescript@6.0.2) "@typescript-eslint/visitor-keys": 8.58.2 debug: 4.4.3(supports-color@5.5.0) - eslint: 10.2.0(jiti@2.6.1) + eslint: 10.2.0(jiti@2.7.0) typescript: 6.0.2 transitivePeerDependencies: - supports-color - "@typescript-eslint/project-service@8.56.1(typescript@6.0.2)": + "@typescript-eslint/parser@8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@4.9.5)": dependencies: - "@typescript-eslint/tsconfig-utils": 8.58.2(typescript@6.0.2) - "@typescript-eslint/types": 8.58.2 + "@typescript-eslint/scope-manager": 8.59.1 + "@typescript-eslint/types": 8.59.1 + "@typescript-eslint/typescript-estree": 8.59.1(typescript@4.9.5) + "@typescript-eslint/visitor-keys": 8.59.1 + debug: 4.4.3(supports-color@5.5.0) + eslint: 10.3.0(jiti@2.7.0) + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + + "@typescript-eslint/parser@8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3)": + dependencies: + "@typescript-eslint/scope-manager": 8.59.1 + "@typescript-eslint/types": 8.59.1 + "@typescript-eslint/typescript-estree": 8.59.1(typescript@5.9.3) + "@typescript-eslint/visitor-keys": 8.59.1 + debug: 4.4.3(supports-color@5.5.0) + eslint: 10.3.0(jiti@2.7.0) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + "@typescript-eslint/parser@8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3)": + dependencies: + "@typescript-eslint/scope-manager": 8.59.1 + "@typescript-eslint/types": 8.59.1 + "@typescript-eslint/typescript-estree": 8.59.1(typescript@6.0.3) + "@typescript-eslint/visitor-keys": 8.59.1 + debug: 4.4.3(supports-color@5.5.0) + eslint: 10.3.0(jiti@2.7.0) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + + "@typescript-eslint/parser@8.59.2(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2)": + dependencies: + "@typescript-eslint/scope-manager": 8.59.2 + "@typescript-eslint/types": 8.59.2 + "@typescript-eslint/typescript-estree": 8.59.2(typescript@6.0.2) + "@typescript-eslint/visitor-keys": 8.59.2 debug: 4.4.3(supports-color@5.5.0) + eslint: 10.2.0(jiti@2.7.0) typescript: 6.0.2 transitivePeerDependencies: - supports-color + "@typescript-eslint/parser@8.59.2(eslint@10.2.1(jiti@2.7.0))(typescript@6.0.3)": + dependencies: + "@typescript-eslint/scope-manager": 8.59.2 + "@typescript-eslint/types": 8.59.2 + "@typescript-eslint/typescript-estree": 8.59.2(typescript@6.0.3) + "@typescript-eslint/visitor-keys": 8.59.2 + debug: 4.4.3(supports-color@5.5.0) + eslint: 10.2.1(jiti@2.7.0) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + optional: true + + "@typescript-eslint/parser@8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3)": + dependencies: + "@typescript-eslint/scope-manager": 8.59.2 + "@typescript-eslint/types": 8.59.2 + "@typescript-eslint/typescript-estree": 8.59.2(typescript@6.0.3) + "@typescript-eslint/visitor-keys": 8.59.2 + debug: 4.4.3(supports-color@5.5.0) + eslint: 10.3.0(jiti@2.7.0) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + + "@typescript-eslint/project-service@8.56.1(typescript@6.0.3)": + dependencies: + "@typescript-eslint/tsconfig-utils": 8.59.1(typescript@6.0.3) + "@typescript-eslint/types": 8.59.1 + debug: 4.4.3(supports-color@5.5.0) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + "@typescript-eslint/project-service@8.58.1(typescript@5.9.3)": dependencies: - "@typescript-eslint/tsconfig-utils": 8.58.2(typescript@5.9.3) - "@typescript-eslint/types": 8.58.2 + "@typescript-eslint/tsconfig-utils": 8.59.1(typescript@5.9.3) + "@typescript-eslint/types": 8.59.1 debug: 4.4.3(supports-color@5.5.0) typescript: 5.9.3 transitivePeerDependencies: @@ -51894,46 +60855,81 @@ snapshots: "@typescript-eslint/project-service@8.58.1(typescript@6.0.2)": dependencies: - "@typescript-eslint/tsconfig-utils": 8.58.2(typescript@6.0.2) - "@typescript-eslint/types": 8.58.2 + "@typescript-eslint/tsconfig-utils": 8.59.1(typescript@6.0.2) + "@typescript-eslint/types": 8.59.1 debug: 4.4.3(supports-color@5.5.0) typescript: 6.0.2 transitivePeerDependencies: - supports-color - "@typescript-eslint/project-service@8.58.2(typescript@5.9.3)": + "@typescript-eslint/project-service@8.58.2(typescript@6.0.2)": dependencies: - "@typescript-eslint/tsconfig-utils": 8.58.2(typescript@5.9.3) - "@typescript-eslint/types": 8.58.2 + "@typescript-eslint/tsconfig-utils": 8.59.1(typescript@6.0.2) + "@typescript-eslint/types": 8.59.1 + debug: 4.4.3(supports-color@5.5.0) + typescript: 6.0.2 + transitivePeerDependencies: + - supports-color + + "@typescript-eslint/project-service@8.59.1(typescript@4.9.5)": + dependencies: + "@typescript-eslint/tsconfig-utils": 8.59.1(typescript@4.9.5) + "@typescript-eslint/types": 8.59.1 + debug: 4.4.3(supports-color@5.5.0) + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + + "@typescript-eslint/project-service@8.59.1(typescript@5.9.3)": + dependencies: + "@typescript-eslint/tsconfig-utils": 8.59.1(typescript@5.9.3) + "@typescript-eslint/types": 8.59.1 debug: 4.4.3(supports-color@5.5.0) typescript: 5.9.3 transitivePeerDependencies: - supports-color - "@typescript-eslint/project-service@8.58.2(typescript@6.0.2)": + "@typescript-eslint/project-service@8.59.1(typescript@6.0.3)": dependencies: - "@typescript-eslint/tsconfig-utils": 8.58.2(typescript@6.0.2) - "@typescript-eslint/types": 8.58.2 + "@typescript-eslint/tsconfig-utils": 8.59.1(typescript@6.0.3) + "@typescript-eslint/types": 8.59.1 + debug: 4.4.3(supports-color@5.5.0) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + + "@typescript-eslint/project-service@8.59.2(typescript@5.9.3)": + dependencies: + "@typescript-eslint/tsconfig-utils": 8.59.2(typescript@5.9.3) + "@typescript-eslint/types": 8.59.2 + debug: 4.4.3(supports-color@5.5.0) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + "@typescript-eslint/project-service@8.59.2(typescript@6.0.2)": + dependencies: + "@typescript-eslint/tsconfig-utils": 8.59.2(typescript@6.0.2) + "@typescript-eslint/types": 8.59.2 debug: 4.4.3(supports-color@5.5.0) typescript: 6.0.2 transitivePeerDependencies: - supports-color - "@typescript-eslint/scope-manager@5.62.0": + "@typescript-eslint/project-service@8.59.2(typescript@6.0.3)": dependencies: - "@typescript-eslint/types": 5.62.0 - "@typescript-eslint/visitor-keys": 5.62.0 + "@typescript-eslint/tsconfig-utils": 8.59.2(typescript@6.0.3) + "@typescript-eslint/types": 8.59.2 + debug: 4.4.3(supports-color@5.5.0) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color "@typescript-eslint/scope-manager@6.21.0": dependencies: "@typescript-eslint/types": 6.21.0 "@typescript-eslint/visitor-keys": 6.21.0 - "@typescript-eslint/scope-manager@7.18.0": - dependencies: - "@typescript-eslint/types": 7.18.0 - "@typescript-eslint/visitor-keys": 7.18.0 - "@typescript-eslint/scope-manager@8.56.1": dependencies: "@typescript-eslint/types": 8.56.1 @@ -51949,9 +60945,19 @@ snapshots: "@typescript-eslint/types": 8.58.2 "@typescript-eslint/visitor-keys": 8.58.2 - "@typescript-eslint/tsconfig-utils@8.56.1(typescript@6.0.2)": + "@typescript-eslint/scope-manager@8.59.1": dependencies: - typescript: 6.0.2 + "@typescript-eslint/types": 8.59.1 + "@typescript-eslint/visitor-keys": 8.59.1 + + "@typescript-eslint/scope-manager@8.59.2": + dependencies: + "@typescript-eslint/types": 8.59.2 + "@typescript-eslint/visitor-keys": 8.59.2 + + "@typescript-eslint/tsconfig-utils@8.56.1(typescript@6.0.3)": + dependencies: + typescript: 6.0.3 "@typescript-eslint/tsconfig-utils@8.58.1(typescript@5.9.3)": dependencies: @@ -51961,197 +60967,181 @@ snapshots: dependencies: typescript: 6.0.2 - "@typescript-eslint/tsconfig-utils@8.58.2(typescript@5.9.3)": + "@typescript-eslint/tsconfig-utils@8.58.2(typescript@6.0.2)": + dependencies: + typescript: 6.0.2 + + "@typescript-eslint/tsconfig-utils@8.58.2(typescript@6.0.3)": + dependencies: + typescript: 6.0.3 + + "@typescript-eslint/tsconfig-utils@8.59.1(typescript@4.9.5)": + dependencies: + typescript: 4.9.5 + + "@typescript-eslint/tsconfig-utils@8.59.1(typescript@5.9.3)": dependencies: typescript: 5.9.3 - "@typescript-eslint/tsconfig-utils@8.58.2(typescript@6.0.2)": + "@typescript-eslint/tsconfig-utils@8.59.1(typescript@6.0.2)": dependencies: typescript: 6.0.2 - "@typescript-eslint/type-utils@5.62.0(eslint@8.57.1)(typescript@4.9.5)": + "@typescript-eslint/tsconfig-utils@8.59.1(typescript@6.0.3)": dependencies: - "@typescript-eslint/typescript-estree": 5.62.0(typescript@4.9.5) - "@typescript-eslint/utils": 5.62.0(eslint@8.57.1)(typescript@4.9.5) - debug: 4.4.3(supports-color@5.5.0) - eslint: 8.57.1 - tsutils: 3.21.0(typescript@4.9.5) - optionalDependencies: - typescript: 4.9.5 - transitivePeerDependencies: - - supports-color + typescript: 6.0.3 - "@typescript-eslint/type-utils@6.21.0(eslint@8.57.1)(typescript@5.9.3)": + "@typescript-eslint/tsconfig-utils@8.59.2(typescript@5.9.3)": dependencies: - "@typescript-eslint/typescript-estree": 6.21.0(typescript@5.9.3) - "@typescript-eslint/utils": 6.21.0(eslint@8.57.1)(typescript@5.9.3) - debug: 4.4.3(supports-color@5.5.0) - eslint: 8.57.1 - ts-api-utils: 1.4.3(typescript@5.9.3) - optionalDependencies: typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - "@typescript-eslint/type-utils@6.21.0(eslint@8.57.1)(typescript@6.0.2)": + "@typescript-eslint/tsconfig-utils@8.59.2(typescript@6.0.2)": dependencies: - "@typescript-eslint/typescript-estree": 6.21.0(typescript@6.0.2) - "@typescript-eslint/utils": 6.21.0(eslint@8.57.1)(typescript@6.0.2) - debug: 4.4.3(supports-color@5.5.0) - eslint: 8.57.1 - ts-api-utils: 1.4.3(typescript@6.0.2) - optionalDependencies: typescript: 6.0.2 - transitivePeerDependencies: - - supports-color - "@typescript-eslint/type-utils@7.18.0(eslint@8.57.1)(typescript@5.9.3)": + "@typescript-eslint/tsconfig-utils@8.59.2(typescript@6.0.3)": + dependencies: + typescript: 6.0.3 + + "@typescript-eslint/type-utils@6.21.0(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3)": dependencies: - "@typescript-eslint/typescript-estree": 7.18.0(typescript@5.9.3) - "@typescript-eslint/utils": 7.18.0(eslint@8.57.1)(typescript@5.9.3) + "@typescript-eslint/typescript-estree": 6.21.0(typescript@6.0.3) + "@typescript-eslint/utils": 6.21.0(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) debug: 4.4.3(supports-color@5.5.0) - eslint: 8.57.1 - ts-api-utils: 1.4.3(typescript@5.9.3) + eslint: 10.3.0(jiti@2.7.0) + ts-api-utils: 1.4.3(typescript@6.0.3) optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.3 transitivePeerDependencies: - supports-color - "@typescript-eslint/type-utils@8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2)": + "@typescript-eslint/type-utils@8.58.1(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2)": dependencies: "@typescript-eslint/types": 8.58.1 "@typescript-eslint/typescript-estree": 8.58.1(typescript@6.0.2) - "@typescript-eslint/utils": 8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) + "@typescript-eslint/utils": 8.58.1(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) debug: 4.4.3(supports-color@5.5.0) - eslint: 10.2.0(jiti@2.6.1) + eslint: 10.2.0(jiti@2.7.0) ts-api-utils: 2.5.0(typescript@6.0.2) typescript: 6.0.2 transitivePeerDependencies: - supports-color - "@typescript-eslint/type-utils@8.58.1(eslint@8.57.1)(typescript@5.9.3)": + "@typescript-eslint/type-utils@8.58.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3)": dependencies: "@typescript-eslint/types": 8.58.1 "@typescript-eslint/typescript-estree": 8.58.1(typescript@5.9.3) - "@typescript-eslint/utils": 8.58.1(eslint@8.57.1)(typescript@5.9.3) + "@typescript-eslint/utils": 8.58.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3) debug: 4.4.3(supports-color@5.5.0) - eslint: 8.57.1 + eslint: 10.3.0(jiti@2.7.0) ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - "@typescript-eslint/type-utils@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2)": + "@typescript-eslint/type-utils@8.58.2(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2)": dependencies: "@typescript-eslint/types": 8.58.2 "@typescript-eslint/typescript-estree": 8.58.2(typescript@6.0.2) - "@typescript-eslint/utils": 8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) + "@typescript-eslint/utils": 8.58.2(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) debug: 4.4.3(supports-color@5.5.0) - eslint: 10.2.0(jiti@2.6.1) + eslint: 10.2.0(jiti@2.7.0) ts-api-utils: 2.5.0(typescript@6.0.2) typescript: 6.0.2 transitivePeerDependencies: - supports-color - "@typescript-eslint/types@5.62.0": {} - - "@typescript-eslint/types@6.21.0": {} - - "@typescript-eslint/types@7.18.0": {} - - "@typescript-eslint/types@8.56.1": {} - - "@typescript-eslint/types@8.58.0": {} - - "@typescript-eslint/types@8.58.1": {} - - "@typescript-eslint/types@8.58.2": {} - - "@typescript-eslint/typescript-estree@5.62.0(typescript@4.9.5)": + "@typescript-eslint/type-utils@8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@4.9.5)": dependencies: - "@typescript-eslint/types": 5.62.0 - "@typescript-eslint/visitor-keys": 5.62.0 + "@typescript-eslint/types": 8.59.1 + "@typescript-eslint/typescript-estree": 8.59.1(typescript@4.9.5) + "@typescript-eslint/utils": 8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@4.9.5) debug: 4.4.3(supports-color@5.5.0) - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.7.4 - tsutils: 3.21.0(typescript@4.9.5) - optionalDependencies: + eslint: 10.3.0(jiti@2.7.0) + ts-api-utils: 2.5.0(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: - supports-color - "@typescript-eslint/typescript-estree@5.62.0(typescript@5.9.3)": + "@typescript-eslint/type-utils@8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3)": dependencies: - "@typescript-eslint/types": 5.62.0 - "@typescript-eslint/visitor-keys": 5.62.0 + "@typescript-eslint/types": 8.59.1 + "@typescript-eslint/typescript-estree": 8.59.1(typescript@5.9.3) + "@typescript-eslint/utils": 8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3) debug: 4.4.3(supports-color@5.5.0) - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.7.4 - tsutils: 3.21.0(typescript@5.9.3) - optionalDependencies: + eslint: 10.3.0(jiti@2.7.0) + ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - "@typescript-eslint/typescript-estree@6.21.0(typescript@5.9.3)": + "@typescript-eslint/type-utils@8.59.2(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2)": dependencies: - "@typescript-eslint/types": 6.21.0 - "@typescript-eslint/visitor-keys": 6.21.0 + "@typescript-eslint/types": 8.59.2 + "@typescript-eslint/typescript-estree": 8.59.2(typescript@6.0.2) + "@typescript-eslint/utils": 8.59.2(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) debug: 4.4.3(supports-color@5.5.0) - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.3 - semver: 7.7.4 - ts-api-utils: 1.4.3(typescript@5.9.3) - optionalDependencies: - typescript: 5.9.3 + eslint: 10.2.0(jiti@2.7.0) + ts-api-utils: 2.5.0(typescript@6.0.2) + typescript: 6.0.2 transitivePeerDependencies: - supports-color - "@typescript-eslint/typescript-estree@6.21.0(typescript@6.0.2)": + "@typescript-eslint/type-utils@8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3)": dependencies: - "@typescript-eslint/types": 6.21.0 - "@typescript-eslint/visitor-keys": 6.21.0 + "@typescript-eslint/types": 8.59.2 + "@typescript-eslint/typescript-estree": 8.59.2(typescript@6.0.3) + "@typescript-eslint/utils": 8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) debug: 4.4.3(supports-color@5.5.0) - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.3 - semver: 7.7.4 - ts-api-utils: 1.4.3(typescript@6.0.2) - optionalDependencies: - typescript: 6.0.2 + eslint: 10.3.0(jiti@2.7.0) + ts-api-utils: 2.5.0(typescript@6.0.3) + typescript: 6.0.3 transitivePeerDependencies: - supports-color - "@typescript-eslint/typescript-estree@7.18.0(typescript@5.9.3)": + "@typescript-eslint/types@6.21.0": {} + + "@typescript-eslint/types@8.56.1": {} + + "@typescript-eslint/types@8.58.0": {} + + "@typescript-eslint/types@8.58.1": {} + + "@typescript-eslint/types@8.58.2": {} + + "@typescript-eslint/types@8.59.0": {} + + "@typescript-eslint/types@8.59.1": {} + + "@typescript-eslint/types@8.59.2": {} + + "@typescript-eslint/typescript-estree@6.21.0(typescript@6.0.3)": dependencies: - "@typescript-eslint/types": 7.18.0 - "@typescript-eslint/visitor-keys": 7.18.0 + "@typescript-eslint/types": 6.21.0 + "@typescript-eslint/visitor-keys": 6.21.0 debug: 4.4.3(supports-color@5.5.0) globby: 11.1.0 is-glob: 4.0.3 - minimatch: 9.0.9 + minimatch: 9.0.3 semver: 7.7.4 - ts-api-utils: 1.4.3(typescript@5.9.3) + ts-api-utils: 1.4.3(typescript@6.0.3) optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.3 transitivePeerDependencies: - supports-color - "@typescript-eslint/typescript-estree@8.56.1(typescript@6.0.2)": + "@typescript-eslint/typescript-estree@8.56.1(typescript@6.0.3)": dependencies: - "@typescript-eslint/project-service": 8.56.1(typescript@6.0.2) - "@typescript-eslint/tsconfig-utils": 8.56.1(typescript@6.0.2) + "@typescript-eslint/project-service": 8.56.1(typescript@6.0.3) + "@typescript-eslint/tsconfig-utils": 8.56.1(typescript@6.0.3) "@typescript-eslint/types": 8.56.1 "@typescript-eslint/visitor-keys": 8.56.1 debug: 4.4.3(supports-color@5.5.0) minimatch: 10.2.5 semver: 7.7.4 tinyglobby: 0.2.16 - ts-api-utils: 2.5.0(typescript@6.0.2) - typescript: 6.0.2 + ts-api-utils: 2.5.0(typescript@6.0.3) + typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -52185,173 +61175,238 @@ snapshots: transitivePeerDependencies: - supports-color - "@typescript-eslint/typescript-estree@8.58.2(typescript@5.9.3)": + "@typescript-eslint/typescript-estree@8.58.2(typescript@6.0.2)": dependencies: - "@typescript-eslint/project-service": 8.58.2(typescript@5.9.3) - "@typescript-eslint/tsconfig-utils": 8.58.2(typescript@5.9.3) + "@typescript-eslint/project-service": 8.58.2(typescript@6.0.2) + "@typescript-eslint/tsconfig-utils": 8.58.2(typescript@6.0.2) "@typescript-eslint/types": 8.58.2 "@typescript-eslint/visitor-keys": 8.58.2 debug: 4.4.3(supports-color@5.5.0) minimatch: 10.2.5 semver: 7.7.4 tinyglobby: 0.2.16 + ts-api-utils: 2.5.0(typescript@6.0.2) + typescript: 6.0.2 + transitivePeerDependencies: + - supports-color + + "@typescript-eslint/typescript-estree@8.59.1(typescript@4.9.5)": + dependencies: + "@typescript-eslint/project-service": 8.59.1(typescript@4.9.5) + "@typescript-eslint/tsconfig-utils": 8.59.1(typescript@4.9.5) + "@typescript-eslint/types": 8.59.1 + "@typescript-eslint/visitor-keys": 8.59.1 + debug: 4.4.3(supports-color@5.5.0) + minimatch: 10.2.5 + semver: 7.7.4 + tinyglobby: 0.2.16 + ts-api-utils: 2.5.0(typescript@4.9.5) + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + + "@typescript-eslint/typescript-estree@8.59.1(typescript@5.9.3)": + dependencies: + "@typescript-eslint/project-service": 8.59.1(typescript@5.9.3) + "@typescript-eslint/tsconfig-utils": 8.59.1(typescript@5.9.3) + "@typescript-eslint/types": 8.59.1 + "@typescript-eslint/visitor-keys": 8.59.1 + debug: 4.4.3(supports-color@5.5.0) + minimatch: 10.2.5 + semver: 7.7.4 + tinyglobby: 0.2.16 ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - "@typescript-eslint/typescript-estree@8.58.2(typescript@6.0.2)": + "@typescript-eslint/typescript-estree@8.59.1(typescript@6.0.3)": dependencies: - "@typescript-eslint/project-service": 8.58.2(typescript@6.0.2) - "@typescript-eslint/tsconfig-utils": 8.58.2(typescript@6.0.2) - "@typescript-eslint/types": 8.58.2 - "@typescript-eslint/visitor-keys": 8.58.2 + "@typescript-eslint/project-service": 8.59.1(typescript@6.0.3) + "@typescript-eslint/tsconfig-utils": 8.59.1(typescript@6.0.3) + "@typescript-eslint/types": 8.59.1 + "@typescript-eslint/visitor-keys": 8.59.1 debug: 4.4.3(supports-color@5.5.0) minimatch: 10.2.5 semver: 7.7.4 tinyglobby: 0.2.16 - ts-api-utils: 2.5.0(typescript@6.0.2) - typescript: 6.0.2 + ts-api-utils: 2.5.0(typescript@6.0.3) + typescript: 6.0.3 transitivePeerDependencies: - supports-color - "@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@4.9.5)": + "@typescript-eslint/typescript-estree@8.59.2(typescript@5.9.3)": dependencies: - "@eslint-community/eslint-utils": 4.9.1(eslint@8.57.1) - "@types/json-schema": 7.0.15 - "@types/semver": 7.7.1 - "@typescript-eslint/scope-manager": 5.62.0 - "@typescript-eslint/types": 5.62.0 - "@typescript-eslint/typescript-estree": 5.62.0(typescript@4.9.5) - eslint: 8.57.1 - eslint-scope: 5.1.1 + "@typescript-eslint/project-service": 8.59.2(typescript@5.9.3) + "@typescript-eslint/tsconfig-utils": 8.59.2(typescript@5.9.3) + "@typescript-eslint/types": 8.59.2 + "@typescript-eslint/visitor-keys": 8.59.2 + debug: 4.4.3(supports-color@5.5.0) + minimatch: 10.2.5 semver: 7.7.4 + tinyglobby: 0.2.16 + ts-api-utils: 2.5.0(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - supports-color - - typescript - "@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@5.9.3)": + "@typescript-eslint/typescript-estree@8.59.2(typescript@6.0.2)": dependencies: - "@eslint-community/eslint-utils": 4.9.1(eslint@8.57.1) - "@types/json-schema": 7.0.15 - "@types/semver": 7.7.1 - "@typescript-eslint/scope-manager": 5.62.0 - "@typescript-eslint/types": 5.62.0 - "@typescript-eslint/typescript-estree": 5.62.0(typescript@5.9.3) - eslint: 8.57.1 - eslint-scope: 5.1.1 + "@typescript-eslint/project-service": 8.59.2(typescript@6.0.2) + "@typescript-eslint/tsconfig-utils": 8.59.2(typescript@6.0.2) + "@typescript-eslint/types": 8.59.2 + "@typescript-eslint/visitor-keys": 8.59.2 + debug: 4.4.3(supports-color@5.5.0) + minimatch: 10.2.5 semver: 7.7.4 + tinyglobby: 0.2.16 + ts-api-utils: 2.5.0(typescript@6.0.2) + typescript: 6.0.2 transitivePeerDependencies: - supports-color - - typescript - "@typescript-eslint/utils@6.21.0(eslint@8.57.1)(typescript@5.9.3)": + "@typescript-eslint/typescript-estree@8.59.2(typescript@6.0.3)": dependencies: - "@eslint-community/eslint-utils": 4.9.1(eslint@8.57.1) - "@types/json-schema": 7.0.15 - "@types/semver": 7.7.1 - "@typescript-eslint/scope-manager": 6.21.0 - "@typescript-eslint/types": 6.21.0 - "@typescript-eslint/typescript-estree": 6.21.0(typescript@5.9.3) - eslint: 8.57.1 + "@typescript-eslint/project-service": 8.59.2(typescript@6.0.3) + "@typescript-eslint/tsconfig-utils": 8.59.2(typescript@6.0.3) + "@typescript-eslint/types": 8.59.2 + "@typescript-eslint/visitor-keys": 8.59.2 + debug: 4.4.3(supports-color@5.5.0) + minimatch: 10.2.5 semver: 7.7.4 + tinyglobby: 0.2.16 + ts-api-utils: 2.5.0(typescript@6.0.3) + typescript: 6.0.3 transitivePeerDependencies: - supports-color - - typescript - "@typescript-eslint/utils@6.21.0(eslint@8.57.1)(typescript@6.0.2)": + "@typescript-eslint/utils@6.21.0(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3)": dependencies: - "@eslint-community/eslint-utils": 4.9.1(eslint@8.57.1) + "@eslint-community/eslint-utils": 4.9.1(eslint@10.3.0(jiti@2.7.0)) "@types/json-schema": 7.0.15 "@types/semver": 7.7.1 "@typescript-eslint/scope-manager": 6.21.0 "@typescript-eslint/types": 6.21.0 - "@typescript-eslint/typescript-estree": 6.21.0(typescript@6.0.2) - eslint: 8.57.1 + "@typescript-eslint/typescript-estree": 6.21.0(typescript@6.0.3) + eslint: 10.3.0(jiti@2.7.0) semver: 7.7.4 transitivePeerDependencies: - supports-color - typescript - "@typescript-eslint/utils@7.18.0(eslint@8.57.1)(typescript@5.9.3)": + "@typescript-eslint/utils@8.56.1(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3)": dependencies: - "@eslint-community/eslint-utils": 4.9.1(eslint@8.57.1) - "@typescript-eslint/scope-manager": 7.18.0 - "@typescript-eslint/types": 7.18.0 - "@typescript-eslint/typescript-estree": 7.18.0(typescript@5.9.3) - eslint: 8.57.1 - transitivePeerDependencies: - - supports-color - - typescript - - "@typescript-eslint/utils@8.56.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2)": - dependencies: - "@eslint-community/eslint-utils": 4.9.1(eslint@10.2.0(jiti@2.6.1)) + "@eslint-community/eslint-utils": 4.9.1(eslint@10.3.0(jiti@2.7.0)) "@typescript-eslint/scope-manager": 8.56.1 "@typescript-eslint/types": 8.56.1 - "@typescript-eslint/typescript-estree": 8.56.1(typescript@6.0.2) - eslint: 10.2.0(jiti@2.6.1) - typescript: 6.0.2 + "@typescript-eslint/typescript-estree": 8.56.1(typescript@6.0.3) + eslint: 10.3.0(jiti@2.7.0) + typescript: 6.0.3 transitivePeerDependencies: - supports-color - "@typescript-eslint/utils@8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2)": + "@typescript-eslint/utils@8.58.1(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2)": dependencies: - "@eslint-community/eslint-utils": 4.9.1(eslint@10.2.0(jiti@2.6.1)) + "@eslint-community/eslint-utils": 4.9.1(eslint@10.2.0(jiti@2.7.0)) "@typescript-eslint/scope-manager": 8.58.1 "@typescript-eslint/types": 8.58.1 "@typescript-eslint/typescript-estree": 8.58.1(typescript@6.0.2) - eslint: 10.2.0(jiti@2.6.1) + eslint: 10.2.0(jiti@2.7.0) typescript: 6.0.2 transitivePeerDependencies: - supports-color - "@typescript-eslint/utils@8.58.1(eslint@8.57.1)(typescript@5.9.3)": + "@typescript-eslint/utils@8.58.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3)": dependencies: - "@eslint-community/eslint-utils": 4.9.1(eslint@8.57.1) + "@eslint-community/eslint-utils": 4.9.1(eslint@10.3.0(jiti@2.7.0)) "@typescript-eslint/scope-manager": 8.58.1 "@typescript-eslint/types": 8.58.1 "@typescript-eslint/typescript-estree": 8.58.1(typescript@5.9.3) - eslint: 8.57.1 + eslint: 10.3.0(jiti@2.7.0) typescript: 5.9.3 transitivePeerDependencies: - supports-color - "@typescript-eslint/utils@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2)": + "@typescript-eslint/utils@8.58.2(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2)": dependencies: - "@eslint-community/eslint-utils": 4.9.1(eslint@10.2.0(jiti@2.6.1)) + "@eslint-community/eslint-utils": 4.9.1(eslint@10.2.0(jiti@2.7.0)) "@typescript-eslint/scope-manager": 8.58.2 "@typescript-eslint/types": 8.58.2 "@typescript-eslint/typescript-estree": 8.58.2(typescript@6.0.2) - eslint: 10.2.0(jiti@2.6.1) + eslint: 10.2.0(jiti@2.7.0) typescript: 6.0.2 transitivePeerDependencies: - supports-color - "@typescript-eslint/utils@8.58.2(eslint@8.57.1)(typescript@5.9.3)": + "@typescript-eslint/utils@8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@4.9.5)": dependencies: - "@eslint-community/eslint-utils": 4.9.1(eslint@8.57.1) - "@typescript-eslint/scope-manager": 8.58.2 - "@typescript-eslint/types": 8.58.2 - "@typescript-eslint/typescript-estree": 8.58.2(typescript@5.9.3) - eslint: 8.57.1 + "@eslint-community/eslint-utils": 4.9.1(eslint@10.3.0(jiti@2.7.0)) + "@typescript-eslint/scope-manager": 8.59.1 + "@typescript-eslint/types": 8.59.1 + "@typescript-eslint/typescript-estree": 8.59.1(typescript@4.9.5) + eslint: 10.3.0(jiti@2.7.0) + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + + "@typescript-eslint/utils@8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3)": + dependencies: + "@eslint-community/eslint-utils": 4.9.1(eslint@10.3.0(jiti@2.7.0)) + "@typescript-eslint/scope-manager": 8.59.1 + "@typescript-eslint/types": 8.59.1 + "@typescript-eslint/typescript-estree": 8.59.1(typescript@5.9.3) + eslint: 10.3.0(jiti@2.7.0) typescript: 5.9.3 transitivePeerDependencies: - supports-color - "@typescript-eslint/visitor-keys@5.62.0": + "@typescript-eslint/utils@8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3)": dependencies: - "@typescript-eslint/types": 5.62.0 - eslint-visitor-keys: 3.4.3 + "@eslint-community/eslint-utils": 4.9.1(eslint@10.3.0(jiti@2.7.0)) + "@typescript-eslint/scope-manager": 8.59.1 + "@typescript-eslint/types": 8.59.1 + "@typescript-eslint/typescript-estree": 8.59.1(typescript@6.0.3) + eslint: 10.3.0(jiti@2.7.0) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color - "@typescript-eslint/visitor-keys@6.21.0": + "@typescript-eslint/utils@8.59.2(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2)": dependencies: - "@typescript-eslint/types": 6.21.0 - eslint-visitor-keys: 3.4.3 + "@eslint-community/eslint-utils": 4.9.1(eslint@10.2.0(jiti@2.7.0)) + "@typescript-eslint/scope-manager": 8.59.2 + "@typescript-eslint/types": 8.59.2 + "@typescript-eslint/typescript-estree": 8.59.2(typescript@6.0.2) + eslint: 10.2.0(jiti@2.7.0) + typescript: 6.0.2 + transitivePeerDependencies: + - supports-color + + "@typescript-eslint/utils@8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3)": + dependencies: + "@eslint-community/eslint-utils": 4.9.1(eslint@10.3.0(jiti@2.7.0)) + "@typescript-eslint/scope-manager": 8.59.2 + "@typescript-eslint/types": 8.59.2 + "@typescript-eslint/typescript-estree": 8.59.2(typescript@5.9.3) + eslint: 10.3.0(jiti@2.7.0) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + "@typescript-eslint/utils@8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3)": + dependencies: + "@eslint-community/eslint-utils": 4.9.1(eslint@10.3.0(jiti@2.7.0)) + "@typescript-eslint/scope-manager": 8.59.2 + "@typescript-eslint/types": 8.59.2 + "@typescript-eslint/typescript-estree": 8.59.2(typescript@6.0.3) + eslint: 10.3.0(jiti@2.7.0) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color - "@typescript-eslint/visitor-keys@7.18.0": + "@typescript-eslint/visitor-keys@6.21.0": dependencies: - "@typescript-eslint/types": 7.18.0 + "@typescript-eslint/types": 6.21.0 eslint-visitor-keys: 3.4.3 "@typescript-eslint/visitor-keys@8.56.1": @@ -52369,6 +61424,16 @@ snapshots: "@typescript-eslint/types": 8.58.2 eslint-visitor-keys: 5.0.1 + "@typescript-eslint/visitor-keys@8.59.1": + dependencies: + "@typescript-eslint/types": 8.59.1 + eslint-visitor-keys: 5.0.1 + + "@typescript-eslint/visitor-keys@8.59.2": + dependencies: + "@typescript-eslint/types": 8.59.2 + eslint-visitor-keys: 5.0.1 + "@ungap/structured-clone@1.3.0": {} "@unhead/vue@2.1.13(vue@3.5.32(typescript@6.0.2))": @@ -52438,15 +61503,15 @@ snapshots: "@use-gesture/core@10.3.1": {} - "@use-gesture/react@10.3.1(react@18.3.1)": + "@use-gesture/react@10.3.1(react@19.2.5)": dependencies: "@use-gesture/core": 10.3.1 - react: 18.3.1 + react: 19.2.5 - "@vercel/nft@1.5.0(encoding@0.1.13)(rollup@4.60.1)": + "@vercel/nft@1.5.0(encoding@0.1.13)(rollup@4.60.2)": dependencies: "@mapbox/node-pre-gyp": 2.0.3(encoding@0.1.13) - "@rollup/pluginutils": 5.3.0(rollup@4.60.1) + "@rollup/pluginutils": 5.3.0(rollup@4.60.2) acorn: 8.16.0 acorn-import-attributes: 1.9.5(acorn@8.16.0) async-sema: 3.1.1 @@ -52462,54 +61527,59 @@ snapshots: - rollup - supports-color - "@vitejs/plugin-basic-ssl@2.1.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.32.0)(sass@1.97.3)(stylus@0.64.0)(terser@5.46.0)(yaml@2.8.3))": + "@vitejs/plugin-basic-ssl@2.1.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.7.0)(less@4.4.2)(lightningcss@1.32.0)(sass@1.97.3)(stylus@0.64.0)(terser@5.46.0)(yaml@2.8.3))": dependencies: - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.32.0)(sass@1.97.3)(stylus@0.64.0)(terser@5.46.0)(yaml@2.8.3) + vite: 7.3.2(@types/node@25.6.0)(jiti@2.7.0)(less@4.4.2)(lightningcss@1.32.0)(sass@1.97.3)(stylus@0.64.0)(terser@5.46.0)(yaml@2.8.3) - "@vitejs/plugin-react@6.0.1(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))": + "@vitejs/plugin-react@6.0.1(vite@8.0.8(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))": dependencies: "@rolldown/pluginutils": 1.0.0-rc.7 - vite: 8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + vite: 8.0.8(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) - "@vitejs/plugin-vue-jsx@5.1.5(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2))": + "@vitejs/plugin-vue-jsx@5.1.5(vite@7.3.2(@types/node@25.6.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2))": dependencies: "@babel/core": 7.29.0 "@babel/plugin-syntax-typescript": 7.28.6(@babel/core@7.29.0) "@babel/plugin-transform-typescript": 7.28.6(@babel/core@7.29.0) "@rolldown/pluginutils": 1.0.0-rc.15 "@vue/babel-plugin-jsx": 2.0.1(@babel/core@7.29.0) - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + vite: 7.3.2(@types/node@25.6.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) vue: 3.5.32(typescript@6.0.2) transitivePeerDependencies: - supports-color - "@vitejs/plugin-vue-jsx@5.1.5(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2))": + "@vitejs/plugin-vue-jsx@5.1.5(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2))": dependencies: "@babel/core": 7.29.0 "@babel/plugin-syntax-typescript": 7.28.6(@babel/core@7.29.0) "@babel/plugin-transform-typescript": 7.28.6(@babel/core@7.29.0) "@rolldown/pluginutils": 1.0.0-rc.15 "@vue/babel-plugin-jsx": 2.0.1(@babel/core@7.29.0) - vite: 8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) vue: 3.5.32(typescript@6.0.2) transitivePeerDependencies: - supports-color - "@vitejs/plugin-vue2@2.3.4(vite@6.4.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@2.7.16)": + "@vitejs/plugin-vue2@2.3.4(vite@6.4.2(@types/node@25.6.0)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@2.7.16)": dependencies: - vite: 6.4.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + vite: 6.4.2(@types/node@25.6.0)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) vue: 2.7.16 - "@vitejs/plugin-vue@6.0.5(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2))": + "@vitejs/plugin-vue@5.2.4(vite@5.4.21(@types/node@25.6.2)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1))(vue@3.5.32(typescript@6.0.3))": + dependencies: + vite: 5.4.21(@types/node@25.6.2)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1) + vue: 3.5.32(typescript@6.0.3) + + "@vitejs/plugin-vue@6.0.5(vite@7.3.2(@types/node@25.6.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2))": dependencies: "@rolldown/pluginutils": 1.0.0-rc.2 - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + vite: 7.3.2(@types/node@25.6.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) vue: 3.5.32(typescript@6.0.2) - "@vitejs/plugin-vue@6.0.5(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2))": + "@vitejs/plugin-vue@6.0.5(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2))": dependencies: "@rolldown/pluginutils": 1.0.0-rc.2 - vite: 8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) vue: 3.5.32(typescript@6.0.2) "@vitest/coverage-v8@4.1.4(vitest@4.1.4)": @@ -52524,7 +61594,7 @@ snapshots: obug: 2.1.1 std-env: 4.0.0 tinyrainbow: 3.1.0 - vitest: 4.1.4(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(jsdom@29.0.2(canvas@3.2.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.32.0)(sass@1.97.3)(stylus@0.64.0)(terser@5.46.0)(yaml@2.8.3)) + vitest: 4.1.4(@opentelemetry/api@1.9.1)(@types/node@25.6.2)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(jsdom@29.0.2(canvas@3.2.3))(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) "@vitest/expect@1.6.1": dependencies: @@ -52541,26 +61611,57 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.0 - "@vitest/mocker@4.1.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.32.0)(sass@1.97.3)(stylus@0.64.0)(terser@5.46.0)(yaml@2.8.3))": + "@vitest/expect@4.1.5": + dependencies: + "@standard-schema/spec": 1.1.0 + "@types/chai": 5.2.3 + "@vitest/spy": 4.1.5 + "@vitest/utils": 4.1.5 + chai: 6.2.2 + tinyrainbow: 3.1.0 + + "@vitest/mocker@4.1.4(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))": dependencies: "@vitest/spy": 4.1.4 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.32.0)(sass@1.97.3)(stylus@0.64.0)(terser@5.46.0)(yaml@2.8.3) + vite: 8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) - "@vitest/mocker@4.1.4(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))": + "@vitest/mocker@4.1.5(vite@7.3.2(@types/node@25.6.0)(jiti@2.7.0)(less@4.4.2)(lightningcss@1.32.0)(sass@1.97.3)(stylus@0.64.0)(terser@5.46.0)(yaml@2.8.3))": dependencies: - "@vitest/spy": 4.1.4 + "@vitest/spy": 4.1.5 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 7.3.2(@types/node@25.6.0)(jiti@2.7.0)(less@4.4.2)(lightningcss@1.32.0)(sass@1.97.3)(stylus@0.64.0)(terser@5.46.0)(yaml@2.8.3) + optional: true + + "@vitest/mocker@4.1.5(vite@8.0.11(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))": + dependencies: + "@vitest/spy": 4.1.5 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + vite: 8.0.11(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + optional: true + + "@vitest/mocker@4.1.5(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))": + dependencies: + "@vitest/spy": 4.1.5 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) "@vitest/pretty-format@4.1.4": dependencies: tinyrainbow: 3.1.0 + "@vitest/pretty-format@4.1.5": + dependencies: + tinyrainbow: 3.1.0 + "@vitest/runner@1.6.1": dependencies: "@vitest/utils": 1.6.1 @@ -52572,6 +61673,11 @@ snapshots: "@vitest/utils": 4.1.4 pathe: 2.0.3 + "@vitest/runner@4.1.5": + dependencies: + "@vitest/utils": 4.1.5 + pathe: 2.0.3 + "@vitest/snapshot@1.6.1": dependencies: magic-string: 0.30.21 @@ -52585,12 +61691,21 @@ snapshots: magic-string: 0.30.21 pathe: 2.0.3 + "@vitest/snapshot@4.1.5": + dependencies: + "@vitest/pretty-format": 4.1.5 + "@vitest/utils": 4.1.5 + magic-string: 0.30.21 + pathe: 2.0.3 + "@vitest/spy@1.6.1": dependencies: tinyspy: 2.2.1 "@vitest/spy@4.1.4": {} + "@vitest/spy@4.1.5": {} + "@vitest/ui@4.1.4(vitest@4.1.4)": dependencies: "@vitest/utils": 4.1.4 @@ -52600,7 +61715,7 @@ snapshots: sirv: 3.0.2 tinyglobby: 0.2.16 tinyrainbow: 3.1.0 - vitest: 4.1.4(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(jsdom@29.0.2(canvas@3.2.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.32.0)(sass@1.97.3)(stylus@0.64.0)(terser@5.46.0)(yaml@2.8.3)) + vitest: 4.1.4(@opentelemetry/api@1.9.1)(@types/node@25.6.2)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(jsdom@29.0.2(canvas@3.2.3))(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) "@vitest/utils@1.6.1": dependencies: @@ -52615,6 +61730,12 @@ snapshots: convert-source-map: 2.0.0 tinyrainbow: 3.1.0 + "@vitest/utils@4.1.5": + dependencies: + "@vitest/pretty-format": 4.1.5 + convert-source-map: 2.0.0 + tinyrainbow: 3.1.0 + "@volar/kit@2.4.28(typescript@5.9.3)": dependencies: "@volar/language-service": 2.4.28 @@ -52829,15 +61950,15 @@ snapshots: "@vue/cli-overlay@5.0.9": {} - "@vue/cli-plugin-babel@5.0.9(@swc/core@1.15.26)(@vue/cli-service@5.0.9(@swc/core@1.15.26)(@vue/compiler-sfc@3.5.32)(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))))(ejs@3.1.10)(encoding@0.1.13)(hamljs@0.6.2)(handlebars@4.7.9)(lodash@4.18.1)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(underscore@1.13.8)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))(webpack-sources@3.3.4))(core-js@3.49.0)(encoding@0.1.13)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))": + "@vue/cli-plugin-babel@5.0.9(@swc/core@1.15.33)(@vue/cli-service@5.0.9(@swc/core@1.15.33)(@vue/compiler-sfc@3.5.32)(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))))(ejs@3.1.10)(encoding@0.1.13)(hamljs@0.6.2)(handlebars@4.7.9)(lodash@4.18.1)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(underscore@1.13.8)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))(webpack-sources@3.3.4))(core-js@3.49.0)(encoding@0.1.13)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))": dependencies: "@babel/core": 7.29.0 "@vue/babel-preset-app": 5.0.9(@babel/core@7.29.0)(core-js@3.49.0)(vue@2.7.16) - "@vue/cli-service": 5.0.9(@swc/core@1.15.26)(@vue/compiler-sfc@3.5.32)(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))))(ejs@3.1.10)(encoding@0.1.13)(hamljs@0.6.2)(handlebars@4.7.9)(lodash@4.18.1)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(underscore@1.13.8)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))(webpack-sources@3.3.4) + "@vue/cli-service": 5.0.9(@swc/core@1.15.33)(@vue/compiler-sfc@3.5.32)(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))))(ejs@3.1.10)(encoding@0.1.13)(hamljs@0.6.2)(handlebars@4.7.9)(lodash@4.18.1)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(underscore@1.13.8)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))(webpack-sources@3.3.4) "@vue/cli-shared-utils": 5.0.9(encoding@0.1.13) - babel-loader: 8.4.1(@babel/core@7.29.0)(webpack@5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2)) - thread-loader: 3.0.4(webpack@5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2)) - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2) + babel-loader: 8.4.1(@babel/core@7.29.0)(webpack@5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2)) + thread-loader: 3.0.4(webpack@5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2)) + webpack: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) transitivePeerDependencies: - "@swc/core" - core-js @@ -52848,29 +61969,29 @@ snapshots: - vue - webpack-cli - "@vue/cli-plugin-router@5.0.9(@vue/cli-service@5.0.9(@swc/core@1.15.26)(@vue/compiler-sfc@3.5.32)(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))))(ejs@3.1.10)(encoding@0.1.13)(hamljs@0.6.2)(handlebars@4.7.9)(lodash@4.18.1)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(underscore@1.13.8)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))(webpack-sources@3.3.4))(encoding@0.1.13)": + "@vue/cli-plugin-router@5.0.9(@vue/cli-service@5.0.9(@swc/core@1.15.33)(@vue/compiler-sfc@3.5.32)(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))))(ejs@3.1.10)(encoding@0.1.13)(hamljs@0.6.2)(handlebars@4.7.9)(lodash@4.18.1)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(underscore@1.13.8)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))(webpack-sources@3.3.4))(encoding@0.1.13)": dependencies: - "@vue/cli-service": 5.0.9(@swc/core@1.15.26)(@vue/compiler-sfc@3.5.32)(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))))(ejs@3.1.10)(encoding@0.1.13)(hamljs@0.6.2)(handlebars@4.7.9)(lodash@4.18.1)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(underscore@1.13.8)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))(webpack-sources@3.3.4) + "@vue/cli-service": 5.0.9(@swc/core@1.15.33)(@vue/compiler-sfc@3.5.32)(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))))(ejs@3.1.10)(encoding@0.1.13)(hamljs@0.6.2)(handlebars@4.7.9)(lodash@4.18.1)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(underscore@1.13.8)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))(webpack-sources@3.3.4) "@vue/cli-shared-utils": 5.0.9(encoding@0.1.13) transitivePeerDependencies: - encoding - "@vue/cli-plugin-typescript@5.0.9(@swc/core@1.15.26)(@vue/cli-service@5.0.9(@swc/core@1.15.26)(@vue/compiler-sfc@3.5.32)(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))))(ejs@3.1.10)(encoding@0.1.13)(hamljs@0.6.2)(handlebars@4.7.9)(lodash@4.18.1)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(underscore@1.13.8)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))(webpack-sources@3.3.4))(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))))(encoding@0.1.13)(eslint@8.57.1)(typescript@5.9.3)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))": + "@vue/cli-plugin-typescript@5.0.9(@swc/core@1.15.33)(@vue/cli-service@5.0.9(@swc/core@1.15.33)(@vue/compiler-sfc@3.5.32)(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))))(ejs@3.1.10)(encoding@0.1.13)(hamljs@0.6.2)(handlebars@4.7.9)(lodash@4.18.1)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(underscore@1.13.8)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))(webpack-sources@3.3.4))(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))))(encoding@0.1.13)(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))": dependencies: "@babel/core": 7.29.0 "@types/webpack-env": 1.18.8 - "@vue/cli-service": 5.0.9(@swc/core@1.15.26)(@vue/compiler-sfc@3.5.32)(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))))(ejs@3.1.10)(encoding@0.1.13)(hamljs@0.6.2)(handlebars@4.7.9)(lodash@4.18.1)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(underscore@1.13.8)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))(webpack-sources@3.3.4) + "@vue/cli-service": 5.0.9(@swc/core@1.15.33)(@vue/compiler-sfc@3.5.32)(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))))(ejs@3.1.10)(encoding@0.1.13)(hamljs@0.6.2)(handlebars@4.7.9)(lodash@4.18.1)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(underscore@1.13.8)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))(webpack-sources@3.3.4) "@vue/cli-shared-utils": 5.0.9(encoding@0.1.13) - babel-loader: 8.4.1(@babel/core@7.29.0)(webpack@5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2)) - fork-ts-checker-webpack-plugin: 6.5.3(eslint@8.57.1)(typescript@5.9.3)(vue-template-compiler@2.7.16)(webpack@5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2)) + babel-loader: 8.4.1(@babel/core@7.29.0)(webpack@5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2)) + fork-ts-checker-webpack-plugin: 6.5.3(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3)(vue-template-compiler@2.7.16)(webpack@5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2)) globby: 11.1.0 - thread-loader: 3.0.4(webpack@5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2)) - ts-loader: 9.5.7(typescript@5.9.3)(webpack@5.106.1) + thread-loader: 3.0.4(webpack@5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2)) + ts-loader: 9.5.7(typescript@5.9.3)(webpack@5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2)) typescript: 5.9.3 vue: 2.7.16 - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2) + webpack: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) optionalDependencies: - cache-loader: 4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + cache-loader: 4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) vue-template-compiler: 2.7.16 transitivePeerDependencies: - "@swc/core" @@ -52881,22 +62002,22 @@ snapshots: - uglify-js - webpack-cli - "@vue/cli-plugin-vuex@5.0.9(@vue/cli-service@5.0.9(@swc/core@1.15.26)(@vue/compiler-sfc@3.5.32)(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))))(ejs@3.1.10)(encoding@0.1.13)(hamljs@0.6.2)(handlebars@4.7.9)(lodash@4.18.1)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(underscore@1.13.8)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))(webpack-sources@3.3.4))": + "@vue/cli-plugin-vuex@5.0.9(@vue/cli-service@5.0.9(@swc/core@1.15.33)(@vue/compiler-sfc@3.5.32)(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))))(ejs@3.1.10)(encoding@0.1.13)(hamljs@0.6.2)(handlebars@4.7.9)(lodash@4.18.1)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(underscore@1.13.8)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))(webpack-sources@3.3.4))": dependencies: - "@vue/cli-service": 5.0.9(@swc/core@1.15.26)(@vue/compiler-sfc@3.5.32)(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))))(ejs@3.1.10)(encoding@0.1.13)(hamljs@0.6.2)(handlebars@4.7.9)(lodash@4.18.1)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(underscore@1.13.8)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))(webpack-sources@3.3.4) + "@vue/cli-service": 5.0.9(@swc/core@1.15.33)(@vue/compiler-sfc@3.5.32)(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))))(ejs@3.1.10)(encoding@0.1.13)(hamljs@0.6.2)(handlebars@4.7.9)(lodash@4.18.1)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(underscore@1.13.8)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))(webpack-sources@3.3.4) - "@vue/cli-service@5.0.9(@swc/core@1.15.26)(@vue/compiler-sfc@3.5.32)(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))))(ejs@3.1.10)(encoding@0.1.13)(hamljs@0.6.2)(handlebars@4.7.9)(lodash@4.18.1)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(underscore@1.13.8)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))(webpack-sources@3.3.4)": + "@vue/cli-service@5.0.9(@swc/core@1.15.33)(@vue/compiler-sfc@3.5.32)(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))))(ejs@3.1.10)(encoding@0.1.13)(hamljs@0.6.2)(handlebars@4.7.9)(lodash@4.18.1)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(underscore@1.13.8)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))(webpack-sources@3.3.4)": dependencies: "@babel/helper-compilation-targets": 7.28.6 - "@soda/friendly-errors-webpack-plugin": 1.8.1(webpack@5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2)) + "@soda/friendly-errors-webpack-plugin": 1.8.1(webpack@5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2)) "@soda/get-current-script": 1.0.2 "@types/minimist": 1.2.2 "@vue/cli-overlay": 5.0.9 - "@vue/cli-plugin-router": 5.0.9(@vue/cli-service@5.0.9(@swc/core@1.15.26)(@vue/compiler-sfc@3.5.32)(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))))(ejs@3.1.10)(encoding@0.1.13)(hamljs@0.6.2)(handlebars@4.7.9)(lodash@4.18.1)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(underscore@1.13.8)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))(webpack-sources@3.3.4))(encoding@0.1.13) - "@vue/cli-plugin-vuex": 5.0.9(@vue/cli-service@5.0.9(@swc/core@1.15.26)(@vue/compiler-sfc@3.5.32)(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))))(ejs@3.1.10)(encoding@0.1.13)(hamljs@0.6.2)(handlebars@4.7.9)(lodash@4.18.1)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(underscore@1.13.8)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))(webpack-sources@3.3.4)) + "@vue/cli-plugin-router": 5.0.9(@vue/cli-service@5.0.9(@swc/core@1.15.33)(@vue/compiler-sfc@3.5.32)(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))))(ejs@3.1.10)(encoding@0.1.13)(hamljs@0.6.2)(handlebars@4.7.9)(lodash@4.18.1)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(underscore@1.13.8)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))(webpack-sources@3.3.4))(encoding@0.1.13) + "@vue/cli-plugin-vuex": 5.0.9(@vue/cli-service@5.0.9(@swc/core@1.15.33)(@vue/compiler-sfc@3.5.32)(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))))(ejs@3.1.10)(encoding@0.1.13)(hamljs@0.6.2)(handlebars@4.7.9)(lodash@4.18.1)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(underscore@1.13.8)(vue-template-compiler@2.7.16)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))(webpack-sources@3.3.4)) "@vue/cli-shared-utils": 5.0.9(encoding@0.1.13) "@vue/component-compiler-utils": 3.3.0(ejs@3.1.10)(hamljs@0.6.2)(handlebars@4.7.9)(lodash@4.18.1)(nunjucks@3.2.4(chokidar@3.6.0))(pug@3.0.4)(underscore@1.13.8) - "@vue/vue-loader-v15": vue-loader@15.11.1(@vue/compiler-sfc@3.5.32)(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))))(css-loader@6.11.0(webpack@5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2)))(ejs@3.1.10)(hamljs@0.6.2)(handlebars@4.7.9)(lodash@4.18.1)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(underscore@1.13.8)(vue-template-compiler@2.7.16)(webpack@5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2)) + "@vue/vue-loader-v15": vue-loader@15.11.1(@vue/compiler-sfc@3.5.32)(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))))(css-loader@6.11.0(webpack@5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2)))(ejs@3.1.10)(hamljs@0.6.2)(handlebars@4.7.9)(lodash@4.18.1)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(underscore@1.13.8)(vue-template-compiler@2.7.16)(webpack@5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2)) "@vue/web-component-wrapper": 1.3.0 acorn: 8.16.0 acorn-walk: 8.3.5 @@ -52907,9 +62028,9 @@ snapshots: cli-highlight: 2.1.11 clipboardy: 2.3.0 cliui: 7.0.4 - copy-webpack-plugin: 9.1.0(webpack@5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2)) - css-loader: 6.11.0(webpack@5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2)) - css-minimizer-webpack-plugin: 3.4.1(webpack@5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2)) + copy-webpack-plugin: 9.1.0(webpack@5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2)) + css-loader: 6.11.0(webpack@5.106.2) + css-minimizer-webpack-plugin: 3.4.1(webpack@5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2)) cssnano: 5.1.15(postcss@8.5.9) debug: 4.4.3(supports-color@5.5.0) default-gateway: 6.0.3 @@ -52918,32 +62039,32 @@ snapshots: fs-extra: 9.1.0 globby: 11.1.0 hash-sum: 2.0.0 - html-webpack-plugin: 5.6.6(webpack@5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2)) + html-webpack-plugin: 5.6.6(webpack@5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2)) is-file-esm: 1.0.0 launch-editor-middleware: 2.13.2 lodash.defaultsdeep: 4.6.1 lodash.mapvalues: 4.6.0 - mini-css-extract-plugin: 2.10.2(webpack@5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2)) + mini-css-extract-plugin: 2.10.2(webpack@5.106.2) minimist: 1.2.8 module-alias: 2.3.4 portfinder: 1.0.38 postcss: 8.5.9 - postcss-loader: 6.2.1(postcss@8.5.9)(webpack@5.106.1) - progress-webpack-plugin: 1.0.16(webpack@5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2)) + postcss-loader: 6.2.1(postcss@8.5.9)(webpack@5.106.2) + progress-webpack-plugin: 1.0.16(webpack@5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2)) ssri: 8.0.1 - terser-webpack-plugin: 5.4.0(@swc/core@1.15.26)(webpack@5.106.1) - thread-loader: 3.0.4(webpack@5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2)) - vue-loader: 17.4.2(@vue/compiler-sfc@3.5.32)(vue@2.7.16)(webpack@5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2)) + terser-webpack-plugin: 5.5.0(@swc/core@1.15.33)(webpack@5.106.2) + thread-loader: 3.0.4(webpack@5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2)) + vue-loader: 17.4.2(@vue/compiler-sfc@3.5.32)(vue@2.7.16)(webpack@5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2)) vue-style-loader: 4.1.3 - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2) + webpack: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) webpack-bundle-analyzer: 4.10.2 webpack-chain: 6.5.1 - webpack-dev-server: 4.15.2(debug@4.4.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))(webpack@5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2)) + webpack-dev-server: 4.15.2(debug@4.4.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))(webpack@5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2)) webpack-merge: 5.10.0 webpack-virtual-modules: 0.4.6 whatwg-fetch: 3.6.20 optionalDependencies: - cache-loader: 4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + cache-loader: 4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) vue-template-compiler: 2.7.16 webpack-sources: 3.3.4 transitivePeerDependencies: @@ -53026,7 +62147,7 @@ snapshots: lru-cache: 6.0.0 node-fetch: 2.7.0(encoding@0.1.13) open: 8.4.2 - ora: 5.3.0 + ora: 5.4.1 read-pkg: 5.2.0 semver: 7.7.4 strip-ansi: 6.0.1 @@ -53214,6 +62335,10 @@ snapshots: "@vue/devtools-api@6.6.4": {} + "@vue/devtools-api@7.7.9": + dependencies: + "@vue/devtools-kit": 7.7.9 + "@vue/devtools-api@8.1.1": dependencies: "@vue/devtools-kit": 8.1.1 @@ -53224,6 +62349,16 @@ snapshots: "@vue/devtools-shared": 8.1.1 vue: 3.5.32(typescript@6.0.2) + "@vue/devtools-kit@7.7.9": + dependencies: + "@vue/devtools-shared": 7.7.9 + birpc: 2.9.0 + hookable: 5.5.3 + mitt: 3.0.1 + perfect-debounce: 1.0.0 + speakingurl: 14.0.1 + superjson: 2.2.6 + "@vue/devtools-kit@8.1.1": dependencies: "@vue/devtools-shared": 8.1.1 @@ -53231,25 +62366,29 @@ snapshots: hookable: 5.5.3 perfect-debounce: 2.1.0 + "@vue/devtools-shared@7.7.9": + dependencies: + rfdc: 1.4.1 + "@vue/devtools-shared@8.1.1": {} - "@vue/eslint-config-prettier@10.2.0(@types/eslint@9.6.1)(eslint@10.2.0(jiti@2.6.1))(prettier@3.8.2)": + "@vue/eslint-config-prettier@10.2.0(@types/eslint@9.6.1)(eslint@10.2.0(jiti@2.7.0))(prettier@3.8.2)": dependencies: - eslint: 10.2.0(jiti@2.6.1) - eslint-config-prettier: 10.1.8(eslint@10.2.0(jiti@2.6.1)) - eslint-plugin-prettier: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.2.0(jiti@2.6.1)))(eslint@10.2.0(jiti@2.6.1))(prettier@3.8.2) + eslint: 10.2.0(jiti@2.7.0) + eslint-config-prettier: 10.1.8(eslint@10.2.0(jiti@2.7.0)) + eslint-plugin-prettier: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.2.0(jiti@2.7.0)))(eslint@10.2.0(jiti@2.7.0))(prettier@3.8.2) prettier: 3.8.2 transitivePeerDependencies: - "@types/eslint" - "@vue/eslint-config-typescript@14.7.0(eslint-plugin-vue@10.8.0(@stylistic/eslint-plugin@5.10.0(eslint@10.2.0(jiti@2.6.1)))(@typescript-eslint/parser@8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.2.0(jiti@2.6.1))(vue-eslint-parser@10.4.0(eslint@10.2.0(jiti@2.6.1))))(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2)": + "@vue/eslint-config-typescript@14.7.0(eslint-plugin-vue@10.8.0(@stylistic/eslint-plugin@5.10.0(eslint@10.2.0(jiti@2.7.0)))(@typescript-eslint/parser@8.58.1(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2))(eslint@10.2.0(jiti@2.7.0))(vue-eslint-parser@10.4.0(eslint@10.2.0(jiti@2.7.0))))(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2)": dependencies: - "@typescript-eslint/utils": 8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) - eslint: 10.2.0(jiti@2.6.1) - eslint-plugin-vue: 10.8.0(@stylistic/eslint-plugin@5.10.0(eslint@10.2.0(jiti@2.6.1)))(@typescript-eslint/parser@8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.2.0(jiti@2.6.1))(vue-eslint-parser@10.4.0(eslint@10.2.0(jiti@2.6.1))) + "@typescript-eslint/utils": 8.58.1(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) + eslint: 10.2.0(jiti@2.7.0) + eslint-plugin-vue: 10.8.0(@stylistic/eslint-plugin@5.10.0(eslint@10.2.0(jiti@2.7.0)))(@typescript-eslint/parser@8.58.1(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2))(eslint@10.2.0(jiti@2.7.0))(vue-eslint-parser@10.4.0(eslint@10.2.0(jiti@2.7.0))) fast-glob: 3.3.3 - typescript-eslint: 8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) - vue-eslint-parser: 10.4.0(eslint@10.2.0(jiti@2.6.1)) + typescript-eslint: 8.59.2(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) + vue-eslint-parser: 10.4.0(eslint@10.2.0(jiti@2.7.0)) optionalDependencies: typescript: 6.0.2 transitivePeerDependencies: @@ -53300,6 +62439,12 @@ snapshots: "@vue/shared": 3.5.32 vue: 3.5.32(typescript@6.0.2) + "@vue/server-renderer@3.5.32(vue@3.5.32(typescript@6.0.3))": + dependencies: + "@vue/compiler-ssr": 3.5.32 + "@vue/shared": 3.5.32 + vue: 3.5.32(typescript@6.0.3) + "@vue/shared@3.5.32": {} "@vue/tsconfig@0.9.1(typescript@6.0.2)(vue@3.5.32(typescript@6.0.2))": @@ -53309,6 +62454,35 @@ snapshots: "@vue/web-component-wrapper@1.3.0": {} + "@vueuse/core@12.8.2(typescript@6.0.3)": + dependencies: + "@types/web-bluetooth": 0.0.21 + "@vueuse/metadata": 12.8.2 + "@vueuse/shared": 12.8.2(typescript@6.0.3) + vue: 3.5.32(typescript@6.0.3) + transitivePeerDependencies: + - typescript + + "@vueuse/integrations@12.8.2(axios@1.15.0)(focus-trap@7.8.0)(fuse.js@7.3.0)(typescript@6.0.3)": + dependencies: + "@vueuse/core": 12.8.2(typescript@6.0.3) + "@vueuse/shared": 12.8.2(typescript@6.0.3) + vue: 3.5.32(typescript@6.0.3) + optionalDependencies: + axios: 1.15.0 + focus-trap: 7.8.0 + fuse.js: 7.3.0 + transitivePeerDependencies: + - typescript + + "@vueuse/metadata@12.8.2": {} + + "@vueuse/shared@12.8.2(typescript@6.0.3)": + dependencies: + vue: 3.5.32(typescript@6.0.3) + transitivePeerDependencies: + - typescript + "@web/browser-logs@0.4.1": dependencies: errorstacks: 2.4.1 @@ -53325,7 +62499,7 @@ snapshots: chokidar: 3.6.0 clone: 2.1.2 es-module-lexer: 1.7.0 - get-stream: 6.0.0 + get-stream: 6.0.1 is-stream: 2.0.1 isbinaryfile: 5.0.7 koa: 2.16.4 @@ -53626,34 +62800,46 @@ snapshots: "@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4)(webpack@5.106.1)": dependencies: - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@5.1.4) + webpack: 5.106.1(@swc/core@1.15.33)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@4.15.2)(webpack@5.106.1) + "@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4)(webpack@5.106.2)": + dependencies: + webpack: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) + webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@4.15.2)(webpack@5.106.2) + "@webpack-cli/info@2.0.2(webpack-cli@5.1.4)(webpack@5.106.1)": dependencies: - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@5.1.4) + webpack: 5.106.1(@swc/core@1.15.33)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@4.15.2)(webpack@5.106.1) + "@webpack-cli/info@2.0.2(webpack-cli@5.1.4)(webpack@5.106.2)": + dependencies: + webpack: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) + webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@4.15.2)(webpack@5.106.2) + "@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack-dev-server@4.15.2)(webpack@5.106.1)": dependencies: - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@5.1.4) + webpack: 5.106.1(@swc/core@1.15.33)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@4.15.2)(webpack@5.106.1) optionalDependencies: webpack-dev-server: 4.15.2(webpack-cli@5.1.4)(webpack@5.106.1) - "@wordpress/a11y@4.43.0": + "@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack-dev-server@4.15.2)(webpack@5.106.2)": dependencies: - "@wordpress/dom-ready": 4.43.0 - "@wordpress/i18n": 6.16.0 + webpack: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) + webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@4.15.2)(webpack@5.106.2) + optionalDependencies: + webpack-dev-server: 4.15.2(debug@4.4.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))(webpack@5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2)) - "@wordpress/api-fetch@7.43.0": + "@wordpress/a11y@4.45.0": dependencies: - "@wordpress/i18n": 6.16.0 - "@wordpress/url": 4.43.0 + "@wordpress/dom-ready": 4.45.0 + "@wordpress/i18n": 6.18.0 - "@wordpress/autop@4.43.0": {} + "@wordpress/autop@4.45.0": {} - "@wordpress/babel-preset-default@8.43.0": + "@wordpress/babel-preset-default@8.45.0": dependencies: "@babel/core": 7.25.7 "@babel/plugin-syntax-import-attributes": 7.26.0(@babel/core@7.25.7) @@ -53661,58 +62847,58 @@ snapshots: "@babel/plugin-transform-runtime": 7.25.7(@babel/core@7.25.7) "@babel/preset-env": 7.25.7(@babel/core@7.25.7) "@babel/preset-typescript": 7.25.7(@babel/core@7.25.7) - "@wordpress/browserslist-config": 6.43.0 - "@wordpress/warning": 3.43.0 + "@wordpress/browserslist-config": 6.45.0 + "@wordpress/warning": 3.45.0 browserslist: 4.28.2 core-js: 3.49.0 react: 18.3.1 transitivePeerDependencies: - supports-color - "@wordpress/base-styles@6.19.0": {} - - "@wordpress/blob@4.43.0": {} - - "@wordpress/block-editor@15.16.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@19.2.3(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.9.3))": - dependencies: - "@react-spring/web": 9.7.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - "@wordpress/a11y": 4.43.0 - "@wordpress/api-fetch": 7.43.0 - "@wordpress/base-styles": 6.19.0 - "@wordpress/blob": 4.43.0 - "@wordpress/block-serialization-default-parser": 5.43.0 - "@wordpress/blocks": 15.16.0(react@18.3.1) - "@wordpress/commands": 1.43.0(@emotion/is-prop-valid@1.4.0)(@types/react-dom@19.2.3(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - "@wordpress/components": 32.5.0(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - "@wordpress/compose": 7.43.0(react@18.3.1) - "@wordpress/data": 10.43.0(react@18.3.1) - "@wordpress/dataviews": 14.0.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.9.3)) - "@wordpress/date": 5.43.0 - "@wordpress/deprecated": 4.43.0 - "@wordpress/dom": 4.43.0 - "@wordpress/element": 6.43.0 - "@wordpress/escape-html": 3.43.0 - "@wordpress/global-styles-engine": 1.10.0(react@18.3.1) - "@wordpress/hooks": 4.43.0 - "@wordpress/html-entities": 4.43.0 - "@wordpress/i18n": 6.16.0 - "@wordpress/icons": 12.1.0(react@18.3.1) - "@wordpress/image-cropper": 1.7.0(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - "@wordpress/interactivity": 6.43.0 - "@wordpress/is-shallow-equal": 5.43.0 - "@wordpress/keyboard-shortcuts": 5.43.0(react@18.3.1) - "@wordpress/keycodes": 4.43.0 - "@wordpress/notices": 5.43.0(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - "@wordpress/preferences": 4.43.0(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - "@wordpress/priority-queue": 3.43.0 - "@wordpress/private-apis": 1.43.0 - "@wordpress/rich-text": 7.43.0(react@18.3.1) - "@wordpress/style-engine": 2.43.0 - "@wordpress/token-list": 3.43.0 - "@wordpress/upload-media": 0.28.0(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - "@wordpress/url": 4.43.0 - "@wordpress/warning": 3.43.0 - "@wordpress/wordcount": 4.43.0 + "@wordpress/base-styles@7.0.0": {} + + "@wordpress/blob@4.45.0": {} + + "@wordpress/block-editor@15.18.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react-dom@19.2.3(@types/react@18.3.28))(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(stylelint@16.26.1(typescript@6.0.3))": + dependencies: + "@react-spring/web": 9.7.5(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + "@wordpress/a11y": 4.45.0 + "@wordpress/base-styles": 7.0.0 + "@wordpress/blob": 4.45.0 + "@wordpress/block-serialization-default-parser": 5.45.0 + "@wordpress/blocks": 15.18.0(react@19.2.5) + "@wordpress/commands": 1.45.0(@emotion/is-prop-valid@1.4.0)(@types/react-dom@19.2.3(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + "@wordpress/components": 33.0.0(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + "@wordpress/compose": 7.45.0(react@19.2.5) + "@wordpress/data": 10.45.0(react@19.2.5) + "@wordpress/dataviews": 14.2.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(stylelint@16.26.1(typescript@6.0.3)) + "@wordpress/date": 5.45.0 + "@wordpress/deprecated": 4.45.0 + "@wordpress/dom": 4.45.0 + "@wordpress/element": 6.45.0 + "@wordpress/escape-html": 3.45.0 + "@wordpress/global-styles-engine": 1.12.0(react@19.2.5) + "@wordpress/hooks": 4.45.0 + "@wordpress/html-entities": 4.45.0 + "@wordpress/i18n": 6.18.0 + "@wordpress/icons": 13.0.0(react@19.2.5) + "@wordpress/image-cropper": 1.9.0(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + "@wordpress/interactivity": 6.45.0 + "@wordpress/is-shallow-equal": 5.45.0 + "@wordpress/keyboard-shortcuts": 5.45.0(react@19.2.5) + "@wordpress/keycodes": 4.45.0 + "@wordpress/notices": 5.45.0(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + "@wordpress/preferences": 4.45.0(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + "@wordpress/priority-queue": 3.45.0 + "@wordpress/private-apis": 1.45.0 + "@wordpress/rich-text": 7.45.0(react@19.2.5) + "@wordpress/style-engine": 2.45.0 + "@wordpress/token-list": 3.45.0 + "@wordpress/ui": 0.12.0(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(stylelint@16.26.1(typescript@6.0.3)) + "@wordpress/upload-media": 0.30.0(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + "@wordpress/url": 4.45.0 + "@wordpress/warning": 3.45.0 + "@wordpress/wordcount": 4.45.0 change-case: 4.1.2 clsx: 2.1.1 colord: 2.9.3 @@ -53724,108 +62910,109 @@ snapshots: postcss: 8.5.9 postcss-prefix-selector: 1.16.1(postcss@8.5.9) postcss-urlrebase: 1.4.0(postcss@8.5.9) - react: 18.3.1 - react-autosize-textarea: 7.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react-dom: 18.3.1(react@18.3.1) - react-easy-crop: 5.5.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 19.2.5 + react-autosize-textarea: 7.1.0(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + react-dom: 19.2.5(react@19.2.5) + react-easy-crop: 5.5.7(react-dom@19.2.5(react@19.2.5))(react@19.2.5) remove-accents: 0.5.0 transitivePeerDependencies: - "@date-fns/tz" - "@emotion/is-prop-valid" - "@types/react" - "@types/react-dom" + - date-fns - stylelint - supports-color - "@wordpress/block-serialization-default-parser@5.43.0": {} - - "@wordpress/blocks@15.16.0(react@18.3.1)": - dependencies: - "@wordpress/autop": 4.43.0 - "@wordpress/blob": 4.43.0 - "@wordpress/block-serialization-default-parser": 5.43.0 - "@wordpress/data": 10.43.0(react@18.3.1) - "@wordpress/deprecated": 4.43.0 - "@wordpress/dom": 4.43.0 - "@wordpress/element": 6.43.0 - "@wordpress/hooks": 4.43.0 - "@wordpress/html-entities": 4.43.0 - "@wordpress/i18n": 6.16.0 - "@wordpress/is-shallow-equal": 5.43.0 - "@wordpress/private-apis": 1.43.0 - "@wordpress/rich-text": 7.43.0(react@18.3.1) - "@wordpress/shortcode": 4.43.0 - "@wordpress/warning": 3.43.0 + "@wordpress/block-serialization-default-parser@5.45.0": {} + + "@wordpress/blocks@15.18.0(react@19.2.5)": + dependencies: + "@wordpress/autop": 4.45.0 + "@wordpress/blob": 4.45.0 + "@wordpress/block-serialization-default-parser": 5.45.0 + "@wordpress/data": 10.45.0(react@19.2.5) + "@wordpress/deprecated": 4.45.0 + "@wordpress/dom": 4.45.0 + "@wordpress/element": 6.45.0 + "@wordpress/hooks": 4.45.0 + "@wordpress/html-entities": 4.45.0 + "@wordpress/i18n": 6.18.0 + "@wordpress/is-shallow-equal": 5.45.0 + "@wordpress/private-apis": 1.45.0 + "@wordpress/rich-text": 7.45.0(react@19.2.5) + "@wordpress/shortcode": 4.45.0 + "@wordpress/warning": 3.45.0 change-case: 4.1.2 colord: 2.9.3 fast-deep-equal: 3.1.3 hpq: 1.4.0 is-plain-object: 5.0.0 memize: 2.1.1 - react: 18.3.1 + react: 19.2.5 react-is: 18.3.1 remove-accents: 0.5.0 showdown: 1.9.1 simple-html-tokenizer: 0.5.11 uuid: 9.0.1 - "@wordpress/browserslist-config@6.43.0": {} + "@wordpress/browserslist-config@6.45.0": {} - "@wordpress/commands@1.43.0(@emotion/is-prop-valid@1.4.0)(@types/react-dom@19.2.3(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": + "@wordpress/commands@1.45.0(@emotion/is-prop-valid@1.4.0)(@types/react-dom@19.2.3(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)": dependencies: - "@wordpress/base-styles": 6.19.0 - "@wordpress/components": 32.5.0(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - "@wordpress/data": 10.43.0(react@18.3.1) - "@wordpress/element": 6.43.0 - "@wordpress/i18n": 6.16.0 - "@wordpress/icons": 12.1.0(react@18.3.1) - "@wordpress/keyboard-shortcuts": 5.43.0(react@18.3.1) - "@wordpress/preferences": 4.43.0(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - "@wordpress/private-apis": 1.43.0 - "@wordpress/warning": 3.43.0 + "@wordpress/base-styles": 7.0.0 + "@wordpress/components": 33.0.0(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + "@wordpress/data": 10.45.0(react@19.2.5) + "@wordpress/element": 6.45.0 + "@wordpress/i18n": 6.18.0 + "@wordpress/icons": 13.0.0(react@19.2.5) + "@wordpress/keyboard-shortcuts": 5.45.0(react@19.2.5) + "@wordpress/preferences": 4.45.0(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + "@wordpress/private-apis": 1.45.0 + "@wordpress/warning": 3.45.0 clsx: 2.1.1 - cmdk: 1.1.1(@types/react-dom@19.2.3(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + cmdk: 1.1.1(@types/react-dom@19.2.3(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) transitivePeerDependencies: - "@emotion/is-prop-valid" - "@types/react" - "@types/react-dom" - supports-color - "@wordpress/components@32.5.0(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": + "@wordpress/components@33.0.0(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)": dependencies: - "@ariakit/react": 0.4.25(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@ariakit/react": 0.4.25(react-dom@19.2.5(react@19.2.5))(react@19.2.5) "@date-fns/utc": 2.1.1 "@emotion/cache": 11.14.0 "@emotion/css": 11.13.5 - "@emotion/react": 11.14.0(@types/react@18.3.28)(react@18.3.1) + "@emotion/react": 11.14.0(@types/react@18.3.28)(react@19.2.5) "@emotion/serialize": 1.3.3 - "@emotion/styled": 11.14.1(@emotion/react@11.14.0(@types/react@18.3.28)(react@18.3.1))(@types/react@18.3.28)(react@18.3.1) + "@emotion/styled": 11.14.1(@emotion/react@11.14.0(@types/react@18.3.28)(react@19.2.5))(@types/react@18.3.28)(react@19.2.5) "@emotion/utils": 1.4.2 - "@floating-ui/react-dom": 2.0.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + "@floating-ui/react-dom": 2.0.8(react-dom@19.2.5(react@19.2.5))(react@19.2.5) "@types/gradient-parser": 1.1.0 "@types/highlight-words-core": 1.2.1 "@types/react": 18.3.28 - "@use-gesture/react": 10.3.1(react@18.3.1) - "@wordpress/a11y": 4.43.0 - "@wordpress/base-styles": 6.19.0 - "@wordpress/compose": 7.43.0(react@18.3.1) - "@wordpress/date": 5.43.0 - "@wordpress/deprecated": 4.43.0 - "@wordpress/dom": 4.43.0 - "@wordpress/element": 6.43.0 - "@wordpress/escape-html": 3.43.0 - "@wordpress/hooks": 4.43.0 - "@wordpress/html-entities": 4.43.0 - "@wordpress/i18n": 6.16.0 - "@wordpress/icons": 12.1.0(react@18.3.1) - "@wordpress/is-shallow-equal": 5.43.0 - "@wordpress/keycodes": 4.43.0 - "@wordpress/primitives": 4.43.0(react@18.3.1) - "@wordpress/private-apis": 1.43.0 - "@wordpress/rich-text": 7.43.0(react@18.3.1) - "@wordpress/warning": 3.43.0 + "@use-gesture/react": 10.3.1(react@19.2.5) + "@wordpress/a11y": 4.45.0 + "@wordpress/base-styles": 7.0.0 + "@wordpress/compose": 7.45.0(react@19.2.5) + "@wordpress/date": 5.45.0 + "@wordpress/deprecated": 4.45.0 + "@wordpress/dom": 4.45.0 + "@wordpress/element": 6.45.0 + "@wordpress/escape-html": 3.45.0 + "@wordpress/hooks": 4.45.0 + "@wordpress/html-entities": 4.45.0 + "@wordpress/i18n": 6.18.0 + "@wordpress/icons": 13.0.0(react@19.2.5) + "@wordpress/is-shallow-equal": 5.45.0 + "@wordpress/keycodes": 4.45.0 + "@wordpress/primitives": 4.45.0(react@19.2.5) + "@wordpress/private-apis": 1.45.0 + "@wordpress/rich-text": 7.45.0(react@19.2.5) + "@wordpress/warning": 3.45.0 change-case: 4.1.2 clsx: 2.1.1 colord: 2.9.3 @@ -53833,80 +63020,80 @@ snapshots: date-fns: 3.6.0 deepmerge: 4.3.1 fast-deep-equal: 3.1.3 - framer-motion: 11.18.2(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + framer-motion: 11.18.2(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) gradient-parser: 1.1.1 highlight-words-core: 1.2.3 is-plain-object: 5.0.0 memize: 2.1.1 path-to-regexp: 6.3.0 - re-resizable: 6.11.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-colorful: 5.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react-day-picker: 9.14.0(react@18.3.1) - react-dom: 18.3.1(react@18.3.1) + re-resizable: 6.11.2(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + react: 19.2.5 + react-colorful: 5.6.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + react-day-picker: 9.14.0(react@19.2.5) + react-dom: 19.2.5(react@19.2.5) remove-accents: 0.5.0 uuid: 9.0.1 transitivePeerDependencies: - "@emotion/is-prop-valid" - supports-color - "@wordpress/compose@7.43.0(react@18.3.1)": + "@wordpress/compose@7.45.0(react@19.2.5)": dependencies: "@types/mousetrap": 1.6.15 - "@wordpress/deprecated": 4.43.0 - "@wordpress/dom": 4.43.0 - "@wordpress/element": 6.43.0 - "@wordpress/is-shallow-equal": 5.43.0 - "@wordpress/keycodes": 4.43.0 - "@wordpress/priority-queue": 3.43.0 - "@wordpress/undo-manager": 1.43.0 + "@wordpress/deprecated": 4.45.0 + "@wordpress/dom": 4.45.0 + "@wordpress/element": 6.45.0 + "@wordpress/is-shallow-equal": 5.45.0 + "@wordpress/keycodes": 4.45.0 + "@wordpress/priority-queue": 3.45.0 + "@wordpress/undo-manager": 1.45.0 change-case: 4.1.2 mousetrap: 1.6.5 - react: 18.3.1 - use-memo-one: 1.1.3(react@18.3.1) + react: 19.2.5 + use-memo-one: 1.1.3(react@19.2.5) - "@wordpress/data@10.43.0(react@18.3.1)": + "@wordpress/data@10.45.0(react@19.2.5)": dependencies: - "@wordpress/compose": 7.43.0(react@18.3.1) - "@wordpress/deprecated": 4.43.0 - "@wordpress/element": 6.43.0 - "@wordpress/is-shallow-equal": 5.43.0 - "@wordpress/priority-queue": 3.43.0 - "@wordpress/private-apis": 1.43.0 - "@wordpress/redux-routine": 5.43.0(redux@5.0.1) + "@wordpress/compose": 7.45.0(react@19.2.5) + "@wordpress/deprecated": 4.45.0 + "@wordpress/element": 6.45.0 + "@wordpress/is-shallow-equal": 5.45.0 + "@wordpress/priority-queue": 3.45.0 + "@wordpress/private-apis": 1.45.0 + "@wordpress/redux-routine": 5.45.0(redux@5.0.1) deepmerge: 4.3.1 equivalent-key-map: 0.2.2 is-plain-object: 5.0.0 is-promise: 4.0.0 - react: 18.3.1 + react: 19.2.5 redux: 5.0.1 rememo: 4.0.2 - use-memo-one: 1.1.3(react@18.3.1) - - "@wordpress/dataviews@14.0.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.9.3))": - dependencies: - "@ariakit/react": 0.4.25(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - "@wordpress/base-styles": 6.19.0 - "@wordpress/components": 32.5.0(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - "@wordpress/compose": 7.43.0(react@18.3.1) - "@wordpress/data": 10.43.0(react@18.3.1) - "@wordpress/date": 5.43.0 - "@wordpress/deprecated": 4.43.0 - "@wordpress/element": 6.43.0 - "@wordpress/i18n": 6.16.0 - "@wordpress/icons": 12.1.0(react@18.3.1) - "@wordpress/keycodes": 4.43.0 - "@wordpress/primitives": 4.43.0(react@18.3.1) - "@wordpress/private-apis": 1.43.0 - "@wordpress/ui": 0.10.0(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.9.3)) - "@wordpress/warning": 3.43.0 + use-memo-one: 1.1.3(react@19.2.5) + + "@wordpress/dataviews@14.2.0(@date-fns/tz@1.4.1)(@emotion/is-prop-valid@1.4.0)(@types/react@18.3.28)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(stylelint@16.26.1(typescript@6.0.3))": + dependencies: + "@ariakit/react": 0.4.25(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + "@wordpress/base-styles": 7.0.0 + "@wordpress/components": 33.0.0(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + "@wordpress/compose": 7.45.0(react@19.2.5) + "@wordpress/data": 10.45.0(react@19.2.5) + "@wordpress/date": 5.45.0 + "@wordpress/deprecated": 4.45.0 + "@wordpress/element": 6.45.0 + "@wordpress/i18n": 6.18.0 + "@wordpress/icons": 13.0.0(react@19.2.5) + "@wordpress/keycodes": 4.45.0 + "@wordpress/primitives": 4.45.0(react@19.2.5) + "@wordpress/private-apis": 1.45.0 + "@wordpress/ui": 0.12.0(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(stylelint@16.26.1(typescript@6.0.3)) + "@wordpress/warning": 3.45.0 clsx: 2.1.1 colord: 2.9.3 date-fns: 4.1.0 deepmerge: 4.3.1 fast-deep-equal: 3.1.3 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) remove-accents: 0.5.0 transitivePeerDependencies: - "@date-fns/tz" @@ -53915,31 +63102,31 @@ snapshots: - stylelint - supports-color - "@wordpress/date@5.43.0": + "@wordpress/date@5.45.0": dependencies: - "@wordpress/deprecated": 4.43.0 + "@wordpress/deprecated": 4.45.0 moment: 2.30.1 moment-timezone: 0.5.48 - "@wordpress/dependency-extraction-webpack-plugin@6.43.0(webpack@5.106.1)": + "@wordpress/dependency-extraction-webpack-plugin@6.45.0(webpack@5.106.2)": dependencies: json2php: 0.0.7 - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2) + webpack: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) - "@wordpress/deprecated@4.43.0": + "@wordpress/deprecated@4.45.0": dependencies: - "@wordpress/hooks": 4.43.0 + "@wordpress/hooks": 4.45.0 - "@wordpress/dom-ready@4.43.0": {} + "@wordpress/dom-ready@4.45.0": {} - "@wordpress/dom@4.43.0": + "@wordpress/dom@4.45.0": dependencies: - "@wordpress/deprecated": 4.43.0 + "@wordpress/deprecated": 4.45.0 - "@wordpress/e2e-test-utils-playwright@1.43.0(@playwright/test@1.59.1)(@types/node@25.6.0)": + "@wordpress/e2e-test-utils-playwright@1.45.0(@playwright/test@1.59.1)(@types/node@25.6.2)": dependencies: "@playwright/test": 1.59.1 - "@types/node": 25.6.0 + "@types/node": 25.6.2 change-case: 4.1.2 get-port: 5.1.1 lighthouse: 12.8.2 @@ -53953,46 +63140,49 @@ snapshots: - supports-color - utf-8-validate - "@wordpress/element@6.43.0": + "@wordpress/element@6.45.0": dependencies: "@types/react": 18.3.28 "@types/react-dom": 18.3.7(@types/react@18.3.28) - "@wordpress/escape-html": 3.43.0 + "@wordpress/escape-html": 3.45.0 change-case: 4.1.2 is-plain-object: 5.0.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - "@wordpress/escape-html@3.43.0": {} + "@wordpress/escape-html@3.45.0": {} - "@wordpress/eslint-plugin@24.5.0(@babel/core@7.25.7)(@types/eslint@9.6.1)(eslint@8.57.1)(jest@29.7.0(@types/node@25.6.0)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.9.3)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.9.3))(typescript@5.9.3)(wp-prettier@3.0.3)": + "@wordpress/eslint-plugin@25.1.0(@babel/core@7.25.7)(@types/eslint@9.6.1)(@typescript-eslint/eslint-plugin@8.59.2(@typescript-eslint/parser@8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(@typescript-eslint/parser@8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.3.0(jiti@2.7.0))(jest@29.7.0(@types/node@25.6.2)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3)))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(stylelint@16.26.1(typescript@6.0.3))(typescript@6.0.3)(wp-prettier@3.0.3)": dependencies: "@babel/core": 7.25.7 - "@babel/eslint-parser": 7.25.7(@babel/core@7.25.7)(eslint@8.57.1) - "@typescript-eslint/eslint-plugin": 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) - "@typescript-eslint/parser": 6.21.0(eslint@8.57.1)(typescript@5.9.3) - "@wordpress/babel-preset-default": 8.43.0 - "@wordpress/prettier-config": 4.43.0(wp-prettier@3.0.3) - "@wordpress/theme": 0.10.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.9.3)) + "@babel/eslint-parser": 7.28.6(@babel/core@7.25.7)(eslint@10.3.0(jiti@2.7.0)) + "@eslint-community/eslint-plugin-eslint-comments": 4.7.1(eslint@10.3.0(jiti@2.7.0)) + "@eslint/compat": 2.0.5(eslint@10.3.0(jiti@2.7.0)) + "@wordpress/babel-preset-default": 8.45.0 + "@wordpress/prettier-config": 4.45.0(wp-prettier@3.0.3) + "@wordpress/theme": 0.12.0(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(stylelint@16.26.1(typescript@6.0.3)) cosmiconfig: 7.1.0 - eslint: 8.57.1 - eslint-config-prettier: 8.10.2(eslint@8.57.1) - eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1))(eslint@8.57.1) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.4)(eslint@8.57.1) - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(jest@29.7.0(@types/node@25.6.0)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.9.3)))(typescript@5.9.3) - eslint-plugin-jsdoc: 46.10.1(eslint@8.57.1) - eslint-plugin-jsx-a11y: 6.10.2(eslint@8.57.1) - eslint-plugin-playwright: 0.15.3(eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(jest@29.7.0(@types/node@25.6.0)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.9.3)))(typescript@5.9.3))(eslint@8.57.1) - eslint-plugin-prettier: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@8.10.2(eslint@8.57.1))(eslint@8.57.1)(wp-prettier@3.0.3) - eslint-plugin-react: 7.37.5(eslint@8.57.1) - eslint-plugin-react-hooks: 4.6.2(eslint@8.57.1) - globals: 13.24.0 + eslint: 10.3.0(jiti@2.7.0) + eslint-config-prettier: 10.1.8(eslint@10.3.0(jiti@2.7.0)) + eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import@2.32.0)(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint-import-resolver-typescript@4.4.4)(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-jest: 28.14.0(@typescript-eslint/eslint-plugin@8.59.2(@typescript-eslint/parser@8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.3.0(jiti@2.7.0))(jest@29.7.0(@types/node@25.6.2)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3)))(typescript@6.0.3) + eslint-plugin-jsdoc: 50.8.0(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-jsx-a11y: 6.10.2(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-playwright: 2.10.2(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-prettier: 5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.3.0(jiti@2.7.0)))(eslint@10.3.0(jiti@2.7.0))(wp-prettier@3.0.3) + eslint-plugin-react: 7.37.5(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-react-hooks: 5.2.0(eslint@10.3.0(jiti@2.7.0)) + globals: 16.4.0 requireindex: 1.2.0 + typescript-eslint: 8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) optionalDependencies: prettier: wp-prettier@3.0.3 - typescript: 5.9.3 + typescript: 6.0.3 transitivePeerDependencies: - "@types/eslint" + - "@typescript-eslint/eslint-plugin" + - "@typescript-eslint/parser" - eslint-import-resolver-webpack - eslint-plugin-import-x - jest @@ -54001,12 +63191,12 @@ snapshots: - stylelint - supports-color - "@wordpress/global-styles-engine@1.10.0(react@18.3.1)": + "@wordpress/global-styles-engine@1.12.0(react@19.2.5)": dependencies: - "@wordpress/blocks": 15.16.0(react@18.3.1) - "@wordpress/data": 10.43.0(react@18.3.1) - "@wordpress/i18n": 6.16.0 - "@wordpress/style-engine": 2.43.0 + "@wordpress/blocks": 15.18.0(react@19.2.5) + "@wordpress/data": 10.45.0(react@19.2.5) + "@wordpress/i18n": 6.18.0 + "@wordpress/style-engine": 2.45.0 colord: 2.9.3 deepmerge: 4.3.1 fast-deep-equal: 3.1.3 @@ -54015,223 +63205,225 @@ snapshots: transitivePeerDependencies: - react - "@wordpress/hooks@4.43.0": {} + "@wordpress/hooks@4.45.0": {} - "@wordpress/html-entities@4.43.0": {} + "@wordpress/html-entities@4.45.0": {} - "@wordpress/i18n@6.16.0": + "@wordpress/i18n@6.18.0": dependencies: "@tannin/sprintf": 1.3.3 - "@wordpress/hooks": 4.43.0 + "@wordpress/hooks": 4.45.0 gettext-parser: 1.4.0 memize: 2.1.1 tannin: 1.2.0 - "@wordpress/icons@12.1.0(react@18.3.1)": + "@wordpress/icons@13.0.0(react@19.2.5)": dependencies: - "@wordpress/element": 6.43.0 - "@wordpress/primitives": 4.43.0(react@18.3.1) + "@wordpress/element": 6.45.0 + "@wordpress/primitives": 4.45.0(react@19.2.5) change-case: 4.1.2 - react: 18.3.1 + react: 19.2.5 - "@wordpress/image-cropper@1.7.0(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": + "@wordpress/image-cropper@1.9.0(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)": dependencies: - "@wordpress/components": 32.5.0(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - "@wordpress/element": 6.43.0 - "@wordpress/i18n": 6.16.0 + "@wordpress/components": 33.0.0(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + "@wordpress/element": 6.45.0 + "@wordpress/i18n": 6.18.0 clsx: 2.1.1 dequal: 2.0.3 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - react-easy-crop: 5.5.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) + react-easy-crop: 5.5.7(react-dom@19.2.5(react@19.2.5))(react@19.2.5) transitivePeerDependencies: - "@emotion/is-prop-valid" - supports-color - "@wordpress/interactivity@6.43.0": + "@wordpress/interactivity@6.45.0": dependencies: "@preact/signals": 1.3.4(preact@10.29.1) preact: 10.29.1 - "@wordpress/is-shallow-equal@5.43.0": {} + "@wordpress/is-shallow-equal@5.45.0": {} - "@wordpress/jest-console@8.43.0(jest@29.7.0(@types/node@25.6.0)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.9.3)))": + "@wordpress/jest-console@8.45.0(jest@29.7.0(@types/node@25.6.2)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3)))": dependencies: - jest: 29.7.0(@types/node@25.6.0)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.9.3)) + jest: 29.7.0(@types/node@25.6.2)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3)) jest-matcher-utils: 29.7.0 jest-mock: 29.7.0 - "@wordpress/jest-preset-default@12.43.0(@babel/core@7.25.7)(jest@29.7.0(@types/node@25.6.0)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.9.3)))": + "@wordpress/jest-preset-default@12.45.0(@babel/core@7.25.7)(jest@29.7.0(@types/node@25.6.2)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3)))": dependencies: "@babel/core": 7.25.7 - "@wordpress/jest-console": 8.43.0(jest@29.7.0(@types/node@25.6.0)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.9.3))) + "@wordpress/jest-console": 8.45.0(jest@29.7.0(@types/node@25.6.2)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3))) babel-jest: 29.7.0(@babel/core@7.25.7) - jest: 29.7.0(@types/node@25.6.0)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.9.3)) + jest: 29.7.0(@types/node@25.6.2)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3)) transitivePeerDependencies: - supports-color - "@wordpress/keyboard-shortcuts@5.43.0(react@18.3.1)": + "@wordpress/keyboard-shortcuts@5.45.0(react@19.2.5)": dependencies: - "@wordpress/data": 10.43.0(react@18.3.1) - "@wordpress/element": 6.43.0 - "@wordpress/keycodes": 4.43.0 - react: 18.3.1 + "@wordpress/data": 10.45.0(react@19.2.5) + "@wordpress/element": 6.45.0 + "@wordpress/keycodes": 4.45.0 + react: 19.2.5 - "@wordpress/keycodes@4.43.0": + "@wordpress/keycodes@4.45.0": dependencies: - "@wordpress/i18n": 6.16.0 + "@wordpress/i18n": 6.18.0 - "@wordpress/notices@5.43.0(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": + "@wordpress/notices@5.45.0(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)": dependencies: - "@wordpress/a11y": 4.43.0 - "@wordpress/components": 32.5.0(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - "@wordpress/data": 10.43.0(react@18.3.1) + "@wordpress/a11y": 4.45.0 + "@wordpress/components": 33.0.0(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + "@wordpress/data": 10.45.0(react@19.2.5) clsx: 2.1.1 - react: 18.3.1 + react: 19.2.5 transitivePeerDependencies: - "@emotion/is-prop-valid" - react-dom - supports-color - "@wordpress/npm-package-json-lint-config@5.43.0(npm-package-json-lint@6.4.0(typescript@5.9.3))": + "@wordpress/npm-package-json-lint-config@5.45.0(npm-package-json-lint@6.4.0(typescript@6.0.3))": dependencies: - npm-package-json-lint: 6.4.0(typescript@5.9.3) + npm-package-json-lint: 6.4.0(typescript@6.0.3) - "@wordpress/postcss-plugins-preset@5.43.0(postcss@8.5.9)": + "@wordpress/postcss-plugins-preset@5.45.0(postcss@8.5.9)": dependencies: - "@wordpress/base-styles": 6.19.0 + "@wordpress/base-styles": 7.0.0 autoprefixer: 10.4.27(postcss@8.5.9) postcss: 8.5.9 postcss-import: 16.1.1(postcss@8.5.9) - "@wordpress/preferences@4.43.0(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": - dependencies: - "@wordpress/a11y": 4.43.0 - "@wordpress/base-styles": 6.19.0 - "@wordpress/components": 32.5.0(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - "@wordpress/compose": 7.43.0(react@18.3.1) - "@wordpress/data": 10.43.0(react@18.3.1) - "@wordpress/deprecated": 4.43.0 - "@wordpress/element": 6.43.0 - "@wordpress/i18n": 6.16.0 - "@wordpress/icons": 12.1.0(react@18.3.1) - "@wordpress/private-apis": 1.43.0 + "@wordpress/preferences@4.45.0(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)": + dependencies: + "@wordpress/a11y": 4.45.0 + "@wordpress/base-styles": 7.0.0 + "@wordpress/components": 33.0.0(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + "@wordpress/compose": 7.45.0(react@19.2.5) + "@wordpress/data": 10.45.0(react@19.2.5) + "@wordpress/deprecated": 4.45.0 + "@wordpress/element": 6.45.0 + "@wordpress/i18n": 6.18.0 + "@wordpress/icons": 13.0.0(react@19.2.5) + "@wordpress/private-apis": 1.45.0 clsx: 2.1.1 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) transitivePeerDependencies: - "@emotion/is-prop-valid" - supports-color - "@wordpress/prettier-config@4.43.0(wp-prettier@3.0.3)": + "@wordpress/prettier-config@4.45.0(wp-prettier@3.0.3)": dependencies: prettier: wp-prettier@3.0.3 - "@wordpress/primitives@4.43.0(react@18.3.1)": + "@wordpress/primitives@4.45.0(react@19.2.5)": dependencies: - "@wordpress/element": 6.43.0 + "@wordpress/element": 6.45.0 clsx: 2.1.1 - react: 18.3.1 + react: 19.2.5 - "@wordpress/priority-queue@3.43.0": + "@wordpress/priority-queue@3.45.0": dependencies: requestidlecallback: 0.3.0 - "@wordpress/private-apis@1.43.0": {} + "@wordpress/private-apis@1.45.0": {} - "@wordpress/redux-routine@5.43.0(redux@5.0.1)": + "@wordpress/redux-routine@5.45.0(redux@5.0.1)": dependencies: is-plain-object: 5.0.0 is-promise: 4.0.0 redux: 5.0.1 rungen: 0.3.2 - "@wordpress/rich-text@7.43.0(react@18.3.1)": - dependencies: - "@wordpress/a11y": 4.43.0 - "@wordpress/compose": 7.43.0(react@18.3.1) - "@wordpress/data": 10.43.0(react@18.3.1) - "@wordpress/deprecated": 4.43.0 - "@wordpress/dom": 4.43.0 - "@wordpress/element": 6.43.0 - "@wordpress/escape-html": 3.43.0 - "@wordpress/i18n": 6.16.0 - "@wordpress/keycodes": 4.43.0 - "@wordpress/private-apis": 1.43.0 + "@wordpress/rich-text@7.45.0(react@19.2.5)": + dependencies: + "@wordpress/a11y": 4.45.0 + "@wordpress/compose": 7.45.0(react@19.2.5) + "@wordpress/data": 10.45.0(react@19.2.5) + "@wordpress/deprecated": 4.45.0 + "@wordpress/dom": 4.45.0 + "@wordpress/element": 6.45.0 + "@wordpress/escape-html": 3.45.0 + "@wordpress/i18n": 6.18.0 + "@wordpress/keycodes": 4.45.0 + "@wordpress/private-apis": 1.45.0 colord: 2.9.3 memize: 2.1.1 - react: 18.3.1 + react: 19.2.5 - "@wordpress/scripts@31.8.0(@playwright/test@1.59.1)(@swc/core@1.15.26)(@types/eslint@9.6.1)(@types/node@25.6.0)(@types/webpack@4.41.40)(babel-plugin-macros@3.1.0)(canvas@3.2.3)(file-loader@6.2.0(webpack@5.106.1))(node-notifier@10.0.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint-scss@6.14.0(stylelint@16.26.1(typescript@5.9.3)))(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.9.3))(type-fest@4.41.0)(typescript@5.9.3)(webpack-hot-middleware@2.26.1)": + "@wordpress/scripts@32.1.0(@playwright/test@1.59.1)(@swc/core@1.15.33)(@types/eslint@9.6.1)(@types/node@25.6.2)(@types/webpack@4.41.40)(@typescript-eslint/eslint-plugin@8.59.2(@typescript-eslint/parser@8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(@typescript-eslint/parser@8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(babel-plugin-macros@3.1.0)(canvas@3.2.3)(file-loader@6.2.0(webpack@5.106.2))(jiti@2.7.0)(node-notifier@10.0.1)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(stylelint-scss@6.14.0(stylelint@16.26.1(typescript@6.0.3)))(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3))(type-fest@4.41.0)(typescript@6.0.3)(webpack-hot-middleware@2.26.1)": dependencies: "@babel/core": 7.25.7 "@playwright/test": 1.59.1 - "@pmmmwh/react-refresh-webpack-plugin": 0.5.17(@types/webpack@4.41.40)(react-refresh@0.14.2)(type-fest@4.41.0)(webpack-dev-server@4.15.2)(webpack-hot-middleware@2.26.1)(webpack@5.106.1) - "@svgr/webpack": 8.1.0(typescript@5.9.3) - "@wordpress/babel-preset-default": 8.43.0 - "@wordpress/browserslist-config": 6.43.0 - "@wordpress/dependency-extraction-webpack-plugin": 6.43.0(webpack@5.106.1) - "@wordpress/e2e-test-utils-playwright": 1.43.0(@playwright/test@1.59.1)(@types/node@25.6.0) - "@wordpress/eslint-plugin": 24.5.0(@babel/core@7.25.7)(@types/eslint@9.6.1)(eslint@8.57.1)(jest@29.7.0(@types/node@25.6.0)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.9.3)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.9.3))(typescript@5.9.3)(wp-prettier@3.0.3) - "@wordpress/jest-preset-default": 12.43.0(@babel/core@7.25.7)(jest@29.7.0(@types/node@25.6.0)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.9.3))) - "@wordpress/npm-package-json-lint-config": 5.43.0(npm-package-json-lint@6.4.0(typescript@5.9.3)) - "@wordpress/postcss-plugins-preset": 5.43.0(postcss@8.5.9) - "@wordpress/prettier-config": 4.43.0(wp-prettier@3.0.3) - "@wordpress/stylelint-config": 23.35.0(postcss@8.5.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint-scss@6.14.0(stylelint@16.26.1(typescript@5.9.3)))(stylelint@16.26.1(typescript@5.9.3)) + "@pmmmwh/react-refresh-webpack-plugin": 0.5.17(@types/webpack@4.41.40)(react-refresh@0.14.2)(type-fest@4.41.0)(webpack-dev-server@4.15.2)(webpack-hot-middleware@2.26.1)(webpack@5.106.2) + "@svgr/webpack": 8.1.0(typescript@6.0.3) + "@wordpress/babel-preset-default": 8.45.0 + "@wordpress/browserslist-config": 6.45.0 + "@wordpress/dependency-extraction-webpack-plugin": 6.45.0(webpack@5.106.2) + "@wordpress/e2e-test-utils-playwright": 1.45.0(@playwright/test@1.59.1)(@types/node@25.6.2) + "@wordpress/eslint-plugin": 25.1.0(@babel/core@7.25.7)(@types/eslint@9.6.1)(@typescript-eslint/eslint-plugin@8.59.2(@typescript-eslint/parser@8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(@typescript-eslint/parser@8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.3.0(jiti@2.7.0))(jest@29.7.0(@types/node@25.6.2)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3)))(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(stylelint@16.26.1(typescript@6.0.3))(typescript@6.0.3)(wp-prettier@3.0.3) + "@wordpress/jest-preset-default": 12.45.0(@babel/core@7.25.7)(jest@29.7.0(@types/node@25.6.2)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3))) + "@wordpress/npm-package-json-lint-config": 5.45.0(npm-package-json-lint@6.4.0(typescript@6.0.3)) + "@wordpress/postcss-plugins-preset": 5.45.0(postcss@8.5.9) + "@wordpress/prettier-config": 4.45.0(wp-prettier@3.0.3) + "@wordpress/stylelint-config": 23.37.0(postcss@8.5.9)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(stylelint-scss@6.14.0(stylelint@16.26.1(typescript@6.0.3)))(stylelint@16.26.1(typescript@6.0.3)) adm-zip: 0.5.17 babel-jest: 29.7.0(@babel/core@7.25.7) - babel-loader: 9.2.1(@babel/core@7.25.7)(webpack@5.106.1) + babel-loader: 9.2.1(@babel/core@7.25.7)(webpack@5.106.2) browserslist: 4.28.2 chalk: 4.1.2 check-node-version: 4.2.1 - copy-webpack-plugin: 10.2.4(webpack@5.106.1) + copy-webpack-plugin: 10.2.4(webpack@5.106.2) cross-spawn: 7.0.6 - css-loader: 6.11.0(webpack@5.106.1) + css-loader: 6.11.0(webpack@5.106.2) cssnano: 6.1.2(postcss@8.5.9) cwd: 0.10.0 dir-glob: 3.0.1 - eslint: 8.57.1 + eslint: 10.3.0(jiti@2.7.0) expect-puppeteer: 4.4.0 fast-glob: 3.3.3 filenamify: 4.3.0 - jest: 29.7.0(@types/node@25.6.0)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.9.3)) + jest: 29.7.0(@types/node@25.6.2)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3)) jest-dev-server: 10.1.4 jest-environment-jsdom: 30.3.0(canvas@3.2.3) jest-environment-node: 29.7.0 json2php: 0.0.9 markdownlint-cli: 0.31.1 merge-deep: 3.0.3 - mini-css-extract-plugin: 2.10.2(webpack@5.106.1) + mini-css-extract-plugin: 2.10.2(webpack@5.106.2) minimist: 1.2.8 - npm-package-json-lint: 6.4.0(typescript@5.9.3) + npm-package-json-lint: 6.4.0(typescript@6.0.3) npm-packlist: 3.0.0 postcss: 8.5.9 - postcss-loader: 6.2.1(postcss@8.5.9)(webpack@5.106.1) + postcss-loader: 6.2.1(postcss@8.5.9)(webpack@5.106.2) prettier: wp-prettier@3.0.3 puppeteer-core: 23.11.1 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) react-refresh: 0.14.2 read-pkg-up: 7.0.1 resolve-bin: 0.4.3 rtlcss: 4.3.0 sass: 1.99.0 - sass-loader: 16.0.7(sass@1.99.0)(webpack@5.106.1) + sass-loader: 16.0.7(sass@1.99.0)(webpack@5.106.2) schema-utils: 4.3.3 - source-map-loader: 3.0.2(webpack@5.106.1) - stylelint: 16.26.1(typescript@5.9.3) - terser-webpack-plugin: 5.4.0(@swc/core@1.15.26)(webpack@5.106.1) - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.106.1))(webpack@5.106.1) - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2) + source-map-loader: 3.0.2(webpack@5.106.2) + stylelint: 16.26.1(typescript@6.0.3) + terser-webpack-plugin: 5.5.0(@swc/core@1.15.33)(webpack@5.106.2) + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.106.2))(webpack@5.106.2) + webpack: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) webpack-bundle-analyzer: 4.10.2 - webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@4.15.2)(webpack@5.106.1) - webpack-dev-server: 4.15.2(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))(webpack@5.106.1) + webpack-cli: 5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@4.15.2)(webpack@5.106.2) + webpack-dev-server: 4.15.2(debug@4.4.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))(webpack@5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2)) transitivePeerDependencies: - "@rspack/core" - "@swc/core" - "@types/eslint" - "@types/node" - "@types/webpack" + - "@typescript-eslint/eslint-plugin" + - "@typescript-eslint/parser" - "@webpack-cli/generators" - babel-plugin-macros - bare-abort-controller @@ -54243,6 +63435,7 @@ snapshots: - eslint-import-resolver-webpack - eslint-plugin-import-x - file-loader + - jiti - node-notifier - node-sass - react-native-b4a @@ -54258,55 +63451,55 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - "@wordpress/shortcode@4.43.0": + "@wordpress/shortcode@4.45.0": dependencies: memize: 2.1.1 - "@wordpress/style-engine@2.43.0": + "@wordpress/style-engine@2.45.0": dependencies: change-case: 4.1.2 - "@wordpress/stylelint-config@23.35.0(postcss@8.5.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint-scss@6.14.0(stylelint@16.26.1(typescript@5.9.3)))(stylelint@16.26.1(typescript@5.9.3))": + "@wordpress/stylelint-config@23.37.0(postcss@8.5.9)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(stylelint-scss@6.14.0(stylelint@16.26.1(typescript@6.0.3)))(stylelint@16.26.1(typescript@6.0.3))": dependencies: - "@stylistic/stylelint-plugin": 3.1.3(stylelint@16.26.1(typescript@5.9.3)) - "@wordpress/theme": 0.10.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.9.3)) - stylelint: 16.26.1(typescript@5.9.3) - stylelint-config-recommended: 14.0.1(stylelint@16.26.1(typescript@5.9.3)) - stylelint-config-recommended-scss: 14.1.0(postcss@8.5.9)(stylelint@16.26.1(typescript@5.9.3)) - stylelint-scss: 6.14.0(stylelint@16.26.1(typescript@5.9.3)) + "@stylistic/stylelint-plugin": 3.1.3(stylelint@16.26.1(typescript@6.0.3)) + "@wordpress/theme": 0.12.0(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(stylelint@16.26.1(typescript@6.0.3)) + stylelint: 16.26.1(typescript@6.0.3) + stylelint-config-recommended: 14.0.1(stylelint@16.26.1(typescript@6.0.3)) + stylelint-config-recommended-scss: 14.1.0(postcss@8.5.9)(stylelint@16.26.1(typescript@6.0.3)) + stylelint-scss: 6.14.0(stylelint@16.26.1(typescript@6.0.3)) transitivePeerDependencies: - postcss - react - react-dom - "@wordpress/theme@0.10.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.9.3))": + "@wordpress/theme@0.12.0(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(stylelint@16.26.1(typescript@6.0.3))": dependencies: - "@wordpress/element": 6.43.0 - "@wordpress/private-apis": 1.43.0 + "@wordpress/element": 6.45.0 + "@wordpress/private-apis": 1.45.0 colorjs.io: 0.6.1 memize: 2.1.1 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) optionalDependencies: - stylelint: 16.26.1(typescript@5.9.3) - - "@wordpress/token-list@3.43.0": {} - - "@wordpress/ui@0.10.0(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.9.3))": - dependencies: - "@base-ui/react": 1.4.0(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - "@wordpress/a11y": 4.43.0 - "@wordpress/compose": 7.43.0(react@18.3.1) - "@wordpress/element": 6.43.0 - "@wordpress/i18n": 6.16.0 - "@wordpress/icons": 12.1.0(react@18.3.1) - "@wordpress/keycodes": 4.43.0 - "@wordpress/primitives": 4.43.0(react@18.3.1) - "@wordpress/private-apis": 1.43.0 - "@wordpress/theme": 0.10.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(stylelint@16.26.1(typescript@5.9.3)) + stylelint: 16.26.1(typescript@6.0.3) + + "@wordpress/token-list@3.45.0": {} + + "@wordpress/ui@0.12.0(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(stylelint@16.26.1(typescript@6.0.3))": + dependencies: + "@base-ui/react": 1.4.1(@date-fns/tz@1.4.1)(@types/react@18.3.28)(date-fns@4.1.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + "@wordpress/a11y": 4.45.0 + "@wordpress/compose": 7.45.0(react@19.2.5) + "@wordpress/element": 6.45.0 + "@wordpress/i18n": 6.18.0 + "@wordpress/icons": 13.0.0(react@19.2.5) + "@wordpress/keycodes": 4.45.0 + "@wordpress/primitives": 4.45.0(react@19.2.5) + "@wordpress/private-apis": 1.45.0 + "@wordpress/theme": 0.12.0(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(stylelint@16.26.1(typescript@6.0.3)) clsx: 2.1.1 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) tabbable: 6.4.0 transitivePeerDependencies: - "@date-fns/tz" @@ -54314,48 +63507,48 @@ snapshots: - date-fns - stylelint - "@wordpress/undo-manager@1.43.0": + "@wordpress/undo-manager@1.45.0": dependencies: - "@wordpress/is-shallow-equal": 5.43.0 + "@wordpress/is-shallow-equal": 5.45.0 - "@wordpress/upload-media@0.28.0(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)": + "@wordpress/upload-media@0.30.0(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)": dependencies: - "@wordpress/blob": 4.43.0 - "@wordpress/compose": 7.43.0(react@18.3.1) - "@wordpress/data": 10.43.0(react@18.3.1) - "@wordpress/element": 6.43.0 - "@wordpress/i18n": 6.16.0 - "@wordpress/preferences": 4.43.0(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - "@wordpress/private-apis": 1.43.0 - "@wordpress/url": 4.43.0 - "@wordpress/vips": 1.3.0 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + "@wordpress/blob": 4.45.0 + "@wordpress/compose": 7.45.0(react@19.2.5) + "@wordpress/data": 10.45.0(react@19.2.5) + "@wordpress/element": 6.45.0 + "@wordpress/i18n": 6.18.0 + "@wordpress/preferences": 4.45.0(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + "@wordpress/private-apis": 1.45.0 + "@wordpress/url": 4.45.0 + "@wordpress/vips": 1.5.0 + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) uuid: 9.0.1 transitivePeerDependencies: - "@emotion/is-prop-valid" - supports-color - "@wordpress/url@4.43.0": + "@wordpress/url@4.45.0": dependencies: remove-accents: 0.5.0 - "@wordpress/vips@1.3.0": + "@wordpress/vips@1.5.0": dependencies: - "@wordpress/worker-threads": 1.3.0 + "@wordpress/worker-threads": 1.5.0 wasm-vips: 0.0.16 - "@wordpress/warning@3.43.0": {} + "@wordpress/warning@3.45.0": {} - "@wordpress/wordcount@4.43.0": {} + "@wordpress/wordcount@4.45.0": {} - "@wordpress/worker-threads@1.3.0": + "@wordpress/worker-threads@1.5.0": dependencies: comctx: 1.6.1 "@xmldom/xmldom@0.8.12": {} - "@xmldom/xmldom@0.9.9": {} + "@xmldom/xmldom@0.9.10": {} "@xtuc/ieee754@1.2.0": {} @@ -54363,11 +63556,6 @@ snapshots: "@yarnpkg/lockfile@1.1.0": {} - "@yarnpkg/parsers@3.0.2": - dependencies: - js-yaml: 3.14.1 - tslib: 2.8.1 - "@zkochan/js-yaml@0.0.7": dependencies: argparse: 2.0.1 @@ -54891,7 +64079,7 @@ snapshots: astral-regex@2.0.0: {} - astro@6.1.6(@types/node@25.6.0)(db0@0.3.4)(ioredis@5.10.1)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(rollup@4.60.1)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(typescript@5.9.3)(yaml@2.8.3): + astro@6.1.6(@types/node@25.6.2)(db0@0.3.4)(ioredis@5.10.1)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(rollup@4.60.3)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(typescript@5.9.3)(yaml@2.8.3): dependencies: "@astrojs/compiler": 3.0.1 "@astrojs/internal-helpers": 0.8.0 @@ -54900,7 +64088,7 @@ snapshots: "@capsizecss/unpack": 4.0.0 "@clack/prompts": 1.2.0 "@oslojs/encoding": 1.1.0 - "@rollup/pluginutils": 5.3.0(rollup@4.60.1) + "@rollup/pluginutils": 5.3.0(rollup@4.60.3) aria-query: 5.3.2 axobject-query: 4.1.0 ci-info: 4.4.0 @@ -54942,8 +64130,8 @@ snapshots: unist-util-visit: 5.1.0 unstorage: 1.17.5(db0@0.3.4)(ioredis@5.10.1) vfile: 6.0.3 - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) - vitefu: 1.1.3(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) + vite: 7.3.2(@types/node@25.6.2)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + vitefu: 1.1.3(vite@7.3.2(@types/node@25.6.2)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) xxhash-wasm: 1.1.0 yargs-parser: 22.0.0 zod: 4.3.6 @@ -54984,6 +64172,99 @@ snapshots: - uploadthing - yaml + astro@6.2.2(@types/node@25.6.2)(db0@0.3.4)(ioredis@5.10.1)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(rollup@4.60.3)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3): + dependencies: + "@astrojs/compiler": 4.0.0 + "@astrojs/internal-helpers": 0.9.0 + "@astrojs/markdown-remark": 7.1.1 + "@astrojs/telemetry": 3.3.1 + "@capsizecss/unpack": 4.0.0 + "@clack/prompts": 1.2.0 + "@oslojs/encoding": 1.1.0 + "@rollup/pluginutils": 5.3.0(rollup@4.60.3) + aria-query: 5.3.2 + axobject-query: 4.1.0 + ci-info: 4.4.0 + clsx: 2.1.1 + common-ancestor-path: 2.0.0 + cookie: 1.1.1 + devalue: 5.7.1 + diff: 8.0.4 + dset: 3.1.4 + es-module-lexer: 2.0.0 + esbuild: 0.27.7 + flattie: 1.1.1 + fontace: 0.4.1 + get-tsconfig: 5.0.0-beta.4 + github-slugger: 2.0.0 + html-escaper: 3.0.3 + http-cache-semantics: 4.2.0 + js-yaml: 4.1.1 + jsonc-parser: 3.3.1 + magic-string: 0.30.21 + magicast: 0.5.2 + mrmime: 2.0.1 + neotraverse: 0.6.18 + obug: 2.1.1 + p-limit: 7.3.0 + p-queue: 9.1.2 + package-manager-detector: 1.6.0 + piccolore: 0.1.3 + picomatch: 4.0.4 + rehype: 13.0.2 + semver: 7.7.4 + shiki: 4.0.2 + smol-toml: 1.6.1 + svgo: 4.0.1 + tinyclip: 0.1.12 + tinyexec: 1.1.1 + tinyglobby: 0.2.16 + ultrahtml: 1.6.0 + unifont: 0.7.4 + unist-util-visit: 5.1.0 + unstorage: 1.17.5(db0@0.3.4)(ioredis@5.10.1) + vfile: 6.0.3 + vite: 7.3.2(@types/node@25.6.2)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + vitefu: 1.1.3(vite@7.3.2(@types/node@25.6.2)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) + xxhash-wasm: 1.1.0 + yargs-parser: 22.0.0 + zod: 4.3.6 + optionalDependencies: + sharp: 0.34.5 + transitivePeerDependencies: + - "@azure/app-configuration" + - "@azure/cosmos" + - "@azure/data-tables" + - "@azure/identity" + - "@azure/keyvault-secrets" + - "@azure/storage-blob" + - "@capacitor/preferences" + - "@deno/kv" + - "@netlify/blobs" + - "@planetscale/database" + - "@types/node" + - "@upstash/redis" + - "@vercel/blob" + - "@vercel/functions" + - "@vercel/kv" + - aws4fetch + - db0 + - idb-keyval + - ioredis + - jiti + - less + - lightningcss + - rollup + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - uploadthing + - yaml + async-disk-cache@1.3.5: dependencies: debug: 2.6.9 @@ -55053,6 +64334,8 @@ snapshots: stubborn-fs: 2.0.0 when-exit: 2.1.5 + author-regex@1.0.0: {} + autoprefixer@10.4.27(postcss@8.5.6): dependencies: browserslist: 4.28.2 @@ -55115,23 +64398,23 @@ snapshots: esutils: 2.0.3 js-tokens: 3.0.2 - babel-eslint@10.1.0(eslint@10.2.0(jiti@2.6.1)): + babel-eslint@10.1.0(eslint@10.2.0(jiti@2.7.0)): dependencies: "@babel/code-frame": 7.29.0 "@babel/parser": 7.29.2 "@babel/traverse": 7.29.0 "@babel/types": 7.29.0 - eslint: 10.2.0(jiti@2.6.1) + eslint: 10.2.0(jiti@2.7.0) eslint-visitor-keys: 1.3.0 resolve: 1.22.12 transitivePeerDependencies: - supports-color - babel-esm-plugin@0.9.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + babel-esm-plugin@0.9.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: chalk: 2.4.1 deepcopy: 1.0.0 - webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) babel-helper-builder-binary-assignment-operator-visitor@6.24.1: dependencies: @@ -55249,50 +64532,66 @@ snapshots: transitivePeerDependencies: - supports-color - babel-loader@10.0.0(@babel/core@7.29.0)(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + babel-loader@10.0.0(@babel/core@7.29.0)(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: "@babel/core": 7.29.0 find-up: 5.0.0 - webpack: 5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) babel-loader@10.1.1(@babel/core@7.29.0)(webpack@5.106.1): dependencies: "@babel/core": 7.29.0 find-up: 5.0.0 optionalDependencies: - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2) + webpack: 5.106.1(@swc/core@1.15.33)(webpack-cli@7.0.2) + + babel-loader@10.1.1(@babel/core@7.29.0)(webpack@5.106.2): + dependencies: + "@babel/core": 7.29.0 + find-up: 5.0.0 + optionalDependencies: + webpack: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) + + babel-loader@8.4.1(@babel/core@7.29.0)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): + dependencies: + "@babel/core": 7.29.0 + find-cache-dir: 3.3.2 + loader-utils: 2.0.4 + make-dir: 3.1.0 + schema-utils: 2.7.1 + webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) - babel-loader@8.4.1(@babel/core@7.29.0)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + babel-loader@8.4.1(@babel/core@7.29.0)(webpack@5.106.1(@swc/core@1.15.33)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: "@babel/core": 7.29.0 find-cache-dir: 3.3.2 loader-utils: 2.0.4 make-dir: 3.1.0 schema-utils: 2.7.1 - webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 5.106.1(@swc/core@1.15.33)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) - babel-loader@8.4.1(@babel/core@7.29.0)(webpack@5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2)): + babel-loader@8.4.1(@babel/core@7.29.0)(webpack@5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2)): dependencies: "@babel/core": 7.29.0 find-cache-dir: 3.3.2 loader-utils: 2.0.4 make-dir: 3.1.0 schema-utils: 2.7.1 - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2) + webpack: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) - babel-loader@9.2.1(@babel/core@7.25.7)(webpack@5.106.1): + babel-loader@9.2.1(@babel/core@7.25.7)(webpack@5.106.2): dependencies: "@babel/core": 7.25.7 find-cache-dir: 4.0.0 schema-utils: 4.3.3 - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2) + webpack: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) babel-loader@9.2.1(@babel/core@7.29.0)(webpack@5.106.1): dependencies: "@babel/core": 7.29.0 find-cache-dir: 4.0.0 schema-utils: 4.3.3 - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@5.1.4) + webpack: 5.106.1(@swc/core@1.15.33)(webpack-cli@5.1.4) babel-messages@6.23.0: dependencies: @@ -55302,6 +64601,15 @@ snapshots: dependencies: babel-runtime: 6.26.0 + babel-plugin-const-enum@1.2.0(@babel/core@7.29.0): + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-plugin-utils": 7.28.6 + "@babel/plugin-syntax-typescript": 7.28.6(@babel/core@7.29.0) + "@babel/traverse": 7.29.0 + transitivePeerDependencies: + - supports-color + babel-plugin-debug-macros@0.2.0(@babel/core@7.29.0): dependencies: "@babel/core": 7.29.0 @@ -55636,6 +64944,13 @@ snapshots: babel-runtime: 6.26.0 babel-types: 6.26.0 + babel-plugin-transform-typescript-metadata@0.3.2(@babel/core@7.29.0)(@babel/traverse@7.29.0): + dependencies: + "@babel/core": 7.29.0 + "@babel/helper-plugin-utils": 7.28.6 + optionalDependencies: + "@babel/traverse": 7.29.0 + babel-preset-current-node-syntax@1.2.0(@babel/core@7.25.7): dependencies: "@babel/core": 7.25.7 @@ -55801,6 +65116,8 @@ snapshots: balanced-match@2.0.0: {} + balanced-match@4.0.3: {} + balanced-match@4.0.4: {} bare-events@2.8.2: {} @@ -55886,9 +65203,9 @@ snapshots: domhandler: 5.0.3 htmlparser2: 10.1.0 picocolors: 1.1.1 - postcss: 8.5.6 + postcss: 8.5.14 postcss-media-query-parser: 0.2.3 - postcss-safe-parser: 7.0.1(postcss@8.5.6) + postcss-safe-parser: 7.0.1(postcss@8.5.14) before-after-hook@2.2.3: {} @@ -56047,11 +65364,6 @@ snapshots: dependencies: big-integer: 1.6.52 - brace-expansion@1.1.11: - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - brace-expansion@1.1.14: dependencies: balanced-match: 1.0.2 @@ -56061,6 +65373,10 @@ snapshots: dependencies: balanced-match: 1.0.2 + brace-expansion@5.0.2: + dependencies: + balanced-match: 4.0.4 + brace-expansion@5.0.5: dependencies: balanced-match: 4.0.4 @@ -56269,7 +65585,7 @@ snapshots: broccoli-middleware@2.1.1: dependencies: ansi-html: 0.0.7 - handlebars: 4.7.7 + handlebars: 4.7.9 has-ansi: 3.0.0 mime-types: 2.1.35 @@ -56591,7 +65907,7 @@ snapshots: chokidar: 5.0.0 confbox: 0.2.4 defu: 6.1.7 - dotenv: 17.4.1 + dotenv: 17.4.2 exsolve: 1.0.8 giget: 3.2.0 jiti: 2.6.1 @@ -56684,20 +66000,6 @@ snapshots: tar: 6.2.1 unique-filename: 3.0.0 - cacache@20.0.3: - dependencies: - "@npmcli/fs": 5.0.0 - fs-minipass: 3.0.3 - glob: 13.0.6 - lru-cache: 11.3.2 - minipass: 7.1.3 - minipass-collect: 2.0.1 - minipass-flush: 1.0.5 - minipass-pipeline: 1.2.4 - p-map: 7.0.4 - ssri: 13.0.1 - unique-filename: 5.0.0 - cacache@20.0.4: dependencies: "@npmcli/fs": 5.0.0 @@ -56728,7 +66030,7 @@ snapshots: mime-types: 2.1.35 ylru: 1.4.0 - cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: buffer-json: 2.0.0 find-cache-dir: 3.3.2 @@ -56736,7 +66038,7 @@ snapshots: mkdirp: 0.5.6 neo-async: 2.6.2 schema-utils: 2.7.1 - webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) cacheable-lookup@5.0.4: {} @@ -57085,9 +66387,15 @@ snapshots: mitt: 3.0.1 zod: 3.23.8 - chromium-bidi@14.0.0(devtools-protocol@0.0.1581282): + chromium-bidi@14.0.0(devtools-protocol@0.0.1595872): + dependencies: + devtools-protocol: 0.0.1595872 + mitt: 3.0.1 + zod: 3.25.76 + + chromium-bidi@14.0.0(devtools-protocol@0.0.1608973): dependencies: - devtools-protocol: 0.0.1581282 + devtools-protocol: 0.0.1608973 mitt: 3.0.1 zod: 3.25.76 @@ -57095,8 +66403,6 @@ snapshots: ci-info@2.0.0: {} - ci-info@3.8.0: {} - ci-info@3.9.0: {} ci-info@4.3.1: {} @@ -57145,7 +66451,12 @@ snapshots: clean-webpack-plugin@4.0.0(webpack@5.106.1): dependencies: del: 4.1.1 - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@5.1.4) + webpack: 5.106.1(@swc/core@1.15.33)(webpack-cli@5.1.4) + + clean-webpack-plugin@4.0.0(webpack@5.106.2): + dependencies: + del: 4.1.1 + webpack: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) cli-boxes@2.2.1: {} @@ -57174,8 +66485,6 @@ snapshots: cli-spinners@2.6.1: {} - cli-spinners@2.9.0: {} - cli-spinners@2.9.2: {} cli-spinners@3.4.0: {} @@ -57254,8 +66563,8 @@ snapshots: cliui@9.0.1: dependencies: string-width: 7.2.0 - strip-ansi: 7.1.0 - wrap-ansi: 9.0.0 + strip-ansi: 7.2.0 + wrap-ansi: 9.0.2 clone-deep@0.2.4: dependencies: @@ -57287,14 +66596,14 @@ snapshots: cmd-shim@7.0.0: {} - cmdk@1.1.1(@types/react-dom@19.2.3(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + cmdk@1.1.1(@types/react-dom@19.2.3(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@19.2.5(react@19.2.5))(react@19.2.5): dependencies: - "@radix-ui/react-compose-refs": 1.1.2(@types/react@18.3.28)(react@18.3.1) - "@radix-ui/react-dialog": 1.1.15(@types/react-dom@19.2.3(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - "@radix-ui/react-id": 1.1.1(@types/react@18.3.28)(react@18.3.1) - "@radix-ui/react-primitive": 2.1.4(@types/react-dom@19.2.3(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + "@radix-ui/react-compose-refs": 1.1.2(@types/react@18.3.28)(react@19.2.5) + "@radix-ui/react-dialog": 1.1.15(@types/react-dom@19.2.3(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + "@radix-ui/react-id": 1.1.1(@types/react@18.3.28)(react@19.2.5) + "@radix-ui/react-primitive": 2.1.4(@types/react-dom@19.2.3(@types/react@18.3.28))(@types/react@18.3.28)(react-dom@19.2.5(react@19.2.5))(react@19.2.5) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) transitivePeerDependencies: - "@types/react" - "@types/react-dom" @@ -57320,7 +66629,7 @@ snapshots: code-red@1.0.4: dependencies: "@jridgewell/sourcemap-codec": 1.5.5 - "@types/estree": 1.0.8 + "@types/estree": 1.0.9 acorn: 8.16.0 estree-walker: 3.0.3 periscopic: 3.1.0 @@ -57447,6 +66756,8 @@ snapshots: commander@9.0.0: {} + commander@9.5.0: {} + comment-parser@1.4.1: {} comment-parser@1.4.6: {} @@ -57490,13 +66801,13 @@ snapshots: dependencies: mime-db: 1.54.0 - compression-webpack-plugin@6.1.2(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + compression-webpack-plugin@6.1.2(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: cacache: 15.3.0 find-cache-dir: 3.3.2 schema-utils: 3.3.0 serialize-javascript: 5.0.1 - webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) webpack-sources: 1.4.3 transitivePeerDependencies: - bluebird @@ -57664,27 +66975,27 @@ snapshots: conventional-changelog-core@5.0.1: dependencies: add-stream: 1.0.0 - conventional-changelog-writer: 6.0.0 + conventional-changelog-writer: 6.0.1 conventional-commits-parser: 4.0.0 dateformat: 3.0.3 get-pkg-repo: 4.2.1 git-raw-commits: 3.0.0 git-remote-origin-url: 2.0.0 - git-semver-tags: 5.0.0 + git-semver-tags: 5.0.1 normalize-package-data: 3.0.3 read-pkg: 3.0.0 read-pkg-up: 3.0.0 conventional-changelog-preset-loader@3.0.0: {} - conventional-changelog-writer@6.0.0: + conventional-changelog-writer@6.0.1: dependencies: conventional-commits-filter: 3.0.0 dateformat: 3.0.3 - handlebars: 4.7.7 + handlebars: 4.7.9 json-stringify-safe: 5.0.1 meow: 8.1.2 - semver: 6.3.1 + semver: 7.7.4 split: 1.0.1 conventional-commits-filter@3.0.0: @@ -57711,7 +67022,7 @@ snapshots: conventional-commits-filter: 3.0.0 conventional-commits-parser: 4.0.0 git-raw-commits: 3.0.0 - git-semver-tags: 5.0.0 + git-semver-tags: 5.0.1 meow: 8.1.2 convert-source-map@1.9.0: {} @@ -57751,6 +67062,10 @@ snapshots: dependencies: is-what: 4.1.16 + copy-anything@4.0.5: + dependencies: + is-what: 5.5.0 + copy-concurrently@1.0.5: dependencies: aproba: 1.2.0 @@ -57769,7 +67084,7 @@ snapshots: each-props: 3.0.0 is-plain-object: 5.0.0 - copy-webpack-plugin@10.2.4(webpack@5.106.1): + copy-webpack-plugin@10.2.4(webpack@5.106.2): dependencies: fast-glob: 3.3.3 glob-parent: 6.0.2 @@ -57777,18 +67092,18 @@ snapshots: normalize-path: 3.0.0 schema-utils: 4.3.3 serialize-javascript: 6.0.2 - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2) + webpack: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) - copy-webpack-plugin@14.0.0(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + copy-webpack-plugin@14.0.0(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: glob-parent: 6.0.2 normalize-path: 3.0.0 schema-utils: 4.3.3 serialize-javascript: 7.0.5 tinyglobby: 0.2.16 - webpack: 5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) - copy-webpack-plugin@6.4.1(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + copy-webpack-plugin@6.4.1(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: cacache: 15.3.0 fast-glob: 3.3.3 @@ -57800,12 +67115,12 @@ snapshots: p-limit: 3.1.0 schema-utils: 3.3.0 serialize-javascript: 5.0.1 - webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) webpack-sources: 1.4.3 transitivePeerDependencies: - bluebird - copy-webpack-plugin@9.1.0(webpack@5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2)): + copy-webpack-plugin@9.1.0(webpack@5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2)): dependencies: fast-glob: 3.3.3 glob-parent: 6.0.2 @@ -57813,7 +67128,7 @@ snapshots: normalize-path: 3.0.0 schema-utils: 3.3.0 serialize-javascript: 6.0.2 - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2) + webpack: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) copyfiles@2.4.1: dependencies: @@ -57850,12 +67165,12 @@ snapshots: object-assign: 4.1.1 vary: 1.1.2 - cosmiconfig-typescript-loader@6.1.0(@types/node@25.6.0)(cosmiconfig@9.0.1(typescript@6.0.2))(typescript@6.0.2): + cosmiconfig-typescript-loader@6.1.0(@types/node@25.6.2)(cosmiconfig@9.0.1(typescript@6.0.3))(typescript@6.0.3): dependencies: - "@types/node": 25.6.0 - cosmiconfig: 9.0.1(typescript@6.0.2) - jiti: 2.6.1 - typescript: 6.0.2 + "@types/node": 25.6.2 + cosmiconfig: 9.0.1(typescript@6.0.3) + jiti: 2.7.0 + typescript: 6.0.3 cosmiconfig@5.2.1: dependencies: @@ -57880,14 +67195,14 @@ snapshots: path-type: 4.0.0 yaml: 1.10.3 - cosmiconfig@8.3.6(typescript@5.9.3): + cosmiconfig@8.3.6(typescript@6.0.3): dependencies: import-fresh: 3.3.0 js-yaml: 4.1.1 parse-json: 5.2.0 path-type: 4.0.0 optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.3 cosmiconfig@9.0.0(typescript@5.9.3): dependencies: @@ -57916,6 +67231,27 @@ snapshots: optionalDependencies: typescript: 6.0.2 + cosmiconfig@9.0.1(typescript@6.0.3): + dependencies: + env-paths: 2.2.1 + import-fresh: 3.3.0 + js-yaml: 4.1.1 + parse-json: 5.2.0 + optionalDependencies: + typescript: 6.0.3 + + cpx2@8.0.2: + dependencies: + debounce: 3.0.0 + glob: 13.0.6 + glob2base: 0.0.12 + ignore: 7.0.5 + minimatch: 10.2.5 + p-map: 7.0.4 + resolve: 1.22.12 + shell-quote: 1.8.3 + subarg: 1.0.0 + crc-32@1.2.2: {} crc32-stream@6.0.0: @@ -57949,13 +67285,13 @@ snapshots: safe-buffer: 5.2.1 sha.js: 2.4.12 - create-jest@29.7.0(@types/node@25.6.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.9.3)): + create-jest@29.7.0(@types/node@25.6.2)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3)): dependencies: "@jest/types": 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@25.6.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.9.3)) + jest-config: 29.7.0(@types/node@25.6.2)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -57966,7 +67302,7 @@ snapshots: create-require@1.1.1: {} - critters-webpack-plugin@2.5.0(html-webpack-plugin@3.2.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)))): + critters-webpack-plugin@2.5.0(html-webpack-plugin@3.2.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)))): dependencies: css: 2.2.4 cssnano: 4.1.11 @@ -57978,7 +67314,7 @@ snapshots: webpack-log: 2.0.0 webpack-sources: 1.4.3 optionalDependencies: - html-webpack-plugin: 3.2.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + html-webpack-plugin: 3.2.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) transitivePeerDependencies: - bufferutil - utf-8-validate @@ -58076,7 +67412,7 @@ snapshots: postcss-selector-parser: 6.1.2 postcss-value-parser: 4.2.0 - css-loader@5.2.7(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + css-loader@5.2.7(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: icss-utils: 5.1.0(postcss@8.5.9) loader-utils: 2.0.4 @@ -58088,9 +67424,9 @@ snapshots: postcss-value-parser: 4.2.0 schema-utils: 3.3.0 semver: 7.7.4 - webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) - css-loader@5.2.7(webpack@5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2)): + css-loader@5.2.7(webpack@5.106.1(@swc/core@1.15.33)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: icss-utils: 5.1.0(postcss@8.5.9) loader-utils: 2.0.4 @@ -58102,20 +67438,21 @@ snapshots: postcss-value-parser: 4.2.0 schema-utils: 3.3.0 semver: 7.7.4 - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2) + webpack: 5.106.1(@swc/core@1.15.33)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) - css-loader@6.11.0(webpack@5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2)): + css-loader@5.2.7(webpack@5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2)): dependencies: icss-utils: 5.1.0(postcss@8.5.9) + loader-utils: 2.0.4 postcss: 8.5.9 postcss-modules-extract-imports: 3.1.0(postcss@8.5.9) postcss-modules-local-by-default: 4.2.0(postcss@8.5.9) postcss-modules-scope: 3.2.1(postcss@8.5.9) postcss-modules-values: 4.0.0(postcss@8.5.9) postcss-value-parser: 4.2.0 + schema-utils: 3.3.0 semver: 7.7.4 - optionalDependencies: - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2) + webpack: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) css-loader@6.11.0(webpack@5.106.1): dependencies: @@ -58128,9 +67465,9 @@ snapshots: postcss-value-parser: 4.2.0 semver: 7.7.4 optionalDependencies: - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@5.1.4) + webpack: 5.106.1(@swc/core@1.15.33)(webpack-cli@5.1.4) - css-loader@7.1.3(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + css-loader@6.11.0(webpack@5.106.2): dependencies: icss-utils: 5.1.0(postcss@8.5.9) postcss: 8.5.9 @@ -58141,9 +67478,9 @@ snapshots: postcss-value-parser: 4.2.0 semver: 7.7.4 optionalDependencies: - webpack: 5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) - css-loader@7.1.4(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + css-loader@7.1.3(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: icss-utils: 5.1.0(postcss@8.5.9) postcss: 8.5.9 @@ -58154,9 +67491,9 @@ snapshots: postcss-value-parser: 4.2.0 semver: 7.7.4 optionalDependencies: - webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) - css-loader@7.1.4(webpack@5.106.1): + css-loader@7.1.4(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: icss-utils: 5.1.0(postcss@8.5.9) postcss: 8.5.9 @@ -58167,9 +67504,22 @@ snapshots: postcss-value-parser: 4.2.0 semver: 7.7.4 optionalDependencies: - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2) + webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) - css-minimizer-webpack-plugin@3.4.1(webpack@5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2)): + css-loader@7.1.4(webpack@5.106.2): + dependencies: + icss-utils: 5.1.0(postcss@8.5.9) + postcss: 8.5.9 + postcss-modules-extract-imports: 3.1.0(postcss@8.5.9) + postcss-modules-local-by-default: 4.2.0(postcss@8.5.9) + postcss-modules-scope: 3.2.1(postcss@8.5.9) + postcss-modules-values: 4.0.0(postcss@8.5.9) + postcss-value-parser: 4.2.0 + semver: 7.7.4 + optionalDependencies: + webpack: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) + + css-minimizer-webpack-plugin@3.4.1(webpack@5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2)): dependencies: cssnano: 5.1.15(postcss@8.5.9) jest-worker: 27.5.1 @@ -58177,7 +67527,7 @@ snapshots: schema-utils: 4.3.3 serialize-javascript: 6.0.2 source-map: 0.6.1 - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2) + webpack: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) css-parse@2.0.0: dependencies: @@ -58560,6 +67910,8 @@ snapshots: debounce@1.2.1: {} + debounce@3.0.0: {} + debug@2.6.9: dependencies: ms: 2.0.0 @@ -58582,10 +67934,6 @@ snapshots: dependencies: ms: 2.1.3 - debug@4.3.6: - dependencies: - ms: 2.1.2 - debug@4.4.3(supports-color@5.5.0): dependencies: ms: 2.1.3 @@ -58760,7 +68108,7 @@ snapshots: depd@2.0.0: {} - dependency-cruiser@17.3.10: + dependency-cruiser@17.4.0: dependencies: acorn: 8.16.0 acorn-jsx: 5.3.2(acorn@8.16.0) @@ -58768,7 +68116,7 @@ snapshots: acorn-loose: 8.5.2 acorn-walk: 8.3.5 commander: 14.0.3 - enhanced-resolve: 5.20.1 + enhanced-resolve: 5.21.0 ignore: 7.0.5 interpret: 3.1.1 is-installed-globally: 1.0.0 @@ -58816,6 +68164,13 @@ snapshots: detect-node@2.1.0: {} + detect-port@1.6.1: + dependencies: + address: 1.2.2 + debug: 4.4.3(supports-color@5.5.0) + transitivePeerDependencies: + - supports-color + dev-ip@1.0.1: {} devalue@2.0.1: {} @@ -58830,7 +68185,9 @@ snapshots: devtools-protocol@0.0.1507524: {} - devtools-protocol@0.0.1581282: {} + devtools-protocol@0.0.1595872: {} + + devtools-protocol@0.0.1608973: {} di@0.0.1: {} @@ -58876,10 +68233,6 @@ snapshots: dependencies: esutils: 2.0.3 - doctrine@3.0.0: - dependencies: - esutils: 2.0.3 - doctypes@1.1.0: {} dom-accessibility-api@0.5.16: {} @@ -58970,9 +68323,9 @@ snapshots: dependencies: type-fest: 4.41.0 - dotenv-expand@11.0.6: + dotenv-expand@12.0.3: dependencies: - dotenv: 16.4.5 + dotenv: 16.4.7 dotenv-expand@5.1.0: {} @@ -58980,7 +68333,9 @@ snapshots: dotenv@16.4.5: {} - dotenv@17.4.1: {} + dotenv@16.4.7: {} + + dotenv@17.4.2: {} dotenv@9.0.2: {} @@ -59028,6 +68383,13 @@ snapshots: errlop: 2.2.0 semver: 6.3.1 + editorconfig@3.0.2: + dependencies: + "@one-ini/wasm": 0.2.1 + commander: 14.0.3 + minimatch: 10.2.5 + semver: 7.7.4 + ee-first@1.1.1: {} ejs-loader@0.5.0: @@ -59043,7 +68405,7 @@ snapshots: electron-to-chromium@1.5.331: {} - electron@41.2.0: + electron@41.3.0: dependencies: "@electron/get": 2.0.3 "@types/node": 24.12.2 @@ -59069,7 +68431,7 @@ snapshots: email-addresses@5.0.0: {} - ember-auto-import@2.13.1(webpack@5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2)): + ember-auto-import@2.13.1(webpack@5.106.1(@swc/core@1.15.33)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: "@babel/core": 7.29.0 "@babel/plugin-proposal-class-properties": 7.18.6(@babel/core@7.29.0) @@ -59080,7 +68442,7 @@ snapshots: "@embroider/macros": 1.20.2(@babel/core@7.29.0) "@embroider/reverse-exports": 0.2.0 "@embroider/shared-internals": 2.9.2 - babel-loader: 8.4.1(@babel/core@7.29.0)(webpack@5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2)) + babel-loader: 8.4.1(@babel/core@7.29.0)(webpack@5.106.1(@swc/core@1.15.33)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) babel-plugin-ember-modules-api-polyfill: 3.5.0 babel-plugin-ember-template-compilation: 2.4.1 babel-plugin-htmlbars-inline-precompile: 5.3.1 @@ -59090,22 +68452,66 @@ snapshots: broccoli-merge-trees: 4.2.0 broccoli-plugin: 4.0.7 broccoli-source: 3.0.1 - css-loader: 5.2.7(webpack@5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2)) + css-loader: 5.2.7(webpack@5.106.1(@swc/core@1.15.33)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) debug: 4.4.3(supports-color@5.5.0) fs-extra: 10.1.0 fs-tree-diff: 2.0.1 - handlebars: 4.7.7 + handlebars: 4.7.9 is-subdir: 1.2.0 js-string-escape: 1.0.1 lodash: 4.18.1 - mini-css-extract-plugin: 2.10.2(webpack@5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2)) + mini-css-extract-plugin: 2.10.2(webpack@5.106.1(@swc/core@1.15.33)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) minimatch: 3.1.5 parse5: 6.0.1 pkg-entry-points: 1.1.1 resolve: 1.22.12 resolve-package-path: 4.0.3 semver: 7.7.4 - style-loader: 2.0.0(webpack@5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2)) + style-loader: 2.0.0(webpack@5.106.1(@swc/core@1.15.33)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) + typescript-memoize: 1.1.1 + walk-sync: 3.0.0 + transitivePeerDependencies: + - "@glint/template" + - supports-color + - webpack + + ember-auto-import@2.13.1(webpack@5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2)): + dependencies: + "@babel/core": 7.29.0 + "@babel/plugin-proposal-class-properties": 7.18.6(@babel/core@7.29.0) + "@babel/plugin-proposal-decorators": 7.29.0(@babel/core@7.29.0) + "@babel/plugin-proposal-private-methods": 7.18.6(@babel/core@7.29.0) + "@babel/plugin-transform-class-static-block": 7.28.6(@babel/core@7.29.0) + "@babel/preset-env": 7.29.2(@babel/core@7.29.0) + "@embroider/macros": 1.20.2(@babel/core@7.29.0) + "@embroider/reverse-exports": 0.2.0 + "@embroider/shared-internals": 2.9.2 + babel-loader: 8.4.1(@babel/core@7.29.0)(webpack@5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2)) + babel-plugin-ember-modules-api-polyfill: 3.5.0 + babel-plugin-ember-template-compilation: 2.4.1 + babel-plugin-htmlbars-inline-precompile: 5.3.1 + babel-plugin-syntax-dynamic-import: 6.18.0 + broccoli-debug: 0.6.5 + broccoli-funnel: 3.0.8 + broccoli-merge-trees: 4.2.0 + broccoli-plugin: 4.0.7 + broccoli-source: 3.0.1 + css-loader: 5.2.7(webpack@5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2)) + debug: 4.4.3(supports-color@5.5.0) + fs-extra: 10.1.0 + fs-tree-diff: 2.0.1 + handlebars: 4.7.9 + is-subdir: 1.2.0 + js-string-escape: 1.0.1 + lodash: 4.18.1 + mini-css-extract-plugin: 2.10.2(webpack@5.106.2) + minimatch: 3.1.5 + parse5: 6.0.1 + pkg-entry-points: 1.1.1 + resolve: 1.22.12 + resolve-package-path: 4.0.3 + semver: 7.7.4 + style-loader: 2.0.0(webpack@5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2)) typescript-memoize: 1.1.1 walk-sync: 3.0.0 transitivePeerDependencies: @@ -59183,15 +68589,28 @@ snapshots: transitivePeerDependencies: - supports-color - ember-cli-dependency-checker@3.3.3(ember-cli@6.12.0(@babel/core@7.29.0)(@types/node@25.6.0)(ejs@3.1.10)(hamljs@0.6.2)(handlebars@4.7.9)(nunjucks@3.2.4(chokidar@3.6.0))(pug@3.0.4)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(underscore@1.13.8)): + ember-cli-dependency-checker@3.3.3(ember-cli@6.12.0(@babel/core@7.29.0)(@types/node@25.6.2)(ejs@3.1.10)(hamljs@0.6.2)(handlebars@4.7.9)(nunjucks@3.2.4(chokidar@3.6.0))(pug@3.0.4)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(underscore@1.13.8)): dependencies: chalk: 2.4.2 - ember-cli: 6.12.0(@babel/core@7.29.0)(@types/node@25.6.0)(ejs@3.1.10)(hamljs@0.6.2)(handlebars@4.7.9)(nunjucks@3.2.4(chokidar@3.6.0))(pug@3.0.4)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(underscore@1.13.8) + ember-cli: 6.12.0(@babel/core@7.29.0)(@types/node@25.6.2)(ejs@3.1.10)(hamljs@0.6.2)(handlebars@4.7.9)(nunjucks@3.2.4(chokidar@3.6.0))(pug@3.0.4)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(underscore@1.13.8) find-yarn-workspace-root: 2.0.0 is-git-url: 1.0.0 resolve: 1.22.12 semver: 5.7.2 + ember-cli-dependency-checker@3.4.0(@babel/core@7.29.0)(ember-cli@6.12.0(@babel/core@7.29.0)(@types/node@25.6.0)(ejs@3.1.10)(hamljs@0.6.2)(handlebars@4.7.9)(nunjucks@3.2.4(chokidar@3.6.0))(pug@3.0.4)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(underscore@1.13.8))(eslint@10.2.1(jiti@2.7.0)): + dependencies: + "@babel/eslint-parser": 7.28.6(@babel/core@7.29.0)(eslint@10.2.1(jiti@2.7.0)) + chalk: 4.1.2 + ember-cli: 6.12.0(@babel/core@7.29.0)(@types/node@25.6.0)(ejs@3.1.10)(hamljs@0.6.2)(handlebars@4.7.9)(nunjucks@3.2.4(chokidar@3.6.0))(pug@3.0.4)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(underscore@1.13.8) + find-yarn-workspace-root: 2.0.0 + is-git-url: 1.0.0 + resolve: 1.22.12 + semver: 7.7.4 + transitivePeerDependencies: + - "@babel/core" + - eslint + ember-cli-get-component-path-option@1.0.0: {} ember-cli-htmlbars@7.0.1(@babel/core@7.29.0)(ember-source@6.12.0(@glimmer/component@2.1.1)(rsvp@4.8.5)): @@ -59331,7 +68750,7 @@ snapshots: calculate-cache-key-for-tree: 2.0.0 capture-exit: 2.0.0 chalk: 5.6.2 - ci-info: 4.3.1 + ci-info: 4.4.0 clean-base-url: 1.0.0 compression: 1.8.1 configstore: 7.1.0 @@ -59339,7 +68758,7 @@ snapshots: content-tag: 4.1.1 core-object: 3.1.5 dag-map: 2.0.2 - diff: 8.0.3 + diff: 8.0.4 ember-cli-is-package-missing: 1.0.0 ember-cli-normalize-entity-name: 1.0.0 ember-cli-preprocess-registry: 5.0.1 @@ -59446,6 +68865,145 @@ snapshots: - walrus - whiskers + ember-cli@6.12.0(@babel/core@7.29.0)(@types/node@25.6.2)(ejs@3.1.10)(hamljs@0.6.2)(handlebars@4.7.9)(nunjucks@3.2.4(chokidar@3.6.0))(pug@3.0.4)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(underscore@1.13.8): + dependencies: + "@ember-tooling/blueprint-blueprint": 0.2.1 + "@ember-tooling/blueprint-model": 0.5.0 + "@ember-tooling/classic-build-addon-blueprint": 6.12.0 + "@ember-tooling/classic-build-app-blueprint": 6.12.0 + "@ember/app-blueprint": 6.12.0 + "@pnpm/find-workspace-dir": 1000.1.5 + babel-remove-types: 1.1.0 + broccoli: 4.0.0 + broccoli-concat: 4.2.7 + broccoli-config-loader: 1.0.1 + broccoli-config-replace: 1.1.3 + broccoli-debug: 0.6.5 + broccoli-funnel: 3.0.8 + broccoli-funnel-reducer: 1.0.0 + broccoli-merge-trees: 4.2.0 + broccoli-middleware: 2.1.1 + broccoli-slow-trees: 3.1.0 + broccoli-source: 3.0.1 + broccoli-stew: 3.0.0 + calculate-cache-key-for-tree: 2.0.0 + capture-exit: 2.0.0 + chalk: 5.6.2 + ci-info: 4.4.0 + clean-base-url: 1.0.0 + compression: 1.8.1 + configstore: 7.1.0 + console-ui: 3.1.2 + content-tag: 4.1.1 + core-object: 3.1.5 + dag-map: 2.0.2 + diff: 8.0.4 + ember-cli-is-package-missing: 1.0.0 + ember-cli-normalize-entity-name: 1.0.0 + ember-cli-preprocess-registry: 5.0.1 + ember-cli-string-utils: 1.1.0 + ensure-posix-path: 1.1.1 + execa: 9.6.1 + exit: 0.1.2 + express: 5.2.1 + filesize: 11.0.15 + find-up: 8.0.0 + find-yarn-workspace-root: 2.0.0 + fs-extra: 11.3.4 + fs-tree-diff: 2.0.1 + get-caller-file: 2.0.5 + git-repo-info: 2.1.1 + glob: 13.0.6 + heimdalljs: 0.2.6 + heimdalljs-fs-monitor: 1.1.2 + heimdalljs-graph: 1.0.0 + heimdalljs-logger: 0.1.10 + http-proxy: 1.18.1(debug@4.4.3) + inflection: 3.0.2 + inquirer: 13.4.1(@types/node@25.6.2) + is-git-url: 1.0.0 + is-language-code: 5.1.3 + lodash: 4.18.1 + markdown-it: 14.1.1 + markdown-it-terminal: 0.4.0(markdown-it@14.1.1) + minimatch: 10.2.5 + morgan: 1.10.1 + nopt: 3.0.6 + npm-package-arg: 13.0.2 + os-locale: 6.0.2 + p-defer: 4.0.1 + portfinder: 1.0.38 + promise-map-series: 0.3.0 + promise.hash.helper: 1.0.8 + quick-temp: 0.1.9 + resolve: 1.22.12 + resolve-package-path: 4.0.3 + safe-stable-stringify: 2.5.0 + sane: 5.0.1 + semver: 7.7.4 + silent-error: 1.1.1 + sort-package-json: 3.6.1 + symlink-or-copy: 1.3.1 + testem: 3.20.0(@babel/core@7.29.0)(ejs@3.1.10)(hamljs@0.6.2)(handlebars@4.7.9)(nunjucks@3.2.4(chokidar@3.6.0))(pug@3.0.4)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(underscore@1.13.8) + tiny-lr: 2.0.0 + tree-sync: 2.1.0 + walk-sync: 4.0.1 + watch-detector: 1.0.2 + workerpool: 10.0.1 + yam: 1.0.0 + transitivePeerDependencies: + - "@babel/core" + - "@types/node" + - arc-templates + - atpl + - bracket-template + - bufferutil + - coffee-script + - debug + - dot + - dust + - dustjs-helpers + - dustjs-linkedin + - eco + - ect + - ejs + - haml-coffee + - hamlet + - hamljs + - handlebars + - hogan.js + - htmling + - jazz + - jqtpl + - just + - liquid-node + - liquor + - mote + - nunjucks + - plates + - pug + - qejs + - ractive + - react + - react-dom + - slm + - supports-color + - swig + - swig-templates + - teacup + - templayed + - then-pug + - tinyliquid + - toffee + - twig + - twing + - underscore + - utf-8-validate + - vash + - velocityjs + - walrus + - whiskers + ember-compatibility-helpers@1.2.7(@babel/core@7.29.0): dependencies: babel-plugin-debug-macros: 0.2.0(@babel/core@7.29.0) @@ -59459,10 +69017,27 @@ snapshots: ember-disable-prototype-extensions@1.1.3: {} - ember-eslint-parser@0.5.13(@babel/core@7.29.0)(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2): + ember-eslint-parser@0.10.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@typescript-eslint/parser@8.59.2(eslint@10.2.1(jiti@2.7.0))(typescript@6.0.3))(typescript@6.0.3): + dependencies: + "@glimmer/syntax": 0.95.0 + "@typescript-eslint/tsconfig-utils": 8.58.2(typescript@6.0.3) + content-tag: 4.1.1 + ember-estree: 0.4.3(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + eslint-scope: 9.1.2 + html-tags: 5.1.0 + mathml-tag-names: 4.0.0 + svg-tags: 1.0.0 + optionalDependencies: + "@typescript-eslint/parser": 8.59.2(eslint@10.2.1(jiti@2.7.0))(typescript@6.0.3) + transitivePeerDependencies: + - "@emnapi/core" + - "@emnapi/runtime" + - typescript + + ember-eslint-parser@0.5.13(@babel/core@7.29.0)(@typescript-eslint/parser@8.59.2(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2))(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2): dependencies: "@babel/core": 7.29.0 - "@babel/eslint-parser": 7.28.6(@babel/core@7.29.0)(eslint@10.2.0(jiti@2.6.1)) + "@babel/eslint-parser": 7.28.6(@babel/core@7.29.0)(eslint@10.2.0(jiti@2.7.0)) "@glimmer/syntax": 0.95.0 "@typescript-eslint/tsconfig-utils": 8.58.2(typescript@6.0.2) content-tag: 2.0.3 @@ -59471,11 +69046,22 @@ snapshots: mathml-tag-names: 2.1.3 svg-tags: 1.0.0 optionalDependencies: - "@typescript-eslint/parser": 8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) + "@typescript-eslint/parser": 8.59.2(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) transitivePeerDependencies: - eslint - typescript + ember-estree@0.4.3(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0): + dependencies: + "@glimmer/env": 0.1.7 + "@glimmer/syntax": 0.95.0 + content-tag: 4.1.1 + oxc-parser: 0.119.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + zimmerframe: 1.1.4 + transitivePeerDependencies: + - "@emnapi/core" + - "@emnapi/runtime" + ember-load-initializers@3.0.1(ember-source@6.12.0(@glimmer/component@2.1.1)(rsvp@4.8.5)): dependencies: ember-source: 6.12.0(@glimmer/component@2.1.1)(rsvp@4.8.5) @@ -59617,6 +69203,8 @@ snapshots: "@emmetio/abbreviation": 2.3.3 "@emmetio/css-abbreviation": 2.1.8 + emoji-regex-xs@1.0.0: {} + emoji-regex@10.4.0: {} emoji-regex@7.0.3: {} @@ -59717,6 +69305,11 @@ snapshots: graceful-fs: 4.2.11 tapable: 2.3.2 + enhanced-resolve@5.21.0: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.3.3 + enquirer@2.3.6: dependencies: ansi-colors: 4.1.3 @@ -59744,6 +69337,12 @@ snapshots: env-paths@2.2.1: {} + env-paths@3.0.0: {} + + env-paths@4.0.0: + dependencies: + is-safe-filename: 0.1.1 + envinfo@7.13.0: {} envinfo@7.14.0: {} @@ -59789,6 +69388,8 @@ snapshots: err-code@2.0.3: {} + err-code@3.0.1: {} + erre@3.0.1: dependencies: ruit: 1.0.4 @@ -60002,6 +69603,8 @@ snapshots: es-toolkit@1.45.1: {} + es-toolkit@1.46.1: {} + es6-error@4.1.1: {} es6-promise@3.3.1: {} @@ -60089,35 +69692,6 @@ snapshots: "@esbuild/win32-ia32": 0.25.12 "@esbuild/win32-x64": 0.25.12 - esbuild@0.27.2: - optionalDependencies: - "@esbuild/aix-ppc64": 0.27.2 - "@esbuild/android-arm": 0.27.2 - "@esbuild/android-arm64": 0.27.2 - "@esbuild/android-x64": 0.27.2 - "@esbuild/darwin-arm64": 0.27.2 - "@esbuild/darwin-x64": 0.27.2 - "@esbuild/freebsd-arm64": 0.27.2 - "@esbuild/freebsd-x64": 0.27.2 - "@esbuild/linux-arm": 0.27.2 - "@esbuild/linux-arm64": 0.27.2 - "@esbuild/linux-ia32": 0.27.2 - "@esbuild/linux-loong64": 0.27.2 - "@esbuild/linux-mips64el": 0.27.2 - "@esbuild/linux-ppc64": 0.27.2 - "@esbuild/linux-riscv64": 0.27.2 - "@esbuild/linux-s390x": 0.27.2 - "@esbuild/linux-x64": 0.27.2 - "@esbuild/netbsd-arm64": 0.27.2 - "@esbuild/netbsd-x64": 0.27.2 - "@esbuild/openbsd-arm64": 0.27.2 - "@esbuild/openbsd-x64": 0.27.2 - "@esbuild/openharmony-arm64": 0.27.2 - "@esbuild/sunos-x64": 0.27.2 - "@esbuild/win32-arm64": 0.27.2 - "@esbuild/win32-ia32": 0.27.2 - "@esbuild/win32-x64": 0.27.2 - esbuild@0.27.3: optionalDependencies: "@esbuild/aix-ppc64": 0.27.3 @@ -60176,36 +69750,6 @@ snapshots: "@esbuild/win32-ia32": 0.27.7 "@esbuild/win32-x64": 0.27.7 - esbuild@0.28.0: - optionalDependencies: - "@esbuild/aix-ppc64": 0.28.0 - "@esbuild/android-arm": 0.28.0 - "@esbuild/android-arm64": 0.28.0 - "@esbuild/android-x64": 0.28.0 - "@esbuild/darwin-arm64": 0.28.0 - "@esbuild/darwin-x64": 0.28.0 - "@esbuild/freebsd-arm64": 0.28.0 - "@esbuild/freebsd-x64": 0.28.0 - "@esbuild/linux-arm": 0.28.0 - "@esbuild/linux-arm64": 0.28.0 - "@esbuild/linux-ia32": 0.28.0 - "@esbuild/linux-loong64": 0.28.0 - "@esbuild/linux-mips64el": 0.28.0 - "@esbuild/linux-ppc64": 0.28.0 - "@esbuild/linux-riscv64": 0.28.0 - "@esbuild/linux-s390x": 0.28.0 - "@esbuild/linux-x64": 0.28.0 - "@esbuild/netbsd-arm64": 0.28.0 - "@esbuild/netbsd-x64": 0.28.0 - "@esbuild/openbsd-arm64": 0.28.0 - "@esbuild/openbsd-x64": 0.28.0 - "@esbuild/openharmony-arm64": 0.28.0 - "@esbuild/sunos-x64": 0.28.0 - "@esbuild/win32-arm64": 0.28.0 - "@esbuild/win32-ia32": 0.28.0 - "@esbuild/win32-x64": 0.28.0 - optional: true - escalade@3.1.1: {} escalade@3.2.0: {} @@ -60241,23 +69785,23 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-compat-utils@0.5.1(eslint@8.57.1): + eslint-compat-utils@0.5.1(eslint@10.3.0(jiti@2.7.0)): dependencies: - eslint: 8.57.1 + eslint: 10.3.0(jiti@2.7.0) semver: 7.7.4 - eslint-config-next@16.2.3(@typescript-eslint/parser@8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2): + eslint-config-next@16.2.3(@typescript-eslint/parser@8.58.1(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2))(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2): dependencies: "@next/eslint-plugin-next": 16.2.3 - eslint: 10.2.0(jiti@2.6.1) + eslint: 10.2.0(jiti@2.7.0) eslint-import-resolver-node: 0.3.10 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@10.2.0(jiti@2.6.1)) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-typescript@3.10.1)(eslint@10.2.0(jiti@2.6.1)) - eslint-plugin-jsx-a11y: 6.10.2(eslint@10.2.0(jiti@2.6.1)) - eslint-plugin-react: 7.37.5(eslint@10.2.0(jiti@2.6.1)) - eslint-plugin-react-hooks: 7.0.1(eslint@10.2.0(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@10.2.0(jiti@2.7.0)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.58.1(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2))(eslint-import-resolver-typescript@3.10.1)(eslint@10.2.0(jiti@2.7.0)) + eslint-plugin-jsx-a11y: 6.10.2(eslint@10.2.0(jiti@2.7.0)) + eslint-plugin-react: 7.37.5(eslint@10.2.0(jiti@2.7.0)) + eslint-plugin-react-hooks: 7.0.1(eslint@10.2.0(jiti@2.7.0)) globals: 16.4.0 - typescript-eslint: 8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) + typescript-eslint: 8.59.2(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) optionalDependencies: typescript: 6.0.2 transitivePeerDependencies: @@ -60266,18 +69810,18 @@ snapshots: - eslint-plugin-import-x - supports-color - eslint-config-next@16.2.3(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2): + eslint-config-next@16.2.3(@typescript-eslint/parser@8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2): dependencies: "@next/eslint-plugin-next": 16.2.3 - eslint: 10.2.0(jiti@2.6.1) + eslint: 10.2.0(jiti@2.7.0) eslint-import-resolver-node: 0.3.10 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@10.2.0(jiti@2.6.1)) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-typescript@3.10.1)(eslint@10.2.0(jiti@2.6.1)) - eslint-plugin-jsx-a11y: 6.10.2(eslint@10.2.0(jiti@2.6.1)) - eslint-plugin-react: 7.37.5(eslint@10.2.0(jiti@2.6.1)) - eslint-plugin-react-hooks: 7.0.1(eslint@10.2.0(jiti@2.6.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@10.2.0(jiti@2.7.0)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint-import-resolver-typescript@3.10.1)(eslint@10.2.0(jiti@2.7.0)) + eslint-plugin-jsx-a11y: 6.10.2(eslint@10.2.0(jiti@2.7.0)) + eslint-plugin-react: 7.37.5(eslint@10.2.0(jiti@2.7.0)) + eslint-plugin-react-hooks: 7.0.1(eslint@10.2.0(jiti@2.7.0)) globals: 16.4.0 - typescript-eslint: 8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) + typescript-eslint: 8.59.2(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) optionalDependencies: typescript: 6.0.2 transitivePeerDependencies: @@ -60286,16 +69830,16 @@ snapshots: - eslint-plugin-import-x - supports-color - eslint-config-preact@1.5.0(eslint@8.57.1): + eslint-config-preact@1.5.0(eslint@10.3.0(jiti@2.7.0)): dependencies: "@babel/core": 7.29.0 - "@babel/eslint-parser": 7.28.6(@babel/core@7.29.0)(eslint@8.57.1) + "@babel/eslint-parser": 7.28.6(@babel/core@7.29.0)(eslint@10.3.0(jiti@2.7.0)) "@babel/plugin-syntax-class-properties": 7.12.13(@babel/core@7.29.0) "@babel/plugin-syntax-jsx": 7.28.6(@babel/core@7.29.0) - eslint: 8.57.1 - eslint-plugin-compat: 4.2.0(eslint@8.57.1) - eslint-plugin-react: 7.37.5(eslint@8.57.1) - eslint-plugin-react-hooks: 4.6.2(eslint@8.57.1) + eslint: 10.3.0(jiti@2.7.0) + eslint-plugin-compat: 4.2.0(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-react: 7.37.5(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-react-hooks: 4.6.2(eslint@10.3.0(jiti@2.7.0)) transitivePeerDependencies: - supports-color @@ -60303,24 +69847,24 @@ snapshots: dependencies: eslint: 10.2.0(jiti@2.6.1) - eslint-config-prettier@10.1.8(eslint@8.57.1): + eslint-config-prettier@10.1.8(eslint@10.2.0(jiti@2.7.0)): dependencies: - eslint: 8.57.1 + eslint: 10.2.0(jiti@2.7.0) - eslint-config-prettier@8.10.2(eslint@8.57.1): + eslint-config-prettier@10.1.8(eslint@10.2.1(jiti@2.7.0)): dependencies: - eslint: 8.57.1 + eslint: 10.2.1(jiti@2.7.0) - eslint-config-prettier@9.1.2(eslint@8.57.1): + eslint-config-prettier@10.1.8(eslint@10.3.0(jiti@2.7.0)): dependencies: - eslint: 8.57.1 + eslint: 10.3.0(jiti@2.7.0) - eslint-config-standard@17.1.0(eslint-plugin-import@2.32.0)(eslint-plugin-n@15.7.0(eslint@8.57.1))(eslint-plugin-promise@6.6.0(eslint@8.57.1))(eslint@8.57.1): + eslint-config-standard@17.1.0(eslint-plugin-import@2.32.0)(eslint-plugin-n@15.7.0(eslint@10.3.0(jiti@2.7.0)))(eslint-plugin-promise@6.6.0(eslint@10.3.0(jiti@2.7.0)))(eslint@10.3.0(jiti@2.7.0)): dependencies: - eslint: 8.57.1 - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@6.0.2))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1) - eslint-plugin-n: 15.7.0(eslint@8.57.1) - eslint-plugin-promise: 6.6.0(eslint@8.57.1) + eslint: 10.3.0(jiti@2.7.0) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-n: 15.7.0(eslint@10.3.0(jiti@2.7.0)) + eslint-plugin-promise: 6.6.0(eslint@10.3.0(jiti@2.7.0)) eslint-import-context@0.1.9(unrs-resolver@1.11.1): dependencies: @@ -60337,40 +69881,40 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@10.2.0(jiti@2.6.1)): + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@10.2.0(jiti@2.7.0)): dependencies: "@nolyfill/is-core-module": 1.0.39 debug: 4.4.3(supports-color@5.5.0) - eslint: 10.2.0(jiti@2.6.1) + eslint: 10.2.0(jiti@2.7.0) get-tsconfig: 4.13.7 is-bun-module: 2.0.0 stable-hash: 0.0.5 tinyglobby: 0.2.16 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-typescript@3.10.1)(eslint@10.2.0(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.58.1(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2))(eslint-import-resolver-typescript@3.10.1)(eslint@10.2.0(jiti@2.7.0)) transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@8.57.1): + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@10.3.0(jiti@2.7.0)): dependencies: "@nolyfill/is-core-module": 1.0.39 debug: 4.4.3(supports-color@5.5.0) - eslint: 8.57.1 + eslint: 10.3.0(jiti@2.7.0) get-tsconfig: 4.13.7 is-bun-module: 2.0.0 stable-hash: 0.0.5 tinyglobby: 0.2.16 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@6.0.2))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.3.0(jiti@2.7.0)) transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@4.4.4(eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1))(eslint@8.57.1): + eslint-import-resolver-typescript@4.4.4(eslint-plugin-import@2.32.0)(eslint@10.3.0(jiti@2.7.0)): dependencies: debug: 4.4.3(supports-color@5.5.0) - eslint: 8.57.1 + eslint: 10.3.0(jiti@2.7.0) eslint-import-context: 0.1.9(unrs-resolver@1.11.1) get-tsconfig: 4.13.7 is-bun-module: 2.0.0 @@ -60378,119 +69922,150 @@ snapshots: tinyglobby: 0.2.16 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.4)(eslint@8.57.1) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint-import-resolver-typescript@4.4.4)(eslint@10.3.0(jiti@2.7.0)) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@4.4.4(eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.58.1(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1)(eslint@10.2.0(jiti@2.7.0)): dependencies: debug: 3.2.7 optionalDependencies: - "@typescript-eslint/parser": 6.21.0(eslint@8.57.1)(typescript@5.9.3) - eslint: 8.57.1 + "@typescript-eslint/parser": 8.58.1(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) + eslint: 10.2.0(jiti@2.7.0) eslint-import-resolver-node: 0.3.10 - eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1))(eslint@8.57.1) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@10.2.0(jiti@2.7.0)) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@6.0.2))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.58.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint@10.3.0(jiti@2.7.0)): dependencies: debug: 3.2.7 optionalDependencies: - "@typescript-eslint/parser": 6.21.0(eslint@8.57.1)(typescript@6.0.2) - eslint: 8.57.1 + "@typescript-eslint/parser": 8.58.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3) + eslint: 10.3.0(jiti@2.7.0) eslint-import-resolver-node: 0.3.10 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@8.57.1) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1)(eslint@10.2.0(jiti@2.6.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint-import-resolver-node@0.3.10)(eslint@10.3.0(jiti@2.7.0)): dependencies: debug: 3.2.7 optionalDependencies: - "@typescript-eslint/parser": 8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) - eslint: 10.2.0(jiti@2.6.1) + "@typescript-eslint/parser": 8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + eslint: 10.3.0(jiti@2.7.0) eslint-import-resolver-node: 0.3.10 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@10.2.0(jiti@2.6.1)) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.58.1(eslint@8.57.1)(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint@8.57.1): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1)(eslint@10.2.0(jiti@2.7.0)): dependencies: debug: 3.2.7 optionalDependencies: - "@typescript-eslint/parser": 8.58.1(eslint@8.57.1)(typescript@5.9.3) - eslint: 8.57.1 + "@typescript-eslint/parser": 8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + eslint: 10.2.0(jiti@2.7.0) eslint-import-resolver-node: 0.3.10 + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@10.2.0(jiti@2.7.0)) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1)(eslint@10.2.0(jiti@2.6.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@4.4.4)(eslint@10.3.0(jiti@2.7.0)): dependencies: debug: 3.2.7 optionalDependencies: - "@typescript-eslint/parser": 8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) - eslint: 10.2.0(jiti@2.6.1) + "@typescript-eslint/parser": 8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + eslint: 10.3.0(jiti@2.7.0) eslint-import-resolver-node: 0.3.10 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@10.2.0(jiti@2.6.1)) + eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import@2.32.0)(eslint@10.3.0(jiti@2.7.0)) transitivePeerDependencies: - supports-color - eslint-plugin-compat@4.2.0(eslint@8.57.1): + eslint-plugin-compat@4.2.0(eslint@10.3.0(jiti@2.7.0)): dependencies: "@mdn/browser-compat-data": 5.7.6 ast-metadata-inferer: 0.8.1 browserslist: 4.28.2 caniuse-lite: 1.0.30001787 - eslint: 8.57.1 + eslint: 10.3.0(jiti@2.7.0) find-up: 5.0.0 lodash.memoize: 4.1.2 semver: 7.7.4 - eslint-plugin-ember@12.7.5(@babel/core@7.29.0)(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2): + eslint-plugin-ember@12.7.5(@babel/core@7.29.0)(@typescript-eslint/parser@8.59.2(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2))(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2): dependencies: "@ember-data/rfc395-data": 0.0.4 css-tree: 3.2.1 - ember-eslint-parser: 0.5.13(@babel/core@7.29.0)(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) + ember-eslint-parser: 0.5.13(@babel/core@7.29.0)(@typescript-eslint/parser@8.59.2(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2))(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) ember-rfc176-data: 0.3.18 - eslint: 10.2.0(jiti@2.6.1) - eslint-utils: 3.0.0(eslint@10.2.0(jiti@2.6.1)) + eslint: 10.2.0(jiti@2.7.0) + eslint-utils: 3.0.0(eslint@10.2.0(jiti@2.7.0)) estraverse: 5.3.0 lodash.camelcase: 4.3.0 lodash.kebabcase: 4.1.1 requireindex: 1.2.0 snake-case: 3.0.4 optionalDependencies: - "@typescript-eslint/parser": 8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) + "@typescript-eslint/parser": 8.59.2(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) transitivePeerDependencies: - "@babel/core" - typescript - eslint-plugin-es@3.0.1(eslint@10.2.0(jiti@2.6.1)): + eslint-plugin-ember@13.0.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@typescript-eslint/parser@8.59.2(eslint@10.2.1(jiti@2.7.0))(typescript@6.0.3))(eslint@10.2.1(jiti@2.7.0))(typescript@6.0.3): dependencies: - eslint: 10.2.0(jiti@2.6.1) + "@ember-data/rfc395-data": 0.0.4 + aria-query: 5.3.2 + css-tree: 3.2.1 + editorconfig: 3.0.2 + ember-eslint-parser: 0.10.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@typescript-eslint/parser@8.59.2(eslint@10.2.1(jiti@2.7.0))(typescript@6.0.3))(typescript@6.0.3) + ember-rfc176-data: 0.3.18 + eslint: 10.2.1(jiti@2.7.0) + eslint-utils: 3.0.0(eslint@10.2.1(jiti@2.7.0)) + estraverse: 5.3.0 + html-tags: 3.3.1 + language-tags: 1.0.9 + lodash.camelcase: 4.3.0 + lodash.kebabcase: 4.1.1 + mathml-tag-names: 4.0.0 + requireindex: 1.2.0 + snake-case: 3.0.4 + svg-tags: 1.0.0 + optionalDependencies: + "@typescript-eslint/parser": 8.59.2(eslint@10.2.1(jiti@2.7.0))(typescript@6.0.3) + transitivePeerDependencies: + - "@emnapi/core" + - "@emnapi/runtime" + - typescript + + eslint-plugin-es@3.0.1(eslint@10.2.0(jiti@2.7.0)): + dependencies: + eslint: 10.2.0(jiti@2.7.0) + eslint-utils: 2.1.0 + regexpp: 3.2.0 + + eslint-plugin-es@3.0.1(eslint@10.2.1(jiti@2.7.0)): + dependencies: + eslint: 10.2.1(jiti@2.7.0) eslint-utils: 2.1.0 regexpp: 3.2.0 - eslint-plugin-es@3.0.1(eslint@8.57.1): + eslint-plugin-es@3.0.1(eslint@10.3.0(jiti@2.7.0)): dependencies: - eslint: 8.57.1 + eslint: 10.3.0(jiti@2.7.0) eslint-utils: 2.1.0 regexpp: 3.2.0 - eslint-plugin-es@4.1.0(eslint@8.57.1): + eslint-plugin-es@4.1.0(eslint@10.3.0(jiti@2.7.0)): dependencies: - eslint: 8.57.1 + eslint: 10.3.0(jiti@2.7.0) eslint-utils: 2.1.0 regexpp: 3.2.0 - eslint-plugin-eslint-comments@3.2.0(eslint@8.57.1): + eslint-plugin-eslint-comments@3.2.0(eslint@10.3.0(jiti@2.7.0)): dependencies: escape-string-regexp: 1.0.5 - eslint: 8.57.1 + eslint: 10.3.0(jiti@2.7.0) ignore: 5.3.1 - eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.4)(eslint@8.57.1): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint-import-resolver-typescript@3.10.1)(eslint@10.3.0(jiti@2.7.0)): dependencies: "@rtsao/scc": 1.1.0 array-includes: 3.1.9 @@ -60499,9 +70074,9 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.57.1 + eslint: 10.3.0(jiti@2.7.0) eslint-import-resolver-node: 0.3.10 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@4.4.4(eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint-import-resolver-node@0.3.10)(eslint@10.3.0(jiti@2.7.0)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -60513,13 +70088,13 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - "@typescript-eslint/parser": 6.21.0(eslint@8.57.1)(typescript@5.9.3) + "@typescript-eslint/parser": 6.21.0(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@6.0.2))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.58.1(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2))(eslint-import-resolver-typescript@3.10.1)(eslint@10.2.0(jiti@2.7.0)): dependencies: "@rtsao/scc": 1.1.0 array-includes: 3.1.9 @@ -60528,9 +70103,9 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.57.1 + eslint: 10.2.0(jiti@2.7.0) eslint-import-resolver-node: 0.3.10 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@6.0.2))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.58.1(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1)(eslint@10.2.0(jiti@2.7.0)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -60542,13 +70117,13 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - "@typescript-eslint/parser": 6.21.0(eslint@8.57.1)(typescript@6.0.2) + "@typescript-eslint/parser": 8.58.1(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-typescript@3.10.1)(eslint@10.2.0(jiti@2.6.1)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.58.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.3.0(jiti@2.7.0)): dependencies: "@rtsao/scc": 1.1.0 array-includes: 3.1.9 @@ -60557,9 +70132,9 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7 doctrine: 2.1.0 - eslint: 10.2.0(jiti@2.6.1) + eslint: 10.3.0(jiti@2.7.0) eslint-import-resolver-node: 0.3.10 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1)(eslint@10.2.0(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.58.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint@10.3.0(jiti@2.7.0)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -60571,13 +70146,13 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - "@typescript-eslint/parser": 8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) + "@typescript-eslint/parser": 8.58.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.58.1(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.3.0(jiti@2.7.0)): dependencies: "@rtsao/scc": 1.1.0 array-includes: 3.1.9 @@ -60586,9 +70161,9 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.57.1 + eslint: 10.3.0(jiti@2.7.0) eslint-import-resolver-node: 0.3.10 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.58.1(eslint@8.57.1)(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint@8.57.1) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint-import-resolver-node@0.3.10)(eslint@10.3.0(jiti@2.7.0)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -60600,13 +70175,13 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - "@typescript-eslint/parser": 8.58.1(eslint@8.57.1)(typescript@5.9.3) + "@typescript-eslint/parser": 8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-typescript@3.10.1)(eslint@10.2.0(jiti@2.6.1)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint-import-resolver-typescript@3.10.1)(eslint@10.2.0(jiti@2.7.0)): dependencies: "@rtsao/scc": 1.1.0 array-includes: 3.1.9 @@ -60615,9 +70190,9 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7 doctrine: 2.1.0 - eslint: 10.2.0(jiti@2.6.1) + eslint: 10.2.0(jiti@2.7.0) eslint-import-resolver-node: 0.3.10 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1)(eslint@10.2.0(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1)(eslint@10.2.0(jiti@2.7.0)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -60629,59 +70204,69 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - "@typescript-eslint/parser": 8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) + "@typescript-eslint/parser": 8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(jest@29.7.0(@types/node@25.6.0)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.9.3)))(typescript@5.9.3): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint-import-resolver-typescript@4.4.4)(eslint@10.3.0(jiti@2.7.0)): dependencies: - "@typescript-eslint/utils": 5.62.0(eslint@8.57.1)(typescript@5.9.3) - eslint: 8.57.1 + "@rtsao/scc": 1.1.0 + array-includes: 3.1.9 + array.prototype.findlastindex: 1.2.6 + array.prototype.flat: 1.3.3 + array.prototype.flatmap: 1.3.3 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 10.3.0(jiti@2.7.0) + eslint-import-resolver-node: 0.3.10 + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@4.4.4)(eslint@10.3.0(jiti@2.7.0)) + hasown: 2.0.2 + is-core-module: 2.16.1 + is-glob: 4.0.3 + minimatch: 3.1.5 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.1 + semver: 6.3.1 + string.prototype.trimend: 1.0.9 + tsconfig-paths: 3.15.0 optionalDependencies: - "@typescript-eslint/eslint-plugin": 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) - jest: 29.7.0(@types/node@25.6.0)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.9.3)) + "@typescript-eslint/parser": 8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack - supports-color - - typescript - eslint-plugin-jsdoc@46.10.1(eslint@8.57.1): + eslint-plugin-jest@28.14.0(@typescript-eslint/eslint-plugin@8.59.2(@typescript-eslint/parser@8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.3.0(jiti@2.7.0))(jest@29.7.0(@types/node@25.6.2)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3)))(typescript@6.0.3): dependencies: - "@es-joy/jsdoccomment": 0.41.0 - are-docs-informative: 0.0.2 - comment-parser: 1.4.1 - debug: 4.4.3(supports-color@5.5.0) - escape-string-regexp: 4.0.0 - eslint: 8.57.1 - esquery: 1.7.0 - is-builtin-module: 3.2.1 - semver: 7.7.4 - spdx-expression-parse: 4.0.0 + "@typescript-eslint/utils": 8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + eslint: 10.3.0(jiti@2.7.0) + optionalDependencies: + "@typescript-eslint/eslint-plugin": 8.59.2(@typescript-eslint/parser@8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + jest: 29.7.0(@types/node@25.6.2)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3)) transitivePeerDependencies: - supports-color + - typescript - eslint-plugin-jsdoc@62.9.0(eslint@10.2.0(jiti@2.6.1)): + eslint-plugin-jsdoc@50.8.0(eslint@10.3.0(jiti@2.7.0)): dependencies: - "@es-joy/jsdoccomment": 0.86.0 - "@es-joy/resolve.exports": 1.2.0 + "@es-joy/jsdoccomment": 0.50.2 are-docs-informative: 0.0.2 - comment-parser: 1.4.6 + comment-parser: 1.4.1 debug: 4.4.3(supports-color@5.5.0) escape-string-regexp: 4.0.0 - eslint: 10.2.0(jiti@2.6.1) - espree: 11.2.0 + eslint: 10.3.0(jiti@2.7.0) + espree: 10.4.0 esquery: 1.7.0 - html-entities: 2.6.0 - object-deep-merge: 2.0.0 parse-imports-exports: 0.2.4 semver: 7.7.4 spdx-expression-parse: 4.0.0 - to-valid-identifier: 1.0.0 transitivePeerDependencies: - supports-color - eslint-plugin-jsdoc@62.9.0(eslint@8.57.1): + eslint-plugin-jsdoc@62.9.0(eslint@10.3.0(jiti@2.7.0)): dependencies: "@es-joy/jsdoccomment": 0.86.0 "@es-joy/resolve.exports": 1.2.0 @@ -60689,7 +70274,7 @@ snapshots: comment-parser: 1.4.6 debug: 4.4.3(supports-color@5.5.0) escape-string-regexp: 4.0.0 - eslint: 8.57.1 + eslint: 10.3.0(jiti@2.7.0) espree: 11.2.0 esquery: 1.7.0 html-entities: 2.6.0 @@ -60701,7 +70286,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-jsx-a11y@6.10.2(eslint@10.2.0(jiti@2.6.1)): + eslint-plugin-jsx-a11y@6.10.2(eslint@10.2.0(jiti@2.7.0)): dependencies: aria-query: 5.3.2 array-includes: 3.1.9 @@ -60711,7 +70296,7 @@ snapshots: axobject-query: 4.1.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 10.2.0(jiti@2.6.1) + eslint: 10.2.0(jiti@2.7.0) hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 @@ -60720,7 +70305,7 @@ snapshots: safe-regex-test: 1.1.0 string.prototype.includes: 2.0.1 - eslint-plugin-jsx-a11y@6.10.2(eslint@8.57.1): + eslint-plugin-jsx-a11y@6.10.2(eslint@10.3.0(jiti@2.7.0)): dependencies: aria-query: 5.3.2 array-includes: 3.1.9 @@ -60730,7 +70315,7 @@ snapshots: axobject-query: 4.1.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 8.57.1 + eslint: 10.3.0(jiti@2.7.0) hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 @@ -60739,12 +70324,12 @@ snapshots: safe-regex-test: 1.1.0 string.prototype.includes: 2.0.1 - eslint-plugin-n@15.7.0(eslint@8.57.1): + eslint-plugin-n@15.7.0(eslint@10.3.0(jiti@2.7.0)): dependencies: builtins: 5.1.0 - eslint: 8.57.1 - eslint-plugin-es: 4.1.0(eslint@8.57.1) - eslint-utils: 3.0.0(eslint@8.57.1) + eslint: 10.3.0(jiti@2.7.0) + eslint-plugin-es: 4.1.0(eslint@10.3.0(jiti@2.7.0)) + eslint-utils: 3.0.0(eslint@10.3.0(jiti@2.7.0)) ignore: 5.3.1 is-core-module: 2.16.1 minimatch: 3.1.5 @@ -60753,114 +70338,143 @@ snapshots: eslint-plugin-no-only-tests@3.3.0: {} - eslint-plugin-node@11.1.0(eslint@10.2.0(jiti@2.6.1)): + eslint-plugin-node@11.1.0(eslint@10.2.0(jiti@2.7.0)): dependencies: - eslint: 10.2.0(jiti@2.6.1) - eslint-plugin-es: 3.0.1(eslint@10.2.0(jiti@2.6.1)) + eslint: 10.2.0(jiti@2.7.0) + eslint-plugin-es: 3.0.1(eslint@10.2.0(jiti@2.7.0)) eslint-utils: 2.1.0 ignore: 5.3.1 minimatch: 3.1.5 resolve: 1.22.12 semver: 6.3.1 - eslint-plugin-node@11.1.0(eslint@8.57.1): + eslint-plugin-node@11.1.0(eslint@10.2.1(jiti@2.7.0)): dependencies: - eslint: 8.57.1 - eslint-plugin-es: 3.0.1(eslint@8.57.1) + eslint: 10.2.1(jiti@2.7.0) + eslint-plugin-es: 3.0.1(eslint@10.2.1(jiti@2.7.0)) eslint-utils: 2.1.0 ignore: 5.3.1 minimatch: 3.1.5 resolve: 1.22.12 semver: 6.3.1 - eslint-plugin-nuxt@4.0.0(eslint@8.57.1): + eslint-plugin-node@11.1.0(eslint@10.3.0(jiti@2.7.0)): dependencies: - eslint-plugin-vue: 9.33.0(eslint@8.57.1) + eslint: 10.3.0(jiti@2.7.0) + eslint-plugin-es: 3.0.1(eslint@10.3.0(jiti@2.7.0)) + eslint-utils: 2.1.0 + ignore: 5.3.1 + minimatch: 3.1.5 + resolve: 1.22.12 + semver: 6.3.1 + + eslint-plugin-nuxt@4.0.0(eslint@10.3.0(jiti@2.7.0)): + dependencies: + eslint-plugin-vue: 9.33.0(eslint@10.3.0(jiti@2.7.0)) semver: 7.7.4 - vue-eslint-parser: 9.4.3(eslint@8.57.1) + vue-eslint-parser: 9.4.3(eslint@10.3.0(jiti@2.7.0)) transitivePeerDependencies: - eslint - supports-color - eslint-plugin-playwright@0.15.3(eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(jest@29.7.0(@types/node@25.6.0)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.9.3)))(typescript@5.9.3))(eslint@8.57.1): + eslint-plugin-playwright@2.10.2(eslint@10.3.0(jiti@2.7.0)): dependencies: - eslint: 8.57.1 - optionalDependencies: - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(jest@29.7.0(@types/node@25.6.0)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.9.3)))(typescript@5.9.3) + eslint: 10.3.0(jiti@2.7.0) + globals: 17.6.0 - eslint-plugin-prefer-arrow@1.2.3(eslint@8.57.1): + eslint-plugin-prefer-arrow@1.2.3(eslint@10.3.0(jiti@2.7.0)): dependencies: - eslint: 8.57.1 + eslint: 10.3.0(jiti@2.7.0) - eslint-plugin-prettier@5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.2.0(jiti@2.6.1)))(eslint@10.2.0(jiti@2.6.1))(prettier@3.8.2): + eslint-plugin-prettier@5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.2.0(jiti@2.7.0)))(eslint@10.2.0(jiti@2.7.0))(prettier@3.8.2): dependencies: - eslint: 10.2.0(jiti@2.6.1) + eslint: 10.2.0(jiti@2.7.0) prettier: 3.8.2 prettier-linter-helpers: 1.0.1 synckit: 0.11.12 optionalDependencies: "@types/eslint": 9.6.1 - eslint-config-prettier: 10.1.8(eslint@10.2.0(jiti@2.6.1)) + eslint-config-prettier: 10.1.8(eslint@10.2.0(jiti@2.7.0)) - eslint-plugin-prettier@5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.2.0(jiti@2.6.1)))(eslint@10.2.0(jiti@2.6.1))(prettier@3.8.3): + eslint-plugin-prettier@5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.2.1(jiti@2.7.0)))(eslint@10.2.1(jiti@2.7.0))(prettier@3.8.3): dependencies: - eslint: 10.2.0(jiti@2.6.1) + eslint: 10.2.1(jiti@2.7.0) + prettier: 3.8.3 + prettier-linter-helpers: 1.0.1 + synckit: 0.11.12 + optionalDependencies: + "@types/eslint": 9.6.1 + eslint-config-prettier: 10.1.8(eslint@10.2.1(jiti@2.7.0)) + + eslint-plugin-prettier@5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.3.0(jiti@2.7.0)))(eslint@10.3.0(jiti@2.7.0))(prettier@3.8.3): + dependencies: + eslint: 10.3.0(jiti@2.7.0) prettier: 3.8.3 prettier-linter-helpers: 1.0.1 synckit: 0.11.12 optionalDependencies: "@types/eslint": 9.6.1 - eslint-config-prettier: 10.1.8(eslint@10.2.0(jiti@2.6.1)) + eslint-config-prettier: 10.1.8(eslint@10.3.0(jiti@2.7.0)) - eslint-plugin-prettier@5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@8.10.2(eslint@8.57.1))(eslint@8.57.1)(wp-prettier@3.0.3): + eslint-plugin-prettier@5.5.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@10.3.0(jiti@2.7.0)))(eslint@10.3.0(jiti@2.7.0))(wp-prettier@3.0.3): dependencies: - eslint: 8.57.1 + eslint: 10.3.0(jiti@2.7.0) prettier: wp-prettier@3.0.3 prettier-linter-helpers: 1.0.1 synckit: 0.11.12 optionalDependencies: "@types/eslint": 9.6.1 - eslint-config-prettier: 8.10.2(eslint@8.57.1) + eslint-config-prettier: 10.1.8(eslint@10.3.0(jiti@2.7.0)) - eslint-plugin-promise@6.6.0(eslint@8.57.1): + eslint-plugin-promise@6.6.0(eslint@10.3.0(jiti@2.7.0)): dependencies: - eslint: 8.57.1 + eslint: 10.3.0(jiti@2.7.0) - eslint-plugin-qunit@8.2.6(eslint@10.2.0(jiti@2.6.1)): + eslint-plugin-qunit@8.2.6(eslint@10.2.0(jiti@2.7.0)): dependencies: - "@eslint-community/eslint-utils": 4.9.1(eslint@10.2.0(jiti@2.6.1)) - eslint: 10.2.0(jiti@2.6.1) + "@eslint-community/eslint-utils": 4.9.1(eslint@10.2.0(jiti@2.7.0)) + eslint: 10.2.0(jiti@2.7.0) requireindex: 1.2.0 - eslint-plugin-qwik@1.19.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2): + eslint-plugin-qunit@8.2.6(eslint@10.2.1(jiti@2.7.0)): dependencies: - "@typescript-eslint/utils": 8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) - eslint: 10.2.0(jiti@2.6.1) + "@eslint-community/eslint-utils": 4.9.1(eslint@10.2.1(jiti@2.7.0)) + eslint: 10.2.1(jiti@2.7.0) + requireindex: 1.2.0 + + eslint-plugin-qwik@1.19.2(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2): + dependencies: + "@typescript-eslint/utils": 8.58.1(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) + eslint: 10.2.0(jiti@2.7.0) jsx-ast-utils: 3.3.5 transitivePeerDependencies: - supports-color - typescript - eslint-plugin-react-hooks@4.6.2(eslint@8.57.1): + eslint-plugin-react-hooks@4.6.2(eslint@10.3.0(jiti@2.7.0)): + dependencies: + eslint: 10.3.0(jiti@2.7.0) + + eslint-plugin-react-hooks@5.2.0(eslint@10.3.0(jiti@2.7.0)): dependencies: - eslint: 8.57.1 + eslint: 10.3.0(jiti@2.7.0) - eslint-plugin-react-hooks@7.0.1(eslint@10.2.0(jiti@2.6.1)): + eslint-plugin-react-hooks@7.0.1(eslint@10.2.0(jiti@2.7.0)): dependencies: "@babel/core": 7.29.0 "@babel/parser": 7.29.2 - eslint: 10.2.0(jiti@2.6.1) + eslint: 10.2.0(jiti@2.7.0) hermes-parser: 0.25.1 zod: 4.3.6 zod-validation-error: 4.0.2(zod@4.3.6) transitivePeerDependencies: - supports-color - eslint-plugin-react-refresh@0.5.2(eslint@10.2.0(jiti@2.6.1)): + eslint-plugin-react-refresh@0.5.2(eslint@10.2.0(jiti@2.7.0)): dependencies: - eslint: 10.2.0(jiti@2.6.1) + eslint: 10.2.0(jiti@2.7.0) - eslint-plugin-react@7.37.5(eslint@10.2.0(jiti@2.6.1)): + eslint-plugin-react@7.37.5(eslint@10.2.0(jiti@2.7.0)): dependencies: array-includes: 3.1.9 array.prototype.findlast: 1.2.5 @@ -60868,7 +70482,7 @@ snapshots: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.3.2 - eslint: 10.2.0(jiti@2.6.1) + eslint: 10.2.0(jiti@2.7.0) estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 @@ -60882,7 +70496,7 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-react@7.37.5(eslint@8.57.1): + eslint-plugin-react@7.37.5(eslint@10.3.0(jiti@2.7.0)): dependencies: array-includes: 3.1.9 array.prototype.findlast: 1.2.5 @@ -60890,7 +70504,7 @@ snapshots: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.3.2 - eslint: 8.57.1 + eslint: 10.3.0(jiti@2.7.0) estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 @@ -60904,16 +70518,16 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-svelte@2.46.1(eslint@8.57.1)(svelte@4.2.20)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.9.3)): + eslint-plugin-svelte@2.46.1(eslint@10.3.0(jiti@2.7.0))(svelte@4.2.20)(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@5.9.3)): dependencies: - "@eslint-community/eslint-utils": 4.9.1(eslint@8.57.1) + "@eslint-community/eslint-utils": 4.9.1(eslint@10.3.0(jiti@2.7.0)) "@jridgewell/sourcemap-codec": 1.5.5 - eslint: 8.57.1 - eslint-compat-utils: 0.5.1(eslint@8.57.1) + eslint: 10.3.0(jiti@2.7.0) + eslint-compat-utils: 0.5.1(eslint@10.3.0(jiti@2.7.0)) esutils: 2.0.3 known-css-properties: 0.35.0 postcss: 8.5.9 - postcss-load-config: 3.1.4(postcss@8.5.9)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.9.3)) + postcss-load-config: 3.1.4(postcss@8.5.9)(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@5.9.3)) postcss-safe-parser: 6.0.0(postcss@8.5.9) postcss-selector-parser: 6.1.2 semver: 7.7.4 @@ -60923,41 +70537,41 @@ snapshots: transitivePeerDependencies: - ts-node - eslint-plugin-svelte@3.17.0(eslint@10.2.0(jiti@2.6.1))(svelte@5.55.3(@typescript-eslint/types@8.58.2))(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@6.0.2)): + eslint-plugin-svelte@3.17.0(eslint@10.2.0(jiti@2.7.0))(svelte@5.55.3(@typescript-eslint/types@8.59.2))(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.2)): dependencies: - "@eslint-community/eslint-utils": 4.9.1(eslint@10.2.0(jiti@2.6.1)) + "@eslint-community/eslint-utils": 4.9.1(eslint@10.2.0(jiti@2.7.0)) "@jridgewell/sourcemap-codec": 1.5.5 - eslint: 10.2.0(jiti@2.6.1) + eslint: 10.2.0(jiti@2.7.0) esutils: 2.0.3 globals: 16.4.0 known-css-properties: 0.37.0 postcss: 8.5.9 - postcss-load-config: 3.1.4(postcss@8.5.9)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@6.0.2)) + postcss-load-config: 3.1.4(postcss@8.5.9)(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.2)) postcss-safe-parser: 7.0.1(postcss@8.5.9) semver: 7.7.4 - svelte-eslint-parser: 1.6.0(svelte@5.55.3(@typescript-eslint/types@8.58.2)) + svelte-eslint-parser: 1.6.0(svelte@5.55.3(@typescript-eslint/types@8.59.2)) optionalDependencies: - svelte: 5.55.3(@typescript-eslint/types@8.58.2) + svelte: 5.55.3(@typescript-eslint/types@8.59.2) transitivePeerDependencies: - ts-node - eslint-plugin-tsdoc@0.5.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2): + eslint-plugin-tsdoc@0.5.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3): dependencies: "@microsoft/tsdoc": 0.16.0 "@microsoft/tsdoc-config": 0.18.1 - "@typescript-eslint/utils": 8.56.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) + "@typescript-eslint/utils": 8.56.1(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) transitivePeerDependencies: - eslint - supports-color - typescript - eslint-plugin-unicorn@44.0.2(eslint@8.57.1): + eslint-plugin-unicorn@44.0.2(eslint@10.3.0(jiti@2.7.0)): dependencies: "@babel/helper-validator-identifier": 7.28.5 ci-info: 3.9.0 clean-regexp: 1.0.0 - eslint: 8.57.1 - eslint-utils: 3.0.0(eslint@8.57.1) + eslint: 10.3.0(jiti@2.7.0) + eslint-utils: 3.0.0(eslint@10.3.0(jiti@2.7.0)) esquery: 1.7.0 indent-string: 4.0.0 is-builtin-module: 3.2.1 @@ -60983,16 +70597,58 @@ snapshots: "@stylistic/eslint-plugin": 5.10.0(eslint@10.2.0(jiti@2.6.1)) "@typescript-eslint/parser": 8.58.1(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) - eslint-plugin-vue@9.33.0(eslint@8.57.1): + eslint-plugin-vue@10.8.0(@stylistic/eslint-plugin@5.10.0(eslint@10.2.0(jiti@2.7.0)))(@typescript-eslint/parser@8.58.1(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2))(eslint@10.2.0(jiti@2.7.0))(vue-eslint-parser@10.4.0(eslint@10.2.0(jiti@2.7.0))): + dependencies: + "@eslint-community/eslint-utils": 4.9.1(eslint@10.2.0(jiti@2.7.0)) + eslint: 10.2.0(jiti@2.7.0) + natural-compare: 1.4.0 + nth-check: 2.1.1 + postcss-selector-parser: 7.1.1 + semver: 7.7.4 + vue-eslint-parser: 10.4.0(eslint@10.2.0(jiti@2.7.0)) + xml-name-validator: 4.0.0 + optionalDependencies: + "@stylistic/eslint-plugin": 5.10.0(eslint@10.2.0(jiti@2.7.0)) + "@typescript-eslint/parser": 8.58.1(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) + + eslint-plugin-vue@10.8.0(@stylistic/eslint-plugin@5.10.0(eslint@10.3.0(jiti@2.7.0)))(@typescript-eslint/parser@8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.3.0(jiti@2.7.0))(vue-eslint-parser@10.4.0(eslint@10.3.0(jiti@2.7.0))): + dependencies: + "@eslint-community/eslint-utils": 4.9.1(eslint@10.3.0(jiti@2.7.0)) + eslint: 10.3.0(jiti@2.7.0) + natural-compare: 1.4.0 + nth-check: 2.1.1 + postcss-selector-parser: 7.1.1 + semver: 7.7.4 + vue-eslint-parser: 10.4.0(eslint@10.3.0(jiti@2.7.0)) + xml-name-validator: 4.0.0 + optionalDependencies: + "@stylistic/eslint-plugin": 5.10.0(eslint@10.3.0(jiti@2.7.0)) + "@typescript-eslint/parser": 8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3) + + eslint-plugin-vue@10.8.0(@stylistic/eslint-plugin@5.10.0(eslint@10.3.0(jiti@2.7.0)))(@typescript-eslint/parser@8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.3.0(jiti@2.7.0))(vue-eslint-parser@10.4.0(eslint@10.3.0(jiti@2.7.0))): dependencies: - "@eslint-community/eslint-utils": 4.9.1(eslint@8.57.1) - eslint: 8.57.1 + "@eslint-community/eslint-utils": 4.9.1(eslint@10.3.0(jiti@2.7.0)) + eslint: 10.3.0(jiti@2.7.0) + natural-compare: 1.4.0 + nth-check: 2.1.1 + postcss-selector-parser: 7.1.1 + semver: 7.7.4 + vue-eslint-parser: 10.4.0(eslint@10.3.0(jiti@2.7.0)) + xml-name-validator: 4.0.0 + optionalDependencies: + "@stylistic/eslint-plugin": 5.10.0(eslint@10.3.0(jiti@2.7.0)) + "@typescript-eslint/parser": 8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + + eslint-plugin-vue@9.33.0(eslint@10.3.0(jiti@2.7.0)): + dependencies: + "@eslint-community/eslint-utils": 4.9.1(eslint@10.3.0(jiti@2.7.0)) + eslint: 10.3.0(jiti@2.7.0) globals: 13.24.0 natural-compare: 1.4.0 nth-check: 2.1.1 postcss-selector-parser: 6.1.2 semver: 7.7.4 - vue-eslint-parser: 9.4.3(eslint@8.57.1) + vue-eslint-parser: 9.4.3(eslint@10.3.0(jiti@2.7.0)) xml-name-validator: 4.0.0 transitivePeerDependencies: - supports-color @@ -61020,7 +70676,7 @@ snapshots: eslint-scope@9.1.2: dependencies: "@types/esrecurse": 4.3.1 - "@types/estree": 1.0.8 + "@types/estree": 1.0.9 esrecurse: 4.3.0 estraverse: 5.3.0 @@ -61028,14 +70684,19 @@ snapshots: dependencies: eslint-visitor-keys: 1.3.0 - eslint-utils@3.0.0(eslint@10.2.0(jiti@2.6.1)): + eslint-utils@3.0.0(eslint@10.2.0(jiti@2.7.0)): dependencies: - eslint: 10.2.0(jiti@2.6.1) + eslint: 10.2.0(jiti@2.7.0) + eslint-visitor-keys: 2.1.0 + + eslint-utils@3.0.0(eslint@10.2.1(jiti@2.7.0)): + dependencies: + eslint: 10.2.1(jiti@2.7.0) eslint-visitor-keys: 2.1.0 - eslint-utils@3.0.0(eslint@8.57.1): + eslint-utils@3.0.0(eslint@10.3.0(jiti@2.7.0)): dependencies: - eslint: 8.57.1 + eslint: 10.3.0(jiti@2.7.0) eslint-visitor-keys: 2.1.0 eslint-visitor-keys@1.3.0: {} @@ -61048,15 +70709,15 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint-webpack-plugin@4.2.0(eslint@8.57.1)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + eslint-webpack-plugin@4.2.0(eslint@10.3.0(jiti@2.7.0))(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: "@types/eslint": 8.56.12 - eslint: 8.57.1 + eslint: 10.3.0(jiti@2.7.0) jest-worker: 29.7.0 micromatch: 4.0.8 normalize-path: 3.0.0 schema-utils: 4.3.3 - webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) eslint@10.2.0(jiti@2.6.1): dependencies: @@ -61069,7 +70730,7 @@ snapshots: "@humanfs/node": 0.16.6 "@humanwhocodes/module-importer": 1.0.1 "@humanwhocodes/retry": 0.4.3 - "@types/estree": 1.0.8 + "@types/estree": 1.0.9 ajv: 6.14.0 cross-spawn: 7.0.6 debug: 4.4.3(supports-color@5.5.0) @@ -61087,7 +70748,7 @@ snapshots: imurmurhash: 0.1.4 is-glob: 4.0.3 json-stable-stringify-without-jsonify: 1.0.1 - minimatch: 10.2.4 + minimatch: 10.2.5 natural-compare: 1.4.0 optionator: 0.9.3 optionalDependencies: @@ -61095,46 +70756,114 @@ snapshots: transitivePeerDependencies: - supports-color - eslint@8.57.1: + eslint@10.2.0(jiti@2.7.0): dependencies: - "@eslint-community/eslint-utils": 4.9.1(eslint@8.57.1) + "@eslint-community/eslint-utils": 4.9.1(eslint@10.2.0(jiti@2.7.0)) "@eslint-community/regexpp": 4.12.2 - "@eslint/eslintrc": 2.1.4 - "@eslint/js": 8.57.1 - "@humanwhocodes/config-array": 0.13.0 + "@eslint/config-array": 0.23.4 + "@eslint/config-helpers": 0.5.4 + "@eslint/core": 1.2.0 + "@eslint/plugin-kit": 0.7.0 + "@humanfs/node": 0.16.6 "@humanwhocodes/module-importer": 1.0.1 - "@nodelib/fs.walk": 1.2.8 - "@ungap/structured-clone": 1.3.0 + "@humanwhocodes/retry": 0.4.3 + "@types/estree": 1.0.9 ajv: 6.14.0 - chalk: 4.1.2 cross-spawn: 7.0.6 debug: 4.4.3(supports-color@5.5.0) - doctrine: 3.0.0 escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 + eslint-scope: 9.1.2 + eslint-visitor-keys: 5.0.1 + espree: 11.2.0 esquery: 1.7.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 + file-entry-cache: 8.0.0 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 ignore: 5.3.1 imurmurhash: 0.1.4 is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.1 json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.5 + minimatch: 10.2.5 + natural-compare: 1.4.0 + optionator: 0.9.3 + optionalDependencies: + jiti: 2.7.0 + transitivePeerDependencies: + - supports-color + + eslint@10.2.1(jiti@2.7.0): + dependencies: + "@eslint-community/eslint-utils": 4.9.1(eslint@10.2.1(jiti@2.7.0)) + "@eslint-community/regexpp": 4.12.2 + "@eslint/config-array": 0.23.5 + "@eslint/config-helpers": 0.5.5 + "@eslint/core": 1.2.1 + "@eslint/plugin-kit": 0.7.1 + "@humanfs/node": 0.16.6 + "@humanwhocodes/module-importer": 1.0.1 + "@humanwhocodes/retry": 0.4.3 + "@types/estree": 1.0.9 + ajv: 6.14.0 + cross-spawn: 7.0.6 + debug: 4.4.3(supports-color@5.5.0) + escape-string-regexp: 4.0.0 + eslint-scope: 9.1.2 + eslint-visitor-keys: 5.0.1 + espree: 11.2.0 + esquery: 1.7.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.1 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + minimatch: 10.2.5 natural-compare: 1.4.0 optionator: 0.9.4 - strip-ansi: 6.0.1 - text-table: 0.2.0 + optionalDependencies: + jiti: 2.7.0 + transitivePeerDependencies: + - supports-color + + eslint@10.3.0(jiti@2.7.0): + dependencies: + "@eslint-community/eslint-utils": 4.9.1(eslint@10.3.0(jiti@2.7.0)) + "@eslint-community/regexpp": 4.12.2 + "@eslint/config-array": 0.23.5 + "@eslint/config-helpers": 0.5.5 + "@eslint/core": 1.2.1 + "@eslint/plugin-kit": 0.7.1 + "@humanfs/node": 0.16.6 + "@humanwhocodes/module-importer": 1.0.1 + "@humanwhocodes/retry": 0.4.3 + "@types/estree": 1.0.8 + ajv: 6.14.0 + cross-spawn: 7.0.6 + debug: 4.4.3(supports-color@5.5.0) + escape-string-regexp: 4.0.0 + eslint-scope: 9.1.2 + eslint-visitor-keys: 5.0.1 + espree: 11.2.0 + esquery: 1.7.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.1 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + minimatch: 10.2.5 + natural-compare: 1.4.0 + optionator: 0.9.4 + optionalDependencies: + jiti: 2.7.0 transitivePeerDependencies: - supports-color @@ -61168,11 +70897,11 @@ snapshots: dependencies: estraverse: 5.3.0 - esrap@2.2.5(@typescript-eslint/types@8.58.2): + esrap@2.2.5(@typescript-eslint/types@8.59.2): dependencies: "@jridgewell/sourcemap-codec": 1.5.5 optionalDependencies: - "@typescript-eslint/types": 8.58.2 + "@typescript-eslint/types": 8.59.2 esrecurse@4.3.0: dependencies: @@ -61190,7 +70919,7 @@ snapshots: estree-walker@3.0.3: dependencies: - "@types/estree": 1.0.8 + "@types/estree": 1.0.9 esutils@2.0.3: {} @@ -61266,7 +70995,7 @@ snapshots: execa@5.0.0: dependencies: cross-spawn: 7.0.6 - get-stream: 6.0.0 + get-stream: 6.0.1 human-signals: 2.1.0 is-stream: 2.0.1 merge-stream: 2.0.0 @@ -61372,6 +71101,11 @@ snapshots: express: 5.2.1 ip-address: 10.1.0 + express-rate-limit@8.4.1(express@5.2.1): + dependencies: + express: 5.2.1 + ip-address: 10.1.0 + express@4.22.1: dependencies: accepts: 1.3.8 @@ -61462,7 +71196,7 @@ snapshots: externality@1.0.2: dependencies: - enhanced-resolve: 5.20.1 + enhanced-resolve: 5.21.0 mlly: 1.8.2 pathe: 1.1.2 ufo: 1.6.3 @@ -61480,12 +71214,12 @@ snapshots: transitivePeerDependencies: - supports-color - extract-css-chunks-webpack-plugin@4.10.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + extract-css-chunks-webpack-plugin@4.10.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: loader-utils: 2.0.4 normalize-url: 1.9.1 schema-utils: 1.0.0 - webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) webpack-sources: 1.4.3 extract-stack@2.0.0: {} @@ -61642,25 +71376,21 @@ snapshots: dependencies: flat-cache: 6.1.22 - file-entry-cache@6.0.1: - dependencies: - flat-cache: 3.2.0 - file-entry-cache@8.0.0: dependencies: flat-cache: 4.0.1 - file-loader@6.2.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + file-loader@6.2.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) - file-loader@6.2.0(webpack@5.106.1): + file-loader@6.2.0(webpack@5.106.2): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2) + webpack: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) optional: true file-uri-to-path@1.0.0: {} @@ -61671,12 +71401,24 @@ snapshots: filename-reserved-regex@2.0.0: {} + filename-reserved-regex@3.0.0: {} + + filename-reserved-regex@4.0.0: {} + filenamify@4.3.0: dependencies: filename-reserved-regex: 2.0.0 strip-outer: 1.0.1 trim-repeated: 1.0.0 + filenamify@6.0.0: + dependencies: + filename-reserved-regex: 3.0.0 + + filenamify@7.0.1: + dependencies: + filename-reserved-regex: 4.0.0 + filesize@11.0.15: {} filesize@6.4.0: {} @@ -61763,6 +71505,8 @@ snapshots: fs-exists-sync: 0.1.0 resolve-dir: 0.1.1 + find-index@0.1.1: {} + find-index@1.1.1: {} find-parent-dir@0.3.1: {} @@ -61836,7 +71580,7 @@ snapshots: dependencies: magic-string: 0.30.21 mlly: 1.8.2 - rollup: 4.60.1 + rollup: 4.60.2 fixturify-project@1.10.0: dependencies: @@ -61853,12 +71597,6 @@ snapshots: flagged-respawn@2.0.0: {} - flat-cache@3.2.0: - dependencies: - flatted: 3.4.2 - keyv: 4.5.4 - rimraf: 3.0.2 - flat-cache@4.0.1: dependencies: flatted: 3.4.2 @@ -61882,6 +71620,12 @@ snapshots: flattie@1.1.1: {} + flora-colossus@3.0.2: + dependencies: + debug: 4.4.3(supports-color@5.5.0) + transitivePeerDependencies: + - supports-color + flush-write-stream@1.1.1: dependencies: inherits: 2.0.4 @@ -61889,6 +71633,10 @@ snapshots: fn.name@1.1.0: {} + focus-trap@7.8.0: + dependencies: + tabbable: 6.4.0 + follow-redirects@1.15.11(debug@4.4.3): optionalDependencies: debug: 4.4.3(supports-color@5.5.0) @@ -61929,7 +71677,7 @@ snapshots: forever-agent@0.6.1: {} - fork-ts-checker-webpack-plugin@6.5.3(eslint@8.57.1)(typescript@5.9.3)(vue-template-compiler@2.7.16)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + fork-ts-checker-webpack-plugin@6.5.3(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3)(vue-template-compiler@2.7.16)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: "@babel/code-frame": 7.29.0 "@types/json-schema": 7.0.15 @@ -61945,12 +71693,12 @@ snapshots: semver: 7.7.4 tapable: 1.1.3 typescript: 5.9.3 - webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) optionalDependencies: - eslint: 8.57.1 + eslint: 10.3.0(jiti@2.7.0) vue-template-compiler: 2.7.16 - fork-ts-checker-webpack-plugin@6.5.3(eslint@8.57.1)(typescript@5.9.3)(vue-template-compiler@2.7.16)(webpack@5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2)): + fork-ts-checker-webpack-plugin@6.5.3(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3)(vue-template-compiler@2.7.16)(webpack@5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2)): dependencies: "@babel/code-frame": 7.29.0 "@types/json-schema": 7.0.15 @@ -61966,12 +71714,12 @@ snapshots: semver: 7.7.4 tapable: 1.1.3 typescript: 5.9.3 - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2) + webpack: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) optionalDependencies: - eslint: 8.57.1 + eslint: 10.3.0(jiti@2.7.0) vue-template-compiler: 2.7.16 - fork-ts-checker-webpack-plugin@6.5.3(eslint@8.57.1)(typescript@6.0.2)(vue-template-compiler@2.7.16)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + fork-ts-checker-webpack-plugin@6.5.3(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3)(vue-template-compiler@2.7.16)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: "@babel/code-frame": 7.29.0 "@types/json-schema": 7.0.15 @@ -61986,13 +71734,13 @@ snapshots: schema-utils: 2.7.0 semver: 7.7.4 tapable: 1.1.3 - typescript: 6.0.2 - webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + typescript: 6.0.3 + webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) optionalDependencies: - eslint: 8.57.1 + eslint: 10.3.0(jiti@2.7.0) vue-template-compiler: 2.7.16 - fork-ts-checker-webpack-plugin@8.0.0(typescript@5.9.3)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + fork-ts-checker-webpack-plugin@8.0.0(typescript@5.9.3)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: "@babel/code-frame": 7.29.0 chalk: 4.1.2 @@ -62001,13 +71749,13 @@ snapshots: deepmerge: 4.3.1 fs-extra: 10.1.0 memfs: 3.5.3 - minimatch: 3.1.4 + minimatch: 3.1.5 node-abort-controller: 3.1.1 schema-utils: 3.3.0 semver: 7.7.4 tapable: 2.3.2 typescript: 5.9.3 - webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) form-data@2.3.3: dependencies: @@ -62033,15 +71781,15 @@ snapshots: dependencies: map-cache: 0.2.2 - framer-motion@11.18.2(@emotion/is-prop-valid@1.4.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + framer-motion@11.18.2(@emotion/is-prop-valid@1.4.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5): dependencies: motion-dom: 11.18.1 motion-utils: 11.18.1 tslib: 2.8.1 optionalDependencies: "@emotion/is-prop-valid": 1.4.0 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) fresh@0.5.2: {} @@ -62054,10 +71802,6 @@ snapshots: fromentries@1.3.2: {} - front-matter@4.0.2: - dependencies: - js-yaml: 3.14.1 - fs-constants@1.0.0: {} fs-exists-sync@0.1.0: {} @@ -62081,6 +71825,12 @@ snapshots: jsonfile: 6.1.0 universalify: 2.0.0 + fs-extra@11.3.5: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.0 + fs-extra@4.0.3: dependencies: graceful-fs: 4.2.11 @@ -62138,10 +71888,6 @@ snapshots: dependencies: minipass: 3.3.6 - fs-minipass@3.0.2: - dependencies: - minipass: 5.0.0 - fs-minipass@3.0.3: dependencies: minipass: 7.1.3 @@ -62223,6 +71969,13 @@ snapshots: fzf@0.5.2: {} + galactus@2.0.2: + dependencies: + debug: 4.4.3(supports-color@5.5.0) + flora-colossus: 3.0.2 + transitivePeerDependencies: + - supports-color + gauge@4.0.4: dependencies: aproba: 2.0.0 @@ -62322,6 +72075,10 @@ snapshots: dependencies: resolve-pkg-maps: 1.0.0 + get-tsconfig@5.0.0-beta.4: + dependencies: + resolve-pkg-maps: 1.0.0 + get-uri@6.0.5: dependencies: basic-ftp: 5.2.2 @@ -62380,10 +72137,10 @@ snapshots: git-repo-info@2.1.1: {} - git-semver-tags@5.0.0: + git-semver-tags@5.0.1: dependencies: meow: 8.1.2 - semver: 6.3.1 + semver: 7.7.4 git-up@7.0.0: dependencies: @@ -62453,14 +72210,9 @@ snapshots: async-done: 2.0.0 chokidar: 3.6.0 - glob@10.4.5: + glob2base@0.0.12: dependencies: - foreground-child: 3.3.1 - jackspeak: 3.4.3 - minimatch: 9.0.9 - minipass: 7.1.3 - package-json-from-dist: 1.0.1 - path-scurry: 1.11.1 + find-index: 0.1.1 glob@10.5.0: dependencies: @@ -62508,7 +72260,7 @@ snapshots: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 3.1.4 + minimatch: 3.1.5 once: 1.4.0 path-is-absolute: 1.0.1 @@ -62541,6 +72293,10 @@ snapshots: dependencies: ini: 4.1.1 + global-directory@5.0.0: + dependencies: + ini: 6.0.0 + global-dirs@3.0.1: dependencies: ini: 2.0.0 @@ -62589,6 +72345,8 @@ snapshots: globals@17.5.0: {} + globals@17.6.0: {} + globals@9.18.0: {} globalthis@1.0.4: @@ -62701,7 +72459,7 @@ snapshots: gray-matter@4.0.3: dependencies: - js-yaml: 3.14.1 + js-yaml: 3.14.2 kind-of: 6.0.3 section-matter: 1.0.0 strip-bom-string: 1.0.0 @@ -62763,15 +72521,6 @@ snapshots: handle-thing@2.0.1: {} - handlebars@4.7.7: - dependencies: - minimist: 1.2.8 - neo-async: 2.6.2 - source-map: 0.6.1 - wordwrap: 1.0.0 - optionalDependencies: - uglify-js: 3.19.3 - handlebars@4.7.9: dependencies: minimist: 1.2.8 @@ -62790,7 +72539,7 @@ snapshots: hard-rejection@2.1.0: {} - hard-source-webpack-plugin@0.13.1(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + hard-source-webpack-plugin@0.13.1(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: chalk: 2.4.2 find-cache-dir: 2.1.0 @@ -62803,7 +72552,7 @@ snapshots: rimraf: 2.7.1 semver: 5.7.2 tapable: 1.1.3 - webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) webpack-sources: 1.4.3 write-json-file: 2.3.0 @@ -63090,7 +72839,7 @@ snapshots: hosted-git-info@9.0.2: dependencies: - lru-cache: 11.3.2 + lru-cache: 11.3.5 hpack.js@2.1.6: dependencies: @@ -63132,7 +72881,7 @@ snapshots: html-escaper@3.0.3: {} - html-minifier-next@5.2.0(@swc/core@1.15.26): + html-minifier-next@5.2.0(@swc/core@1.15.33): dependencies: commander: 14.0.3 entities: 7.0.1 @@ -63140,7 +72889,7 @@ snapshots: svgo: 4.0.1 terser: 5.46.1 optionalDependencies: - "@swc/core": 1.15.26 + "@swc/core": 1.15.33 html-minifier-terser@5.1.1: dependencies: @@ -63186,11 +72935,13 @@ snapshots: html-tags@3.3.1: {} + html-tags@5.1.0: {} + html-void-elements@3.0.0: {} html-webpack-exclude-assets-plugin@0.0.7: {} - html-webpack-plugin@3.2.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + html-webpack-plugin@3.2.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: html-minifier: 3.5.21 loader-utils: 0.2.17 @@ -63199,9 +72950,9 @@ snapshots: tapable: 1.1.3 toposort: 1.0.7 util.promisify: 1.0.0 - webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) - html-webpack-plugin@4.5.2(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + html-webpack-plugin@4.5.2(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: "@types/html-minifier-terser": 5.1.2 "@types/tapable": 1.0.12 @@ -63212,9 +72963,9 @@ snapshots: pretty-error: 2.1.2 tapable: 1.1.3 util.promisify: 1.0.0 - webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) - html-webpack-plugin@5.6.6(webpack@5.105.2(@swc/core@1.15.26)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + html-webpack-plugin@5.6.6(webpack@5.106.1): dependencies: "@types/html-minifier-terser": 6.1.0 html-minifier-terser: 6.1.0 @@ -63222,10 +72973,9 @@ snapshots: pretty-error: 4.0.0 tapable: 2.3.2 optionalDependencies: - webpack: 5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) - optional: true + webpack: 5.106.1(@swc/core@1.15.33)(webpack-cli@5.1.4) - html-webpack-plugin@5.6.6(webpack@5.106.1(@swc/core@1.15.26)(esbuild@0.28.0)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + html-webpack-plugin@5.6.6(webpack@5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2)): dependencies: "@types/html-minifier-terser": 6.1.0 html-minifier-terser: 6.1.0 @@ -63233,10 +72983,20 @@ snapshots: pretty-error: 4.0.0 tapable: 2.3.2 optionalDependencies: - webpack: 5.106.1(@swc/core@1.15.26)(esbuild@0.28.0)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) + + html-webpack-plugin@5.6.7(webpack@5.105.2(@swc/core@1.15.33)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): + dependencies: + "@types/html-minifier-terser": 6.1.0 + html-minifier-terser: 6.1.0 + lodash: 4.18.1 + pretty-error: 4.0.0 + tapable: 2.3.2 + optionalDependencies: + webpack: 5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) optional: true - html-webpack-plugin@5.6.6(webpack@5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2)): + html-webpack-plugin@5.6.7(webpack@5.106.2(@swc/core@1.15.33)(esbuild@0.27.7)(webpack-cli@7.0.2)): dependencies: "@types/html-minifier-terser": 6.1.0 html-minifier-terser: 6.1.0 @@ -63244,9 +73004,10 @@ snapshots: pretty-error: 4.0.0 tapable: 2.3.2 optionalDependencies: - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2) + webpack: 5.106.2(@swc/core@1.15.33)(esbuild@0.27.7)(webpack-cli@7.0.2) + optional: true - html-webpack-plugin@5.6.6(webpack@5.106.1): + html-webpack-plugin@5.6.7(webpack@5.106.2): dependencies: "@types/html-minifier-terser": 6.1.0 html-minifier-terser: 6.1.0 @@ -63254,7 +73015,7 @@ snapshots: pretty-error: 4.0.0 tapable: 2.3.2 optionalDependencies: - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@5.1.4) + webpack: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) htmlparser2@10.1.0: dependencies: @@ -63541,16 +73302,8 @@ snapshots: infer-owner@1.0.4: {} - inferno-vnode-flags@8.2.3: {} - inferno-vnode-flags@9.1.0: {} - inferno@8.2.3: - dependencies: - csstype: 3.2.3 - inferno-vnode-flags: 8.2.3 - opencollective-postinstall: 2.0.3 - inferno@9.1.0: dependencies: csstype: 3.2.3 @@ -63588,8 +73341,8 @@ snapshots: init-package-json@8.2.2: dependencies: - "@npmcli/package-json": 7.0.2 - npm-package-arg: 13.0.1 + "@npmcli/package-json": 7.0.5 + npm-package-arg: 13.0.2 promzard: 2.0.0 read: 4.1.0 semver: 7.7.4 @@ -63606,17 +73359,17 @@ snapshots: inquirer: 6.5.2 rxjs: 6.6.7 - inquirer@12.9.6(@types/node@25.6.0): + inquirer@12.9.6(@types/node@25.6.2): dependencies: "@inquirer/ansi": 1.0.2 - "@inquirer/core": 10.3.2(@types/node@25.6.0) - "@inquirer/prompts": 7.10.1(@types/node@25.6.0) - "@inquirer/type": 3.0.10(@types/node@25.6.0) + "@inquirer/core": 10.3.2(@types/node@25.6.2) + "@inquirer/prompts": 7.10.1(@types/node@25.6.2) + "@inquirer/type": 3.0.10(@types/node@25.6.2) mute-stream: 2.0.0 run-async: 4.0.6 rxjs: 7.8.2 optionalDependencies: - "@types/node": 25.6.0 + "@types/node": 25.6.2 inquirer@13.4.1(@types/node@25.6.0): dependencies: @@ -63630,6 +73383,18 @@ snapshots: optionalDependencies: "@types/node": 25.6.0 + inquirer@13.4.1(@types/node@25.6.2): + dependencies: + "@inquirer/ansi": 2.0.5 + "@inquirer/core": 11.1.8(@types/node@25.6.2) + "@inquirer/prompts": 8.4.1(@types/node@25.6.2) + "@inquirer/type": 4.0.5(@types/node@25.6.2) + mute-stream: 3.0.0 + run-async: 4.0.6 + rxjs: 7.8.2 + optionalDependencies: + "@types/node": 25.6.2 + inquirer@6.5.2: dependencies: ansi-escapes: 3.2.0 @@ -63800,7 +73565,7 @@ snapshots: is-ci@3.0.1: dependencies: - ci-info: 3.8.0 + ci-info: 3.9.0 is-color-stop@1.1.0: dependencies: @@ -63848,6 +73613,8 @@ snapshots: is-docker@3.0.0: {} + is-docker@4.0.0: {} + is-expression@4.0.0: dependencies: acorn: 7.4.1 @@ -64018,11 +73785,11 @@ snapshots: is-reference@1.2.1: dependencies: - "@types/estree": 1.0.8 + "@types/estree": 1.0.9 is-reference@3.0.3: dependencies: - "@types/estree": 1.0.8 + "@types/estree": 1.0.9 is-regex@1.2.1: dependencies: @@ -64039,6 +73806,8 @@ snapshots: is-resolvable@1.1.0: {} + is-safe-filename@0.1.1: {} + is-scoped@3.0.0: dependencies: scoped-regex: 3.0.0 @@ -64119,6 +73888,8 @@ snapshots: is-what@4.1.16: {} + is-what@5.5.0: {} + is-whitespace-character@1.0.4: {} is-windows@0.2.0: {} @@ -64155,6 +73926,8 @@ snapshots: isbinaryfile@5.0.7: {} + isbinaryfile@6.0.0: {} + isexe@2.0.0: {} isexe@3.1.5: {} @@ -64367,16 +74140,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@25.6.0)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.9.3)): + jest-cli@29.7.0(@types/node@25.6.2)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3)): dependencies: - "@jest/core": 29.7.0(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.9.3)) + "@jest/core": 29.7.0(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3)) "@jest/test-result": 29.7.0 "@jest/types": 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@25.6.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.9.3)) + create-jest: 29.7.0(@types/node@25.6.2)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3)) exit: 0.1.2 - import-local: 3.1.0 - jest-config: 29.7.0(@types/node@25.6.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.9.3)) + import-local: 3.2.0 + jest-config: 29.7.0(@types/node@25.6.2)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -64388,7 +74161,7 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@20.19.39)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.9.3)): + jest-config@29.7.0(@types/node@20.19.39)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3)): dependencies: "@babel/core": 7.29.0 "@jest/test-sequencer": 29.7.0 @@ -64414,12 +74187,12 @@ snapshots: strip-json-comments: 3.1.1 optionalDependencies: "@types/node": 20.19.39 - ts-node: 10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.9.3) + ts-node: 10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3) transitivePeerDependencies: - babel-plugin-macros - supports-color - jest-config@29.7.0(@types/node@25.6.0)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.9.3)): + jest-config@29.7.0(@types/node@25.6.2)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3)): dependencies: "@babel/core": 7.29.0 "@jest/test-sequencer": 29.7.0 @@ -64444,8 +74217,8 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - "@types/node": 25.6.0 - ts-node: 10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.9.3) + "@types/node": 25.6.2 + ts-node: 10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -64469,13 +74242,6 @@ snapshots: jest-get-type: 29.6.3 pretty-format: 29.7.0 - jest-diff@30.2.0: - dependencies: - "@jest/diff-sequences": 30.0.1 - "@jest/get-type": 30.1.0 - chalk: 4.1.2 - pretty-format: 30.2.0 - jest-diff@30.3.0: dependencies: "@jest/diff-sequences": 30.3.0 @@ -64751,12 +74517,12 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@25.6.0)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.9.3)): + jest@29.7.0(@types/node@25.6.2)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3)): dependencies: - "@jest/core": 29.7.0(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.9.3)) + "@jest/core": 29.7.0(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3)) "@jest/types": 29.6.3 - import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@25.6.0)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.9.3)) + import-local: 3.2.0 + jest-cli: 29.7.0(@types/node@25.6.2)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3)) optionalDependencies: node-notifier: 10.0.1 transitivePeerDependencies: @@ -64769,6 +74535,8 @@ snapshots: jiti@2.6.1: {} + jiti@2.7.0: {} + jju@1.4.0: {} jmespath@0.16.0: {} @@ -64840,7 +74608,7 @@ snapshots: jsbn@0.1.1: {} - jsdoc-type-pratt-parser@4.0.0: {} + jsdoc-type-pratt-parser@4.1.0: {} jsdoc-type-pratt-parser@7.2.0: {} @@ -64952,7 +74720,7 @@ snapshots: decimal.js: 10.6.0 html-encoding-sniffer: 6.0.0 is-potential-custom-element-name: 1.0.1 - lru-cache: 11.3.2 + lru-cache: 11.3.5 parse5: 8.0.0 saxes: 6.0.0 symbol-tree: 3.2.4 @@ -65091,6 +74859,8 @@ snapshots: junk@1.0.3: {} + junk@4.0.1: {} + just-diff-apply@5.5.0: {} just-diff@6.0.2: {} @@ -65392,12 +75162,12 @@ snapshots: legacy-javascript@0.0.1: {} - lerna@9.0.7(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.26)(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.26)(@types/node@25.6.0)(babel-plugin-macros@3.1.0): + lerna@9.0.7(@swc-node/register@1.11.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@swc/core@1.15.33)(@swc/types@0.1.26)(typescript@6.0.3))(@swc/core@1.15.33)(@types/node@25.6.2)(babel-plugin-macros@3.1.0): dependencies: "@npmcli/arborist": 9.1.6 "@npmcli/package-json": 7.0.2 "@npmcli/run-script": 10.0.3 - "@nx/devkit": 22.6.5(nx@22.6.5(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.26)(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.26)) + "@nx/devkit": 22.7.1(nx@22.7.1(@swc-node/register@1.11.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@swc/core@1.15.33)(@swc/types@0.1.26)(typescript@6.0.3))(@swc/core@1.15.33)) "@octokit/plugin-enterprise-rest": 6.0.1 "@octokit/rest": 20.1.2 aproba: 2.0.0 @@ -65415,7 +75185,7 @@ snapshots: dedent: 1.5.3(babel-plugin-macros@3.1.0) envinfo: 7.13.0 execa: 5.0.0 - fs-extra: 11.3.4 + fs-extra: 11.3.5 get-stream: 6.0.0 git-url-parse: 14.0.0 glob-parent: 6.0.2 @@ -65423,9 +75193,9 @@ snapshots: import-local: 3.1.0 ini: 1.3.8 init-package-json: 8.2.2 - inquirer: 12.9.6(@types/node@25.6.0) + inquirer: 12.9.6(@types/node@25.6.2) is-ci: 3.0.1 - jest-diff: 30.2.0 + jest-diff: 30.3.0 js-yaml: 4.1.1 libnpmaccess: 10.0.3 libnpmpublish: 11.1.2 @@ -65435,7 +75205,7 @@ snapshots: npm-package-arg: 13.0.1 npm-packlist: 10.0.3 npm-registry-fetch: 19.1.0 - nx: 22.6.5(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.26)(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.26) + nx: 22.7.1(@swc-node/register@1.11.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@swc/core@1.15.33)(@swc/types@0.1.26)(typescript@6.0.3))(@swc/core@1.15.33) p-map: 4.0.0 p-map-series: 2.1.0 p-pipe: 3.1.0 @@ -65468,11 +75238,11 @@ snapshots: - debug - supports-color - less-loader@12.3.1(less@4.4.2)(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + less-loader@12.3.1(less@4.4.2)(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: less: 4.4.2 optionalDependencies: - webpack: 5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) less@3.13.1: dependencies: @@ -65529,17 +75299,17 @@ snapshots: libnpmaccess@10.0.3: dependencies: - npm-package-arg: 13.0.1 - npm-registry-fetch: 19.1.0 + npm-package-arg: 13.0.2 + npm-registry-fetch: 19.1.1 transitivePeerDependencies: - supports-color libnpmpublish@11.1.2: dependencies: - "@npmcli/package-json": 7.0.2 - ci-info: 4.3.1 - npm-package-arg: 13.0.1 - npm-registry-fetch: 19.1.0 + "@npmcli/package-json": 7.0.5 + ci-info: 4.4.0 + npm-package-arg: 13.0.2 + npm-registry-fetch: 19.1.1 proc-log: 5.0.0 semver: 7.7.4 sigstore: 4.1.0 @@ -65547,11 +75317,11 @@ snapshots: transitivePeerDependencies: - supports-color - license-webpack-plugin@4.0.2(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + license-webpack-plugin@4.0.2(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: webpack-sources: 3.3.4 optionalDependencies: - webpack: 5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) lie@3.3.0: dependencies: @@ -65597,7 +75367,7 @@ snapshots: metaviewport-parser: 0.3.0 open: 8.4.2 parse-cache-control: 1.0.1 - puppeteer-core: 24.40.0 + puppeteer-core: 24.42.0 robots-parser: 3.0.1 speedline-core: 1.4.3 third-party-web: 0.27.0 @@ -66035,14 +75805,8 @@ snapshots: lodash.merge@4.6.2: {} - lodash.mergewith@4.6.2: {} - - lodash.snakecase@4.1.1: {} - lodash.sortby@4.7.0: {} - lodash.startcase@4.4.0: {} - lodash.template@4.18.1: dependencies: lodash._reinterpolate: 3.0.0 @@ -66056,8 +75820,6 @@ snapshots: lodash.uniq@4.5.0: {} - lodash.upperfirst@4.3.1: {} - lodash.zip@4.2.0: {} lodash@4.18.1: {} @@ -66163,8 +75925,6 @@ snapshots: lru-cache@10.4.3: {} - lru-cache@11.3.2: {} - lru-cache@11.3.5: {} lru-cache@4.1.5: @@ -66290,11 +76050,11 @@ snapshots: make-fetch-happen@15.0.2: dependencies: "@npmcli/agent": 4.0.0 - cacache: 20.0.3 + cacache: 20.0.4 http-cache-semantics: 4.2.0 minipass: 7.1.3 minipass-fetch: 4.0.1 - minipass-flush: 1.0.5 + minipass-flush: 1.0.7 minipass-pipeline: 1.2.4 negotiator: 1.0.0 proc-log: 5.0.0 @@ -66356,6 +76116,8 @@ snapshots: dependencies: object-visit: 1.0.1 + mark.js@8.11.1: {} + markdown-escapes@1.0.4: {} markdown-it-terminal@0.4.0(markdown-it@14.1.1): @@ -66436,6 +76198,8 @@ snapshots: mathml-tag-names@2.1.3: {} + mathml-tag-names@4.0.0: {} + maximatch@0.1.0: dependencies: array-differ: 1.0.0 @@ -66956,49 +76720,57 @@ snapshots: min-indent@1.0.1: {} - mini-css-extract-plugin@1.6.2(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + mini-css-extract-plugin@1.6.2(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) webpack-sources: 1.4.3 - mini-css-extract-plugin@2.10.0(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + mini-css-extract-plugin@2.10.0(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: schema-utils: 4.3.3 tapable: 2.3.2 - webpack: 5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) - mini-css-extract-plugin@2.10.2(webpack@5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2)): + mini-css-extract-plugin@2.10.2(webpack@5.106.1(@swc/core@1.15.33)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: schema-utils: 4.3.3 tapable: 2.3.2 - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2) + webpack: 5.106.1(@swc/core@1.15.33)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) mini-css-extract-plugin@2.10.2(webpack@5.106.1): dependencies: schema-utils: 4.3.3 tapable: 2.3.2 - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@5.1.4) + webpack: 5.106.1(@swc/core@1.15.33)(webpack-cli@5.1.4) - minify@15.2.0: + mini-css-extract-plugin@2.10.2(webpack@5.106.2): + dependencies: + schema-utils: 4.3.3 + tapable: 2.3.2 + webpack: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) + + minify@15.2.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0): dependencies: "@putout/minify": 6.0.0 - "@swc/core": 1.15.26 + "@swc/core": 1.15.33 clean-css: 5.3.3 css-b64-images: 0.2.5 debug: 4.4.3(supports-color@5.5.0) - esbuild: 0.27.2 + esbuild: 0.27.7 find-up: 8.0.0 - html-minifier-next: 5.2.0(@swc/core@1.15.26) + html-minifier-next: 5.2.0(@swc/core@1.15.33) lightningcss: 1.30.2 montag: 1.2.1 - oxc-minify: 0.116.0 + oxc-minify: 0.116.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) readjson: 2.2.2 terser: 5.44.1 try-catch: 4.0.7 try-to-catch: 4.0.3 transitivePeerDependencies: + - "@emnapi/core" + - "@emnapi/runtime" - "@swc/helpers" - supports-color @@ -67006,10 +76778,6 @@ snapshots: minimalistic-crypto-utils@1.0.1: {} - minimatch@10.2.2: - dependencies: - brace-expansion: 5.0.5 - minimatch@10.2.3: dependencies: brace-expansion: 5.0.5 @@ -67032,11 +76800,11 @@ snapshots: minimatch@3.1.2: dependencies: - brace-expansion: 1.1.11 + brace-expansion: 1.1.14 minimatch@3.1.4: dependencies: - brace-expansion: 1.1.11 + brace-expansion: 1.1.14 minimatch@3.1.5: dependencies: @@ -67160,6 +76928,8 @@ snapshots: minipass@7.1.3: {} + minisearch@7.2.0: {} + minizlib@1.3.3: dependencies: minipass: 2.9.0 @@ -67349,8 +77119,6 @@ snapshots: ms@2.1.1: {} - ms@2.1.2: {} - ms@2.1.3: {} msgpackr-extract@3.0.3: @@ -67457,8 +77225,6 @@ snapshots: dependencies: querystring: 0.2.1 - natural-compare-lite@1.4.0: {} - natural-compare@1.4.0: {} nearley@2.20.1: @@ -67490,7 +77256,7 @@ snapshots: dependencies: type-fest: 2.19.0 - next@16.2.3(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(babel-plugin-macros@3.1.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(sass@1.99.0): + next@16.2.3(@babel/core@7.29.0)(@opentelemetry/api@1.9.1)(@playwright/test@1.59.1)(babel-plugin-macros@3.1.0)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(sass@1.99.0): dependencies: "@next/env": 16.2.3 "@swc/helpers": 0.5.15 @@ -67499,7 +77265,7 @@ snapshots: postcss: 8.4.31 react: 19.2.5 react-dom: 19.2.5(react@19.2.5) - styled-jsx: 5.1.6(babel-plugin-macros@3.1.0)(react@19.2.5) + styled-jsx: 5.1.6(@babel/core@7.29.0)(babel-plugin-macros@3.1.0)(react@19.2.5) optionalDependencies: "@next/swc-darwin-arm64": 16.2.3 "@next/swc-darwin-x64": 16.2.3 @@ -67521,7 +77287,7 @@ snapshots: dependencies: "@ampproject/remapping": 2.3.0 "@angular/compiler-cli": 21.2.8(@angular/compiler@21.2.8)(typescript@5.9.3) - "@rollup/plugin-json": 6.1.0(rollup@4.60.1) + "@rollup/plugin-json": 6.1.0(rollup@4.60.2) "@rollup/wasm-node": 4.60.1 ajv: 8.18.0 ansi-colors: 4.1.3 @@ -67537,14 +77303,44 @@ snapshots: ora: 9.3.0 piscina: 5.1.4 postcss: 8.5.9 - rollup-plugin-dts: 6.4.1(rollup@4.60.1)(typescript@5.9.3) + rollup-plugin-dts: 6.4.1(rollup@4.60.2)(typescript@5.9.3) rxjs: 7.8.2 sass: 1.99.0 tinyglobby: 0.2.16 tslib: 2.8.1 typescript: 5.9.3 optionalDependencies: - rollup: 4.60.1 + rollup: 4.60.2 + optional: true + + ng-packagr@21.2.2(@angular/compiler-cli@21.2.9(@angular/compiler@21.2.9)(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3): + dependencies: + "@ampproject/remapping": 2.3.0 + "@angular/compiler-cli": 21.2.9(@angular/compiler@21.2.9)(typescript@5.9.3) + "@rollup/plugin-json": 6.1.0(rollup@4.60.2) + "@rollup/wasm-node": 4.60.1 + ajv: 8.18.0 + ansi-colors: 4.1.3 + browserslist: 4.28.2 + chokidar: 5.0.0 + commander: 14.0.3 + dependency-graph: 1.0.0 + esbuild: 0.27.7 + find-cache-directory: 6.0.0 + injection-js: 2.6.1 + jsonc-parser: 3.3.1 + less: 4.6.4 + ora: 9.3.0 + piscina: 5.1.4 + postcss: 8.5.9 + rollup-plugin-dts: 6.4.1(rollup@4.60.2)(typescript@5.9.3) + rxjs: 7.8.2 + sass: 1.99.0 + tinyglobby: 0.2.16 + tslib: 2.8.1 + typescript: 5.9.3 + optionalDependencies: + rollup: 4.60.2 nice-try@1.0.5: {} @@ -67556,17 +77352,17 @@ snapshots: just-extend: 6.2.0 path-to-regexp: 6.3.0 - nitropack@2.13.3(encoding@0.1.13)(rolldown@1.0.0-rc.15)(srvx@0.11.15)(xml2js@0.6.2): + nitropack@2.13.3(encoding@0.1.13)(rolldown@1.0.0-rc.18)(srvx@0.11.15)(xml2js@0.6.2): dependencies: "@cloudflare/kv-asset-handler": 0.4.2 - "@rollup/plugin-alias": 6.0.0(rollup@4.60.1) - "@rollup/plugin-commonjs": 29.0.2(rollup@4.60.1) - "@rollup/plugin-inject": 5.0.5(rollup@4.60.1) - "@rollup/plugin-json": 6.1.0(rollup@4.60.1) - "@rollup/plugin-node-resolve": 16.0.3(rollup@4.60.1) - "@rollup/plugin-replace": 6.0.3(rollup@4.60.1) - "@rollup/plugin-terser": 1.0.0(rollup@4.60.1) - "@vercel/nft": 1.5.0(encoding@0.1.13)(rollup@4.60.1) + "@rollup/plugin-alias": 6.0.0(rollup@4.60.2) + "@rollup/plugin-commonjs": 29.0.2(rollup@4.60.2) + "@rollup/plugin-inject": 5.0.5(rollup@4.60.2) + "@rollup/plugin-json": 6.1.0(rollup@4.60.2) + "@rollup/plugin-node-resolve": 16.0.3(rollup@4.60.2) + "@rollup/plugin-replace": 6.0.3(rollup@4.60.2) + "@rollup/plugin-terser": 1.0.0(rollup@4.60.2) + "@vercel/nft": 1.5.0(encoding@0.1.13)(rollup@4.60.2) archiver: 7.0.1 c12: 3.3.4(magicast@0.5.2) chokidar: 5.0.0 @@ -67608,8 +77404,8 @@ snapshots: pkg-types: 2.3.0 pretty-bytes: 7.1.0 radix3: 1.1.2 - rollup: 4.60.1 - rollup-plugin-visualizer: 7.0.1(rolldown@1.0.0-rc.15)(rollup@4.60.1) + rollup: 4.60.2 + rollup-plugin-visualizer: 7.0.1(rolldown@1.0.0-rc.18)(rollup@4.60.2) scule: 1.3.0 semver: 7.7.4 serve-placeholder: 2.0.2 @@ -67723,9 +77519,9 @@ snapshots: make-fetch-happen: 15.0.3 nopt: 9.0.0 proc-log: 6.1.0 - semver: 7.7.2 + semver: 7.7.4 tar: 7.5.11 - tinyglobby: 0.2.12 + tinyglobby: 0.2.16 which: 6.0.1 transitivePeerDependencies: - supports-color @@ -67821,7 +77617,7 @@ snapshots: chokidar: 3.5.3 debug: 4.4.3(supports-color@5.5.0) ignore-by-default: 1.0.1 - minimatch: 10.2.2 + minimatch: 10.2.5 pstree.remy: 1.1.8 semver: 7.7.4 simple-update-notifier: 2.0.0 @@ -67865,7 +77661,7 @@ snapshots: dependencies: hosted-git-info: 4.1.0 is-core-module: 2.16.1 - semver: 7.7.2 + semver: 7.7.4 validate-npm-package-license: 3.0.4 normalize-package-data@5.0.0: @@ -68010,7 +77806,7 @@ snapshots: dependencies: hosted-git-info: 8.1.0 proc-log: 5.0.0 - semver: 7.7.2 + semver: 7.7.4 validate-npm-package-name: 6.0.2 npm-package-arg@13.0.1: @@ -68027,12 +77823,12 @@ snapshots: semver: 7.7.4 validate-npm-package-name: 7.0.2 - npm-package-json-lint@6.4.0(typescript@5.9.3): + npm-package-json-lint@6.4.0(typescript@6.0.3): dependencies: ajv: 6.14.0 ajv-errors: 1.0.1(ajv@6.14.0) chalk: 4.1.2 - cosmiconfig: 8.3.6(typescript@5.9.3) + cosmiconfig: 8.3.6(typescript@6.0.3) debug: 4.4.3(supports-color@5.5.0) globby: 11.1.0 ignore: 5.3.1 @@ -68076,7 +77872,7 @@ snapshots: npm-install-checks: 7.1.2 npm-normalize-package-bin: 4.0.0 npm-package-arg: 12.0.2 - semver: 7.7.2 + semver: 7.7.4 npm-pick-manifest@11.0.3: dependencies: @@ -68108,11 +77904,11 @@ snapshots: dependencies: "@npmcli/redact": 3.2.2 jsonparse: 1.3.1 - make-fetch-happen: 15.0.3 + make-fetch-happen: 15.0.5 minipass: 7.1.3 minipass-fetch: 4.0.1 minizlib: 3.1.0 - npm-package-arg: 13.0.1 + npm-package-arg: 13.0.2 proc-log: 5.0.0 transitivePeerDependencies: - supports-color @@ -68136,7 +77932,7 @@ snapshots: chalk: 2.4.2 cross-spawn: 6.0.6 memorystream: 0.3.1 - minimatch: 3.1.4 + minimatch: 3.1.5 pidtree: 0.3.1 read-pkg: 3.0.0 shell-quote: 1.8.3 @@ -68188,10 +77984,10 @@ snapshots: optionalDependencies: chokidar: 3.6.0 - nuxt@2.18.1(@vue/compiler-sfc@3.5.32)(buffer@6.0.3)(consola@3.4.2)(ejs@3.1.10)(encoding@0.1.13)(hamljs@0.6.2)(handlebars@4.7.9)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(tslib@2.8.1)(typescript@6.0.2)(underscore@1.13.8)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)): + nuxt@2.18.1(@vue/compiler-sfc@3.5.32)(buffer@6.0.3)(consola@3.4.2)(ejs@3.1.10)(encoding@0.1.13)(hamljs@0.6.2)(handlebars@4.7.9)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(tslib@2.8.1)(typescript@6.0.3)(underscore@1.13.8)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)): dependencies: "@nuxt/babel-preset-app": 2.18.1(vue@2.7.16) - "@nuxt/builder": 2.18.1(@vue/compiler-sfc@3.5.32)(ejs@3.1.10)(hamljs@0.6.2)(handlebars@4.7.9)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(tslib@2.8.1)(typescript@6.0.2)(underscore@1.13.8)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + "@nuxt/builder": 2.18.1(@vue/compiler-sfc@3.5.32)(ejs@3.1.10)(hamljs@0.6.2)(handlebars@4.7.9)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(tslib@2.8.1)(typescript@6.0.3)(underscore@1.13.8)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) "@nuxt/cli": 2.18.1(buffer@6.0.3) "@nuxt/components": 2.2.1(consola@3.4.2) "@nuxt/config": 2.18.1 @@ -68204,7 +78000,7 @@ snapshots: "@nuxt/utils": 2.18.1 "@nuxt/vue-app": 2.18.1 "@nuxt/vue-renderer": 2.18.1 - "@nuxt/webpack": 2.18.1(@vue/compiler-sfc@3.5.32)(ejs@3.1.10)(hamljs@0.6.2)(handlebars@4.7.9)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(tslib@2.8.1)(typescript@6.0.2)(underscore@1.13.8)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + "@nuxt/webpack": 2.18.1(@vue/compiler-sfc@3.5.32)(ejs@3.1.10)(hamljs@0.6.2)(handlebars@4.7.9)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(tslib@2.8.1)(typescript@6.0.3)(underscore@1.13.8)(vue@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) transitivePeerDependencies: - "@vue/compiler-sfc" - arc-templates @@ -68273,10 +78069,10 @@ snapshots: - webpack-command - whiskers - nuxt@2.18.1(@vue/compiler-sfc@3.5.32)(buffer@6.0.3)(consola@3.4.2)(encoding@0.1.13)(prettier@3.8.3)(tslib@2.8.1)(typescript@6.0.2)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)): + nuxt@2.18.1(@vue/compiler-sfc@3.5.32)(buffer@6.0.3)(consola@3.4.2)(encoding@0.1.13)(prettier@3.8.3)(tslib@2.8.1)(typescript@6.0.2)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)): dependencies: "@nuxt/babel-preset-app": 2.18.1(vue@2.7.16) - "@nuxt/builder": 2.18.1(@vue/compiler-sfc@3.5.32)(prettier@3.8.3)(tslib@2.8.1)(typescript@6.0.2)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + "@nuxt/builder": 2.18.1(@vue/compiler-sfc@3.5.32)(prettier@3.8.3)(tslib@2.8.1)(typescript@6.0.2)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) "@nuxt/cli": 2.18.1(buffer@6.0.3) "@nuxt/components": 2.2.1(consola@3.4.2) "@nuxt/config": 2.18.1 @@ -68289,7 +78085,7 @@ snapshots: "@nuxt/utils": 2.18.1 "@nuxt/vue-app": 2.18.1 "@nuxt/vue-renderer": 2.18.1 - "@nuxt/webpack": 2.18.1(@vue/compiler-sfc@3.5.32)(prettier@3.8.3)(tslib@2.8.1)(typescript@6.0.2)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + "@nuxt/webpack": 2.18.1(@vue/compiler-sfc@3.5.32)(prettier@3.8.3)(tslib@2.8.1)(typescript@6.0.2)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) transitivePeerDependencies: - "@vue/compiler-sfc" - arc-templates @@ -68358,16 +78154,16 @@ snapshots: - webpack-command - whiskers - nuxt@3.21.2(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(encoding@0.1.13)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.1)(less@4.6.4)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rolldown@1.0.0-rc.15)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.15)(rollup@4.60.1))(rollup@4.60.1)(sass@1.99.0)(srvx@0.11.15)(stylelint@16.26.1(typescript@6.0.2))(stylus@0.64.0)(terser@5.46.1)(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(xml2js@0.6.2)(yaml@2.8.3): + nuxt@3.21.2(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@types/node@25.6.2)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(encoding@0.1.13)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.1)(less@4.6.4)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rolldown@1.0.0-rc.18)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.18)(rollup@4.60.2))(rollup@4.60.2)(sass@1.99.0)(srvx@0.11.15)(stylelint@16.26.1(typescript@6.0.2))(stylus@0.64.0)(terser@5.46.1)(typescript@6.0.2)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(xml2js@0.6.2)(yaml@2.8.3): dependencies: "@dxup/nuxt": 0.4.0(magicast@0.5.2)(typescript@6.0.2) "@nuxt/cli": 3.34.0(@nuxt/schema@3.21.2)(cac@6.7.14)(commander@13.1.0)(magicast@0.5.2) - "@nuxt/devtools": 3.2.4(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2)) + "@nuxt/devtools": 3.2.4(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2)) "@nuxt/kit": 3.21.2(magicast@0.5.2) - "@nuxt/nitro-server": 3.21.2(db0@0.3.4)(encoding@0.1.13)(ioredis@5.10.1)(magicast@0.5.2)(nuxt@3.21.2(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(encoding@0.1.13)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.1)(less@4.6.4)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rolldown@1.0.0-rc.15)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.15)(rollup@4.60.1))(rollup@4.60.1)(sass@1.99.0)(srvx@0.11.15)(stylelint@16.26.1(typescript@6.0.2))(stylus@0.64.0)(terser@5.46.1)(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(xml2js@0.6.2)(yaml@2.8.3))(rolldown@1.0.0-rc.15)(srvx@0.11.15)(typescript@6.0.2)(xml2js@0.6.2) + "@nuxt/nitro-server": 3.21.2(db0@0.3.4)(encoding@0.1.13)(ioredis@5.10.1)(magicast@0.5.2)(nuxt@3.21.2(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@types/node@25.6.2)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(encoding@0.1.13)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.1)(less@4.6.4)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rolldown@1.0.0-rc.18)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.18)(rollup@4.60.2))(rollup@4.60.2)(sass@1.99.0)(srvx@0.11.15)(stylelint@16.26.1(typescript@6.0.2))(stylus@0.64.0)(terser@5.46.1)(typescript@6.0.2)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(xml2js@0.6.2)(yaml@2.8.3))(rolldown@1.0.0-rc.18)(srvx@0.11.15)(typescript@6.0.2)(xml2js@0.6.2) "@nuxt/schema": 3.21.2 "@nuxt/telemetry": 2.8.0(@nuxt/kit@3.21.2(magicast@0.5.2)) - "@nuxt/vite-builder": 3.21.2(06271fe1f28b15e1977effb173641ca0) + "@nuxt/vite-builder": 3.21.2(2f7e50dd0d0b2285381997eb5f561088) "@unhead/vue": 2.1.13(vue@3.5.32(typescript@6.0.2)) "@vue/shared": 3.5.32 c12: 3.3.4(magicast@0.5.2) @@ -68395,10 +78191,10 @@ snapshots: ofetch: 1.5.1 ohash: 2.0.11 on-change: 6.0.2 - oxc-minify: 0.117.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) - oxc-parser: 0.117.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) - oxc-transform: 0.117.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) - oxc-walker: 0.7.0(oxc-parser@0.117.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)) + oxc-minify: 0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + oxc-parser: 0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + oxc-transform: 0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + oxc-walker: 0.7.0(oxc-parser@0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)) pathe: 2.0.3 perfect-debounce: 2.1.0 pkg-types: 2.3.0 @@ -68419,7 +78215,135 @@ snapshots: vue-router: 4.6.4(vue@3.5.32(typescript@6.0.2)) optionalDependencies: "@parcel/watcher": 2.5.6 - "@types/node": 25.6.0 + "@types/node": 25.6.2 + transitivePeerDependencies: + - "@azure/app-configuration" + - "@azure/cosmos" + - "@azure/data-tables" + - "@azure/identity" + - "@azure/keyvault-secrets" + - "@azure/storage-blob" + - "@biomejs/biome" + - "@capacitor/preferences" + - "@deno/kv" + - "@electric-sql/pglite" + - "@emnapi/core" + - "@emnapi/runtime" + - "@libsql/client" + - "@netlify/blobs" + - "@planetscale/database" + - "@upstash/redis" + - "@vercel/blob" + - "@vercel/functions" + - "@vercel/kv" + - "@vitejs/devtools" + - "@vue/compiler-sfc" + - aws4fetch + - bare-abort-controller + - bare-buffer + - better-sqlite3 + - bufferutil + - cac + - commander + - db0 + - drizzle-orm + - encoding + - eslint + - idb-keyval + - ioredis + - less + - lightningcss + - magicast + - meow + - mysql2 + - optionator + - oxlint + - react-native-b4a + - rolldown + - rollup + - rollup-plugin-visualizer + - sass + - sass-embedded + - sqlite3 + - srvx + - stylelint + - stylus + - sugarss + - supports-color + - terser + - tsx + - typescript + - uploadthing + - utf-8-validate + - vite + - vls + - vti + - vue-tsc + - xml2js + - yaml + + nuxt@3.21.2(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@types/node@25.6.2)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(encoding@0.1.13)(eslint@10.2.0(jiti@2.7.0))(ioredis@5.10.1)(less@4.6.4)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rolldown@1.0.0-rc.18)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.18)(rollup@4.60.3))(rollup@4.60.3)(sass@1.99.0)(stylelint@16.26.1(typescript@6.0.2))(stylus@0.64.0)(terser@5.46.1)(typescript@6.0.2)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(xml2js@0.6.2)(yaml@2.8.3): + dependencies: + "@dxup/nuxt": 0.4.0(magicast@0.5.2)(typescript@6.0.2) + "@nuxt/cli": 3.34.0(@nuxt/schema@3.21.2)(cac@6.7.14)(commander@13.1.0)(magicast@0.5.2) + "@nuxt/devtools": 3.2.4(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2)) + "@nuxt/kit": 3.21.2(magicast@0.5.2) + "@nuxt/nitro-server": 3.21.2(db0@0.3.4)(encoding@0.1.13)(ioredis@5.10.1)(magicast@0.5.2)(nuxt@3.21.2(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@types/node@25.6.2)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(encoding@0.1.13)(eslint@10.2.0(jiti@2.7.0))(ioredis@5.10.1)(less@4.6.4)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rolldown@1.0.0-rc.18)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.18)(rollup@4.60.3))(rollup@4.60.3)(sass@1.99.0)(stylelint@16.26.1(typescript@6.0.2))(stylus@0.64.0)(terser@5.46.1)(typescript@6.0.2)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(xml2js@0.6.2)(yaml@2.8.3))(rolldown@1.0.0-rc.18)(typescript@6.0.2)(xml2js@0.6.2) + "@nuxt/schema": 3.21.2 + "@nuxt/telemetry": 2.8.0(@nuxt/kit@3.21.2(magicast@0.5.2)) + "@nuxt/vite-builder": 3.21.2(95e4565a2bfb8fb443f4fb2474cc74d8) + "@unhead/vue": 2.1.13(vue@3.5.32(typescript@6.0.2)) + "@vue/shared": 3.5.32 + c12: 3.3.4(magicast@0.5.2) + chokidar: 5.0.0 + compatx: 0.2.0 + consola: 3.4.2 + cookie-es: 2.0.1 + defu: 6.1.7 + destr: 2.0.5 + devalue: 5.7.1 + errx: 0.1.0 + escape-string-regexp: 5.0.0 + exsolve: 1.0.8 + h3: 1.15.11 + hookable: 5.5.3 + ignore: 7.0.5 + impound: 1.1.5 + jiti: 2.6.1 + klona: 2.0.6 + knitwork: 1.3.0 + magic-string: 0.30.21 + mlly: 1.8.2 + nanotar: 0.3.0 + nypm: 0.6.5 + ofetch: 1.5.1 + ohash: 2.0.11 + on-change: 6.0.2 + oxc-minify: 0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + oxc-parser: 0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + oxc-transform: 0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + oxc-walker: 0.7.0(oxc-parser@0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)) + pathe: 2.0.3 + perfect-debounce: 2.1.0 + pkg-types: 2.3.0 + rou3: 0.8.1 + scule: 1.3.0 + semver: 7.7.4 + std-env: 4.0.0 + tinyglobby: 0.2.16 + ufo: 1.6.3 + ultrahtml: 1.6.0 + uncrypto: 0.1.3 + unctx: 2.5.0 + unimport: 6.0.2 + unplugin: 3.0.0 + unplugin-vue-router: 0.19.2(@vue/compiler-sfc@3.5.32)(vue-router@4.6.4(vue@3.5.32(typescript@6.0.2)))(vue@3.5.32(typescript@6.0.2)) + untyped: 2.0.0 + vue: 3.5.32(typescript@6.0.2) + vue-router: 4.6.4(vue@3.5.32(typescript@6.0.2)) + optionalDependencies: + "@parcel/watcher": 2.5.6 + "@types/node": 25.6.2 transitivePeerDependencies: - "@azure/app-configuration" - "@azure/cosmos" @@ -68486,16 +78410,16 @@ snapshots: - xml2js - yaml - nuxt@3.21.2(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(encoding@0.1.13)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.1)(less@4.6.4)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rolldown@1.0.0-rc.15)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.15)(rollup@4.60.1))(rollup@4.60.1)(sass@1.99.0)(stylelint@16.26.1(typescript@6.0.2))(stylus@0.64.0)(terser@5.46.1)(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(xml2js@0.6.2)(yaml@2.8.3): + nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.29.0))(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@rollup/plugin-babel@7.0.0(@babel/core@7.29.0)(@types/babel__core@7.20.5)(rollup@4.60.3))(@types/node@25.6.2)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(encoding@0.1.13)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.1)(less@4.6.4)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rolldown@1.0.0-rc.18)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.18)(rollup@4.60.3))(rollup@4.60.3)(sass@1.99.0)(stylelint@16.26.1(typescript@6.0.2))(stylus@0.64.0)(terser@5.46.1)(typescript@6.0.2)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(xml2js@0.6.2)(yaml@2.8.3): dependencies: "@dxup/nuxt": 0.4.0(magicast@0.5.2)(typescript@6.0.2) - "@nuxt/cli": 3.34.0(@nuxt/schema@3.21.2)(cac@6.7.14)(commander@13.1.0)(magicast@0.5.2) - "@nuxt/devtools": 3.2.4(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2)) - "@nuxt/kit": 3.21.2(magicast@0.5.2) - "@nuxt/nitro-server": 3.21.2(db0@0.3.4)(encoding@0.1.13)(ioredis@5.10.1)(magicast@0.5.2)(nuxt@3.21.2(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(encoding@0.1.13)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.1)(less@4.6.4)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rolldown@1.0.0-rc.15)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.15)(rollup@4.60.1))(rollup@4.60.1)(sass@1.99.0)(stylelint@16.26.1(typescript@6.0.2))(stylus@0.64.0)(terser@5.46.1)(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(xml2js@0.6.2)(yaml@2.8.3))(rolldown@1.0.0-rc.15)(typescript@6.0.2)(xml2js@0.6.2) - "@nuxt/schema": 3.21.2 - "@nuxt/telemetry": 2.8.0(@nuxt/kit@3.21.2(magicast@0.5.2)) - "@nuxt/vite-builder": 3.21.2(9508cf87a4ba09f7bc16602c35a5e209) + "@nuxt/cli": 3.34.0(@nuxt/schema@4.4.2)(cac@6.7.14)(commander@13.1.0)(magicast@0.5.2) + "@nuxt/devtools": 3.2.4(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2)) + "@nuxt/kit": 4.4.2(magicast@0.5.2) + "@nuxt/nitro-server": 4.4.2(71c8714d8e0ee00eb16d0aa4be22e9ad) + "@nuxt/schema": 4.4.2 + "@nuxt/telemetry": 2.8.0(@nuxt/kit@4.4.2(magicast@0.5.2)) + "@nuxt/vite-builder": 4.4.2(bac551a9abb1ca17b05060e8fac85ad0) "@unhead/vue": 2.1.13(vue@3.5.32(typescript@6.0.2)) "@vue/shared": 3.5.32 c12: 3.3.4(magicast@0.5.2) @@ -68504,13 +78428,11 @@ snapshots: consola: 3.4.2 cookie-es: 2.0.1 defu: 6.1.7 - destr: 2.0.5 devalue: 5.7.1 errx: 0.1.0 escape-string-regexp: 5.0.0 exsolve: 1.0.8 - h3: 1.15.11 - hookable: 5.5.3 + hookable: 6.1.0 ignore: 7.0.5 impound: 1.1.5 jiti: 2.6.1 @@ -68523,12 +78445,13 @@ snapshots: ofetch: 1.5.1 ohash: 2.0.11 on-change: 6.0.2 - oxc-minify: 0.117.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) - oxc-parser: 0.117.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) - oxc-transform: 0.117.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) - oxc-walker: 0.7.0(oxc-parser@0.117.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)) + oxc-minify: 0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + oxc-parser: 0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + oxc-transform: 0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + oxc-walker: 0.7.0(oxc-parser@0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)) pathe: 2.0.3 perfect-debounce: 2.1.0 + picomatch: 4.0.4 pkg-types: 2.3.0 rou3: 0.8.1 scule: 1.3.0 @@ -68541,13 +78464,13 @@ snapshots: unctx: 2.5.0 unimport: 6.0.2 unplugin: 3.0.0 - unplugin-vue-router: 0.19.2(@vue/compiler-sfc@3.5.32)(vue-router@4.6.4(vue@3.5.32(typescript@6.0.2)))(vue@3.5.32(typescript@6.0.2)) + unrouting: 0.1.7 untyped: 2.0.0 vue: 3.5.32(typescript@6.0.2) - vue-router: 4.6.4(vue@3.5.32(typescript@6.0.2)) + vue-router: 5.0.4(@vue/compiler-sfc@3.5.32)(vue@3.5.32(typescript@6.0.2)) optionalDependencies: "@parcel/watcher": 2.5.6 - "@types/node": 25.6.0 + "@types/node": 25.6.2 transitivePeerDependencies: - "@azure/app-configuration" - "@azure/cosmos" @@ -68555,6 +78478,9 @@ snapshots: - "@azure/identity" - "@azure/keyvault-secrets" - "@azure/storage-blob" + - "@babel/core" + - "@babel/plugin-proposal-decorators" + - "@babel/plugin-syntax-jsx" - "@biomejs/biome" - "@capacitor/preferences" - "@deno/kv" @@ -68563,7 +78489,9 @@ snapshots: - "@emnapi/runtime" - "@libsql/client" - "@netlify/blobs" + - "@pinia/colada" - "@planetscale/database" + - "@rollup/plugin-babel" - "@upstash/redis" - "@vercel/blob" - "@vercel/functions" @@ -68590,6 +78518,7 @@ snapshots: - mysql2 - optionator - oxlint + - pinia - react-native-b4a - rolldown - rollup @@ -68614,16 +78543,16 @@ snapshots: - xml2js - yaml - nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.29.0))(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@rollup/plugin-babel@7.0.0(@babel/core@7.29.0)(@types/babel__core@7.20.5)(rollup@4.60.1))(@types/node@25.6.0)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(encoding@0.1.13)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.1)(less@4.6.4)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rolldown@1.0.0-rc.15)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.15)(rollup@4.60.1))(rollup@4.60.1)(sass@1.99.0)(stylelint@16.26.1(typescript@6.0.2))(stylus@0.64.0)(terser@5.46.1)(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(xml2js@0.6.2)(yaml@2.8.3): + nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-proposal-decorators@7.29.0(@babel/core@7.29.0))(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@rollup/plugin-babel@7.0.0(@babel/core@7.29.0)(@types/babel__core@7.20.5)(rollup@4.60.3))(@types/node@25.6.2)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(commander@13.1.0)(db0@0.3.4)(encoding@0.1.13)(eslint@10.2.0(jiti@2.7.0))(ioredis@5.10.1)(less@4.6.4)(lightningcss@1.32.0)(magicast@0.5.2)(meow@13.2.0)(optionator@0.9.4)(rolldown@1.0.0-rc.18)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.18)(rollup@4.60.3))(rollup@4.60.3)(sass@1.99.0)(stylelint@16.26.1(typescript@6.0.2))(stylus@0.64.0)(terser@5.46.1)(typescript@6.0.2)(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(xml2js@0.6.2)(yaml@2.8.3): dependencies: "@dxup/nuxt": 0.4.0(magicast@0.5.2)(typescript@6.0.2) "@nuxt/cli": 3.34.0(@nuxt/schema@4.4.2)(cac@6.7.14)(commander@13.1.0)(magicast@0.5.2) - "@nuxt/devtools": 3.2.4(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2)) + "@nuxt/devtools": 3.2.4(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2)) "@nuxt/kit": 4.4.2(magicast@0.5.2) - "@nuxt/nitro-server": 4.4.2(96fe65e772b58376cb5d9f5730d18291) + "@nuxt/nitro-server": 4.4.2(21198b66d883338b021d40c908e5486f) "@nuxt/schema": 4.4.2 "@nuxt/telemetry": 2.8.0(@nuxt/kit@4.4.2(magicast@0.5.2)) - "@nuxt/vite-builder": 4.4.2(10b39c1f15186638e7bebea75110a60c) + "@nuxt/vite-builder": 4.4.2(0864ba137dd56230aafddb13bfb8e686) "@unhead/vue": 2.1.13(vue@3.5.32(typescript@6.0.2)) "@vue/shared": 3.5.32 c12: 3.3.4(magicast@0.5.2) @@ -68649,10 +78578,10 @@ snapshots: ofetch: 1.5.1 ohash: 2.0.11 on-change: 6.0.2 - oxc-minify: 0.117.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) - oxc-parser: 0.117.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) - oxc-transform: 0.117.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) - oxc-walker: 0.7.0(oxc-parser@0.117.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)) + oxc-minify: 0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + oxc-parser: 0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + oxc-transform: 0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + oxc-walker: 0.7.0(oxc-parser@0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)) pathe: 2.0.3 perfect-debounce: 2.1.0 picomatch: 4.0.4 @@ -68674,7 +78603,7 @@ snapshots: vue-router: 5.0.4(@vue/compiler-sfc@3.5.32)(vue@3.5.32(typescript@6.0.2)) optionalDependencies: "@parcel/watcher": 2.5.6 - "@types/node": 25.6.0 + "@types/node": 25.6.2 transitivePeerDependencies: - "@azure/app-configuration" - "@azure/cosmos" @@ -68766,57 +78695,131 @@ snapshots: - debug - react-native-b4a - nx@22.6.5(@swc-node/register@1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.26)(@swc/types@0.1.26)(typescript@6.0.2))(@swc/core@1.15.26): + nx@22.7.1(@swc-node/register@1.11.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@swc/core@1.15.33)(@swc/types@0.1.26)(typescript@6.0.3))(@swc/core@1.15.33): dependencies: + "@emnapi/core": 1.4.5 + "@emnapi/runtime": 1.4.5 + "@emnapi/wasi-threads": 1.0.4 + "@jest/diff-sequences": 30.0.1 "@napi-rs/wasm-runtime": 0.2.4 + "@tybys/wasm-util": 0.9.0 "@yarnpkg/lockfile": 1.1.0 - "@yarnpkg/parsers": 3.0.2 "@zkochan/js-yaml": 0.0.7 + ansi-colors: 4.1.3 + ansi-regex: 5.0.1 + ansi-styles: 4.3.0 + argparse: 2.0.1 + asynckit: 0.4.0 axios: 1.15.0 + balanced-match: 4.0.3 + base64-js: 1.5.1 + bl: 4.1.0 + brace-expansion: 5.0.2 + buffer: 5.7.1 + call-bind-apply-helpers: 1.0.2 + chalk: 4.1.2 cli-cursor: 3.1.0 cli-spinners: 2.6.1 cliui: 8.0.1 - dotenv: 16.4.5 - dotenv-expand: 11.0.6 + clone: 1.0.4 + color-convert: 2.0.1 + color-name: 1.1.4 + combined-stream: 1.0.8 + defaults: 1.0.4 + define-lazy-prop: 2.0.0 + delayed-stream: 1.0.0 + dotenv: 16.4.7 + dotenv-expand: 12.0.3 + dunder-proto: 1.0.1 ejs: 5.0.1 + emoji-regex: 8.0.0 + end-of-stream: 1.4.5 enquirer: 2.3.6 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-set-tostringtag: 2.1.0 + escalade: 3.2.0 + escape-string-regexp: 1.0.5 figures: 3.2.0 flat: 5.0.2 - front-matter: 4.0.2 + follow-redirects: 1.15.11(debug@4.4.3) + form-data: 4.0.5 + fs-constants: 1.0.0 + function-bind: 1.1.2 + get-caller-file: 2.0.5 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + gopd: 1.2.0 + has-flag: 4.0.0 + has-symbols: 1.1.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + ieee754: 1.2.1 ignore: 7.0.5 - jest-diff: 30.2.0 + inherits: 2.0.4 + is-docker: 2.2.1 + is-fullwidth-code-point: 3.0.0 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + is-wsl: 2.2.0 + json5: 2.2.3 jsonc-parser: 3.2.0 lines-and-columns: 2.0.3 + log-symbols: 4.1.0 + math-intrinsics: 1.1.0 + mime-db: 1.52.0 + mime-types: 2.1.35 + mimic-fn: 2.1.0 minimatch: 10.2.4 + minimist: 1.2.8 npm-run-path: 4.0.1 + once: 1.4.0 + onetime: 5.1.2 open: 8.4.2 ora: 5.3.0 + path-key: 3.1.1 picocolors: 1.1.1 + proxy-from-env: 2.1.0 + readable-stream: 3.6.2 + require-directory: 2.1.1 resolve.exports: 2.0.3 + restore-cursor: 3.1.0 + safe-buffer: 5.2.1 semver: 7.7.4 + signal-exit: 3.0.7 smol-toml: 1.6.1 string-width: 4.2.3 + string_decoder: 1.3.0 + strip-ansi: 6.0.1 + strip-bom: 3.0.0 + supports-color: 7.2.0 tar-stream: 2.2.0 - tmp: 0.2.1 + tmp: 0.2.4 tree-kill: 1.2.2 tsconfig-paths: 4.2.0 tslib: 2.8.1 - yaml: 2.8.3 + util-deprecate: 1.0.2 + wcwidth: 1.0.1 + wrap-ansi: 7.0.0 + wrappy: 1.0.2 + y18n: 5.0.8 + yaml: 2.8.0 yargs: 17.7.2 yargs-parser: 21.1.1 optionalDependencies: - "@nx/nx-darwin-arm64": 22.6.5 - "@nx/nx-darwin-x64": 22.6.5 - "@nx/nx-freebsd-x64": 22.6.5 - "@nx/nx-linux-arm-gnueabihf": 22.6.5 - "@nx/nx-linux-arm64-gnu": 22.6.5 - "@nx/nx-linux-arm64-musl": 22.6.5 - "@nx/nx-linux-x64-gnu": 22.6.5 - "@nx/nx-linux-x64-musl": 22.6.5 - "@nx/nx-win32-arm64-msvc": 22.6.5 - "@nx/nx-win32-x64-msvc": 22.6.5 - "@swc-node/register": 1.11.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@swc/core@1.15.26)(@swc/types@0.1.26)(typescript@6.0.2) - "@swc/core": 1.15.26 + "@nx/nx-darwin-arm64": 22.7.1 + "@nx/nx-darwin-x64": 22.7.1 + "@nx/nx-freebsd-x64": 22.7.1 + "@nx/nx-linux-arm-gnueabihf": 22.7.1 + "@nx/nx-linux-arm64-gnu": 22.7.1 + "@nx/nx-linux-arm64-musl": 22.7.1 + "@nx/nx-linux-x64-gnu": 22.7.1 + "@nx/nx-linux-x64-musl": 22.7.1 + "@nx/nx-win32-arm64-msvc": 22.7.1 + "@nx/nx-win32-x64-msvc": 22.7.1 + "@swc-node/register": 1.11.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@swc/core@1.15.33)(@swc/types@0.1.26)(typescript@6.0.3) + "@swc/core": 1.15.33 transitivePeerDependencies: - debug @@ -69035,6 +79038,12 @@ snapshots: oniguruma-parser@0.12.1: {} + oniguruma-to-es@3.1.1: + dependencies: + emoji-regex-xs: 1.0.0 + regex: 6.1.0 + regex-recursion: 6.0.2 + oniguruma-to-es@4.3.5: dependencies: oniguruma-parser: 0.12.1 @@ -69074,12 +79083,12 @@ snapshots: opener@1.5.2: {} - optimize-css-assets-webpack-plugin@6.0.1(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + optimize-css-assets-webpack-plugin@6.0.1(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: cssnano: 5.1.15(postcss@8.5.9) last-call-webpack-plugin: 3.0.0 postcss: 8.5.9 - webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) optionator@0.8.3: dependencies: @@ -69124,7 +79133,7 @@ snapshots: bl: 4.1.0 chalk: 4.1.2 cli-cursor: 3.1.0 - cli-spinners: 2.9.0 + cli-spinners: 2.9.2 is-interactive: 1.0.0 log-symbols: 4.1.0 strip-ansi: 6.0.1 @@ -69186,7 +79195,7 @@ snapshots: object-keys: 1.1.1 safe-push-apply: 1.0.0 - oxc-minify@0.116.0: + oxc-minify@0.116.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0): optionalDependencies: "@oxc-minify/binding-android-arm-eabi": 0.116.0 "@oxc-minify/binding-android-arm64": 0.116.0 @@ -69204,12 +79213,15 @@ snapshots: "@oxc-minify/binding-linux-x64-gnu": 0.116.0 "@oxc-minify/binding-linux-x64-musl": 0.116.0 "@oxc-minify/binding-openharmony-arm64": 0.116.0 - "@oxc-minify/binding-wasm32-wasi": 0.116.0 + "@oxc-minify/binding-wasm32-wasi": 0.116.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) "@oxc-minify/binding-win32-arm64-msvc": 0.116.0 "@oxc-minify/binding-win32-ia32-msvc": 0.116.0 "@oxc-minify/binding-win32-x64-msvc": 0.116.0 + transitivePeerDependencies: + - "@emnapi/core" + - "@emnapi/runtime" - oxc-minify@0.117.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2): + oxc-minify@0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0): optionalDependencies: "@oxc-minify/binding-android-arm-eabi": 0.117.0 "@oxc-minify/binding-android-arm64": 0.117.0 @@ -69227,7 +79239,7 @@ snapshots: "@oxc-minify/binding-linux-x64-gnu": 0.117.0 "@oxc-minify/binding-linux-x64-musl": 0.117.0 "@oxc-minify/binding-openharmony-arm64": 0.117.0 - "@oxc-minify/binding-wasm32-wasi": 0.117.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + "@oxc-minify/binding-wasm32-wasi": 0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) "@oxc-minify/binding-win32-arm64-msvc": 0.117.0 "@oxc-minify/binding-win32-ia32-msvc": 0.117.0 "@oxc-minify/binding-win32-x64-msvc": 0.117.0 @@ -69235,7 +79247,7 @@ snapshots: - "@emnapi/core" - "@emnapi/runtime" - oxc-parser@0.117.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2): + oxc-parser@0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0): dependencies: "@oxc-project/types": 0.117.0 optionalDependencies: @@ -69255,7 +79267,7 @@ snapshots: "@oxc-parser/binding-linux-x64-gnu": 0.117.0 "@oxc-parser/binding-linux-x64-musl": 0.117.0 "@oxc-parser/binding-openharmony-arm64": 0.117.0 - "@oxc-parser/binding-wasm32-wasi": 0.117.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + "@oxc-parser/binding-wasm32-wasi": 0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) "@oxc-parser/binding-win32-arm64-msvc": 0.117.0 "@oxc-parser/binding-win32-ia32-msvc": 0.117.0 "@oxc-parser/binding-win32-x64-msvc": 0.117.0 @@ -69263,7 +79275,35 @@ snapshots: - "@emnapi/core" - "@emnapi/runtime" - oxc-resolver@11.19.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2): + oxc-parser@0.119.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0): + dependencies: + "@oxc-project/types": 0.119.0 + optionalDependencies: + "@oxc-parser/binding-android-arm-eabi": 0.119.0 + "@oxc-parser/binding-android-arm64": 0.119.0 + "@oxc-parser/binding-darwin-arm64": 0.119.0 + "@oxc-parser/binding-darwin-x64": 0.119.0 + "@oxc-parser/binding-freebsd-x64": 0.119.0 + "@oxc-parser/binding-linux-arm-gnueabihf": 0.119.0 + "@oxc-parser/binding-linux-arm-musleabihf": 0.119.0 + "@oxc-parser/binding-linux-arm64-gnu": 0.119.0 + "@oxc-parser/binding-linux-arm64-musl": 0.119.0 + "@oxc-parser/binding-linux-ppc64-gnu": 0.119.0 + "@oxc-parser/binding-linux-riscv64-gnu": 0.119.0 + "@oxc-parser/binding-linux-riscv64-musl": 0.119.0 + "@oxc-parser/binding-linux-s390x-gnu": 0.119.0 + "@oxc-parser/binding-linux-x64-gnu": 0.119.0 + "@oxc-parser/binding-linux-x64-musl": 0.119.0 + "@oxc-parser/binding-openharmony-arm64": 0.119.0 + "@oxc-parser/binding-wasm32-wasi": 0.119.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + "@oxc-parser/binding-win32-arm64-msvc": 0.119.0 + "@oxc-parser/binding-win32-ia32-msvc": 0.119.0 + "@oxc-parser/binding-win32-x64-msvc": 0.119.0 + transitivePeerDependencies: + - "@emnapi/core" + - "@emnapi/runtime" + + oxc-resolver@11.19.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0): optionalDependencies: "@oxc-resolver/binding-android-arm-eabi": 11.19.1 "@oxc-resolver/binding-android-arm64": 11.19.1 @@ -69281,7 +79321,7 @@ snapshots: "@oxc-resolver/binding-linux-x64-gnu": 11.19.1 "@oxc-resolver/binding-linux-x64-musl": 11.19.1 "@oxc-resolver/binding-openharmony-arm64": 11.19.1 - "@oxc-resolver/binding-wasm32-wasi": 11.19.1(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + "@oxc-resolver/binding-wasm32-wasi": 11.19.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) "@oxc-resolver/binding-win32-arm64-msvc": 11.19.1 "@oxc-resolver/binding-win32-ia32-msvc": 11.19.1 "@oxc-resolver/binding-win32-x64-msvc": 11.19.1 @@ -69289,7 +79329,7 @@ snapshots: - "@emnapi/core" - "@emnapi/runtime" - oxc-transform@0.117.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2): + oxc-transform@0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0): optionalDependencies: "@oxc-transform/binding-android-arm-eabi": 0.117.0 "@oxc-transform/binding-android-arm64": 0.117.0 @@ -69307,7 +79347,7 @@ snapshots: "@oxc-transform/binding-linux-x64-gnu": 0.117.0 "@oxc-transform/binding-linux-x64-musl": 0.117.0 "@oxc-transform/binding-openharmony-arm64": 0.117.0 - "@oxc-transform/binding-wasm32-wasi": 0.117.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + "@oxc-transform/binding-wasm32-wasi": 0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) "@oxc-transform/binding-win32-arm64-msvc": 0.117.0 "@oxc-transform/binding-win32-ia32-msvc": 0.117.0 "@oxc-transform/binding-win32-x64-msvc": 0.117.0 @@ -69315,10 +79355,10 @@ snapshots: - "@emnapi/core" - "@emnapi/runtime" - oxc-walker@0.7.0(oxc-parser@0.117.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)): + oxc-walker@0.7.0(oxc-parser@0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)): dependencies: magic-regexp: 0.10.0 - oxc-parser: 0.117.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + oxc-parser: 0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) p-cancelable@1.1.0: {} @@ -69513,21 +79553,21 @@ snapshots: dependencies: "@npmcli/git": 6.0.3 "@npmcli/installed-package-contents": 3.0.0 - "@npmcli/package-json": 7.0.2 + "@npmcli/package-json": 7.0.5 "@npmcli/promise-spawn": 8.0.3 - "@npmcli/run-script": 10.0.3 - cacache: 20.0.3 - fs-minipass: 3.0.2 + "@npmcli/run-script": 10.0.4 + cacache: 20.0.4 + fs-minipass: 3.0.3 minipass: 7.1.3 - npm-package-arg: 13.0.1 - npm-packlist: 10.0.3 + npm-package-arg: 13.0.2 + npm-packlist: 10.0.4 npm-pick-manifest: 10.0.0 - npm-registry-fetch: 19.1.0 + npm-registry-fetch: 19.1.1 proc-log: 5.0.0 promise-retry: 2.0.1 sigstore: 4.1.0 ssri: 12.0.0 - tar: 7.5.11 + tar: 7.5.13 transitivePeerDependencies: - supports-color @@ -69553,28 +79593,6 @@ snapshots: transitivePeerDependencies: - supports-color - pacote@21.5.0: - dependencies: - "@gar/promise-retry": 1.0.3 - "@npmcli/git": 7.0.2 - "@npmcli/installed-package-contents": 4.0.0 - "@npmcli/package-json": 7.0.2 - "@npmcli/promise-spawn": 9.0.1 - "@npmcli/run-script": 10.0.3 - cacache: 20.0.3 - fs-minipass: 3.0.3 - minipass: 7.1.3 - npm-package-arg: 13.0.1 - npm-packlist: 10.0.3 - npm-pick-manifest: 11.0.3 - npm-registry-fetch: 19.1.0 - proc-log: 6.1.0 - sigstore: 4.1.0 - ssri: 13.0.1 - tar: 7.5.11 - transitivePeerDependencies: - - supports-color - pako@1.0.11: {} parallel-transform@1.2.0: @@ -69604,6 +79622,10 @@ snapshots: pbkdf2: 3.1.5 safe-buffer: 5.2.1 + parse-author@2.0.0: + dependencies: + author-regex: 1.0.0 + parse-cache-control@1.0.1: {} parse-conflict-json@4.0.0: @@ -69818,15 +79840,21 @@ snapshots: sha.js: 2.4.12 to-buffer: 1.2.2 + pe-library@1.0.1: {} + + pe-library@2.0.1: {} + pend@1.2.0: {} + perfect-debounce@1.0.0: {} + perfect-debounce@2.1.0: {} performance-now@2.1.0: {} periscopic@3.1.0: dependencies: - "@types/estree": 1.0.8 + "@types/estree": 1.0.9 estree-walker: 3.0.3 is-reference: 3.0.3 @@ -69943,6 +79971,11 @@ snapshots: base64-js: 1.5.1 xmlbuilder: 15.1.1 + plist@4.0.0: + dependencies: + "@xmldom/xmldom": 0.9.10 + xmlbuilder: 15.1.1 + plur@4.0.0: dependencies: irregular-plurals: 3.5.0 @@ -69963,6 +79996,12 @@ snapshots: transitivePeerDependencies: - typescript + pnp-webpack-plugin@1.7.0(typescript@6.0.3): + dependencies: + ts-pnp: 1.2.0(typescript@6.0.3) + transitivePeerDependencies: + - typescript + polyfills-loader@1.7.6: dependencies: "@babel/core": 7.29.0 @@ -70257,40 +80296,50 @@ snapshots: "@csstools/utilities": 1.0.0(postcss@8.5.9) postcss: 8.5.9 - postcss-load-config@3.1.4(postcss@8.5.9)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.4.5)): + postcss-load-config@3.1.4(postcss@8.5.14)(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@5.4.5)): dependencies: lilconfig: 2.1.0 yaml: 1.10.3 optionalDependencies: - postcss: 8.5.9 - ts-node: 10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.4.5) + postcss: 8.5.14 + ts-node: 10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@5.4.5) optional: true - postcss-load-config@3.1.4(postcss@8.5.9)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.9.3)): + postcss-load-config@3.1.4(postcss@8.5.9)(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@5.9.3)): dependencies: lilconfig: 2.1.0 yaml: 1.10.3 optionalDependencies: postcss: 8.5.9 - ts-node: 10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.9.3) + ts-node: 10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@5.9.3) - postcss-load-config@3.1.4(postcss@8.5.9)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@6.0.2)): + postcss-load-config@3.1.4(postcss@8.5.9)(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.2)): dependencies: lilconfig: 2.1.0 yaml: 1.10.3 optionalDependencies: postcss: 8.5.9 - ts-node: 10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@6.0.2) + ts-node: 10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.2) - postcss-load-config@6.0.1(jiti@2.6.1)(postcss@8.5.9)(yaml@2.8.3): + postcss-load-config@6.0.1(jiti@2.7.0)(postcss@8.5.14)(yaml@2.8.3): dependencies: lilconfig: 3.1.3 optionalDependencies: - jiti: 2.6.1 - postcss: 8.5.9 + jiti: 2.7.0 + postcss: 8.5.14 yaml: 2.8.3 - postcss-loader@4.3.0(postcss@8.5.9)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + postcss-loader@4.3.0(postcss@8.5.14)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): + dependencies: + cosmiconfig: 7.1.0 + klona: 2.0.6 + loader-utils: 2.0.4 + postcss: 8.5.14 + schema-utils: 3.3.0 + semver: 7.7.4 + webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) + + postcss-loader@4.3.0(postcss@8.5.9)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: cosmiconfig: 7.1.0 klona: 2.0.6 @@ -70298,24 +80347,24 @@ snapshots: postcss: 8.5.9 schema-utils: 3.3.0 semver: 7.7.4 - webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) - postcss-loader@6.2.1(postcss@8.5.9)(webpack@5.106.1): + postcss-loader@6.2.1(postcss@8.5.9)(webpack@5.106.2): dependencies: cosmiconfig: 7.1.0 klona: 2.0.6 postcss: 8.5.9 semver: 7.7.4 - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2) + webpack: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) - postcss-loader@8.2.0(postcss@8.5.6)(typescript@5.9.3)(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + postcss-loader@8.2.0(postcss@8.5.6)(typescript@5.9.3)(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: cosmiconfig: 9.0.1(typescript@5.9.3) jiti: 2.6.1 postcss: 8.5.6 semver: 7.7.4 optionalDependencies: - webpack: 5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) transitivePeerDependencies: - typescript @@ -70895,9 +80944,9 @@ snapshots: dependencies: postcss: 8.5.9 - postcss-safe-parser@7.0.1(postcss@8.5.6): + postcss-safe-parser@7.0.1(postcss@8.5.14): dependencies: - postcss: 8.5.6 + postcss: 8.5.14 postcss-safe-parser@7.0.1(postcss@8.5.9): dependencies: @@ -71014,6 +81063,12 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + postcss@8.5.14: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + postcss@8.5.6: dependencies: nanoid: 3.3.11 @@ -71056,11 +81111,15 @@ snapshots: posthtml-parser: 0.11.0 posthtml-render: 3.0.0 + postject@1.0.0-alpha.6: + dependencies: + commander: 9.5.0 + powershell-utils@0.1.0: {} powershell-utils@0.2.0: {} - preact-cli@3.5.1(@types/babel__core@7.20.5)(encoding@0.1.13)(eslint@8.57.1)(preact-render-to-string@6.6.7(preact@10.29.1))(preact@10.29.1)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.9.3))(typescript@5.9.3)(vue-template-compiler@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)): + preact-cli@3.5.1(@types/babel__core@7.20.5)(encoding@0.1.13)(eslint@10.3.0(jiti@2.7.0))(preact-render-to-string@6.6.7(preact@10.29.1))(preact@10.29.1)(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@5.9.3))(typescript@5.9.3)(vue-template-compiler@2.7.16)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)): dependencies: "@babel/core": 7.29.0 "@babel/plugin-proposal-class-properties": 7.18.6(@babel/core@7.29.0) @@ -71073,67 +81132,67 @@ snapshots: "@babel/preset-typescript": 7.28.5(@babel/core@7.29.0) "@preact/async-loader": 3.0.2(preact@10.29.1) "@prefresh/babel-plugin": 0.4.4 - "@prefresh/webpack": 3.3.4(@prefresh/babel-plugin@0.4.4)(preact@10.29.1)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + "@prefresh/webpack": 3.3.4(@prefresh/babel-plugin@0.4.4)(preact@10.29.1)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) "@types/webpack": 4.41.40 autoprefixer: 10.4.27(postcss@8.5.9) - babel-esm-plugin: 0.9.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) - babel-loader: 8.4.1(@babel/core@7.29.0)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + babel-esm-plugin: 0.9.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) + babel-loader: 8.4.1(@babel/core@7.29.0)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) babel-plugin-macros: 3.1.0 babel-plugin-transform-react-remove-prop-types: 0.4.24 browserslist: 4.28.2 - compression-webpack-plugin: 6.1.2(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + compression-webpack-plugin: 6.1.2(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) console-clear: 1.1.1 - copy-webpack-plugin: 6.4.1(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) - critters-webpack-plugin: 2.5.0(html-webpack-plugin@3.2.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)))) + copy-webpack-plugin: 6.4.1(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) + critters-webpack-plugin: 2.5.0(html-webpack-plugin@3.2.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)))) cross-spawn-promise: 0.10.2 - css-loader: 5.2.7(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + css-loader: 5.2.7(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) dotenv: 16.4.5 ejs-loader: 0.5.0 envinfo: 7.14.0 esm: 3.2.25 - file-loader: 6.2.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) - fork-ts-checker-webpack-plugin: 6.5.3(eslint@8.57.1)(typescript@5.9.3)(vue-template-compiler@2.7.16)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + file-loader: 6.2.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) + fork-ts-checker-webpack-plugin: 6.5.3(eslint@10.3.0(jiti@2.7.0))(typescript@5.9.3)(vue-template-compiler@2.7.16)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) get-port: 5.1.1 gittar: 0.1.1 glob: 8.1.0 html-webpack-exclude-assets-plugin: 0.0.7 - html-webpack-plugin: 3.2.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + html-webpack-plugin: 3.2.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) ip: 1.1.9 isomorphic-unfetch: 3.1.0(encoding@0.1.13) kleur: 4.1.5 loader-utils: 2.0.4 - mini-css-extract-plugin: 1.6.2(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + mini-css-extract-plugin: 1.6.2(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) minimatch: 3.1.5 native-url: 0.3.4 - optimize-css-assets-webpack-plugin: 6.0.1(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + optimize-css-assets-webpack-plugin: 6.0.1(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) ora: 5.4.1 pnp-webpack-plugin: 1.7.0(typescript@5.9.3) postcss: 8.5.9 - postcss-load-config: 3.1.4(postcss@8.5.9)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.9.3)) - postcss-loader: 4.3.0(postcss@8.5.9)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + postcss-load-config: 3.1.4(postcss@8.5.9)(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@5.9.3)) + postcss-loader: 4.3.0(postcss@8.5.9)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) preact: 10.29.1 preact-render-to-string: 6.6.7(preact@10.29.1) - progress-bar-webpack-plugin: 2.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + progress-bar-webpack-plugin: 2.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) promise-polyfill: 8.3.0 prompts: 2.4.2 - raw-loader: 4.0.2(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + raw-loader: 4.0.2(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) react-refresh: 0.10.0 rimraf: 3.0.2 sade: 1.8.1 - size-plugin: 3.0.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + size-plugin: 3.0.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) source-map: 0.7.6 - source-map-loader: 1.1.3(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + source-map-loader: 1.1.3(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) stack-trace: 0.0.10 - style-loader: 2.0.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) - terser-webpack-plugin: 4.2.3(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + style-loader: 2.0.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) + terser-webpack-plugin: 4.2.3(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) update-notifier: 5.1.0 - url-loader: 4.1.1(file-loader@6.2.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))))(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + url-loader: 4.1.1(file-loader@6.2.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))))(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) validate-npm-package-name: 4.0.0 - webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) webpack-bundle-analyzer: 4.10.2 - webpack-dev-server: 4.15.2(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + webpack-dev-server: 4.15.2(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) webpack-fix-style-only-entries: 0.6.1 - webpack-manifest-plugin: 4.1.1(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + webpack-manifest-plugin: 4.1.1(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) webpack-merge: 5.10.0 webpack-plugin-replace: 1.2.0 which: 2.0.2 @@ -71142,7 +81201,7 @@ snapshots: workbox-precaching: 6.6.0 workbox-routing: 6.6.0 workbox-strategies: 6.6.0 - workbox-webpack-plugin: 6.6.0(@types/babel__core@7.20.5)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + workbox-webpack-plugin: 6.6.0(@types/babel__core@7.20.5)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: @@ -71198,17 +81257,16 @@ snapshots: dependencies: fast-diff: 1.3.0 - prettier-plugin-multiline-arrays@4.1.5(prettier@3.8.2): + prettier-plugin-astro@0.14.1: dependencies: - "@augment-vir/assert": 31.59.3 - "@augment-vir/common": 31.59.3 - prettier: 3.8.2 - proxy-vir: 2.0.2 + "@astrojs/compiler": 2.13.1 + prettier: 3.8.3 + sass-formatter: 0.7.9 - prettier-plugin-multiline-arrays@4.1.5(prettier@3.8.3): + prettier-plugin-multiline-arrays@4.1.8(prettier@3.8.3): dependencies: - "@augment-vir/assert": 31.59.3 - "@augment-vir/common": 31.59.3 + "@augment-vir/assert": 31.68.4 + "@augment-vir/common": 31.68.4 prettier: 3.8.3 proxy-vir: 2.0.2 @@ -71217,10 +81275,10 @@ snapshots: prettier: 3.8.2 svelte: 4.2.20 - prettier-plugin-svelte@3.5.1(prettier@3.8.2)(svelte@5.55.3(@typescript-eslint/types@8.58.2)): + prettier-plugin-svelte@3.5.1(prettier@3.8.2)(svelte@5.55.3(@typescript-eslint/types@8.59.2)): dependencies: prettier: 3.8.2 - svelte: 5.55.3(@typescript-eslint/types@8.58.2) + svelte: 5.55.3(@typescript-eslint/types@8.59.2) prettier@2.8.8: {} @@ -71256,12 +81314,6 @@ snapshots: ansi-styles: 5.2.0 react-is: 18.3.1 - pretty-format@30.2.0: - dependencies: - "@jest/schemas": 30.0.5 - ansi-styles: 5.2.0 - react-is: 18.3.1 - pretty-format@30.3.0: dependencies: "@jest/schemas": 30.0.5 @@ -71296,24 +81348,24 @@ snapshots: proggy@3.0.0: {} - progress-bar-webpack-plugin@2.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + progress-bar-webpack-plugin@2.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: chalk: 3.0.0 progress: 2.0.3 - webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) - progress-webpack-plugin@1.0.16(webpack@5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2)): + progress-webpack-plugin@1.0.16(webpack@5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2)): dependencies: chalk: 2.4.2 figures: 2.0.0 log-update: 2.3.0 - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2) + webpack: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) progress@2.0.3: {} promise-all-reject-late@1.0.1: {} - promise-call-limit@3.0.1: {} + promise-call-limit@3.0.2: {} promise-each@2.2.0: dependencies: @@ -71413,8 +81465,8 @@ snapshots: proxy-vir@2.0.2: dependencies: - "@augment-vir/assert": 31.59.3 - "@augment-vir/common": 31.59.3 + "@augment-vir/assert": 31.68.4 + "@augment-vir/common": 31.68.4 prr@1.0.1: {} @@ -71555,12 +81607,12 @@ snapshots: - supports-color - utf-8-validate - puppeteer-core@24.40.0: + puppeteer-core@24.42.0: dependencies: "@puppeteer/browsers": 2.13.0 - chromium-bidi: 14.0.0(devtools-protocol@0.0.1581282) + chromium-bidi: 14.0.0(devtools-protocol@0.0.1595872) debug: 4.4.3(supports-color@5.5.0) - devtools-protocol: 0.0.1581282 + devtools-protocol: 0.0.1595872 typed-query-selector: 2.12.1 webdriver-bidi-protocol: 0.4.1 ws: 8.20.0 @@ -71572,6 +81624,40 @@ snapshots: - supports-color - utf-8-validate + puppeteer-core@24.43.0: + dependencies: + "@puppeteer/browsers": 2.13.1 + chromium-bidi: 14.0.0(devtools-protocol@0.0.1608973) + debug: 4.4.3(supports-color@5.5.0) + devtools-protocol: 0.0.1608973 + typed-query-selector: 2.12.2 + webdriver-bidi-protocol: 0.4.1 + ws: 8.20.0 + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - bufferutil + - react-native-b4a + - supports-color + - utf-8-validate + + puppeteer@24.43.0(typescript@6.0.3): + dependencies: + "@puppeteer/browsers": 2.13.1 + chromium-bidi: 14.0.0(devtools-protocol@0.0.1608973) + cosmiconfig: 9.0.1(typescript@6.0.3) + devtools-protocol: 0.0.1608973 + puppeteer-core: 24.43.0 + typed-query-selector: 2.12.2 + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - bufferutil + - react-native-b4a + - supports-color + - typescript + - utf-8-validate + pure-rand@6.1.0: {} pvtsutils@1.3.6: @@ -71627,6 +81713,10 @@ snapshots: dependencies: dom-element-descriptors: 0.5.1 + qunit-dom@3.5.1: + dependencies: + dom-element-descriptors: 0.5.1 + qunit-theme-ember@1.0.0: {} qunit@2.25.0: @@ -71678,11 +81768,11 @@ snapshots: iconv-lite: 0.7.2 unpipe: 1.0.0 - raw-loader@4.0.2(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + raw-loader@4.0.2(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) rawth@3.0.0: dependencies: @@ -71706,31 +81796,31 @@ snapshots: minimist: 1.2.8 strip-json-comments: 2.0.1 - re-resizable@6.11.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + re-resizable@6.11.2(react-dom@19.2.5(react@19.2.5))(react@19.2.5): dependencies: - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) - react-autosize-textarea@7.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + react-autosize-textarea@7.1.0(react-dom@19.2.5(react@19.2.5))(react@19.2.5): dependencies: autosize: 4.0.4 line-height: 0.3.1 prop-types: 15.8.1 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) - react-colorful@5.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + react-colorful@5.6.1(react-dom@19.2.5(react@19.2.5))(react@19.2.5): dependencies: - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) - react-day-picker@9.14.0(react@18.3.1): + react-day-picker@9.14.0(react@19.2.5): dependencies: "@date-fns/tz": 1.4.1 "@tabby_ai/hijri-converter": 1.0.5 date-fns: 4.1.0 date-fns-jalali: 4.1.0-0 - react: 18.3.1 + react: 19.2.5 react-dom@18.3.1(react@18.3.1): dependencies: @@ -71743,11 +81833,11 @@ snapshots: react: 19.2.5 scheduler: 0.27.0 - react-easy-crop@5.5.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + react-easy-crop@5.5.7(react-dom@19.2.5(react@19.2.5))(react@19.2.5): dependencies: normalize-wheel: 1.0.1 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + react: 19.2.5 + react-dom: 19.2.5(react@19.2.5) tslib: 2.8.1 react-is@16.13.1: {} @@ -71760,29 +81850,29 @@ snapshots: react-refresh@0.14.2: {} - react-remove-scroll-bar@2.3.8(@types/react@18.3.28)(react@18.3.1): + react-remove-scroll-bar@2.3.8(@types/react@18.3.28)(react@19.2.5): dependencies: - react: 18.3.1 - react-style-singleton: 2.2.3(@types/react@18.3.28)(react@18.3.1) + react: 19.2.5 + react-style-singleton: 2.2.3(@types/react@18.3.28)(react@19.2.5) tslib: 2.8.1 optionalDependencies: "@types/react": 18.3.28 - react-remove-scroll@2.7.2(@types/react@18.3.28)(react@18.3.1): + react-remove-scroll@2.7.2(@types/react@18.3.28)(react@19.2.5): dependencies: - react: 18.3.1 - react-remove-scroll-bar: 2.3.8(@types/react@18.3.28)(react@18.3.1) - react-style-singleton: 2.2.3(@types/react@18.3.28)(react@18.3.1) + react: 19.2.5 + react-remove-scroll-bar: 2.3.8(@types/react@18.3.28)(react@19.2.5) + react-style-singleton: 2.2.3(@types/react@18.3.28)(react@19.2.5) tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@18.3.28)(react@18.3.1) - use-sidecar: 1.1.3(@types/react@18.3.28)(react@18.3.1) + use-callback-ref: 1.3.3(@types/react@18.3.28)(react@19.2.5) + use-sidecar: 1.1.3(@types/react@18.3.28)(react@19.2.5) optionalDependencies: "@types/react": 18.3.28 - react-style-singleton@2.2.3(@types/react@18.3.28)(react@18.3.1): + react-style-singleton@2.2.3(@types/react@18.3.28)(react@19.2.5): dependencies: get-nonce: 1.0.1 - react: 18.3.1 + react: 19.2.5 tslib: 2.8.1 optionalDependencies: "@types/react": 18.3.28 @@ -72263,6 +82353,14 @@ snapshots: requires-port@1.0.0: {} + resedit@2.0.3: + dependencies: + pe-library: 1.0.1 + + resedit@3.0.2: + dependencies: + pe-library: 2.0.1 + reselect@3.0.1: {} reselect@4.1.8: {} @@ -72494,7 +82592,28 @@ snapshots: "@rolldown/binding-win32-arm64-msvc": 1.0.0-rc.15 "@rolldown/binding-win32-x64-msvc": 1.0.0-rc.15 - rolldown@1.0.0-rc.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2): + rolldown@1.0.0-rc.18: + dependencies: + "@oxc-project/types": 0.128.0 + "@rolldown/pluginutils": 1.0.0-rc.18 + optionalDependencies: + "@rolldown/binding-android-arm64": 1.0.0-rc.18 + "@rolldown/binding-darwin-arm64": 1.0.0-rc.18 + "@rolldown/binding-darwin-x64": 1.0.0-rc.18 + "@rolldown/binding-freebsd-x64": 1.0.0-rc.18 + "@rolldown/binding-linux-arm-gnueabihf": 1.0.0-rc.18 + "@rolldown/binding-linux-arm64-gnu": 1.0.0-rc.18 + "@rolldown/binding-linux-arm64-musl": 1.0.0-rc.18 + "@rolldown/binding-linux-ppc64-gnu": 1.0.0-rc.18 + "@rolldown/binding-linux-s390x-gnu": 1.0.0-rc.18 + "@rolldown/binding-linux-x64-gnu": 1.0.0-rc.18 + "@rolldown/binding-linux-x64-musl": 1.0.0-rc.18 + "@rolldown/binding-openharmony-arm64": 1.0.0-rc.18 + "@rolldown/binding-wasm32-wasi": 1.0.0-rc.18 + "@rolldown/binding-win32-arm64-msvc": 1.0.0-rc.18 + "@rolldown/binding-win32-x64-msvc": 1.0.0-rc.18 + + rolldown@1.0.0-rc.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0): dependencies: "@oxc-project/types": 0.113.0 "@rolldown/pluginutils": 1.0.0-rc.4 @@ -72509,7 +82628,7 @@ snapshots: "@rolldown/binding-linux-x64-gnu": 1.0.0-rc.4 "@rolldown/binding-linux-x64-musl": 1.0.0-rc.4 "@rolldown/binding-openharmony-arm64": 1.0.0-rc.4 - "@rolldown/binding-wasm32-wasi": 1.0.0-rc.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2) + "@rolldown/binding-wasm32-wasi": 1.0.0-rc.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) "@rolldown/binding-win32-arm64-msvc": 1.0.0-rc.4 "@rolldown/binding-win32-x64-msvc": 1.0.0-rc.4 transitivePeerDependencies: @@ -72521,13 +82640,13 @@ snapshots: "@rollup/pluginutils": 5.3.0(rollup@4.60.1) rollup: 4.60.1 - rollup-plugin-dts@6.4.1(rollup@4.60.1)(typescript@5.9.3): + rollup-plugin-dts@6.4.1(rollup@4.60.2)(typescript@5.9.3): dependencies: "@jridgewell/remapping": 2.3.5 "@jridgewell/sourcemap-codec": 1.5.5 convert-source-map: 2.0.0 magic-string: 0.30.21 - rollup: 4.60.1 + rollup: 4.60.2 typescript: 5.9.3 optionalDependencies: "@babel/code-frame": 7.29.0 @@ -72559,6 +82678,12 @@ snapshots: transitivePeerDependencies: - rollup + rollup-plugin-riot@10.0.0(rollup@4.60.2): + dependencies: + "@rollup/pluginutils": 5.3.0(rollup@4.60.2) + transitivePeerDependencies: + - rollup + rollup-plugin-svelte@7.2.3(rollup@4.60.1)(svelte@4.2.20): dependencies: "@rollup/pluginutils": 4.2.1 @@ -72599,16 +82724,37 @@ snapshots: tslib: 2.8.1 typescript: 5.9.3 - rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.15)(rollup@4.60.1): + rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.18)(rollup@4.60.1): dependencies: open: 11.0.0 picomatch: 4.0.4 source-map: 0.7.6 yargs: 18.0.0 optionalDependencies: - rolldown: 1.0.0-rc.15 + rolldown: 1.0.0-rc.18 rollup: 4.60.1 + rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.18)(rollup@4.60.2): + dependencies: + open: 11.0.0 + picomatch: 4.0.4 + source-map: 0.7.6 + yargs: 18.0.0 + optionalDependencies: + rolldown: 1.0.0-rc.18 + rollup: 4.60.2 + + rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.18)(rollup@4.60.3): + dependencies: + open: 11.0.0 + picomatch: 4.0.4 + source-map: 0.7.6 + yargs: 18.0.0 + optionalDependencies: + rolldown: 1.0.0-rc.18 + rollup: 4.60.3 + optional: true + rollup-plugin-vue@5.1.9(ejs@3.1.10)(hamljs@0.6.2)(handlebars@4.7.9)(lodash@4.18.1)(nunjucks@3.2.4(chokidar@3.6.0))(postcss@8.5.9)(pug@3.0.4)(underscore@1.13.8)(vue-template-compiler@2.7.16): dependencies: "@vue/component-compiler": 4.2.4(ejs@3.1.10)(hamljs@0.6.2)(handlebars@4.7.9)(lodash@4.18.1)(nunjucks@3.2.4(chokidar@3.6.0))(postcss@8.5.9)(underscore@1.13.8)(vue-template-compiler@2.7.16) @@ -72721,6 +82867,68 @@ snapshots: "@rollup/rollup-win32-x64-msvc": 4.60.1 fsevents: 2.3.3 + rollup@4.60.2: + dependencies: + "@types/estree": 1.0.8 + optionalDependencies: + "@rollup/rollup-android-arm-eabi": 4.60.2 + "@rollup/rollup-android-arm64": 4.60.2 + "@rollup/rollup-darwin-arm64": 4.60.2 + "@rollup/rollup-darwin-x64": 4.60.2 + "@rollup/rollup-freebsd-arm64": 4.60.2 + "@rollup/rollup-freebsd-x64": 4.60.2 + "@rollup/rollup-linux-arm-gnueabihf": 4.60.2 + "@rollup/rollup-linux-arm-musleabihf": 4.60.2 + "@rollup/rollup-linux-arm64-gnu": 4.60.2 + "@rollup/rollup-linux-arm64-musl": 4.60.2 + "@rollup/rollup-linux-loong64-gnu": 4.60.2 + "@rollup/rollup-linux-loong64-musl": 4.60.2 + "@rollup/rollup-linux-ppc64-gnu": 4.60.2 + "@rollup/rollup-linux-ppc64-musl": 4.60.2 + "@rollup/rollup-linux-riscv64-gnu": 4.60.2 + "@rollup/rollup-linux-riscv64-musl": 4.60.2 + "@rollup/rollup-linux-s390x-gnu": 4.60.2 + "@rollup/rollup-linux-x64-gnu": 4.60.2 + "@rollup/rollup-linux-x64-musl": 4.60.2 + "@rollup/rollup-openbsd-x64": 4.60.2 + "@rollup/rollup-openharmony-arm64": 4.60.2 + "@rollup/rollup-win32-arm64-msvc": 4.60.2 + "@rollup/rollup-win32-ia32-msvc": 4.60.2 + "@rollup/rollup-win32-x64-gnu": 4.60.2 + "@rollup/rollup-win32-x64-msvc": 4.60.2 + fsevents: 2.3.3 + + rollup@4.60.3: + dependencies: + "@types/estree": 1.0.8 + optionalDependencies: + "@rollup/rollup-android-arm-eabi": 4.60.3 + "@rollup/rollup-android-arm64": 4.60.3 + "@rollup/rollup-darwin-arm64": 4.60.3 + "@rollup/rollup-darwin-x64": 4.60.3 + "@rollup/rollup-freebsd-arm64": 4.60.3 + "@rollup/rollup-freebsd-x64": 4.60.3 + "@rollup/rollup-linux-arm-gnueabihf": 4.60.3 + "@rollup/rollup-linux-arm-musleabihf": 4.60.3 + "@rollup/rollup-linux-arm64-gnu": 4.60.3 + "@rollup/rollup-linux-arm64-musl": 4.60.3 + "@rollup/rollup-linux-loong64-gnu": 4.60.3 + "@rollup/rollup-linux-loong64-musl": 4.60.3 + "@rollup/rollup-linux-ppc64-gnu": 4.60.3 + "@rollup/rollup-linux-ppc64-musl": 4.60.3 + "@rollup/rollup-linux-riscv64-gnu": 4.60.3 + "@rollup/rollup-linux-riscv64-musl": 4.60.3 + "@rollup/rollup-linux-s390x-gnu": 4.60.3 + "@rollup/rollup-linux-x64-gnu": 4.60.3 + "@rollup/rollup-linux-x64-musl": 4.60.3 + "@rollup/rollup-openbsd-x64": 4.60.3 + "@rollup/rollup-openharmony-arm64": 4.60.3 + "@rollup/rollup-win32-arm64-msvc": 4.60.3 + "@rollup/rollup-win32-ia32-msvc": 4.60.3 + "@rollup/rollup-win32-x64-gnu": 4.60.3 + "@rollup/rollup-win32-x64-msvc": 4.60.3 + fsevents: 2.3.3 + rou3@0.8.1: {} route-recognizer@0.3.4: {} @@ -72803,6 +83011,8 @@ snapshots: dependencies: tslib: 2.8.1 + s.color@0.0.15: {} + sade@1.8.1: dependencies: mri: 1.2.0 @@ -72863,26 +83073,30 @@ snapshots: minimist: 1.2.8 walker: 1.0.8 - sass-loader@13.3.3(sass@1.99.0)(webpack@5.106.1): + sass-formatter@0.7.9: dependencies: - neo-async: 2.6.2 - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@5.1.4) - optionalDependencies: - sass: 1.99.0 + suf-log: 2.5.3 - sass-loader@16.0.7(sass@1.97.3)(webpack@5.105.2(@swc/core@1.15.26)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + sass-loader@16.0.7(sass@1.97.3)(webpack@5.105.2(@swc/core@1.15.33)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: neo-async: 2.6.2 optionalDependencies: sass: 1.97.3 - webpack: 5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) sass-loader@16.0.7(sass@1.99.0)(webpack@5.106.1): dependencies: neo-async: 2.6.2 optionalDependencies: sass: 1.99.0 - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2) + webpack: 5.106.1(@swc/core@1.15.33)(webpack-cli@5.1.4) + + sass-loader@16.0.7(sass@1.99.0)(webpack@5.106.2): + dependencies: + neo-async: 2.6.2 + optionalDependencies: + sass: 1.99.0 + webpack: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) sass@1.97.3: dependencies: @@ -72967,6 +83181,8 @@ snapshots: scule@1.3.0: {} + search-insights@2.17.3: {} + section-matter@1.0.0: dependencies: extend-shallow: 2.0.1 @@ -73227,10 +83443,23 @@ snapshots: shebang-regex@3.0.0: {} + shebang-regex@4.0.0: {} + shell-quote@1.8.3: {} shellwords@0.1.1: {} + shiki@2.5.0: + dependencies: + "@shikijs/core": 2.5.0 + "@shikijs/engine-javascript": 2.5.0 + "@shikijs/engine-oniguruma": 2.5.0 + "@shikijs/langs": 2.5.0 + "@shikijs/themes": 2.5.0 + "@shikijs/types": 2.5.0 + "@shikijs/vscode-textmate": 10.0.2 + "@types/hast": 3.0.4 + shiki@4.0.2: dependencies: "@shikijs/core": 4.0.2 @@ -73371,7 +83600,7 @@ snapshots: sisteransi@1.0.5: {} - size-plugin@3.0.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + size-plugin@3.0.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: axios: 0.21.4 chalk: 2.4.2 @@ -73381,7 +83610,7 @@ snapshots: minimatch: 3.1.5 pretty-bytes: 5.6.0 util.promisify: 1.0.0 - webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) transitivePeerDependencies: - debug @@ -73553,7 +83782,7 @@ snapshots: ip-address: 10.1.0 smart-buffer: 4.2.0 - solid-devtools@0.29.3(solid-js@1.9.12)(vite@5.4.21(@types/node@25.6.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)): + solid-devtools@0.29.3(solid-js@1.9.12)(vite@5.4.21(@types/node@25.6.2)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)): dependencies: "@babel/core": 7.29.0 "@babel/plugin-syntax-typescript": 7.28.6(@babel/core@7.29.0) @@ -73562,7 +83791,7 @@ snapshots: "@solid-devtools/shared": 0.13.2(solid-js@1.9.12) solid-js: 1.9.12 optionalDependencies: - vite: 5.4.21(@types/node@25.6.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1) + vite: 5.4.21(@types/node@25.6.2)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1) transitivePeerDependencies: - supports-color @@ -73625,40 +83854,40 @@ snapshots: source-map-js@1.2.1: {} - source-map-loader@1.1.3(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + source-map-loader@1.1.3(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: abab: 2.0.6 iconv-lite: 0.6.3 loader-utils: 2.0.4 schema-utils: 3.3.0 source-map: 0.6.1 - webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) whatwg-mimetype: 2.3.0 - source-map-loader@3.0.2(webpack@5.106.1): + source-map-loader@3.0.2(webpack@5.106.2): dependencies: abab: 2.0.6 iconv-lite: 0.6.3 source-map-js: 1.2.1 - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2) + webpack: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) source-map-loader@4.0.2(webpack@5.106.1): dependencies: iconv-lite: 0.6.3 source-map-js: 1.2.1 - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@5.1.4) + webpack: 5.106.1(@swc/core@1.15.33)(webpack-cli@5.1.4) - source-map-loader@5.0.0(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + source-map-loader@5.0.0(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: iconv-lite: 0.6.3 source-map-js: 1.2.1 - webpack: 5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) - source-map-loader@5.0.0(webpack@5.106.1): + source-map-loader@5.0.0(webpack@5.106.2): dependencies: iconv-lite: 0.6.3 source-map-js: 1.2.1 - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2) + webpack: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) source-map-resolve@0.5.3: dependencies: @@ -73677,6 +83906,11 @@ snapshots: buffer-from: 1.1.2 source-map: 0.6.1 + source-map-support@0.5.19: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + source-map-support@0.5.21: dependencies: buffer-from: 1.1.2 @@ -73778,6 +84012,8 @@ snapshots: transitivePeerDependencies: - supports-color + speakingurl@14.0.1: {} + speedline-core@1.4.3: dependencies: "@types/node": 20.19.39 @@ -74002,7 +84238,7 @@ snapshots: dependencies: emoji-regex: 10.4.0 get-east-asian-width: 1.3.0 - strip-ansi: 7.1.0 + strip-ansi: 7.2.0 string-width@8.2.0: dependencies: @@ -74103,10 +84339,6 @@ snapshots: dependencies: ansi-regex: 5.0.1 - strip-ansi@7.1.0: - dependencies: - ansi-regex: 6.2.2 - strip-ansi@7.2.0: dependencies: ansi-regex: 6.2.2 @@ -74157,41 +84389,48 @@ snapshots: stubborn-utils@1.0.2: {} - style-loader@2.0.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + style-loader@2.0.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): + dependencies: + loader-utils: 2.0.4 + schema-utils: 3.3.0 + webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) + + style-loader@2.0.0(webpack@5.106.1(@swc/core@1.15.33)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 5.106.1(@swc/core@1.15.33)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) - style-loader@2.0.0(webpack@5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2)): + style-loader@2.0.0(webpack@5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2)): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2) + webpack: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) style-loader@3.3.4(webpack@5.106.1): dependencies: - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@5.1.4) + webpack: 5.106.1(@swc/core@1.15.33)(webpack-cli@5.1.4) - style-loader@4.0.0(webpack@5.106.1): + style-loader@4.0.0(webpack@5.106.2): dependencies: - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2) + webpack: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) - style-resources-loader@1.5.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + style-resources-loader@1.5.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: glob: 7.2.3 loader-utils: 2.0.4 schema-utils: 2.7.1 tslib: 2.8.1 - webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) style-search@0.1.0: {} - styled-jsx@5.1.6(babel-plugin-macros@3.1.0)(react@19.2.5): + styled-jsx@5.1.6(@babel/core@7.29.0)(babel-plugin-macros@3.1.0)(react@19.2.5): dependencies: client-only: 0.0.1 react: 19.2.5 optionalDependencies: + "@babel/core": 7.29.0 babel-plugin-macros: 3.1.0 styled_string@0.0.1: {} @@ -74220,20 +84459,20 @@ snapshots: postcss: 8.5.9 postcss-selector-parser: 7.1.1 - stylelint-config-recommended-scss@14.1.0(postcss@8.5.9)(stylelint@16.26.1(typescript@5.9.3)): + stylelint-config-recommended-scss@14.1.0(postcss@8.5.9)(stylelint@16.26.1(typescript@6.0.3)): dependencies: postcss-scss: 4.0.9(postcss@8.5.9) - stylelint: 16.26.1(typescript@5.9.3) - stylelint-config-recommended: 14.0.1(stylelint@16.26.1(typescript@5.9.3)) - stylelint-scss: 6.14.0(stylelint@16.26.1(typescript@5.9.3)) + stylelint: 16.26.1(typescript@6.0.3) + stylelint-config-recommended: 14.0.1(stylelint@16.26.1(typescript@6.0.3)) + stylelint-scss: 6.14.0(stylelint@16.26.1(typescript@6.0.3)) optionalDependencies: postcss: 8.5.9 - stylelint-config-recommended@14.0.1(stylelint@16.26.1(typescript@5.9.3)): + stylelint-config-recommended@14.0.1(stylelint@16.26.1(typescript@6.0.3)): dependencies: - stylelint: 16.26.1(typescript@5.9.3) + stylelint: 16.26.1(typescript@6.0.3) - stylelint-scss@6.14.0(stylelint@16.26.1(typescript@5.9.3)): + stylelint-scss@6.14.0(stylelint@16.26.1(typescript@6.0.3)): dependencies: css-tree: 3.2.1 is-plain-object: 5.0.0 @@ -74243,9 +84482,9 @@ snapshots: postcss-resolve-nested-selector: 0.1.6 postcss-selector-parser: 7.1.1 postcss-value-parser: 4.2.0 - stylelint: 16.26.1(typescript@5.9.3) + stylelint: 16.26.1(typescript@6.0.3) - stylelint@16.26.1(typescript@5.9.3): + stylelint@16.26.1(typescript@6.0.2): dependencies: "@csstools/css-parser-algorithms": 3.0.5(@csstools/css-tokenizer@3.0.4) "@csstools/css-syntax-patches-for-csstree": 1.1.2(css-tree@3.2.1) @@ -74255,7 +84494,7 @@ snapshots: "@dual-bundle/import-meta-resolve": 4.2.1 balanced-match: 2.0.0 colord: 2.9.3 - cosmiconfig: 9.0.1(typescript@5.9.3) + cosmiconfig: 9.0.1(typescript@6.0.2) css-functions-list: 3.3.3 css-tree: 3.2.1 debug: 4.4.3(supports-color@5.5.0) @@ -74289,8 +84528,9 @@ snapshots: transitivePeerDependencies: - supports-color - typescript + optional: true - stylelint@16.26.1(typescript@6.0.2): + stylelint@16.26.1(typescript@6.0.3): dependencies: "@csstools/css-parser-algorithms": 3.0.5(@csstools/css-tokenizer@3.0.4) "@csstools/css-syntax-patches-for-csstree": 1.1.2(css-tree@3.2.1) @@ -74300,7 +84540,7 @@ snapshots: "@dual-bundle/import-meta-resolve": 4.2.1 balanced-match: 2.0.0 colord: 2.9.3 - cosmiconfig: 9.0.1(typescript@6.0.2) + cosmiconfig: 9.0.1(typescript@6.0.3) css-functions-list: 3.3.3 css-tree: 3.2.1 debug: 4.4.3(supports-color@5.5.0) @@ -74334,7 +84574,6 @@ snapshots: transitivePeerDependencies: - supports-color - typescript - optional: true stylis@4.2.0: {} @@ -74365,13 +84604,17 @@ snapshots: stylus@0.64.0: dependencies: "@adobe/css-tools": 4.3.3 - debug: 4.3.6 - glob: 10.4.5 + debug: 4.4.3(supports-color@5.5.0) + glob: 10.5.0 sax: 1.4.1 source-map: 0.7.4 transitivePeerDependencies: - supports-color + subarg@1.0.0: + dependencies: + minimist: 1.2.8 + subsume@4.0.0: dependencies: escape-string-regexp: 5.0.0 @@ -74387,12 +84630,20 @@ snapshots: tinyglobby: 0.2.16 ts-interface-checker: 0.1.13 + suf-log@2.5.3: + dependencies: + s.color: 0.0.15 + sumchecker@3.0.1: dependencies: debug: 4.4.3(supports-color@5.5.0) transitivePeerDependencies: - supports-color + superjson@2.2.6: + dependencies: + copy-anything: 4.0.5 + supports-color@10.2.2: {} supports-color@2.0.0: {} @@ -74429,14 +84680,14 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - svelte-check@3.8.6(@babel/core@7.29.0)(less@4.6.4)(postcss-load-config@3.1.4(postcss@8.5.9)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.4.5)))(postcss@8.5.9)(pug@3.0.4)(sass@1.99.0)(svelte@4.2.20): + svelte-check@3.8.6(@babel/core@7.29.0)(less@4.6.4)(postcss-load-config@3.1.4(postcss@8.5.14)(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@5.4.5)))(postcss@8.5.14)(pug@3.0.4)(sass@1.99.0)(svelte@4.2.20): dependencies: "@jridgewell/trace-mapping": 0.3.31 chokidar: 3.6.0 picocolors: 1.1.1 sade: 1.8.1 svelte: 4.2.20 - svelte-preprocess: 5.1.4(@babel/core@7.29.0)(less@4.6.4)(postcss-load-config@3.1.4(postcss@8.5.9)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.4.5)))(postcss@8.5.9)(pug@3.0.4)(sass@1.99.0)(svelte@4.2.20)(typescript@5.9.3) + svelte-preprocess: 5.1.4(@babel/core@7.29.0)(less@4.6.4)(postcss-load-config@3.1.4(postcss@8.5.14)(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@5.4.5)))(postcss@8.5.14)(pug@3.0.4)(sass@1.99.0)(svelte@4.2.20)(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - "@babel/core" @@ -74449,14 +84700,14 @@ snapshots: - stylus - sugarss - svelte-check@3.8.6(@babel/core@7.29.0)(less@4.6.4)(postcss-load-config@3.1.4(postcss@8.5.9)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.9.3)))(postcss@8.5.9)(pug@3.0.4)(sass@1.99.0)(svelte@4.2.20): + svelte-check@3.8.6(@babel/core@7.29.0)(less@4.6.4)(postcss-load-config@3.1.4(postcss@8.5.9)(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@5.9.3)))(postcss@8.5.9)(pug@3.0.4)(sass@1.99.0)(svelte@4.2.20): dependencies: "@jridgewell/trace-mapping": 0.3.31 chokidar: 3.6.0 picocolors: 1.1.1 sade: 1.8.1 svelte: 4.2.20 - svelte-preprocess: 5.1.4(@babel/core@7.29.0)(less@4.6.4)(postcss-load-config@3.1.4(postcss@8.5.9)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.9.3)))(postcss@8.5.9)(pug@3.0.4)(sass@1.99.0)(svelte@4.2.20)(typescript@5.9.3) + svelte-preprocess: 5.1.4(@babel/core@7.29.0)(less@4.6.4)(postcss-load-config@3.1.4(postcss@8.5.9)(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@5.9.3)))(postcss@8.5.9)(pug@3.0.4)(sass@1.99.0)(svelte@4.2.20)(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - "@babel/core" @@ -74469,14 +84720,14 @@ snapshots: - stylus - sugarss - svelte-check@4.4.6(picomatch@4.0.4)(svelte@5.55.3(@typescript-eslint/types@8.58.2))(typescript@6.0.2): + svelte-check@4.4.6(picomatch@4.0.4)(svelte@5.55.3(@typescript-eslint/types@8.59.2))(typescript@6.0.2): dependencies: "@jridgewell/trace-mapping": 0.3.31 chokidar: 4.0.3 fdir: 6.5.0(picomatch@4.0.4) picocolors: 1.1.1 sade: 1.8.1 - svelte: 5.55.3(@typescript-eslint/types@8.58.2) + svelte: 5.55.3(@typescript-eslint/types@8.59.2) typescript: 6.0.2 transitivePeerDependencies: - picomatch @@ -74491,7 +84742,7 @@ snapshots: optionalDependencies: svelte: 4.2.20 - svelte-eslint-parser@1.6.0(svelte@5.55.3(@typescript-eslint/types@8.58.2)): + svelte-eslint-parser@1.6.0(svelte@4.2.20): dependencies: eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 @@ -74501,13 +84752,25 @@ snapshots: postcss-selector-parser: 7.1.1 semver: 7.7.4 optionalDependencies: - svelte: 5.55.3(@typescript-eslint/types@8.58.2) + svelte: 4.2.20 + + svelte-eslint-parser@1.6.0(svelte@5.55.3(@typescript-eslint/types@8.59.2)): + dependencies: + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + postcss: 8.5.9 + postcss-scss: 4.0.9(postcss@8.5.9) + postcss-selector-parser: 7.1.1 + semver: 7.7.4 + optionalDependencies: + svelte: 5.55.3(@typescript-eslint/types@8.59.2) svelte-hmr@0.16.0(svelte@4.2.20): dependencies: svelte: 4.2.20 - svelte-preprocess@5.1.4(@babel/core@7.29.0)(less@4.6.4)(postcss-load-config@3.1.4(postcss@8.5.9)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.4.5)))(postcss@8.5.9)(pug@3.0.4)(sass@1.99.0)(svelte@4.2.20)(typescript@5.4.5): + svelte-preprocess@5.1.4(@babel/core@7.29.0)(less@4.6.4)(postcss-load-config@3.1.4(postcss@8.5.14)(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@5.4.5)))(postcss@8.5.14)(pug@3.0.4)(sass@1.99.0)(svelte@4.2.20)(typescript@5.4.5): dependencies: "@types/pug": 2.0.10 detect-indent: 6.1.0 @@ -74518,13 +84781,13 @@ snapshots: optionalDependencies: "@babel/core": 7.29.0 less: 4.6.4 - postcss: 8.5.9 - postcss-load-config: 3.1.4(postcss@8.5.9)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.4.5)) + postcss: 8.5.14 + postcss-load-config: 3.1.4(postcss@8.5.14)(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@5.4.5)) pug: 3.0.4 sass: 1.99.0 typescript: 5.4.5 - svelte-preprocess@5.1.4(@babel/core@7.29.0)(less@4.6.4)(postcss-load-config@3.1.4(postcss@8.5.9)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.4.5)))(postcss@8.5.9)(pug@3.0.4)(sass@1.99.0)(svelte@4.2.20)(typescript@5.9.3): + svelte-preprocess@5.1.4(@babel/core@7.29.0)(less@4.6.4)(postcss-load-config@3.1.4(postcss@8.5.14)(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@5.4.5)))(postcss@8.5.14)(pug@3.0.4)(sass@1.99.0)(svelte@4.2.20)(typescript@5.9.3): dependencies: "@types/pug": 2.0.10 detect-indent: 6.1.0 @@ -74535,13 +84798,13 @@ snapshots: optionalDependencies: "@babel/core": 7.29.0 less: 4.6.4 - postcss: 8.5.9 - postcss-load-config: 3.1.4(postcss@8.5.9)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.4.5)) + postcss: 8.5.14 + postcss-load-config: 3.1.4(postcss@8.5.14)(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@5.4.5)) pug: 3.0.4 sass: 1.99.0 typescript: 5.9.3 - svelte-preprocess@5.1.4(@babel/core@7.29.0)(less@4.6.4)(postcss-load-config@3.1.4(postcss@8.5.9)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.9.3)))(postcss@8.5.9)(pug@3.0.4)(sass@1.99.0)(svelte@4.2.20)(typescript@5.9.3): + svelte-preprocess@5.1.4(@babel/core@7.29.0)(less@4.6.4)(postcss-load-config@3.1.4(postcss@8.5.9)(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@5.9.3)))(postcss@8.5.9)(pug@3.0.4)(sass@1.99.0)(svelte@4.2.20)(typescript@5.9.3): dependencies: "@types/pug": 2.0.10 detect-indent: 6.1.0 @@ -74553,16 +84816,16 @@ snapshots: "@babel/core": 7.29.0 less: 4.6.4 postcss: 8.5.9 - postcss-load-config: 3.1.4(postcss@8.5.9)(ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.9.3)) + postcss-load-config: 3.1.4(postcss@8.5.9)(ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@5.9.3)) pug: 3.0.4 sass: 1.99.0 typescript: 5.9.3 - svelte2tsx@0.7.53(svelte@5.55.3(@typescript-eslint/types@8.58.2))(typescript@6.0.2): + svelte2tsx@0.7.53(svelte@5.55.3(@typescript-eslint/types@8.59.2))(typescript@6.0.2): dependencies: dedent-js: 1.0.1 scule: 1.3.0 - svelte: 5.55.3(@typescript-eslint/types@8.58.2) + svelte: 5.55.3(@typescript-eslint/types@8.59.2) typescript: 6.0.2 svelte@4.2.20: @@ -74570,7 +84833,7 @@ snapshots: "@ampproject/remapping": 2.3.0 "@jridgewell/sourcemap-codec": 1.5.5 "@jridgewell/trace-mapping": 0.3.31 - "@types/estree": 1.0.8 + "@types/estree": 1.0.9 acorn: 8.16.0 aria-query: 5.3.2 axobject-query: 4.1.0 @@ -74582,12 +84845,12 @@ snapshots: magic-string: 0.30.21 periscopic: 3.1.0 - svelte@5.55.3(@typescript-eslint/types@8.58.2): + svelte@5.55.3(@typescript-eslint/types@8.59.2): dependencies: "@jridgewell/remapping": 2.3.5 "@jridgewell/sourcemap-codec": 1.5.5 "@sveltejs/acorn-typescript": 1.0.9(acorn@8.16.0) - "@types/estree": 1.0.8 + "@types/estree": 1.0.9 "@types/trusted-types": 2.0.7 acorn: 8.16.0 aria-query: 5.3.1 @@ -74595,7 +84858,7 @@ snapshots: clsx: 2.1.1 devalue: 5.7.1 esm-env: 1.2.2 - esrap: 2.2.5(@typescript-eslint/types@8.58.2) + esrap: 2.2.5(@typescript-eslint/types@8.59.2) is-reference: 3.0.3 locate-character: 3.0.0 magic-string: 0.30.21 @@ -74657,11 +84920,11 @@ snapshots: picocolors: 1.1.1 sax: 1.6.0 - swc-loader@0.2.7(@swc/core@1.15.26)(webpack@5.106.1): + swc-loader@0.2.7(@swc/core@1.15.33)(webpack@5.106.2): dependencies: - "@swc/core": 1.15.26 + "@swc/core": 1.15.33 "@swc/counter": 0.1.3 - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2) + webpack: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) symbol-observable@1.2.0: {} @@ -74741,6 +85004,8 @@ snapshots: tapable@2.3.2: {} + tapable@2.3.3: {} + tar-fs@2.1.4: dependencies: chownr: 1.1.4 @@ -74835,7 +85100,7 @@ snapshots: ansi-escapes: 7.3.0 supports-hyperlinks: 4.4.0 - terser-webpack-plugin@1.4.6(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + terser-webpack-plugin@1.4.6(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: cacache: 12.0.4 find-cache-dir: 2.1.0 @@ -74844,11 +85109,11 @@ snapshots: serialize-javascript: 4.0.0 source-map: 0.6.1 terser: 4.8.1 - webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) webpack-sources: 1.4.3 worker-farm: 1.7.0 - terser-webpack-plugin@4.2.3(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + terser-webpack-plugin@4.2.3(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: cacache: 15.3.0 find-cache-dir: 3.3.2 @@ -74858,43 +85123,72 @@ snapshots: serialize-javascript: 5.0.1 source-map: 0.6.1 terser: 5.46.1 - webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) webpack-sources: 1.4.3 transitivePeerDependencies: - bluebird - terser-webpack-plugin@5.4.0(@swc/core@1.15.26)(esbuild@0.27.3)(webpack@5.105.2(@swc/core@1.15.26)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + terser-webpack-plugin@5.5.0(@swc/core@1.15.33)(esbuild@0.27.3)(webpack@5.105.2(@swc/core@1.15.33)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: "@jridgewell/trace-mapping": 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.3 - terser: 5.46.0 - webpack: 5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + terser: 5.46.1 + webpack: 5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) optionalDependencies: - "@swc/core": 1.15.26 + "@swc/core": 1.15.33 esbuild: 0.27.3 - terser-webpack-plugin@5.4.0(@swc/core@1.15.26)(esbuild@0.28.0)(webpack@5.106.1(@swc/core@1.15.26)(esbuild@0.28.0)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + terser-webpack-plugin@5.5.0(@swc/core@1.15.33)(esbuild@0.27.7)(webpack@5.106.2): dependencies: "@jridgewell/trace-mapping": 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.3 - terser: 5.46.0 - webpack: 5.106.1(@swc/core@1.15.26)(esbuild@0.28.0)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + terser: 5.46.1 + webpack: 5.106.2(@swc/core@1.15.33)(esbuild@0.27.7)(webpack-cli@7.0.2) optionalDependencies: - "@swc/core": 1.15.26 - esbuild: 0.28.0 - optional: true + "@swc/core": 1.15.33 + esbuild: 0.27.7 - terser-webpack-plugin@5.4.0(@swc/core@1.15.26)(webpack@5.106.1): + terser-webpack-plugin@5.5.0(@swc/core@1.15.33)(webpack@5.106.1(@swc/core@1.15.33)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: "@jridgewell/trace-mapping": 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.3 - terser: 5.46.0 - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2) + terser: 5.46.1 + webpack: 5.106.1(@swc/core@1.15.33)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) + optionalDependencies: + "@swc/core": 1.15.33 + + terser-webpack-plugin@5.5.0(@swc/core@1.15.33)(webpack@5.106.1): + dependencies: + "@jridgewell/trace-mapping": 0.3.31 + jest-worker: 27.5.1 + schema-utils: 4.3.3 + terser: 5.46.1 + webpack: 5.106.1(@swc/core@1.15.33)(webpack-cli@5.1.4) optionalDependencies: - "@swc/core": 1.15.26 + "@swc/core": 1.15.33 + + terser-webpack-plugin@5.5.0(@swc/core@1.15.33)(webpack@5.106.2): + dependencies: + "@jridgewell/trace-mapping": 0.3.31 + jest-worker: 27.5.1 + schema-utils: 4.3.3 + terser: 5.46.1 + webpack: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) + optionalDependencies: + "@swc/core": 1.15.33 + + terser-webpack-plugin@5.6.0(@swc/core@1.15.33)(webpack@5.106.2): + dependencies: + "@jridgewell/trace-mapping": 0.3.31 + jest-worker: 27.5.1 + schema-utils: 4.3.3 + terser: 5.46.1 + webpack: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) + optionalDependencies: + "@swc/core": 1.15.33 terser@4.8.1: dependencies: @@ -74905,7 +85199,7 @@ snapshots: terser@5.44.1: dependencies: - "@jridgewell/source-map": 0.3.5 + "@jridgewell/source-map": 0.3.11 acorn: 8.16.0 commander: 2.20.3 source-map-support: 0.5.21 @@ -74945,7 +85239,7 @@ snapshots: testem@3.20.0(@babel/core@7.29.0)(ejs@3.1.10)(hamljs@0.6.2)(handlebars@4.7.9)(nunjucks@3.2.4(chokidar@3.6.0))(pug@3.0.4)(react-dom@19.2.5(react@19.2.5))(react@19.2.5)(underscore@1.13.8): dependencies: - "@xmldom/xmldom": 0.9.9 + "@xmldom/xmldom": 0.9.10 backbone: 1.6.1 charm: 1.0.2 chokidar: 5.0.0 @@ -75031,8 +85325,6 @@ snapshots: text-hex@1.0.0: {} - text-table@0.2.0: {} - textextensions@2.6.0: {} thenify-all@1.6.0: @@ -75051,23 +85343,23 @@ snapshots: third-party-web@0.29.0: {} - thread-loader@3.0.4(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + thread-loader@3.0.4(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: json-parse-better-errors: 1.0.2 loader-runner: 4.3.1 loader-utils: 2.0.4 neo-async: 2.6.2 schema-utils: 3.3.0 - webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) - thread-loader@3.0.4(webpack@5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2)): + thread-loader@3.0.4(webpack@5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2)): dependencies: json-parse-better-errors: 1.0.2 loader-runner: 4.3.1 loader-utils: 2.0.4 neo-async: 2.6.2 schema-utils: 3.3.0 - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2) + webpack: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) through2@2.0.5: dependencies: @@ -75087,9 +85379,9 @@ snapshots: thunky@1.1.0: {} - time-fix-plugin@2.0.7(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + time-fix-plugin@2.0.7(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: - webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) timers-browserify@2.0.12: dependencies: @@ -75125,8 +85417,6 @@ snapshots: tinyexec@0.3.2: {} - tinyexec@1.0.2: {} - tinyexec@1.1.1: {} tinyglobby@0.2.12: @@ -75186,6 +85476,8 @@ snapshots: dependencies: rimraf: 3.0.2 + tmp@0.2.4: {} + tmp@0.2.5: {} tmpl@1.0.5: {} @@ -75338,13 +85630,13 @@ snapshots: try-to-catch@4.0.3: {} - ts-api-utils@1.4.3(typescript@5.9.3): + ts-api-utils@1.4.3(typescript@6.0.3): dependencies: - typescript: 5.9.3 + typescript: 6.0.3 - ts-api-utils@1.4.3(typescript@6.0.2): + ts-api-utils@2.5.0(typescript@4.9.5): dependencies: - typescript: 6.0.2 + typescript: 4.9.5 ts-api-utils@2.5.0(typescript@5.9.3): dependencies: @@ -75354,6 +85646,10 @@ snapshots: dependencies: typescript: 6.0.2 + ts-api-utils@2.5.0(typescript@6.0.3): + dependencies: + typescript: 6.0.3 + ts-interface-checker@0.1.13: {} ts-json-schema-generator@2.9.0: @@ -75367,15 +85663,15 @@ snapshots: tslib: 2.8.1 typescript: 5.9.3 - ts-loader@8.4.0(typescript@6.0.2)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + ts-loader@8.4.0(typescript@6.0.3)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: chalk: 4.1.2 enhanced-resolve: 4.5.0 loader-utils: 2.0.4 micromatch: 4.0.8 semver: 7.7.4 - typescript: 6.0.2 - webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + typescript: 6.0.3 + webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) ts-loader@9.5.7(typescript@5.9.3)(webpack@5.106.1): dependencies: @@ -75385,9 +85681,19 @@ snapshots: semver: 7.7.4 source-map: 0.7.6 typescript: 5.9.3 - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2) + webpack: 5.106.1(@swc/core@1.15.33)(webpack-cli@7.0.2) - ts-node@10.9.2(@swc/core@1.15.26)(@types/node@20.19.39)(typescript@5.9.3): + ts-loader@9.5.7(typescript@5.9.3)(webpack@5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2)): + dependencies: + chalk: 4.1.2 + enhanced-resolve: 5.20.1 + micromatch: 4.0.8 + semver: 7.7.4 + source-map: 0.7.6 + typescript: 5.9.3 + webpack: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) + + ts-node@10.9.2(@swc/core@1.15.33)(@types/node@20.19.39)(typescript@5.9.3): dependencies: "@cspotcode/source-map-support": 0.8.1 "@tsconfig/node10": 1.0.9 @@ -75405,9 +85711,9 @@ snapshots: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: - "@swc/core": 1.15.26 + "@swc/core": 1.15.33 - ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.4.5): + ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.0)(typescript@5.9.3): dependencies: "@cspotcode/source-map-support": 0.8.1 "@tsconfig/node10": 1.0.9 @@ -75421,21 +85727,41 @@ snapshots: create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 + typescript: 5.9.3 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + optionalDependencies: + "@swc/core": 1.15.33 + + ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@5.4.5): + dependencies: + "@cspotcode/source-map-support": 0.8.1 + "@tsconfig/node10": 1.0.9 + "@tsconfig/node12": 1.0.11 + "@tsconfig/node14": 1.0.3 + "@tsconfig/node16": 1.0.4 + "@types/node": 25.6.2 + acorn: 8.10.0 + acorn-walk: 8.2.0 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 typescript: 5.4.5 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: - "@swc/core": 1.15.26 + "@swc/core": 1.15.33 optional: true - ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@5.9.3): + ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@5.9.3): dependencies: "@cspotcode/source-map-support": 0.8.1 "@tsconfig/node10": 1.0.9 "@tsconfig/node12": 1.0.11 "@tsconfig/node14": 1.0.3 "@tsconfig/node16": 1.0.4 - "@types/node": 25.6.0 + "@types/node": 25.6.2 acorn: 8.10.0 acorn-walk: 8.2.0 arg: 4.1.3 @@ -75446,16 +85772,17 @@ snapshots: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: - "@swc/core": 1.15.26 + "@swc/core": 1.15.33 + optional: true - ts-node@10.9.2(@swc/core@1.15.26)(@types/node@25.6.0)(typescript@6.0.2): + ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.2): dependencies: "@cspotcode/source-map-support": 0.8.1 "@tsconfig/node10": 1.0.9 "@tsconfig/node12": 1.0.11 "@tsconfig/node14": 1.0.3 "@tsconfig/node16": 1.0.4 - "@types/node": 25.6.0 + "@types/node": 25.6.2 acorn: 8.10.0 acorn-walk: 8.2.0 arg: 4.1.3 @@ -75466,7 +85793,28 @@ snapshots: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: - "@swc/core": 1.15.26 + "@swc/core": 1.15.33 + optional: true + + ts-node@10.9.2(@swc/core@1.15.33)(@types/node@25.6.2)(typescript@6.0.3): + dependencies: + "@cspotcode/source-map-support": 0.8.1 + "@tsconfig/node10": 1.0.9 + "@tsconfig/node12": 1.0.11 + "@tsconfig/node14": 1.0.3 + "@tsconfig/node16": 1.0.4 + "@types/node": 25.6.2 + acorn: 8.10.0 + acorn-walk: 8.2.0 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 6.0.3 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + optionalDependencies: + "@swc/core": 1.15.33 ts-pnp@1.2.0(typescript@5.9.3): optionalDependencies: @@ -75476,6 +85824,10 @@ snapshots: optionalDependencies: typescript: 6.0.2 + ts-pnp@1.2.0(typescript@6.0.3): + optionalDependencies: + typescript: 6.0.3 + ts-simple-type@1.0.7: {} tsconfck@3.1.6(typescript@5.9.3): @@ -75489,8 +85841,8 @@ snapshots: tsconfig-paths-webpack-plugin@4.2.0: dependencies: chalk: 4.1.2 - enhanced-resolve: 5.20.1 - tapable: 2.3.2 + enhanced-resolve: 5.21.0 + tapable: 2.3.3 tsconfig-paths: 4.2.0 tsconfig-paths@3.15.0: @@ -75512,16 +85864,16 @@ snapshots: tsscmp@1.0.6: {} - tsup-preset-solid@2.2.0(esbuild@0.21.5)(solid-js@1.9.12)(tsup@8.5.1(@microsoft/api-extractor@7.58.2(@types/node@20.19.39))(@swc/core@1.15.26)(jiti@2.6.1)(postcss@8.5.9)(typescript@5.9.3)(yaml@2.8.3)): + tsup-preset-solid@2.2.0(esbuild@0.21.5)(solid-js@1.9.12)(tsup@8.5.1(patch_hash=ce9dbc714c187cea78868f1e68c1a0e5097ddbceb7e976a564d94f2291b5bcb9)(@microsoft/api-extractor@7.58.2(@types/node@20.19.39))(@swc/core@1.15.33)(jiti@2.7.0)(postcss@8.5.14)(typescript@5.9.3)(yaml@2.8.3)): dependencies: esbuild-plugin-solid: 0.5.0(esbuild@0.21.5)(solid-js@1.9.12) - tsup: 8.5.1(@microsoft/api-extractor@7.58.2(@types/node@20.19.39))(@swc/core@1.15.26)(jiti@2.6.1)(postcss@8.5.9)(typescript@5.9.3)(yaml@2.8.3) + tsup: 8.5.1(patch_hash=ce9dbc714c187cea78868f1e68c1a0e5097ddbceb7e976a564d94f2291b5bcb9)(@microsoft/api-extractor@7.58.2(@types/node@20.19.39))(@swc/core@1.15.33)(jiti@2.7.0)(postcss@8.5.14)(typescript@5.9.3)(yaml@2.8.3) transitivePeerDependencies: - esbuild - solid-js - supports-color - tsup@8.5.1(@microsoft/api-extractor@7.58.2(@types/node@20.19.39))(@swc/core@1.15.26)(jiti@2.6.1)(postcss@8.5.9)(typescript@5.9.3)(yaml@2.8.3): + tsup@8.5.1(patch_hash=ce9dbc714c187cea78868f1e68c1a0e5097ddbceb7e976a564d94f2291b5bcb9)(@microsoft/api-extractor@7.58.2(@types/node@20.19.39))(@swc/core@1.15.33)(jiti@2.7.0)(postcss@8.5.14)(typescript@5.9.3)(yaml@2.8.3): dependencies: bundle-require: 5.1.0(esbuild@0.27.7) cac: 6.7.14 @@ -75532,9 +85884,9 @@ snapshots: fix-dts-default-cjs-exports: 1.0.1 joycon: 3.1.1 picocolors: 1.1.1 - postcss-load-config: 6.0.1(jiti@2.6.1)(postcss@8.5.9)(yaml@2.8.3) + postcss-load-config: 6.0.1(jiti@2.7.0)(postcss@8.5.14)(yaml@2.8.3) resolve-from: 5.0.0 - rollup: 4.60.1 + rollup: 4.60.2 source-map: 0.7.6 sucrase: 3.35.1 tinyexec: 0.3.2 @@ -75542,8 +85894,8 @@ snapshots: tree-kill: 1.2.2 optionalDependencies: "@microsoft/api-extractor": 7.58.2(@types/node@20.19.39) - "@swc/core": 1.15.26 - postcss: 8.5.9 + "@swc/core": 1.15.33 + postcss: 8.5.14 typescript: 5.9.3 transitivePeerDependencies: - jiti @@ -75551,15 +85903,35 @@ snapshots: - tsx - yaml - tsutils@3.21.0(typescript@4.9.5): - dependencies: - tslib: 1.14.1 - typescript: 4.9.5 - - tsutils@3.21.0(typescript@5.9.3): + tsup@8.5.1(patch_hash=ce9dbc714c187cea78868f1e68c1a0e5097ddbceb7e976a564d94f2291b5bcb9)(@microsoft/api-extractor@7.58.2(@types/node@25.6.2))(@swc/core@1.15.33)(jiti@2.7.0)(postcss@8.5.14)(typescript@6.0.3)(yaml@2.8.3): dependencies: - tslib: 1.14.1 - typescript: 5.9.3 + bundle-require: 5.1.0(esbuild@0.27.7) + cac: 6.7.14 + chokidar: 4.0.3 + consola: 3.4.2 + debug: 4.4.3(supports-color@5.5.0) + esbuild: 0.27.7 + fix-dts-default-cjs-exports: 1.0.1 + joycon: 3.1.1 + picocolors: 1.1.1 + postcss-load-config: 6.0.1(jiti@2.7.0)(postcss@8.5.14)(yaml@2.8.3) + resolve-from: 5.0.0 + rollup: 4.60.2 + source-map: 0.7.6 + sucrase: 3.35.1 + tinyexec: 0.3.2 + tinyglobby: 0.2.16 + tree-kill: 1.2.2 + optionalDependencies: + "@microsoft/api-extractor": 7.58.2(@types/node@25.6.2) + "@swc/core": 1.15.33 + postcss: 8.5.14 + typescript: 6.0.3 + transitivePeerDependencies: + - jiti + - supports-color + - tsx + - yaml tsyringe@4.10.0: dependencies: @@ -75624,10 +85996,6 @@ snapshots: type-fest@4.41.0: {} - type-fest@5.4.4: - dependencies: - tagged-tag: 1.0.0 - type-fest@5.5.0: dependencies: tagged-tag: 1.0.0 @@ -75680,54 +86048,56 @@ snapshots: typed-assert@1.0.9: {} - typed-event-target@4.1.0: + typed-event-target@4.3.0: dependencies: - "@augment-vir/assert": 31.59.3 - "@augment-vir/common": 31.59.3 - "@augment-vir/core": 31.59.3 + "@augment-vir/assert": 31.68.4 + "@augment-vir/common": 31.68.4 + "@augment-vir/core": 31.68.4 typed-query-selector@2.12.1: {} + typed-query-selector@2.12.2: {} + typedarray-to-buffer@3.1.5: dependencies: is-typedarray: 1.0.0 typedarray@0.0.6: {} - typedoc-plugin-clarity@1.6.0(typedoc@0.28.19(typescript@6.0.2)): + typedoc-plugin-clarity@1.6.0(typedoc@0.28.19(typescript@6.0.3)): dependencies: - typedoc: 0.28.19(typescript@6.0.2) + typedoc: 0.28.19(typescript@6.0.3) typescript: 5.9.3 - typedoc-plugin-coverage@4.0.3(typedoc@0.28.19(typescript@6.0.2)): + typedoc-plugin-coverage@4.0.3(typedoc@0.28.19(typescript@6.0.3)): dependencies: - typedoc: 0.28.19(typescript@6.0.2) + typedoc: 0.28.19(typescript@6.0.3) - typedoc-plugin-google-ads@1.6.0(typedoc@0.28.19(typescript@6.0.2)): + typedoc-plugin-google-ads@1.6.0(typedoc@0.28.19(typescript@6.0.3)): dependencies: - typedoc: 0.28.19(typescript@6.0.2) + typedoc: 0.28.19(typescript@6.0.3) typescript: 5.9.3 - typedoc-plugin-keywords@1.6.0(typedoc@0.28.19(typescript@6.0.2)): + typedoc-plugin-keywords@1.6.0(typedoc@0.28.19(typescript@6.0.3)): dependencies: - typedoc: 0.28.19(typescript@6.0.2) + typedoc: 0.28.19(typescript@6.0.3) typescript: 5.9.3 - typedoc-plugin-mdn-links@5.1.1(typedoc@0.28.19(typescript@6.0.2)): + typedoc-plugin-mdn-links@5.1.1(typedoc@0.28.19(typescript@6.0.3)): dependencies: - typedoc: 0.28.19(typescript@6.0.2) + typedoc: 0.28.19(typescript@6.0.3) - typedoc-plugin-missing-exports@4.1.3(typedoc@0.28.19(typescript@6.0.2)): + typedoc-plugin-missing-exports@4.1.3(typedoc@0.28.19(typescript@6.0.3)): dependencies: - typedoc: 0.28.19(typescript@6.0.2) + typedoc: 0.28.19(typescript@6.0.3) - typedoc@0.28.19(typescript@6.0.2): + typedoc@0.28.19(typescript@6.0.3): dependencies: "@gerrit0/mini-shiki": 3.23.0 lunr: 2.3.9 markdown-it: 14.1.1 minimatch: 10.2.5 - typescript: 6.0.2 + typescript: 6.0.3 yaml: 2.8.3 typesafe-path@0.2.2: {} @@ -75736,17 +86106,28 @@ snapshots: dependencies: semver: 7.7.4 - typescript-eslint@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2): + typescript-eslint@8.59.2(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2): dependencies: - "@typescript-eslint/eslint-plugin": 8.58.2(@typescript-eslint/parser@8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) - "@typescript-eslint/parser": 8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) - "@typescript-eslint/typescript-estree": 8.58.2(typescript@6.0.2) - "@typescript-eslint/utils": 8.58.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2) - eslint: 10.2.0(jiti@2.6.1) + "@typescript-eslint/eslint-plugin": 8.59.2(@typescript-eslint/parser@8.59.2(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2))(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) + "@typescript-eslint/parser": 8.59.2(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) + "@typescript-eslint/typescript-estree": 8.59.2(typescript@6.0.2) + "@typescript-eslint/utils": 8.59.2(eslint@10.2.0(jiti@2.7.0))(typescript@6.0.2) + eslint: 10.2.0(jiti@2.7.0) typescript: 6.0.2 transitivePeerDependencies: - supports-color + typescript-eslint@8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3): + dependencies: + "@typescript-eslint/eslint-plugin": 8.59.2(@typescript-eslint/parser@8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + "@typescript-eslint/parser": 8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + "@typescript-eslint/typescript-estree": 8.59.2(typescript@6.0.3) + "@typescript-eslint/utils": 8.59.2(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + eslint: 10.3.0(jiti@2.7.0) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + typescript-memoize@1.1.1: {} typescript@3.9.10: {} @@ -75759,6 +86140,8 @@ snapshots: typescript@6.0.2: {} + typescript@6.0.3: {} + typical@4.0.0: {} typical@5.2.0: {} @@ -75835,6 +86218,8 @@ snapshots: undici-types@7.24.7: {} + undici-types@8.1.0: {} + undici@7.24.4: {} undici@7.24.7: {} @@ -75939,10 +86324,6 @@ snapshots: dependencies: unique-slug: 4.0.0 - unique-filename@5.0.0: - dependencies: - unique-slug: 6.0.0 - unique-slug@2.0.2: dependencies: imurmurhash: 0.1.4 @@ -75955,10 +86336,6 @@ snapshots: dependencies: imurmurhash: 0.1.4 - unique-slug@6.0.0: - dependencies: - imurmurhash: 0.1.4 - unique-string@2.0.0: dependencies: crypto-random-string: 2.0.0 @@ -76025,7 +86402,7 @@ snapshots: unist-util-is: 6.0.1 unist-util-visit-parents: 6.0.2 - universal-user-agent@6.0.0: {} + universal-user-agent@6.0.1: {} universalify@0.1.2: {} @@ -76211,23 +86588,23 @@ snapshots: urix@0.1.0: {} - url-loader@4.1.1(file-loader@6.2.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))))(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + url-loader@4.1.1(file-loader@6.2.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))))(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: loader-utils: 2.0.4 mime-types: 2.1.35 schema-utils: 3.3.0 - webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) optionalDependencies: - file-loader: 6.2.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + file-loader: 6.2.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) - url-loader@4.1.1(file-loader@6.2.0(webpack@5.106.1))(webpack@5.106.1): + url-loader@4.1.1(file-loader@6.2.0(webpack@5.106.2))(webpack@5.106.2): dependencies: loader-utils: 2.0.4 mime-types: 2.1.35 schema-utils: 3.3.0 - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2) + webpack: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) optionalDependencies: - file-loader: 6.2.0(webpack@5.106.1) + file-loader: 6.2.0(webpack@5.106.2) url-parse-lax@3.0.0: dependencies: @@ -76243,28 +86620,28 @@ snapshots: punycode: 1.4.1 qs: 6.14.0 - use-callback-ref@1.3.3(@types/react@18.3.28)(react@18.3.1): + use-callback-ref@1.3.3(@types/react@18.3.28)(react@19.2.5): dependencies: - react: 18.3.1 + react: 19.2.5 tslib: 2.8.1 optionalDependencies: "@types/react": 18.3.28 - use-memo-one@1.1.3(react@18.3.1): + use-memo-one@1.1.3(react@19.2.5): dependencies: - react: 18.3.1 + react: 19.2.5 - use-sidecar@1.1.3(@types/react@18.3.28)(react@18.3.1): + use-sidecar@1.1.3(@types/react@18.3.28)(react@19.2.5): dependencies: detect-node-es: 1.1.0 - react: 18.3.1 + react: 19.2.5 tslib: 2.8.1 optionalDependencies: "@types/react": 18.3.28 - use-sync-external-store@1.6.0(react@18.3.1): + use-sync-external-store@1.6.0(react@19.2.5): dependencies: - react: 18.3.1 + react: 19.2.5 use@3.1.1: {} @@ -76424,15 +86801,25 @@ snapshots: - bare-abort-controller - react-native-b4a - vite-dev-rpc@1.1.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)): + vite-dev-rpc@1.1.0(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)): dependencies: birpc: 2.9.0 - vite: 8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) - vite-hot-client: 2.1.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) + vite: 8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + vite-hot-client: 2.1.0(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) - vite-hot-client@2.1.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)): + vite-dev-rpc@1.1.0(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)): dependencies: - vite: 8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + birpc: 2.9.0 + vite: 8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + vite-hot-client: 2.1.0(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) + + vite-hot-client@2.1.0(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)): + dependencies: + vite: 8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + + vite-hot-client@2.1.0(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)): + dependencies: + vite: 8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) vite-node@1.6.1(@types/node@20.19.39)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1): dependencies: @@ -76452,13 +86839,13 @@ snapshots: - supports-color - terser - vite-node@5.3.0(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3): + vite-node@5.3.0(@types/node@25.6.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3): dependencies: cac: 6.7.14 es-module-lexer: 2.0.0 obug: 2.1.1 pathe: 2.0.3 - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + vite: 7.3.2(@types/node@25.6.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) transitivePeerDependencies: - "@types/node" - jiti @@ -76472,7 +86859,7 @@ snapshots: - tsx - yaml - vite-plugin-checker@0.12.0(eslint@10.2.0(jiti@2.6.1))(meow@13.2.0)(optionator@0.9.4)(stylelint@16.26.1(typescript@6.0.2))(typescript@6.0.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2)): + vite-plugin-checker@0.12.0(eslint@10.2.0(jiti@2.6.1))(meow@13.2.0)(optionator@0.9.4)(stylelint@16.26.1(typescript@6.0.2))(typescript@6.0.2)(vite@7.3.2(@types/node@25.6.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2)): dependencies: "@babel/code-frame": 7.29.0 chokidar: 4.0.3 @@ -76481,7 +86868,7 @@ snapshots: picomatch: 4.0.4 tiny-invariant: 1.3.3 tinyglobby: 0.2.16 - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + vite: 7.3.2(@types/node@25.6.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) vscode-uri: 3.1.0 optionalDependencies: eslint: 10.2.0(jiti@2.6.1) @@ -76491,10 +86878,29 @@ snapshots: typescript: 6.0.2 vue-tsc: 3.2.6(typescript@6.0.2) - vite-plugin-dts@4.5.4(@types/node@25.6.0)(rollup@4.60.1)(typescript@6.0.2)(vite@6.4.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)): + vite-plugin-checker@0.12.0(eslint@10.2.0(jiti@2.7.0))(meow@13.2.0)(optionator@0.9.4)(stylelint@16.26.1(typescript@6.0.2))(typescript@6.0.2)(vite@7.3.2(@types/node@25.6.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2)): + dependencies: + "@babel/code-frame": 7.29.0 + chokidar: 4.0.3 + npm-run-path: 6.0.0 + picocolors: 1.1.1 + picomatch: 4.0.4 + tiny-invariant: 1.3.3 + tinyglobby: 0.2.16 + vite: 7.3.2(@types/node@25.6.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + vscode-uri: 3.1.0 + optionalDependencies: + eslint: 10.2.0(jiti@2.7.0) + meow: 13.2.0 + optionator: 0.9.4 + stylelint: 16.26.1(typescript@6.0.2) + typescript: 6.0.2 + vue-tsc: 3.2.6(typescript@6.0.2) + + vite-plugin-dts@4.5.4(@types/node@25.6.0)(rollup@4.60.3)(typescript@6.0.2)(vite@6.4.2(@types/node@25.6.0)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)): dependencies: "@microsoft/api-extractor": 7.58.2(@types/node@25.6.0) - "@rollup/pluginutils": 5.3.0(rollup@4.60.1) + "@rollup/pluginutils": 5.3.0(rollup@4.60.3) "@volar/typescript": 2.4.28 "@vue/language-core": 2.2.0(typescript@6.0.2) compare-versions: 6.1.1 @@ -76504,16 +86910,16 @@ snapshots: magic-string: 0.30.21 typescript: 6.0.2 optionalDependencies: - vite: 6.4.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + vite: 6.4.2(@types/node@25.6.0)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) transitivePeerDependencies: - "@types/node" - rollup - supports-color - vite-plugin-dts@4.5.4(@types/node@25.6.0)(rollup@4.60.1)(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)): + vite-plugin-dts@4.5.4(@types/node@25.6.0)(rollup@4.60.3)(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)): dependencies: "@microsoft/api-extractor": 7.58.2(@types/node@25.6.0) - "@rollup/pluginutils": 5.3.0(rollup@4.60.1) + "@rollup/pluginutils": 5.3.0(rollup@4.60.3) "@volar/typescript": 2.4.28 "@vue/language-core": 2.2.0(typescript@6.0.2) compare-versions: 6.1.1 @@ -76523,21 +86929,57 @@ snapshots: magic-string: 0.30.21 typescript: 6.0.2 optionalDependencies: - vite: 8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) transitivePeerDependencies: - "@types/node" - rollup - supports-color - vite-plugin-eslint@1.8.1(eslint@8.57.1)(vite@8.0.8(@types/node@20.19.39)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)): + vite-plugin-dts@4.5.4(@types/node@25.6.2)(rollup@4.60.3)(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)): + dependencies: + "@microsoft/api-extractor": 7.58.2(@types/node@25.6.2) + "@rollup/pluginutils": 5.3.0(rollup@4.60.3) + "@volar/typescript": 2.4.28 + "@vue/language-core": 2.2.0(typescript@6.0.2) + compare-versions: 6.1.1 + debug: 4.4.3(supports-color@5.5.0) + kolorist: 1.8.0 + local-pkg: 1.1.2 + magic-string: 0.30.21 + typescript: 6.0.2 + optionalDependencies: + vite: 8.0.8(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + transitivePeerDependencies: + - "@types/node" + - rollup + - supports-color + + vite-plugin-eslint@1.8.1(eslint@10.3.0(jiti@2.7.0))(vite@8.0.11(@types/node@20.19.39)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)): dependencies: "@rollup/pluginutils": 4.2.1 "@types/eslint": 8.56.12 - eslint: 8.57.1 + eslint: 10.3.0(jiti@2.7.0) rollup: 2.80.0 - vite: 8.0.8(@types/node@20.19.39)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + vite: 8.0.11(@types/node@20.19.39)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + + vite-plugin-inspect@11.3.3(@nuxt/kit@4.4.2(magicast@0.5.2))(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)): + dependencies: + ansis: 4.2.0 + debug: 4.4.3(supports-color@5.5.0) + error-stack-parser-es: 1.0.5 + ohash: 2.0.11 + open: 10.2.0 + perfect-debounce: 2.1.0 + sirv: 3.0.2 + unplugin-utils: 0.3.1 + vite: 8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + vite-dev-rpc: 1.1.0(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) + optionalDependencies: + "@nuxt/kit": 4.4.2(magicast@0.5.2) + transitivePeerDependencies: + - supports-color - vite-plugin-inspect@11.3.3(@nuxt/kit@4.4.2(magicast@0.5.2))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)): + vite-plugin-inspect@11.3.3(@nuxt/kit@4.4.2(magicast@0.5.2))(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)): dependencies: ansis: 4.2.0 debug: 4.4.3(supports-color@5.5.0) @@ -76547,19 +86989,19 @@ snapshots: perfect-debounce: 2.1.0 sirv: 3.0.2 unplugin-utils: 0.3.1 - vite: 8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) - vite-dev-rpc: 1.1.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) + vite: 8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + vite-dev-rpc: 1.1.0(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) optionalDependencies: "@nuxt/kit": 4.4.2(magicast@0.5.2) transitivePeerDependencies: - supports-color - vite-plugin-lib-inject-css@2.2.2(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)): + vite-plugin-lib-inject-css@2.2.2(vite@8.0.8(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)): dependencies: "@ast-grep/napi": 0.36.3 magic-string: 0.30.21 picocolors: 1.1.1 - vite: 8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + vite: 8.0.8(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) vite-plugin-solid@2.11.12(@testing-library/jest-dom@6.9.1)(solid-js@1.9.12)(vite@5.4.21(@types/node@20.19.39)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)): dependencies: @@ -76576,7 +87018,7 @@ snapshots: transitivePeerDependencies: - supports-color - vite-plugin-solid@2.11.12(@testing-library/jest-dom@6.9.1)(solid-js@1.9.12)(vite@5.4.21(@types/node@25.6.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)): + vite-plugin-solid@2.11.12(@testing-library/jest-dom@6.9.1)(solid-js@1.9.12)(vite@5.4.21(@types/node@25.6.2)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)): dependencies: "@babel/core": 7.29.0 "@types/babel__core": 7.20.5 @@ -76584,29 +87026,39 @@ snapshots: merge-anything: 5.1.7 solid-js: 1.9.12 solid-refresh: 0.6.3(solid-js@1.9.12) - vite: 5.4.21(@types/node@25.6.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1) - vitefu: 1.1.3(vite@5.4.21(@types/node@25.6.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)) + vite: 5.4.21(@types/node@25.6.2)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1) + vitefu: 1.1.3(vite@5.4.21(@types/node@25.6.2)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)) optionalDependencies: "@testing-library/jest-dom": 6.9.1 transitivePeerDependencies: - supports-color - vite-plugin-vue-tracer@1.3.0(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2)): + vite-plugin-vue-tracer@1.3.0(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2)): + dependencies: + estree-walker: 3.0.3 + exsolve: 1.0.8 + magic-string: 0.30.21 + pathe: 2.0.3 + source-map-js: 1.2.1 + vite: 8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + vue: 3.5.32(typescript@6.0.2) + + vite-plugin-vue-tracer@1.3.0(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2)): dependencies: estree-walker: 3.0.3 exsolve: 1.0.8 magic-string: 0.30.21 pathe: 2.0.3 source-map-js: 1.2.1 - vite: 8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + vite: 8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) vue: 3.5.32(typescript@6.0.2) - vite-tsconfig-paths@6.1.1(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)): + vite-tsconfig-paths@6.1.1(typescript@6.0.2)(vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)): dependencies: debug: 4.4.3(supports-color@5.5.0) globrex: 0.1.2 tsconfck: 3.1.6(typescript@6.0.2) - vite: 8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + vite: 8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) transitivePeerDependencies: - supports-color - typescript @@ -76615,7 +87067,7 @@ snapshots: dependencies: esbuild: 0.21.5 postcss: 8.5.9 - rollup: 4.60.1 + rollup: 4.60.2 optionalDependencies: "@types/node": 20.19.39 fsevents: 2.3.3 @@ -76625,13 +87077,13 @@ snapshots: stylus: 0.64.0 terser: 5.46.1 - vite@5.4.21(@types/node@25.6.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1): + vite@5.4.21(@types/node@25.6.2)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1): dependencies: esbuild: 0.21.5 postcss: 8.5.9 - rollup: 4.60.1 + rollup: 4.60.2 optionalDependencies: - "@types/node": 25.6.0 + "@types/node": 25.6.2 fsevents: 2.3.3 less: 4.6.4 lightningcss: 1.32.0 @@ -76639,18 +87091,18 @@ snapshots: stylus: 0.64.0 terser: 5.46.1 - vite@6.4.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3): + vite@6.4.2(@types/node@25.6.0)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3): dependencies: esbuild: 0.25.12 fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 postcss: 8.5.9 - rollup: 4.60.1 + rollup: 4.60.2 tinyglobby: 0.2.16 optionalDependencies: "@types/node": 25.6.0 fsevents: 2.3.3 - jiti: 2.6.1 + jiti: 2.7.0 less: 4.6.4 lightningcss: 1.32.0 sass: 1.99.0 @@ -76658,18 +87110,18 @@ snapshots: terser: 5.46.1 yaml: 2.8.3 - vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.32.0)(sass@1.97.3)(stylus@0.64.0)(terser@5.46.0)(yaml@2.8.3): + vite@7.3.2(@types/node@25.6.0)(jiti@2.7.0)(less@4.4.2)(lightningcss@1.32.0)(sass@1.97.3)(stylus@0.64.0)(terser@5.46.0)(yaml@2.8.3): dependencies: esbuild: 0.27.7 fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 postcss: 8.5.9 - rollup: 4.60.1 + rollup: 4.60.2 tinyglobby: 0.2.16 optionalDependencies: "@types/node": 25.6.0 fsevents: 2.3.3 - jiti: 2.6.1 + jiti: 2.7.0 less: 4.4.2 lightningcss: 1.32.0 sass: 1.97.3 @@ -76677,16 +87129,16 @@ snapshots: terser: 5.46.0 yaml: 2.8.3 - vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3): + vite@7.3.2(@types/node@25.6.2)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3): dependencies: esbuild: 0.27.7 fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 postcss: 8.5.9 - rollup: 4.60.1 + rollup: 4.60.2 tinyglobby: 0.2.16 optionalDependencies: - "@types/node": 25.6.0 + "@types/node": 25.6.2 fsevents: 2.3.3 jiti: 2.6.1 less: 4.6.4 @@ -76696,16 +87148,72 @@ snapshots: terser: 5.46.1 yaml: 2.8.3 - vite@8.0.8(@types/node@20.19.39)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3): + vite@7.3.2(@types/node@25.6.2)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3): dependencies: - lightningcss: 1.32.0 + esbuild: 0.27.7 + fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 postcss: 8.5.9 - rolldown: 1.0.0-rc.15 + rollup: 4.60.2 + tinyglobby: 0.2.16 + optionalDependencies: + "@types/node": 25.6.2 + fsevents: 2.3.3 + jiti: 2.7.0 + less: 4.6.4 + lightningcss: 1.32.0 + sass: 1.99.0 + stylus: 0.64.0 + terser: 5.46.1 + yaml: 2.8.3 + + vite@8.0.11(@types/node@20.19.39)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3): + dependencies: + lightningcss: 1.32.0 + picomatch: 4.0.4 + postcss: 8.5.14 + rolldown: 1.0.0-rc.18 tinyglobby: 0.2.16 optionalDependencies: "@types/node": 20.19.39 - esbuild: 0.28.0 + esbuild: 0.27.7 + fsevents: 2.3.3 + jiti: 2.7.0 + less: 4.6.4 + sass: 1.99.0 + stylus: 0.64.0 + terser: 5.46.1 + yaml: 2.8.3 + + vite@8.0.11(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3): + dependencies: + lightningcss: 1.32.0 + picomatch: 4.0.4 + postcss: 8.5.14 + rolldown: 1.0.0-rc.18 + tinyglobby: 0.2.16 + optionalDependencies: + "@types/node": 25.6.0 + esbuild: 0.27.7 + fsevents: 2.3.3 + jiti: 2.7.0 + less: 4.6.4 + sass: 1.99.0 + stylus: 0.64.0 + terser: 5.46.1 + yaml: 2.8.3 + optional: true + + vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3): + dependencies: + lightningcss: 1.32.0 + picomatch: 4.0.4 + postcss: 8.5.14 + rolldown: 1.0.0-rc.18 + tinyglobby: 0.2.16 + optionalDependencies: + "@types/node": 25.6.2 + esbuild: 0.27.7 fsevents: 2.3.3 jiti: 2.6.1 less: 4.6.4 @@ -76714,7 +87222,25 @@ snapshots: terser: 5.46.1 yaml: 2.8.3 - vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3): + vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3): + dependencies: + lightningcss: 1.32.0 + picomatch: 4.0.4 + postcss: 8.5.14 + rolldown: 1.0.0-rc.18 + tinyglobby: 0.2.16 + optionalDependencies: + "@types/node": 25.6.2 + esbuild: 0.27.7 + fsevents: 2.3.3 + jiti: 2.7.0 + less: 4.6.4 + sass: 1.99.0 + stylus: 0.64.0 + terser: 5.46.1 + yaml: 2.8.3 + + vite@8.0.8(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3): dependencies: lightningcss: 1.32.0 picomatch: 4.0.4 @@ -76723,34 +87249,101 @@ snapshots: tinyglobby: 0.2.16 optionalDependencies: "@types/node": 25.6.0 - esbuild: 0.28.0 + esbuild: 0.27.7 fsevents: 2.3.3 - jiti: 2.6.1 + jiti: 2.7.0 less: 4.6.4 sass: 1.99.0 stylus: 0.64.0 terser: 5.46.1 yaml: 2.8.3 - vitefu@0.2.5(vite@5.4.21(@types/node@25.6.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)): + vite@8.0.8(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3): + dependencies: + lightningcss: 1.32.0 + picomatch: 4.0.4 + postcss: 8.5.9 + rolldown: 1.0.0-rc.15 + tinyglobby: 0.2.16 optionalDependencies: - vite: 5.4.21(@types/node@25.6.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1) + "@types/node": 25.6.2 + esbuild: 0.27.7 + fsevents: 2.3.3 + jiti: 2.7.0 + less: 4.6.4 + sass: 1.99.0 + stylus: 0.64.0 + terser: 5.46.1 + yaml: 2.8.3 + + vitefu@0.2.5(vite@5.4.21(@types/node@25.6.2)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(terser@5.46.1)): + optionalDependencies: + vite: 5.4.21(@types/node@25.6.2)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1) vitefu@1.1.3(vite@5.4.21(@types/node@20.19.39)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)): optionalDependencies: vite: 5.4.21(@types/node@20.19.39)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1) - vitefu@1.1.3(vite@5.4.21(@types/node@25.6.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)): + vitefu@1.1.3(vite@5.4.21(@types/node@25.6.2)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)): optionalDependencies: - vite: 5.4.21(@types/node@25.6.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1) + vite: 5.4.21(@types/node@25.6.2)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1) - vitefu@1.1.3(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)): + vitefu@1.1.3(vite@7.3.2(@types/node@25.6.2)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)): optionalDependencies: - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + vite: 7.3.2(@types/node@25.6.2)(jiti@2.7.0)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) - vitefu@1.1.3(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)): + vitefu@1.1.3(vite@8.0.8(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)): + optionalDependencies: + vite: 8.0.8(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + + vitepress@1.6.4(@algolia/client-search@5.48.1)(@types/node@25.6.2)(@types/react@18.3.28)(axios@1.15.0)(fuse.js@7.3.0)(less@4.6.4)(lightningcss@1.32.0)(postcss@8.5.14)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.99.0)(search-insights@2.17.3)(stylus@0.64.0)(terser@5.46.1)(typescript@6.0.3): + dependencies: + "@docsearch/css": 3.8.2 + "@docsearch/js": 3.8.2(@algolia/client-search@5.48.1)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3) + "@iconify-json/simple-icons": 1.2.80 + "@shikijs/core": 2.5.0 + "@shikijs/transformers": 2.5.0 + "@shikijs/types": 2.5.0 + "@types/markdown-it": 14.1.2 + "@vitejs/plugin-vue": 5.2.4(vite@5.4.21(@types/node@25.6.2)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1))(vue@3.5.32(typescript@6.0.3)) + "@vue/devtools-api": 7.7.9 + "@vue/shared": 3.5.32 + "@vueuse/core": 12.8.2(typescript@6.0.3) + "@vueuse/integrations": 12.8.2(axios@1.15.0)(focus-trap@7.8.0)(fuse.js@7.3.0)(typescript@6.0.3) + focus-trap: 7.8.0 + mark.js: 8.11.1 + minisearch: 7.2.0 + shiki: 2.5.0 + vite: 5.4.21(@types/node@25.6.2)(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1) + vue: 3.5.32(typescript@6.0.3) optionalDependencies: - vite: 8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + postcss: 8.5.14 + transitivePeerDependencies: + - "@algolia/client-search" + - "@types/node" + - "@types/react" + - async-validator + - axios + - change-case + - drauu + - fuse.js + - idb-keyval + - jwt-decode + - less + - lightningcss + - nprogress + - qrcode + - react + - react-dom + - sass + - sass-embedded + - search-insights + - sortablejs + - stylus + - sugarss + - terser + - typescript + - universal-cookie vitest@1.6.1(@types/node@20.19.39)(jsdom@29.0.2(canvas@3.2.3))(less@4.6.4)(lightningcss@1.32.0)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1): dependencies: @@ -76787,10 +87380,10 @@ snapshots: - supports-color - terser - vitest@4.1.4(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(jsdom@29.0.2(canvas@3.2.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.32.0)(sass@1.97.3)(stylus@0.64.0)(terser@5.46.0)(yaml@2.8.3)): + vitest@4.1.4(@opentelemetry/api@1.9.1)(@types/node@25.6.2)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(jsdom@29.0.2(canvas@3.2.3))(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)): dependencies: "@vitest/expect": 4.1.4 - "@vitest/mocker": 4.1.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.32.0)(sass@1.97.3)(stylus@0.64.0)(terser@5.46.0)(yaml@2.8.3)) + "@vitest/mocker": 4.1.4(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) "@vitest/pretty-format": 4.1.4 "@vitest/runner": 4.1.4 "@vitest/snapshot": 4.1.4 @@ -76807,26 +87400,26 @@ snapshots: tinyexec: 1.1.1 tinyglobby: 0.2.16 tinyrainbow: 3.1.0 - vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.32.0)(sass@1.97.3)(stylus@0.64.0)(terser@5.46.0)(yaml@2.8.3) + vite: 8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) why-is-node-running: 2.3.0 optionalDependencies: "@opentelemetry/api": 1.9.1 - "@types/node": 25.6.0 + "@types/node": 25.6.2 "@vitest/coverage-v8": 4.1.4(vitest@4.1.4) "@vitest/ui": 4.1.4(vitest@4.1.4) jsdom: 29.0.2(canvas@3.2.3) transitivePeerDependencies: - msw - vitest@4.1.4(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(@vitest/coverage-v8@4.1.4)(@vitest/ui@4.1.4)(jsdom@29.0.2(canvas@3.2.3))(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)): + vitest@4.1.5(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(jsdom@29.0.2(canvas@3.2.3))(vite@7.3.2(@types/node@25.6.0)(jiti@2.7.0)(less@4.4.2)(lightningcss@1.32.0)(sass@1.97.3)(stylus@0.64.0)(terser@5.46.0)(yaml@2.8.3)): dependencies: - "@vitest/expect": 4.1.4 - "@vitest/mocker": 4.1.4(vite@8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) - "@vitest/pretty-format": 4.1.4 - "@vitest/runner": 4.1.4 - "@vitest/snapshot": 4.1.4 - "@vitest/spy": 4.1.4 - "@vitest/utils": 4.1.4 + "@vitest/expect": 4.1.5 + "@vitest/mocker": 4.1.5(vite@7.3.2(@types/node@25.6.0)(jiti@2.7.0)(less@4.4.2)(lightningcss@1.32.0)(sass@1.97.3)(stylus@0.64.0)(terser@5.46.0)(yaml@2.8.3)) + "@vitest/pretty-format": 4.1.5 + "@vitest/runner": 4.1.5 + "@vitest/snapshot": 4.1.5 + "@vitest/spy": 4.1.5 + "@vitest/utils": 4.1.5 es-module-lexer: 2.0.0 expect-type: 1.3.0 magic-string: 0.30.21 @@ -76838,13 +87431,71 @@ snapshots: tinyexec: 1.1.1 tinyglobby: 0.2.16 tinyrainbow: 3.1.0 - vite: 8.0.8(@types/node@25.6.0)(esbuild@0.28.0)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + vite: 7.3.2(@types/node@25.6.0)(jiti@2.7.0)(less@4.4.2)(lightningcss@1.32.0)(sass@1.97.3)(stylus@0.64.0)(terser@5.46.0)(yaml@2.8.3) + why-is-node-running: 2.3.0 + optionalDependencies: + "@opentelemetry/api": 1.9.1 + "@types/node": 25.6.0 + jsdom: 29.0.2(canvas@3.2.3) + transitivePeerDependencies: + - msw + optional: true + + vitest@4.1.5(@opentelemetry/api@1.9.1)(@types/node@25.6.0)(jsdom@29.0.2(canvas@3.2.3))(vite@8.0.11(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)): + dependencies: + "@vitest/expect": 4.1.5 + "@vitest/mocker": 4.1.5(vite@8.0.11(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) + "@vitest/pretty-format": 4.1.5 + "@vitest/runner": 4.1.5 + "@vitest/snapshot": 4.1.5 + "@vitest/spy": 4.1.5 + "@vitest/utils": 4.1.5 + es-module-lexer: 2.0.0 + expect-type: 1.3.0 + magic-string: 0.30.21 + obug: 2.1.1 + pathe: 2.0.3 + picomatch: 4.0.4 + std-env: 4.0.0 + tinybench: 2.9.0 + tinyexec: 1.1.1 + tinyglobby: 0.2.16 + tinyrainbow: 3.1.0 + vite: 8.0.11(@types/node@25.6.0)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) why-is-node-running: 2.3.0 optionalDependencies: "@opentelemetry/api": 1.9.1 "@types/node": 25.6.0 - "@vitest/coverage-v8": 4.1.4(vitest@4.1.4) - "@vitest/ui": 4.1.4(vitest@4.1.4) + jsdom: 29.0.2(canvas@3.2.3) + transitivePeerDependencies: + - msw + optional: true + + vitest@4.1.5(@opentelemetry/api@1.9.1)(@types/node@25.6.2)(jsdom@29.0.2(canvas@3.2.3))(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)): + dependencies: + "@vitest/expect": 4.1.5 + "@vitest/mocker": 4.1.5(vite@8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3)) + "@vitest/pretty-format": 4.1.5 + "@vitest/runner": 4.1.5 + "@vitest/snapshot": 4.1.5 + "@vitest/spy": 4.1.5 + "@vitest/utils": 4.1.5 + es-module-lexer: 2.0.0 + expect-type: 1.3.0 + magic-string: 0.30.21 + obug: 2.1.1 + pathe: 2.0.3 + picomatch: 4.0.4 + std-env: 4.0.0 + tinybench: 2.9.0 + tinyexec: 1.1.1 + tinyglobby: 0.2.16 + tinyrainbow: 3.1.0 + vite: 8.0.11(@types/node@25.6.2)(esbuild@0.27.7)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(stylus@0.64.0)(terser@5.46.1)(yaml@2.8.3) + why-is-node-running: 2.3.0 + optionalDependencies: + "@opentelemetry/api": 1.9.1 + "@types/node": 25.6.2 jsdom: 29.0.2(canvas@3.2.3) transitivePeerDependencies: - msw @@ -76996,10 +87647,34 @@ snapshots: transitivePeerDependencies: - supports-color - vue-eslint-parser@9.4.3(eslint@8.57.1): + vue-eslint-parser@10.4.0(eslint@10.2.0(jiti@2.7.0)): + dependencies: + debug: 4.4.3(supports-color@5.5.0) + eslint: 10.2.0(jiti@2.7.0) + eslint-scope: 9.1.2 + eslint-visitor-keys: 5.0.1 + espree: 11.2.0 + esquery: 1.7.0 + semver: 7.7.4 + transitivePeerDependencies: + - supports-color + + vue-eslint-parser@10.4.0(eslint@10.3.0(jiti@2.7.0)): + dependencies: + debug: 4.4.3(supports-color@5.5.0) + eslint: 10.3.0(jiti@2.7.0) + eslint-scope: 9.1.2 + eslint-visitor-keys: 5.0.1 + espree: 11.2.0 + esquery: 1.7.0 + semver: 7.7.4 + transitivePeerDependencies: + - supports-color + + vue-eslint-parser@9.4.3(eslint@10.3.0(jiti@2.7.0)): dependencies: debug: 4.4.3(supports-color@5.5.0) - eslint: 8.57.1 + eslint: 10.3.0(jiti@2.7.0) eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 @@ -77011,18 +87686,18 @@ snapshots: vue-hot-reload-api@2.3.4: {} - vue-loader@15.11.1(@vue/compiler-sfc@3.5.32)(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))))(css-loader@5.2.7(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))))(ejs@3.1.10)(hamljs@0.6.2)(handlebars@4.7.9)(lodash@4.18.1)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(underscore@1.13.8)(vue-template-compiler@2.7.16)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + vue-loader@15.11.1(@vue/compiler-sfc@3.5.32)(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))))(css-loader@5.2.7(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))))(ejs@3.1.10)(hamljs@0.6.2)(handlebars@4.7.9)(lodash@4.18.1)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(underscore@1.13.8)(vue-template-compiler@2.7.16)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: "@vue/component-compiler-utils": 3.3.0(ejs@3.1.10)(hamljs@0.6.2)(handlebars@4.7.9)(lodash@4.18.1)(nunjucks@3.2.4(chokidar@3.6.0))(pug@3.0.4)(underscore@1.13.8) - css-loader: 5.2.7(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + css-loader: 5.2.7(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) hash-sum: 1.0.2 loader-utils: 1.4.2 vue-hot-reload-api: 2.3.4 vue-style-loader: 4.1.3 - webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) optionalDependencies: "@vue/compiler-sfc": 3.5.32 - cache-loader: 4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + cache-loader: 4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) prettier: 3.8.2 vue-template-compiler: 2.7.16 transitivePeerDependencies: @@ -77080,18 +87755,18 @@ snapshots: - walrus - whiskers - vue-loader@15.11.1(@vue/compiler-sfc@3.5.32)(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))))(css-loader@5.2.7(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))))(lodash@4.18.1)(prettier@3.8.3)(vue-template-compiler@2.7.16)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + vue-loader@15.11.1(@vue/compiler-sfc@3.5.32)(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))))(css-loader@5.2.7(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))))(lodash@4.18.1)(prettier@3.8.3)(vue-template-compiler@2.7.16)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: "@vue/component-compiler-utils": 3.3.0(ejs@3.1.10)(hamljs@0.6.2)(handlebars@4.7.9)(lodash@4.18.1)(nunjucks@3.2.4(chokidar@3.6.0))(pug@3.0.4)(underscore@1.13.8) - css-loader: 5.2.7(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + css-loader: 5.2.7(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) hash-sum: 1.0.2 loader-utils: 1.4.2 vue-hot-reload-api: 2.3.4 vue-style-loader: 4.1.3 - webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) optionalDependencies: "@vue/compiler-sfc": 3.5.32 - cache-loader: 4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + cache-loader: 4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) prettier: 3.8.3 vue-template-compiler: 2.7.16 transitivePeerDependencies: @@ -77149,18 +87824,18 @@ snapshots: - walrus - whiskers - vue-loader@15.11.1(@vue/compiler-sfc@3.5.32)(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))))(css-loader@6.11.0(webpack@5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2)))(ejs@3.1.10)(hamljs@0.6.2)(handlebars@4.7.9)(lodash@4.18.1)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(underscore@1.13.8)(vue-template-compiler@2.7.16)(webpack@5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2)): + vue-loader@15.11.1(@vue/compiler-sfc@3.5.32)(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))))(css-loader@6.11.0(webpack@5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2)))(ejs@3.1.10)(hamljs@0.6.2)(handlebars@4.7.9)(lodash@4.18.1)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(underscore@1.13.8)(vue-template-compiler@2.7.16)(webpack@5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2)): dependencies: "@vue/component-compiler-utils": 3.3.0(ejs@3.1.10)(hamljs@0.6.2)(handlebars@4.7.9)(lodash@4.18.1)(nunjucks@3.2.4(chokidar@3.6.0))(pug@3.0.4)(underscore@1.13.8) - css-loader: 6.11.0(webpack@5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2)) + css-loader: 6.11.0(webpack@5.106.2) hash-sum: 1.0.2 loader-utils: 1.4.2 vue-hot-reload-api: 2.3.4 vue-style-loader: 4.1.3 - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2) + webpack: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) optionalDependencies: "@vue/compiler-sfc": 3.5.32 - cache-loader: 4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + cache-loader: 4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) prettier: 3.8.2 vue-template-compiler: 2.7.16 transitivePeerDependencies: @@ -77218,18 +87893,18 @@ snapshots: - walrus - whiskers - vue-loader@15.11.1(@vue/compiler-sfc@3.5.32)(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))))(css-loader@7.1.4(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))))(ejs@3.1.10)(hamljs@0.6.2)(handlebars@4.7.9)(lodash@4.18.1)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(underscore@1.13.8)(vue-template-compiler@2.7.16)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + vue-loader@15.11.1(@vue/compiler-sfc@3.5.32)(cache-loader@4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))))(css-loader@7.1.4(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))))(ejs@3.1.10)(hamljs@0.6.2)(handlebars@4.7.9)(lodash@4.18.1)(nunjucks@3.2.4(chokidar@3.6.0))(prettier@3.8.2)(pug@3.0.4)(underscore@1.13.8)(vue-template-compiler@2.7.16)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: "@vue/component-compiler-utils": 3.3.0(ejs@3.1.10)(hamljs@0.6.2)(handlebars@4.7.9)(lodash@4.18.1)(nunjucks@3.2.4(chokidar@3.6.0))(pug@3.0.4)(underscore@1.13.8) - css-loader: 7.1.4(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + css-loader: 7.1.4(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) hash-sum: 1.0.2 loader-utils: 1.4.2 vue-hot-reload-api: 2.3.4 vue-style-loader: 4.1.3 - webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) optionalDependencies: "@vue/compiler-sfc": 3.5.32 - cache-loader: 4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + cache-loader: 4.1.0(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) prettier: 3.8.2 vue-template-compiler: 2.7.16 transitivePeerDependencies: @@ -77287,12 +87962,12 @@ snapshots: - walrus - whiskers - vue-loader@17.4.2(@vue/compiler-sfc@3.5.32)(vue@2.7.16)(webpack@5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2)): + vue-loader@17.4.2(@vue/compiler-sfc@3.5.32)(vue@2.7.16)(webpack@5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2)): dependencies: chalk: 4.1.2 hash-sum: 2.0.0 watchpack: 2.5.1 - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2) + webpack: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) optionalDependencies: "@vue/compiler-sfc": 3.5.32 vue: 2.7.16 @@ -77342,17 +88017,16 @@ snapshots: vue-runtime-helpers@1.1.2: {} - vue-server-renderer@2.7.16: + vue-server-renderer@2.7.16(patch_hash=7374e4bf5b7956d7097feec494aaea43bf8f6a02e2b64e8a3cc57e19c2f65132): dependencies: chalk: 4.1.2 hash-sum: 2.0.0 he: 1.2.0 lodash.template: 4.18.1 lodash.uniq: 4.5.0 - resolve: 1.22.11 + resolve: 1.22.12 serialize-javascript: 6.0.2 source-map: 0.5.6 - vue: 2.7.16 vue-style-loader@4.1.3: dependencies: @@ -77381,7 +88055,6 @@ snapshots: dependencies: de-indent: 1.0.2 he: 1.2.0 - vue: 2.7.16 vue-template-es2015-compiler@1.9.1: {} @@ -77406,6 +88079,16 @@ snapshots: optionalDependencies: typescript: 6.0.2 + vue@3.5.32(typescript@6.0.3): + dependencies: + "@vue/compiler-dom": 3.5.32 + "@vue/compiler-sfc": 3.5.32 + "@vue/runtime-dom": 3.5.32 + "@vue/server-renderer": 3.5.32(vue@3.5.32(typescript@6.0.3)) + "@vue/shared": 3.5.32 + optionalDependencies: + typescript: 6.0.3 + vuex@3.6.2(vue@2.7.16): dependencies: vue: 2.7.16 @@ -77597,12 +88280,12 @@ snapshots: deepmerge: 1.5.2 javascript-stringify: 2.1.0 - webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@4.15.2)(webpack@5.106.1): + webpack-cli@5.1.4(webpack-bundle-analyzer@4.10.2)(webpack-dev-server@4.15.2)(webpack@5.106.2): dependencies: "@discoveryjs/json-ext": 0.5.7 - "@webpack-cli/configtest": 2.1.1(webpack-cli@5.1.4)(webpack@5.106.1) - "@webpack-cli/info": 2.0.2(webpack-cli@5.1.4)(webpack@5.106.1) - "@webpack-cli/serve": 2.0.5(webpack-cli@5.1.4)(webpack-dev-server@4.15.2)(webpack@5.106.1) + "@webpack-cli/configtest": 2.1.1(webpack-cli@5.1.4)(webpack@5.106.2) + "@webpack-cli/info": 2.0.2(webpack-cli@5.1.4)(webpack@5.106.2) + "@webpack-cli/serve": 2.0.5(webpack-cli@5.1.4)(webpack-dev-server@4.15.2)(webpack@5.106.2) colorette: 2.0.20 commander: 10.0.1 cross-spawn: 7.0.6 @@ -77611,11 +88294,11 @@ snapshots: import-local: 3.1.0 interpret: 3.1.1 rechoir: 0.8.0 - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2) + webpack: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) webpack-merge: 5.10.0 optionalDependencies: webpack-bundle-analyzer: 4.10.2 - webpack-dev-server: 4.15.2(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))(webpack@5.106.1) + webpack-dev-server: 4.15.2(debug@4.4.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))(webpack@5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2)) webpack-cli@5.1.4(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@4.15.2)(webpack@5.106.1): dependencies: @@ -77631,7 +88314,7 @@ snapshots: import-local: 3.1.0 interpret: 3.1.1 rechoir: 0.8.0 - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@5.1.4) + webpack: 5.106.1(@swc/core@1.15.33)(webpack-cli@5.1.4) webpack-merge: 5.10.0 optionalDependencies: webpack-bundle-analyzer: 5.3.0 @@ -77647,40 +88330,56 @@ snapshots: import-local: 3.1.0 interpret: 3.1.1 rechoir: 0.8.0 - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2) + webpack: 5.106.1(@swc/core@1.15.33)(webpack-cli@7.0.2) webpack-merge: 6.0.1 optionalDependencies: webpack-bundle-analyzer: 5.3.0 webpack-dev-server: 5.2.3(tslib@2.8.1)(webpack-cli@7.0.2)(webpack@5.106.1) - webpack-dev-middleware@5.3.4(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2): + dependencies: + "@discoveryjs/json-ext": 1.0.0 + commander: 14.0.3 + cross-spawn: 7.0.6 + envinfo: 7.14.0 + fastest-levenshtein: 1.0.16 + import-local: 3.1.0 + interpret: 3.1.1 + rechoir: 0.8.0 + webpack: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) + webpack-merge: 6.0.1 + optionalDependencies: + webpack-bundle-analyzer: 5.3.0 + webpack-dev-server: 5.2.3(tslib@2.8.1)(webpack-cli@7.0.2)(webpack@5.106.2) + + webpack-dev-middleware@5.3.4(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: colorette: 2.0.20 memfs: 3.5.3 mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.3.3 - webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) - webpack-dev-middleware@5.3.4(webpack@5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2)): + webpack-dev-middleware@5.3.4(webpack@5.106.1): dependencies: colorette: 2.0.20 memfs: 3.5.3 mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.3.3 - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2) + webpack: 5.106.1(@swc/core@1.15.33)(webpack-cli@5.1.4) - webpack-dev-middleware@5.3.4(webpack@5.106.1): + webpack-dev-middleware@5.3.4(webpack@5.106.2): dependencies: colorette: 2.0.20 memfs: 3.5.3 mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.3.3 - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@5.1.4) + webpack: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) - webpack-dev-middleware@7.4.5(tslib@2.8.1)(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + webpack-dev-middleware@7.4.5(tslib@2.8.1)(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: colorette: 2.0.20 memfs: 4.57.1(tslib@2.8.1) @@ -77689,7 +88388,7 @@ snapshots: range-parser: 1.2.1 schema-utils: 4.3.3 optionalDependencies: - webpack: 5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) transitivePeerDependencies: - tslib @@ -77702,11 +88401,25 @@ snapshots: range-parser: 1.2.1 schema-utils: 4.3.3 optionalDependencies: - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2) + webpack: 5.106.1(@swc/core@1.15.33)(webpack-cli@7.0.2) + transitivePeerDependencies: + - tslib + optional: true + + webpack-dev-middleware@7.4.5(tslib@2.8.1)(webpack@5.106.2): + dependencies: + colorette: 2.0.20 + memfs: 4.57.1(tslib@2.8.1) + mime-types: 3.0.2 + on-finished: 2.4.1 + range-parser: 1.2.1 + schema-utils: 4.3.3 + optionalDependencies: + webpack: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) transitivePeerDependencies: - tslib - webpack-dev-server@4.15.2(debug@4.4.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))(webpack@5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2)): + webpack-dev-server@4.15.2(debug@4.4.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))(webpack@5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2)): dependencies: "@types/bonjour": 3.5.13 "@types/connect-history-api-fallback": 1.5.4 @@ -77736,11 +88449,11 @@ snapshots: serve-index: 1.9.2 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 5.3.4(webpack@5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2)) + webpack-dev-middleware: 5.3.4(webpack@5.106.2) ws: 8.20.0 optionalDependencies: - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2) - webpack-cli: 7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1) + webpack: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) + webpack-cli: 7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2) transitivePeerDependencies: - bufferutil - debug @@ -77780,7 +88493,7 @@ snapshots: webpack-dev-middleware: 5.3.4(webpack@5.106.1) ws: 8.20.0 optionalDependencies: - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@5.1.4) + webpack: 5.106.1(@swc/core@1.15.33)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@4.15.2)(webpack@5.106.1) transitivePeerDependencies: - bufferutil @@ -77788,7 +88501,7 @@ snapshots: - supports-color - utf-8-validate - webpack-dev-server@4.15.2(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + webpack-dev-server@4.15.2(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: "@types/bonjour": 3.5.13 "@types/connect-history-api-fallback": 1.5.4 @@ -77818,22 +88531,23 @@ snapshots: serve-index: 1.9.2 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 5.3.4(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + webpack-dev-middleware: 5.3.4(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) ws: 8.20.0 optionalDependencies: - webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) - webpack-cli: 7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1) + webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) + webpack-cli: 7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2) transitivePeerDependencies: - bufferutil - debug - supports-color - utf-8-validate - webpack-dev-server@4.15.2(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))(webpack@5.106.1): + webpack-dev-server@5.2.3(tslib@2.8.1)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: "@types/bonjour": 3.5.13 "@types/connect-history-api-fallback": 1.5.4 "@types/express": 4.17.25 + "@types/express-serve-static-core": 4.19.8 "@types/serve-index": 1.9.4 "@types/serve-static": 1.15.10 "@types/sockjs": 0.3.36 @@ -77844,33 +88558,31 @@ snapshots: colorette: 2.0.20 compression: 1.8.1 connect-history-api-fallback: 2.0.0 - default-gateway: 6.0.3 express: 4.22.1 graceful-fs: 4.2.11 - html-entities: 2.6.0 http-proxy-middleware: 2.0.9(@types/express@4.17.25)(debug@4.4.3) ipaddr.js: 2.3.0 launch-editor: 2.13.2 - open: 8.4.2 - p-retry: 4.6.2 - rimraf: 3.0.2 + open: 10.2.0 + p-retry: 6.2.1 schema-utils: 4.3.3 - selfsigned: 2.4.1 + selfsigned: 5.5.0 serve-index: 1.9.2 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 5.3.4(webpack@5.106.1) + webpack-dev-middleware: 7.4.5(tslib@2.8.1)(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) ws: 8.20.0 optionalDependencies: - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2) - webpack-cli: 7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1) + webpack: 5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) + webpack-cli: 7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2) transitivePeerDependencies: - bufferutil - debug - supports-color + - tslib - utf-8-validate - webpack-dev-server@5.2.3(tslib@2.8.1)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + webpack-dev-server@5.2.3(tslib@2.8.1)(webpack-cli@7.0.2)(webpack@5.106.1): dependencies: "@types/bonjour": 3.5.13 "@types/connect-history-api-fallback": 1.5.4 @@ -77898,10 +88610,10 @@ snapshots: serve-index: 1.9.2 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 7.4.5(tslib@2.8.1)(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + webpack-dev-middleware: 7.4.5(tslib@2.8.1)(webpack@5.106.1) ws: 8.20.0 optionalDependencies: - webpack: 5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 5.106.1(@swc/core@1.15.33)(webpack-cli@7.0.2) webpack-cli: 7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1) transitivePeerDependencies: - bufferutil @@ -77909,8 +88621,9 @@ snapshots: - supports-color - tslib - utf-8-validate + optional: true - webpack-dev-server@5.2.3(tslib@2.8.1)(webpack-cli@7.0.2)(webpack@5.106.1): + webpack-dev-server@5.2.3(tslib@2.8.1)(webpack-cli@7.0.2)(webpack@5.106.2): dependencies: "@types/bonjour": 3.5.13 "@types/connect-history-api-fallback": 1.5.4 @@ -77938,11 +88651,11 @@ snapshots: serve-index: 1.9.2 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 7.4.5(tslib@2.8.1)(webpack@5.106.1) + webpack-dev-middleware: 7.4.5(tslib@2.8.1)(webpack@5.106.2) ws: 8.20.0 optionalDependencies: - webpack: 5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2) - webpack-cli: 7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1) + webpack: 5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2) + webpack-cli: 7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2) transitivePeerDependencies: - bufferutil - debug @@ -77963,10 +88676,10 @@ snapshots: ansi-colors: 3.2.4 uuid: 3.4.0 - webpack-manifest-plugin@4.1.1(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + webpack-manifest-plugin@4.1.1(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: tapable: 2.3.2 - webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) webpack-sources: 2.3.1 webpack-merge@5.10.0: @@ -77997,25 +88710,25 @@ snapshots: webpack-sources@3.3.4: {} - webpack-subresource-integrity@5.1.0(html-webpack-plugin@5.6.6(webpack@5.105.2(@swc/core@1.15.26)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))))(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + webpack-subresource-integrity@5.1.0(html-webpack-plugin@5.6.7(webpack@5.105.2(@swc/core@1.15.33)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))))(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: typed-assert: 1.0.9 - webpack: 5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) optionalDependencies: - html-webpack-plugin: 5.6.6(webpack@5.105.2(@swc/core@1.15.26)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + html-webpack-plugin: 5.6.7(webpack@5.105.2(@swc/core@1.15.33)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) - webpack-subresource-integrity@5.1.0(html-webpack-plugin@5.6.6(webpack@5.106.1(@swc/core@1.15.26)(esbuild@0.28.0)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))))(webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + webpack-subresource-integrity@5.1.0(html-webpack-plugin@5.6.7(webpack@5.106.2(@swc/core@1.15.33)(esbuild@0.27.7)(webpack-cli@7.0.2)))(webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: typed-assert: 1.0.9 - webpack: 5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) optionalDependencies: - html-webpack-plugin: 5.6.6(webpack@5.106.1(@swc/core@1.15.26)(esbuild@0.28.0)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + html-webpack-plugin: 5.6.7(webpack@5.106.2(@swc/core@1.15.33)(esbuild@0.27.7)(webpack-cli@7.0.2)) webpack-virtual-modules@0.4.6: {} webpack-virtual-modules@0.6.2: {} - webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)): + webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)): dependencies: "@webassemblyjs/ast": 1.9.0 "@webassemblyjs/helper-module-context": 1.9.0 @@ -78037,18 +88750,18 @@ snapshots: node-libs-browser: 2.2.1 schema-utils: 1.0.0 tapable: 1.1.3 - terser-webpack-plugin: 1.4.6(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + terser-webpack-plugin: 1.4.6(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) watchpack: 1.7.5 webpack-sources: 1.4.3 optionalDependencies: - webpack-cli: 7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1) + webpack-cli: 7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2) transitivePeerDependencies: - supports-color - webpack@5.105.2(@swc/core@1.15.26)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)): + webpack@5.105.2(@swc/core@1.15.33)(esbuild@0.27.3)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)): dependencies: "@types/eslint-scope": 3.7.7 - "@types/estree": 1.0.8 + "@types/estree": 1.0.9 "@types/json-schema": 7.0.15 "@webassemblyjs/ast": 1.14.1 "@webassemblyjs/wasm-edit": 1.14.1 @@ -78057,7 +88770,7 @@ snapshots: acorn-import-phases: 1.0.4(acorn@8.16.0) browserslist: 4.28.2 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.20.1 + enhanced-resolve: 5.21.0 es-module-lexer: 2.0.0 eslint-scope: 5.1.1 events: 3.3.0 @@ -78069,20 +88782,20 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.3 tapable: 2.3.2 - terser-webpack-plugin: 5.4.0(@swc/core@1.15.26)(esbuild@0.27.3)(webpack@5.105.2(@swc/core@1.15.26)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + terser-webpack-plugin: 5.5.0(@swc/core@1.15.33)(esbuild@0.27.3)(webpack@5.105.2(@swc/core@1.15.33)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) watchpack: 2.5.1 webpack-sources: 3.3.4 optionalDependencies: - webpack-cli: 7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1) + webpack-cli: 7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2) transitivePeerDependencies: - "@swc/core" - esbuild - uglify-js - webpack@5.106.1(@swc/core@1.15.26)(esbuild@0.28.0)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)): + webpack@5.106.1(@swc/core@1.15.33)(webpack-cli@5.1.4): dependencies: "@types/eslint-scope": 3.7.7 - "@types/estree": 1.0.8 + "@types/estree": 1.0.9 "@types/json-schema": 7.0.15 "@webassemblyjs/ast": 1.14.1 "@webassemblyjs/wasm-edit": 1.14.1 @@ -78103,21 +88816,20 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.3 tapable: 2.3.2 - terser-webpack-plugin: 5.4.0(@swc/core@1.15.26)(esbuild@0.28.0)(webpack@5.106.1(@swc/core@1.15.26)(esbuild@0.28.0)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))) + terser-webpack-plugin: 5.5.0(@swc/core@1.15.33)(webpack@5.106.1) watchpack: 2.5.1 webpack-sources: 3.3.4 optionalDependencies: - webpack-cli: 7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1) + webpack-cli: 5.1.4(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@4.15.2)(webpack@5.106.1) transitivePeerDependencies: - "@swc/core" - esbuild - uglify-js - optional: true - webpack@5.106.1(@swc/core@1.15.26)(webpack-cli@5.1.4): + webpack@5.106.1(@swc/core@1.15.33)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)): dependencies: "@types/eslint-scope": 3.7.7 - "@types/estree": 1.0.8 + "@types/estree": 1.0.9 "@types/json-schema": 7.0.15 "@webassemblyjs/ast": 1.14.1 "@webassemblyjs/wasm-edit": 1.14.1 @@ -78138,20 +88850,20 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.3 tapable: 2.3.2 - terser-webpack-plugin: 5.4.0(@swc/core@1.15.26)(webpack@5.106.1) + terser-webpack-plugin: 5.5.0(@swc/core@1.15.33)(webpack@5.106.1(@swc/core@1.15.33)(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))) watchpack: 2.5.1 webpack-sources: 3.3.4 optionalDependencies: - webpack-cli: 5.1.4(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@4.15.2)(webpack@5.106.1) + webpack-cli: 7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2) transitivePeerDependencies: - "@swc/core" - esbuild - uglify-js - webpack@5.106.1(@swc/core@1.15.26)(webpack-cli@7.0.2): + webpack@5.106.1(@swc/core@1.15.33)(webpack-cli@7.0.2): dependencies: "@types/eslint-scope": 3.7.7 - "@types/estree": 1.0.8 + "@types/estree": 1.0.9 "@types/json-schema": 7.0.15 "@webassemblyjs/ast": 1.14.1 "@webassemblyjs/wasm-edit": 1.14.1 @@ -78172,7 +88884,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.3 tapable: 2.3.2 - terser-webpack-plugin: 5.4.0(@swc/core@1.15.26)(webpack@5.106.1) + terser-webpack-plugin: 5.5.0(@swc/core@1.15.33)(webpack@5.106.1) watchpack: 2.5.1 webpack-sources: 3.3.4 optionalDependencies: @@ -78182,7 +88894,73 @@ snapshots: - esbuild - uglify-js - webpackbar@6.0.1(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + webpack@5.106.2(@swc/core@1.15.33)(esbuild@0.27.7)(webpack-cli@7.0.2): + dependencies: + "@types/eslint-scope": 3.7.7 + "@types/estree": 1.0.8 + "@types/json-schema": 7.0.15 + "@webassemblyjs/ast": 1.14.1 + "@webassemblyjs/wasm-edit": 1.14.1 + "@webassemblyjs/wasm-parser": 1.14.1 + acorn: 8.16.0 + acorn-import-phases: 1.0.4(acorn@8.16.0) + browserslist: 4.28.2 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.20.1 + es-module-lexer: 2.0.0 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + loader-runner: 4.3.1 + mime-db: 1.54.0 + neo-async: 2.6.2 + schema-utils: 4.3.3 + tapable: 2.3.2 + terser-webpack-plugin: 5.5.0(@swc/core@1.15.33)(esbuild@0.27.7)(webpack@5.106.2) + watchpack: 2.5.1 + webpack-sources: 3.3.4 + optionalDependencies: + webpack-cli: 7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2) + transitivePeerDependencies: + - "@swc/core" + - esbuild + - uglify-js + + webpack@5.106.2(@swc/core@1.15.33)(webpack-cli@7.0.2): + dependencies: + "@types/eslint-scope": 3.7.7 + "@types/estree": 1.0.8 + "@types/json-schema": 7.0.15 + "@webassemblyjs/ast": 1.14.1 + "@webassemblyjs/wasm-edit": 1.14.1 + "@webassemblyjs/wasm-parser": 1.14.1 + acorn: 8.16.0 + acorn-import-phases: 1.0.4(acorn@8.16.0) + browserslist: 4.28.2 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.20.1 + es-module-lexer: 2.0.0 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + loader-runner: 4.3.1 + mime-db: 1.54.0 + neo-async: 2.6.2 + schema-utils: 4.3.3 + tapable: 2.3.2 + terser-webpack-plugin: 5.5.0(@swc/core@1.15.33)(webpack@5.106.2) + watchpack: 2.5.1 + webpack-sources: 3.3.4 + optionalDependencies: + webpack-cli: 7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2) + transitivePeerDependencies: + - "@swc/core" + - esbuild + - uglify-js + + webpackbar@6.0.1(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: ansi-escapes: 4.3.2 chalk: 4.1.2 @@ -78191,7 +88969,7 @@ snapshots: markdown-table: 2.0.0 pretty-time: 1.1.0 std-env: 3.10.0 - webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) wrap-ansi: 7.0.0 websocket-driver@0.7.4: @@ -78489,12 +89267,12 @@ snapshots: workbox-sw@6.6.0: {} - workbox-webpack-plugin@6.6.0(@types/babel__core@7.20.5)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1))): + workbox-webpack-plugin@6.6.0(@types/babel__core@7.20.5)(webpack@4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2))): dependencies: fast-json-stable-stringify: 2.1.0 pretty-bytes: 5.6.0 upath: 1.2.0 - webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.1)) + webpack: 4.47.0(webpack-cli@7.0.2(webpack-bundle-analyzer@5.3.0)(webpack-dev-server@5.2.3)(webpack@5.106.2)) webpack-sources: 1.4.3 workbox-build: 6.6.0(@types/babel__core@7.20.5) transitivePeerDependencies: @@ -78555,12 +89333,6 @@ snapshots: string-width: 5.1.2 strip-ansi: 7.2.0 - wrap-ansi@9.0.0: - dependencies: - ansi-styles: 6.2.3 - string-width: 7.2.0 - strip-ansi: 7.1.0 - wrap-ansi@9.0.2: dependencies: ansi-styles: 6.2.3 @@ -78704,6 +89476,8 @@ snapshots: yaml@2.7.1: {} + yaml@2.8.0: {} + yaml@2.8.3: {} yamlparser@0.0.2: {} @@ -78817,6 +89591,11 @@ snapshots: buffer-crc32: 0.2.13 fd-slicer: 1.1.0 + yauzl@3.3.0: + dependencies: + buffer-crc32: 0.2.13 + pend: 1.2.0 + yeast@0.1.2: {} ylru@1.4.0: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index f9be2df08bf..1b73fcf6b6d 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,11 +1,15 @@ packages: - bundles/* + - cli/commands/* + - cli/packages/* + - cli/utils/* - demo/* - effects/* - engine - interactions/* - interactions/*/* - wrappers/* + - wrappers/inferno-hooks - templates/* - palettes/*/* - paths/* @@ -18,6 +22,27 @@ packages: - shapes/* - updaters/* - utils/* + - websites/* +allowBuilds: + '@parcel/watcher': true + '@swc/core': true + '@tsparticles/engine': true + canvas: true + core-js: true + core-js-bundle: true + core-js-pure: true + electron: true + esbuild: true + fsevents: true + inferno: true + lmdb: true + msgpackr-extract: true + nuxt: true + nx: true + puppeteer: true + sharp: true + svelte-preprocess: true + unrs-resolver: true linkWorkspacePackages: deep onlyBuiltDependencies: @@ -34,3 +59,6 @@ onlyBuiltDependencies: - nx - sharp - unrs-resolver +patchedDependencies: + tsup@8.5.1: patches/tsup@8.5.1.patch + vue-server-renderer@2.7.16: patches/vue-server-renderer@2.7.16.patch diff --git a/presets/ambient/CHANGELOG.md b/presets/ambient/CHANGELOG.md index 45fb856bc90..0735977e70c 100644 --- a/presets/ambient/CHANGELOG.md +++ b/presets/ambient/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/preset-ambient + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/preset-ambient diff --git a/presets/ambient/package.dist.json b/presets/ambient/package.dist.json index d720625c49e..4bf97e8a7d8 100644 --- a/presets/ambient/package.dist.json +++ b/presets/ambient/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/preset-ambient", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles ambient preset", "homepage": "https://particles.js.org", "repository": { @@ -96,11 +96,18 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./cjs/index.lazy.js" + }, "./package.json": "./package.json" }, "dependencies": { - "@tsparticles/basic": "4.0.0-beta.12", - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/basic": "4.0.0-beta.15", + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/presets/ambient/package.json b/presets/ambient/package.json index 2560e5bb243..75077044fc2 100644 --- a/presets/ambient/package.json +++ b/presets/ambient/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/preset-ambient", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles ambient preset", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,6 +106,13 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", @@ -113,5 +120,9 @@ "@tsparticles/basic": "workspace:*", "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/presets/ambient/rollup.config.js b/presets/ambient/rollup.config.js new file mode 100644 index 00000000000..8ed7f50b6e1 --- /dev/null +++ b/presets/ambient/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPreset } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "url"; +import fs from "fs-extra"; +import path from "path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPreset({ + dir: __dirname, + moduleName: "ambient", + presetName: "Ambient", + version, +}); diff --git a/presets/ambient/src/browser.ts b/presets/ambient/src/browser.ts new file mode 100644 index 00000000000..ad4be59aab3 --- /dev/null +++ b/presets/ambient/src/browser.ts @@ -0,0 +1,10 @@ +import { loadAmbientPreset } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadAmbientPreset?: typeof loadAmbientPreset; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadAmbientPreset = loadAmbientPreset; + +export * from "./index.js"; diff --git a/presets/ambient/src/bundle.ts b/presets/ambient/src/bundle.ts index 59540c34ded..7dfd2034811 100644 --- a/presets/ambient/src/bundle.ts +++ b/presets/ambient/src/bundle.ts @@ -1,2 +1,12 @@ +import { loadAmbientPreset } from "./index.js"; + export { loadAmbientPreset } from "./index.js"; export { tsParticles } from "@tsparticles/engine"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadAmbientPreset?: typeof loadAmbientPreset; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; + +globalObject.loadAmbientPreset = loadAmbientPreset; diff --git a/presets/ambient/src/index.lazy.ts b/presets/ambient/src/index.lazy.ts new file mode 100644 index 00000000000..9c6562a1f9d --- /dev/null +++ b/presets/ambient/src/index.lazy.ts @@ -0,0 +1,19 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const presetName = "ambient"; + +/** + * @param engine - + */ +export async function loadAmbientPreset(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const [{ loadBasic }, { options }] = await Promise.all([ + import("@tsparticles/basic/lazy"), + import("./options.js"), + ]); + + await loadBasic(e); + + e.pluginManager.addPreset(presetName, options); + }); +} diff --git a/presets/ambient/src/index.ts b/presets/ambient/src/index.ts index c43db96f2f1..2952099879b 100644 --- a/presets/ambient/src/index.ts +++ b/presets/ambient/src/index.ts @@ -1,4 +1,6 @@ import { type Engine } from "@tsparticles/engine"; +import { loadBasic } from "@tsparticles/basic"; +import { options } from "./options.js"; const presetName = "ambient"; @@ -7,14 +9,7 @@ const presetName = "ambient"; */ export async function loadAmbientPreset(engine: Engine): Promise { await engine.pluginManager.register(async e => { - const [{ loadBasic }, { options }] = await Promise.all([ - import("@tsparticles/basic"), - import("./options.js"), - ]); - - await Promise.all([ - loadBasic(e), - ]); + await loadBasic(e); e.pluginManager.addPreset(presetName, options); }); diff --git a/presets/ambient/webpack.config.js b/presets/ambient/webpack.config.js deleted file mode 100644 index 6702106bbfc..00000000000 --- a/presets/ambient/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPreset } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "url"; -import fs from "fs-extra"; -import path from "path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPreset({ - dir: __dirname, - moduleName: "ambient", - presetName: "Ambient", - version, -}); diff --git a/presets/bigCircles/CHANGELOG.md b/presets/bigCircles/CHANGELOG.md index d95698ee235..0eb3ae26d7f 100644 --- a/presets/bigCircles/CHANGELOG.md +++ b/presets/bigCircles/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/preset-big-circles + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/preset-big-circles diff --git a/presets/bigCircles/package.dist.json b/presets/bigCircles/package.dist.json index fabbb3d01f2..f0e16dc4739 100644 --- a/presets/bigCircles/package.dist.json +++ b/presets/bigCircles/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/preset-big-circles", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles big circles preset", "homepage": "https://particles.js.org", "repository": { @@ -93,14 +93,20 @@ "browser": "./browser/index.js", "import": "./esm/index.js", "require": "./cjs/index.js", - "umd": "./umd/index.js", "default": "./cjs/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./cjs/index.lazy.js" + }, "./package.json": "./package.json" }, "dependencies": { - "@tsparticles/basic": "4.0.0-beta.12", - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/basic": "4.0.0-beta.15", + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/presets/bigCircles/package.json b/presets/bigCircles/package.json index 9246d69bbea..c68d23d7cf3 100644 --- a/presets/bigCircles/package.json +++ b/presets/bigCircles/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/preset-big-circles", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles big circles preset", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -103,9 +103,15 @@ "browser": "./dist/browser/index.js", "import": "./dist/esm/index.js", "require": "./dist/cjs/index.js", - "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", @@ -113,5 +119,9 @@ "@tsparticles/basic": "workspace:*", "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/presets/bigCircles/rollup.config.js b/presets/bigCircles/rollup.config.js new file mode 100644 index 00000000000..3af9b07e86d --- /dev/null +++ b/presets/bigCircles/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPreset } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "url"; +import fs from "fs-extra"; +import path from "path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPreset({ + dir: __dirname, + moduleName: "bigCircles", + presetName: "Big Circles", + version, +}); diff --git a/presets/bigCircles/src/browser.ts b/presets/bigCircles/src/browser.ts new file mode 100644 index 00000000000..2c51bc5b73d --- /dev/null +++ b/presets/bigCircles/src/browser.ts @@ -0,0 +1,10 @@ +import { loadBigCirclesPreset } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadBigCirclesPreset?: typeof loadBigCirclesPreset; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadBigCirclesPreset = loadBigCirclesPreset; + +export * from "./index.js"; diff --git a/presets/bigCircles/src/bundle.ts b/presets/bigCircles/src/bundle.ts index 1310af83309..5eba96fa9ba 100644 --- a/presets/bigCircles/src/bundle.ts +++ b/presets/bigCircles/src/bundle.ts @@ -1,2 +1,12 @@ +import { loadBigCirclesPreset } from "./index.js"; + export { loadBigCirclesPreset } from "./index.js"; export { tsParticles } from "@tsparticles/engine"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadBigCirclesPreset?: typeof loadBigCirclesPreset; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; + +globalObject.loadBigCirclesPreset = loadBigCirclesPreset; diff --git a/presets/bigCircles/src/index.lazy.ts b/presets/bigCircles/src/index.lazy.ts new file mode 100644 index 00000000000..06344d4715b --- /dev/null +++ b/presets/bigCircles/src/index.lazy.ts @@ -0,0 +1,18 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const presetNames = ["bigCircles", "big-circles"]; + +/** + * @param engine - + */ +export async function loadBigCirclesPreset(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const [{ loadBasic }, { options }] = await Promise.all([import("@tsparticles/basic/lazy"), import("./options.js")]); + + await loadBasic(e); + + presetNames.forEach(name => { + e.pluginManager.addPreset(name, options); + }); + }); +} diff --git a/presets/bigCircles/src/index.ts b/presets/bigCircles/src/index.ts index 401a6341d8e..b974531adfc 100644 --- a/presets/bigCircles/src/index.ts +++ b/presets/bigCircles/src/index.ts @@ -1,4 +1,6 @@ import { type Engine } from "@tsparticles/engine"; +import { loadBasic } from "@tsparticles/basic"; +import { options } from "./options.js"; const presetNames = ["bigCircles", "big-circles"]; @@ -7,8 +9,6 @@ const presetNames = ["bigCircles", "big-circles"]; */ export async function loadBigCirclesPreset(engine: Engine): Promise { await engine.pluginManager.register(async e => { - const [{ loadBasic }, { options }] = await Promise.all([import("@tsparticles/basic"), import("./options.js")]); - await loadBasic(e); presetNames.forEach(name => { diff --git a/presets/bigCircles/webpack.config.js b/presets/bigCircles/webpack.config.js deleted file mode 100644 index b94b606ad45..00000000000 --- a/presets/bigCircles/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPreset } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "url"; -import fs from "fs-extra"; -import path from "path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPreset({ - dir: __dirname, - moduleName: "bigCircles", - presetName: "Big Circles", - version, -}); diff --git a/presets/bubbles/CHANGELOG.md b/presets/bubbles/CHANGELOG.md index cbc2698121f..2081eb71b4d 100644 --- a/presets/bubbles/CHANGELOG.md +++ b/presets/bubbles/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/preset-bubbles + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/preset-bubbles diff --git a/presets/bubbles/package.dist.json b/presets/bubbles/package.dist.json index 304593147e9..abeba01a9e1 100644 --- a/presets/bubbles/package.dist.json +++ b/presets/bubbles/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/preset-bubbles", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles bubbles preset", "homepage": "https://particles.js.org", "repository": { @@ -96,12 +96,19 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./cjs/index.lazy.js" + }, "./package.json": "./package.json" }, "dependencies": { - "@tsparticles/basic": "4.0.0-beta.12", - "@tsparticles/engine": "4.0.0-beta.12", - "@tsparticles/plugin-emitters": "4.0.0-beta.12" + "@tsparticles/basic": "4.0.0-beta.15", + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/plugin-emitters": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/presets/bubbles/package.json b/presets/bubbles/package.json index c5d510476f3..7fe7aee8bdb 100644 --- a/presets/bubbles/package.json +++ b/presets/bubbles/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/preset-bubbles", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles bubbles preset", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,6 +106,13 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", @@ -114,5 +121,9 @@ "@tsparticles/engine": "workspace:*", "@tsparticles/plugin-emitters": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/presets/bubbles/rollup.config.js b/presets/bubbles/rollup.config.js new file mode 100644 index 00000000000..6271f348c2b --- /dev/null +++ b/presets/bubbles/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPreset } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "url"; +import fs from "fs-extra"; +import path from "path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPreset({ + dir: __dirname, + moduleName: "bubbles", + presetName: "Bubbles", + version: version +}); diff --git a/presets/bubbles/src/browser.ts b/presets/bubbles/src/browser.ts new file mode 100644 index 00000000000..c4e0b9d064d --- /dev/null +++ b/presets/bubbles/src/browser.ts @@ -0,0 +1,10 @@ +import { loadBubblesPreset } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadBubblesPreset?: typeof loadBubblesPreset; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadBubblesPreset = loadBubblesPreset; + +export * from "./index.js"; diff --git a/presets/bubbles/src/bundle.ts b/presets/bubbles/src/bundle.ts index 9b008d086af..3e60f9d4640 100644 --- a/presets/bubbles/src/bundle.ts +++ b/presets/bubbles/src/bundle.ts @@ -1,2 +1,12 @@ +import { loadBubblesPreset } from "./index.js"; + export { loadBubblesPreset } from "./index.js"; export { tsParticles } from "@tsparticles/engine"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadBubblesPreset?: typeof loadBubblesPreset; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; + +globalObject.loadBubblesPreset = loadBubblesPreset; diff --git a/presets/bubbles/src/index.lazy.ts b/presets/bubbles/src/index.lazy.ts new file mode 100644 index 00000000000..7cbab630711 --- /dev/null +++ b/presets/bubbles/src/index.lazy.ts @@ -0,0 +1,23 @@ +import type { Engine } from "@tsparticles/engine/lazy"; + +const presetName = "bubbles"; + +/** + * @param engine - + */ +export async function loadBubblesPreset(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const [{ loadBasic }, { loadEmittersPluginSimple }, { options }] = await Promise.all([ + import("@tsparticles/basic/lazy"), + import("@tsparticles/plugin-emitters/plugin/lazy"), + import("./options.js"), + ]); + + await Promise.all([ + loadBasic(e), + loadEmittersPluginSimple(e), + ]); + + e.pluginManager.addPreset(presetName, options); + }); +} diff --git a/presets/bubbles/src/index.ts b/presets/bubbles/src/index.ts index 3c59e04301b..c4b369199e6 100644 --- a/presets/bubbles/src/index.ts +++ b/presets/bubbles/src/index.ts @@ -1,4 +1,7 @@ import type { Engine } from "@tsparticles/engine"; +import { loadBasic } from "@tsparticles/basic"; +import { loadEmittersPluginSimple } from "@tsparticles/plugin-emitters/plugin"; +import { options } from "./options.js"; const presetName = "bubbles"; @@ -7,12 +10,6 @@ const presetName = "bubbles"; */ export async function loadBubblesPreset(engine: Engine): Promise { await engine.pluginManager.register(async e => { - const [{ loadBasic }, { loadEmittersPluginSimple }, { options }] = await Promise.all([ - import("@tsparticles/basic"), - import("@tsparticles/plugin-emitters/plugin"), - import("./options.js"), - ]); - await Promise.all([ loadBasic(e), loadEmittersPluginSimple(e), diff --git a/presets/bubbles/webpack.config.js b/presets/bubbles/webpack.config.js deleted file mode 100644 index c325cf04161..00000000000 --- a/presets/bubbles/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPreset } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "url"; -import fs from "fs-extra"; -import path from "path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPreset({ - dir: __dirname, - moduleName: "bubbles", - presetName: "Bubbles", - version: version -}); diff --git a/presets/confetti/CHANGELOG.md b/presets/confetti/CHANGELOG.md index 774cbcaea7e..e34dc1ccdfd 100644 --- a/presets/confetti/CHANGELOG.md +++ b/presets/confetti/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/preset-confetti + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/preset-confetti diff --git a/presets/confetti/package.dist.json b/presets/confetti/package.dist.json index 9444862bd4e..42c5cdac38d 100644 --- a/presets/confetti/package.dist.json +++ b/presets/confetti/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/preset-confetti", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles confetti preset", "homepage": "https://particles.js.org", "repository": { @@ -99,17 +99,17 @@ "./package.json": "./package.json" }, "dependencies": { - "@tsparticles/basic": "4.0.0-beta.12", - "@tsparticles/engine": "4.0.0-beta.12", - "@tsparticles/palette-confetti": "4.0.0-beta.12", - "@tsparticles/plugin-emitters": "4.0.0-beta.12", - "@tsparticles/plugin-motion": "4.0.0-beta.12", - "@tsparticles/shape-square": "4.0.0-beta.12", - "@tsparticles/updater-life": "4.0.0-beta.12", - "@tsparticles/updater-roll": "4.0.0-beta.12", - "@tsparticles/updater-rotate": "4.0.0-beta.12", - "@tsparticles/updater-tilt": "4.0.0-beta.12", - "@tsparticles/updater-wobble": "4.0.0-beta.12" + "@tsparticles/basic": "4.0.0-beta.15", + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/palette-confetti": "4.0.0-beta.15", + "@tsparticles/plugin-emitters": "4.0.0-beta.15", + "@tsparticles/plugin-motion": "4.0.0-beta.15", + "@tsparticles/shape-square": "4.0.0-beta.15", + "@tsparticles/updater-life": "4.0.0-beta.15", + "@tsparticles/updater-roll": "4.0.0-beta.15", + "@tsparticles/updater-rotate": "4.0.0-beta.15", + "@tsparticles/updater-tilt": "4.0.0-beta.15", + "@tsparticles/updater-wobble": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/presets/confetti/package.json b/presets/confetti/package.json index e6a3ebb52a6..eb458b109de 100644 --- a/presets/confetti/package.json +++ b/presets/confetti/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/preset-confetti", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles confetti preset", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -122,5 +122,9 @@ "@tsparticles/updater-tilt": "workspace:*", "@tsparticles/updater-wobble": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/presets/confetti/rollup.config.js b/presets/confetti/rollup.config.js new file mode 100644 index 00000000000..17bbb145b45 --- /dev/null +++ b/presets/confetti/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPreset } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "url"; +import fs from "fs-extra"; +import path from "path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPreset({ + dir: __dirname, + moduleName: "confetti", + presetName: "Confetti", + version: version +}); diff --git a/presets/confetti/src/browser.ts b/presets/confetti/src/browser.ts new file mode 100644 index 00000000000..76ea02f4acc --- /dev/null +++ b/presets/confetti/src/browser.ts @@ -0,0 +1,10 @@ +import { loadConfettiPreset } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadConfettiPreset?: typeof loadConfettiPreset; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadConfettiPreset = loadConfettiPreset; + +export * from "./index.js"; diff --git a/presets/confetti/src/bundle.ts b/presets/confetti/src/bundle.ts index 63a1eb01f8d..8fe265ce787 100644 --- a/presets/confetti/src/bundle.ts +++ b/presets/confetti/src/bundle.ts @@ -1,2 +1,12 @@ +import { loadConfettiPreset } from "./index.js"; + export { loadConfettiPreset } from "./index.js"; export { tsParticles } from "@tsparticles/engine"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadConfettiPreset?: typeof loadConfettiPreset; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; + +globalObject.loadConfettiPreset = loadConfettiPreset; diff --git a/presets/confetti/src/index.lazy.ts b/presets/confetti/src/index.lazy.ts new file mode 100644 index 00000000000..055f8b07bdb --- /dev/null +++ b/presets/confetti/src/index.lazy.ts @@ -0,0 +1,51 @@ +import type { Engine } from "@tsparticles/engine/lazy"; + +const presetName = "confetti"; + +/** + * @param engine - + */ +export async function loadConfettiPreset(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const [ + { loadBasic }, + { loadEmittersPluginSimple }, + { loadMotionPlugin }, + { loadRotateUpdater }, + { loadSquareShape }, + { loadTiltUpdater }, + { loadWobbleUpdater }, + { loadLifeUpdater }, + { loadRollUpdater }, + { loadConfettiPalette }, + { options }, + ] = await Promise.all([ + import("@tsparticles/basic/lazy"), + import("@tsparticles/plugin-emitters/plugin/lazy"), + import("@tsparticles/plugin-motion/lazy"), + import("@tsparticles/updater-rotate/lazy"), + import("@tsparticles/shape-square/lazy"), + import("@tsparticles/updater-tilt/lazy"), + import("@tsparticles/updater-wobble/lazy"), + import("@tsparticles/updater-life/lazy"), + import("@tsparticles/updater-roll/lazy"), + import("@tsparticles/palette-confetti/lazy"), + import("./options.js"), + ]); + + await Promise.all([ + loadBasic(e), + loadConfettiPalette(e), + loadEmittersPluginSimple(e), + loadSquareShape(e), + loadMotionPlugin(e), + loadWobbleUpdater(e), + loadRollUpdater(e), + loadRotateUpdater(e), + loadTiltUpdater(e), + loadLifeUpdater(e), + ]); + + e.pluginManager.addPreset(presetName, options, false); + }); +} diff --git a/presets/confetti/src/index.ts b/presets/confetti/src/index.ts index 668a2ce9c81..3cb5af3ae0d 100644 --- a/presets/confetti/src/index.ts +++ b/presets/confetti/src/index.ts @@ -1,4 +1,15 @@ import type { Engine } from "@tsparticles/engine"; +import { loadBasic } from "@tsparticles/basic"; +import { loadConfettiPalette } from "@tsparticles/palette-confetti"; +import { loadEmittersPluginSimple } from "@tsparticles/plugin-emitters/plugin"; +import { loadLifeUpdater } from "@tsparticles/updater-life"; +import { loadMotionPlugin } from "@tsparticles/plugin-motion"; +import { loadRollUpdater } from "@tsparticles/updater-roll"; +import { loadRotateUpdater } from "@tsparticles/updater-rotate"; +import { loadSquareShape } from "@tsparticles/shape-square"; +import { loadTiltUpdater } from "@tsparticles/updater-tilt"; +import { loadWobbleUpdater } from "@tsparticles/updater-wobble"; +import { options } from "./options.js"; const presetName = "confetti"; @@ -7,32 +18,6 @@ const presetName = "confetti"; */ export async function loadConfettiPreset(engine: Engine): Promise { await engine.pluginManager.register(async e => { - const [ - { loadBasic }, - { loadEmittersPluginSimple }, - { loadMotionPlugin }, - { loadRotateUpdater }, - { loadSquareShape }, - { loadTiltUpdater }, - { loadWobbleUpdater }, - { loadLifeUpdater }, - { loadRollUpdater }, - { loadConfettiPalette }, - { options }, - ] = await Promise.all([ - import("@tsparticles/basic"), - import("@tsparticles/plugin-emitters/plugin"), - import("@tsparticles/plugin-motion"), - import("@tsparticles/updater-rotate"), - import("@tsparticles/shape-square"), - import("@tsparticles/updater-tilt"), - import("@tsparticles/updater-wobble"), - import("@tsparticles/updater-life"), - import("@tsparticles/updater-roll"), - import("@tsparticles/palette-confetti"), - import("./options.js"), - ]); - await Promise.all([ loadBasic(e), loadConfettiPalette(e), diff --git a/presets/confetti/webpack.config.js b/presets/confetti/webpack.config.js deleted file mode 100644 index 37dfbeb7669..00000000000 --- a/presets/confetti/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPreset } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "url"; -import fs from "fs-extra"; -import path from "path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPreset({ - dir: __dirname, - moduleName: "confetti", - presetName: "Confetti", - version: version -}); diff --git a/presets/confettiCannon/CHANGELOG.md b/presets/confettiCannon/CHANGELOG.md index 46ac0ec5cf0..1d886d12f15 100644 --- a/presets/confettiCannon/CHANGELOG.md +++ b/presets/confettiCannon/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/preset-confetti-cannon + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/preset-confetti-cannon diff --git a/presets/confettiCannon/package.dist.json b/presets/confettiCannon/package.dist.json index 07bd1587612..76df684840c 100644 --- a/presets/confettiCannon/package.dist.json +++ b/presets/confettiCannon/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/preset-confetti-cannon", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles confetti cannon preset", "homepage": "https://particles.js.org", "repository": { @@ -96,21 +96,28 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./cjs/index.lazy.js" + }, "./package.json": "./package.json" }, "dependencies": { - "@tsparticles/basic": "4.0.0-beta.12", - "@tsparticles/engine": "4.0.0-beta.12", - "@tsparticles/interaction-external-cannon": "4.0.0-beta.12", - "@tsparticles/palette-confetti": "4.0.0-beta.12", - "@tsparticles/plugin-interactivity": "4.0.0-beta.12", - "@tsparticles/plugin-motion": "4.0.0-beta.12", - "@tsparticles/shape-square": "4.0.0-beta.12", - "@tsparticles/updater-life": "4.0.0-beta.12", - "@tsparticles/updater-roll": "4.0.0-beta.12", - "@tsparticles/updater-rotate": "4.0.0-beta.12", - "@tsparticles/updater-tilt": "4.0.0-beta.12", - "@tsparticles/updater-wobble": "4.0.0-beta.12" + "@tsparticles/basic": "4.0.0-beta.15", + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/interaction-external-cannon": "4.0.0-beta.15", + "@tsparticles/palette-confetti": "4.0.0-beta.15", + "@tsparticles/plugin-interactivity": "4.0.0-beta.15", + "@tsparticles/plugin-motion": "4.0.0-beta.15", + "@tsparticles/shape-square": "4.0.0-beta.15", + "@tsparticles/updater-life": "4.0.0-beta.15", + "@tsparticles/updater-roll": "4.0.0-beta.15", + "@tsparticles/updater-rotate": "4.0.0-beta.15", + "@tsparticles/updater-tilt": "4.0.0-beta.15", + "@tsparticles/updater-wobble": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/presets/confettiCannon/package.json b/presets/confettiCannon/package.json index 9b16b65db12..2e7ff814551 100644 --- a/presets/confettiCannon/package.json +++ b/presets/confettiCannon/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/preset-confetti-cannon", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles confetti cannon preset", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,6 +106,13 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", @@ -123,5 +130,9 @@ "@tsparticles/updater-tilt": "workspace:*", "@tsparticles/updater-wobble": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/presets/confettiCannon/rollup.config.js b/presets/confettiCannon/rollup.config.js new file mode 100644 index 00000000000..fecb0eaf468 --- /dev/null +++ b/presets/confettiCannon/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPreset } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "url"; +import fs from "fs-extra"; +import path from "path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPreset({ + dir: __dirname, + moduleName: "confettiCannon", + presetName: "Confetti Cannon", + version: version +}); diff --git a/presets/confettiCannon/src/browser.ts b/presets/confettiCannon/src/browser.ts new file mode 100644 index 00000000000..0dafa369ecc --- /dev/null +++ b/presets/confettiCannon/src/browser.ts @@ -0,0 +1,10 @@ +import { loadConfettiCannonPreset } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadConfettiCannonPreset?: typeof loadConfettiCannonPreset; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadConfettiCannonPreset = loadConfettiCannonPreset; + +export * from "./index.js"; diff --git a/presets/confettiCannon/src/bundle.ts b/presets/confettiCannon/src/bundle.ts index f2c99e0ce2d..71928227118 100644 --- a/presets/confettiCannon/src/bundle.ts +++ b/presets/confettiCannon/src/bundle.ts @@ -1,2 +1,12 @@ +import { loadConfettiCannonPreset } from "./index.js"; + export { loadConfettiCannonPreset } from "./index.js"; export { tsParticles } from "@tsparticles/engine"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadConfettiCannonPreset?: typeof loadConfettiCannonPreset; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; + +globalObject.loadConfettiCannonPreset = loadConfettiCannonPreset; diff --git a/presets/confettiCannon/src/index.lazy.ts b/presets/confettiCannon/src/index.lazy.ts new file mode 100644 index 00000000000..6d5c5b7e22a --- /dev/null +++ b/presets/confettiCannon/src/index.lazy.ts @@ -0,0 +1,58 @@ +import type { Engine } from "@tsparticles/engine/lazy"; + +const presetNames = ["confettiCannon", "confetti-cannon"]; + +/** + * @param engine - + */ +export async function loadConfettiCannonPreset(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const [ + { loadBasic }, + { loadExternalCannonInteraction }, + { loadInteractivityPlugin }, + { loadMotionPlugin }, + { loadRotateUpdater }, + { loadSquareShape }, + { loadTiltUpdater }, + { loadWobbleUpdater }, + { loadLifeUpdater }, + { loadRollUpdater }, + { loadConfettiPalette }, + { options }, + ] = await Promise.all([ + import("@tsparticles/basic/lazy"), + import("@tsparticles/interaction-external-cannon/lazy"), + import("@tsparticles/plugin-interactivity/lazy"), + import("@tsparticles/plugin-motion/lazy"), + import("@tsparticles/updater-rotate/lazy"), + import("@tsparticles/shape-square/lazy"), + import("@tsparticles/updater-tilt/lazy"), + import("@tsparticles/updater-wobble/lazy"), + import("@tsparticles/updater-life/lazy"), + import("@tsparticles/updater-roll/lazy"), + import("@tsparticles/palette-confetti/lazy"), + import("./options.js"), + ]); + + await Promise.all([ + loadBasic(e), + loadConfettiPalette(e), + (async (): Promise => { + await loadInteractivityPlugin(e); + await loadExternalCannonInteraction(e); + })(), + loadSquareShape(e), + loadMotionPlugin(e), + loadWobbleUpdater(e), + loadRollUpdater(e), + loadRotateUpdater(e), + loadTiltUpdater(e), + loadLifeUpdater(e), + ]); + + presetNames.forEach(name => { + e.pluginManager.addPreset(name, options, false); + }); + }); +} diff --git a/presets/confettiCannon/src/index.ts b/presets/confettiCannon/src/index.ts index cc074f8b0ca..33c2639158c 100644 --- a/presets/confettiCannon/src/index.ts +++ b/presets/confettiCannon/src/index.ts @@ -1,4 +1,16 @@ import type { Engine } from "@tsparticles/engine"; +import { loadBasic } from "@tsparticles/basic"; +import { loadConfettiPalette } from "@tsparticles/palette-confetti"; +import { loadExternalCannonInteraction } from "@tsparticles/interaction-external-cannon"; +import { loadInteractivityPlugin } from "@tsparticles/plugin-interactivity"; +import { loadLifeUpdater } from "@tsparticles/updater-life"; +import { loadMotionPlugin } from "@tsparticles/plugin-motion"; +import { loadRollUpdater } from "@tsparticles/updater-roll"; +import { loadRotateUpdater } from "@tsparticles/updater-rotate"; +import { loadSquareShape } from "@tsparticles/shape-square"; +import { loadTiltUpdater } from "@tsparticles/updater-tilt"; +import { loadWobbleUpdater } from "@tsparticles/updater-wobble"; +import { options } from "./options.js"; const presetNames = ["confettiCannon", "confetti-cannon"]; @@ -7,34 +19,6 @@ const presetNames = ["confettiCannon", "confetti-cannon"]; */ export async function loadConfettiCannonPreset(engine: Engine): Promise { await engine.pluginManager.register(async e => { - const [ - { loadBasic }, - { loadExternalCannonInteraction }, - { loadInteractivityPlugin }, - { loadMotionPlugin }, - { loadRotateUpdater }, - { loadSquareShape }, - { loadTiltUpdater }, - { loadWobbleUpdater }, - { loadLifeUpdater }, - { loadRollUpdater }, - { loadConfettiPalette }, - { options }, - ] = await Promise.all([ - import("@tsparticles/basic"), - import("@tsparticles/interaction-external-cannon"), - import("@tsparticles/plugin-interactivity"), - import("@tsparticles/plugin-motion"), - import("@tsparticles/updater-rotate"), - import("@tsparticles/shape-square"), - import("@tsparticles/updater-tilt"), - import("@tsparticles/updater-wobble"), - import("@tsparticles/updater-life"), - import("@tsparticles/updater-roll"), - import("@tsparticles/palette-confetti"), - import("./options.js"), - ]); - await Promise.all([ loadBasic(e), loadConfettiPalette(e), diff --git a/presets/confettiCannon/webpack.config.js b/presets/confettiCannon/webpack.config.js deleted file mode 100644 index b97f6c8b569..00000000000 --- a/presets/confettiCannon/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPreset } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "url"; -import fs from "fs-extra"; -import path from "path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPreset({ - dir: __dirname, - moduleName: "confettiCannon", - presetName: "Confetti Cannon", - version: version -}); diff --git a/presets/confettiExplosions/CHANGELOG.md b/presets/confettiExplosions/CHANGELOG.md index 7e8c879cf5c..744427dcdc1 100644 --- a/presets/confettiExplosions/CHANGELOG.md +++ b/presets/confettiExplosions/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/preset-confetti-explosions + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/preset-confetti-explosions diff --git a/presets/confettiExplosions/package.dist.json b/presets/confettiExplosions/package.dist.json index 00a3e275200..5d112ac51e1 100644 --- a/presets/confettiExplosions/package.dist.json +++ b/presets/confettiExplosions/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/preset-confetti-explosions", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles confetti explosions preset", "homepage": "https://particles.js.org", "repository": { @@ -96,19 +96,26 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./cjs/index.lazy.js" + }, "./package.json": "./package.json" }, "dependencies": { - "@tsparticles/basic": "4.0.0-beta.12", - "@tsparticles/engine": "4.0.0-beta.12", - "@tsparticles/palette-confetti": "4.0.0-beta.12", - "@tsparticles/plugin-emitters": "4.0.0-beta.12", - "@tsparticles/plugin-motion": "4.0.0-beta.12", - "@tsparticles/shape-square": "4.0.0-beta.12", - "@tsparticles/updater-roll": "4.0.0-beta.12", - "@tsparticles/updater-rotate": "4.0.0-beta.12", - "@tsparticles/updater-tilt": "4.0.0-beta.12", - "@tsparticles/updater-wobble": "4.0.0-beta.12" + "@tsparticles/basic": "4.0.0-beta.15", + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/palette-confetti": "4.0.0-beta.15", + "@tsparticles/plugin-emitters": "4.0.0-beta.15", + "@tsparticles/plugin-motion": "4.0.0-beta.15", + "@tsparticles/shape-square": "4.0.0-beta.15", + "@tsparticles/updater-roll": "4.0.0-beta.15", + "@tsparticles/updater-rotate": "4.0.0-beta.15", + "@tsparticles/updater-tilt": "4.0.0-beta.15", + "@tsparticles/updater-wobble": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/presets/confettiExplosions/package.json b/presets/confettiExplosions/package.json index 2321463b79e..f76611303c2 100644 --- a/presets/confettiExplosions/package.json +++ b/presets/confettiExplosions/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/preset-confetti-explosions", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles confetti explosions preset", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,6 +106,13 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", @@ -121,5 +128,9 @@ "@tsparticles/updater-tilt": "workspace:*", "@tsparticles/updater-wobble": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/presets/confettiExplosions/rollup.config.js b/presets/confettiExplosions/rollup.config.js new file mode 100644 index 00000000000..9e39df763e9 --- /dev/null +++ b/presets/confettiExplosions/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPreset } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "url"; +import fs from "fs-extra"; +import path from "path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPreset({ + dir: __dirname, + moduleName: "confettiExplosions", + presetName: "Confetti Explosions", + version: version +}); diff --git a/presets/confettiExplosions/src/browser.ts b/presets/confettiExplosions/src/browser.ts new file mode 100644 index 00000000000..a2740c66467 --- /dev/null +++ b/presets/confettiExplosions/src/browser.ts @@ -0,0 +1,10 @@ +import { loadConfettiExplosionsPreset } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadConfettiExplosionsPreset?: typeof loadConfettiExplosionsPreset; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadConfettiExplosionsPreset = loadConfettiExplosionsPreset; + +export * from "./index.js"; diff --git a/presets/confettiExplosions/src/bundle.ts b/presets/confettiExplosions/src/bundle.ts index 1275ce7b45f..457730152f4 100644 --- a/presets/confettiExplosions/src/bundle.ts +++ b/presets/confettiExplosions/src/bundle.ts @@ -1,2 +1,12 @@ +import { loadConfettiExplosionsPreset } from "./index.js"; + export { loadConfettiExplosionsPreset } from "./index.js"; export { tsParticles } from "@tsparticles/engine"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadConfettiExplosionsPreset?: typeof loadConfettiExplosionsPreset; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; + +globalObject.loadConfettiExplosionsPreset = loadConfettiExplosionsPreset; diff --git a/presets/confettiExplosions/src/index.lazy.ts b/presets/confettiExplosions/src/index.lazy.ts new file mode 100644 index 00000000000..fce2228d380 --- /dev/null +++ b/presets/confettiExplosions/src/index.lazy.ts @@ -0,0 +1,50 @@ +import type { Engine } from "@tsparticles/engine/lazy"; + +const presetNames = ["confettiExplosions", "confetti-explosions"]; + +/** + * @param engine - + */ +export async function loadConfettiExplosionsPreset(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const [ + { loadBasic }, + { loadEmittersPluginSimple }, + { loadMotionPlugin }, + { loadRotateUpdater }, + { loadSquareShape }, + { loadTiltUpdater }, + { loadWobbleUpdater }, + { loadRollUpdater }, + { loadConfettiPalette }, + { options }, + ] = await Promise.all([ + import("@tsparticles/basic/lazy"), + import("@tsparticles/plugin-emitters/plugin/lazy"), + import("@tsparticles/plugin-motion/lazy"), + import("@tsparticles/updater-rotate/lazy"), + import("@tsparticles/shape-square/lazy"), + import("@tsparticles/updater-tilt/lazy"), + import("@tsparticles/updater-wobble/lazy"), + import("@tsparticles/updater-roll/lazy"), + import("@tsparticles/palette-confetti/lazy"), + import("./options.js"), + ]); + + await Promise.all([ + loadBasic(e), + loadConfettiPalette(e), + loadEmittersPluginSimple(e), + loadSquareShape(e), + loadMotionPlugin(e), + loadWobbleUpdater(e), + loadRollUpdater(e), + loadRotateUpdater(e), + loadTiltUpdater(e), + ]); + + presetNames.forEach(name => { + e.pluginManager.addPreset(name, options, false); + }); + }); +} diff --git a/presets/confettiExplosions/src/index.ts b/presets/confettiExplosions/src/index.ts index 97ab6f65204..25e6fec7a61 100644 --- a/presets/confettiExplosions/src/index.ts +++ b/presets/confettiExplosions/src/index.ts @@ -1,4 +1,14 @@ import type { Engine } from "@tsparticles/engine"; +import { loadBasic } from "@tsparticles/basic"; +import { loadConfettiPalette } from "@tsparticles/palette-confetti"; +import { loadEmittersPluginSimple } from "@tsparticles/plugin-emitters/plugin"; +import { loadMotionPlugin } from "@tsparticles/plugin-motion"; +import { loadRollUpdater } from "@tsparticles/updater-roll"; +import { loadRotateUpdater } from "@tsparticles/updater-rotate"; +import { loadSquareShape } from "@tsparticles/shape-square"; +import { loadTiltUpdater } from "@tsparticles/updater-tilt"; +import { loadWobbleUpdater } from "@tsparticles/updater-wobble"; +import { options } from "./options.js"; const presetNames = ["confettiExplosions", "confetti-explosions"]; @@ -7,30 +17,6 @@ const presetNames = ["confettiExplosions", "confetti-explosions"]; */ export async function loadConfettiExplosionsPreset(engine: Engine): Promise { await engine.pluginManager.register(async e => { - const [ - { loadBasic }, - { loadEmittersPluginSimple }, - { loadMotionPlugin }, - { loadRotateUpdater }, - { loadSquareShape }, - { loadTiltUpdater }, - { loadWobbleUpdater }, - { loadRollUpdater }, - { loadConfettiPalette }, - { options }, - ] = await Promise.all([ - import("@tsparticles/basic"), - import("@tsparticles/plugin-emitters/plugin"), - import("@tsparticles/plugin-motion"), - import("@tsparticles/updater-rotate"), - import("@tsparticles/shape-square"), - import("@tsparticles/updater-tilt"), - import("@tsparticles/updater-wobble"), - import("@tsparticles/updater-roll"), - import("@tsparticles/palette-confetti"), - import("./options.js"), - ]); - await Promise.all([ loadBasic(e), loadConfettiPalette(e), diff --git a/presets/confettiExplosions/webpack.config.js b/presets/confettiExplosions/webpack.config.js deleted file mode 100644 index 22384d7a330..00000000000 --- a/presets/confettiExplosions/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPreset } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "url"; -import fs from "fs-extra"; -import path from "path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPreset({ - dir: __dirname, - moduleName: "confettiExplosions", - presetName: "Confetti Explosions", - version: version -}); diff --git a/presets/confettiFalling/CHANGELOG.md b/presets/confettiFalling/CHANGELOG.md index c1cba504660..5e236a946b4 100644 --- a/presets/confettiFalling/CHANGELOG.md +++ b/presets/confettiFalling/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/preset-confetti-falling + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/preset-confetti-falling diff --git a/presets/confettiFalling/package.dist.json b/presets/confettiFalling/package.dist.json index 397d9282418..10876382755 100644 --- a/presets/confettiFalling/package.dist.json +++ b/presets/confettiFalling/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/preset-confetti-falling", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles confetti falling preset", "homepage": "https://particles.js.org", "repository": { @@ -96,18 +96,25 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./cjs/index.lazy.js" + }, "./package.json": "./package.json" }, "dependencies": { - "@tsparticles/basic": "4.0.0-beta.12", - "@tsparticles/engine": "4.0.0-beta.12", - "@tsparticles/palette-confetti": "4.0.0-beta.12", - "@tsparticles/plugin-motion": "4.0.0-beta.12", - "@tsparticles/shape-square": "4.0.0-beta.12", - "@tsparticles/updater-roll": "4.0.0-beta.12", - "@tsparticles/updater-rotate": "4.0.0-beta.12", - "@tsparticles/updater-tilt": "4.0.0-beta.12", - "@tsparticles/updater-wobble": "4.0.0-beta.12" + "@tsparticles/basic": "4.0.0-beta.15", + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/palette-confetti": "4.0.0-beta.15", + "@tsparticles/plugin-motion": "4.0.0-beta.15", + "@tsparticles/shape-square": "4.0.0-beta.15", + "@tsparticles/updater-roll": "4.0.0-beta.15", + "@tsparticles/updater-rotate": "4.0.0-beta.15", + "@tsparticles/updater-tilt": "4.0.0-beta.15", + "@tsparticles/updater-wobble": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/presets/confettiFalling/package.json b/presets/confettiFalling/package.json index 9942642bcd7..711a525ade4 100644 --- a/presets/confettiFalling/package.json +++ b/presets/confettiFalling/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/preset-confetti-falling", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles confetti falling preset", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,6 +106,13 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", @@ -120,5 +127,9 @@ "@tsparticles/updater-tilt": "workspace:*", "@tsparticles/updater-wobble": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/presets/confettiFalling/rollup.config.js b/presets/confettiFalling/rollup.config.js new file mode 100644 index 00000000000..4dd7c1ba308 --- /dev/null +++ b/presets/confettiFalling/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPreset } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "url"; +import fs from "fs-extra"; +import path from "path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPreset({ + dir: __dirname, + moduleName: "confettiFalling", + presetName: "Confetti Falling", + version: version +}); diff --git a/presets/confettiFalling/src/browser.ts b/presets/confettiFalling/src/browser.ts new file mode 100644 index 00000000000..4c91cc3e9e6 --- /dev/null +++ b/presets/confettiFalling/src/browser.ts @@ -0,0 +1,10 @@ +import { loadConfettiFallingPreset } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadConfettiFallingPreset?: typeof loadConfettiFallingPreset; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadConfettiFallingPreset = loadConfettiFallingPreset; + +export * from "./index.js"; diff --git a/presets/confettiFalling/src/bundle.ts b/presets/confettiFalling/src/bundle.ts index 0df083d112d..ec8710386d5 100644 --- a/presets/confettiFalling/src/bundle.ts +++ b/presets/confettiFalling/src/bundle.ts @@ -1,2 +1,12 @@ +import { loadConfettiFallingPreset } from "./index.js"; + export { loadConfettiFallingPreset } from "./index.js"; export { tsParticles } from "@tsparticles/engine"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadConfettiFallingPreset?: typeof loadConfettiFallingPreset; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; + +globalObject.loadConfettiFallingPreset = loadConfettiFallingPreset; diff --git a/presets/confettiFalling/src/index.lazy.ts b/presets/confettiFalling/src/index.lazy.ts new file mode 100644 index 00000000000..9dcd129e0dd --- /dev/null +++ b/presets/confettiFalling/src/index.lazy.ts @@ -0,0 +1,47 @@ +import type { Engine } from "@tsparticles/engine/lazy"; + +const presetNames = ["confettiFalling", "confetti-falling"]; + +/** + * @param engine - + */ +export async function loadConfettiFallingPreset(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const [ + { loadBasic }, + { loadMotionPlugin }, + { loadRotateUpdater }, + { loadSquareShape }, + { loadTiltUpdater }, + { loadWobbleUpdater }, + { loadRollUpdater }, + { loadConfettiPalette }, + { options }, + ] = await Promise.all([ + import("@tsparticles/basic/lazy"), + import("@tsparticles/plugin-motion/lazy"), + import("@tsparticles/updater-rotate/lazy"), + import("@tsparticles/shape-square/lazy"), + import("@tsparticles/updater-tilt/lazy"), + import("@tsparticles/updater-wobble/lazy"), + import("@tsparticles/updater-roll/lazy"), + import("@tsparticles/palette-confetti/lazy"), + import("./options.js"), + ]); + + await Promise.all([ + loadBasic(e), + loadConfettiPalette(e), + loadSquareShape(e), + loadMotionPlugin(e), + loadWobbleUpdater(e), + loadRollUpdater(e), + loadRotateUpdater(e), + loadTiltUpdater(e), + ]); + + presetNames.forEach(name => { + e.pluginManager.addPreset(name, options, false); + }); + }); +} diff --git a/presets/confettiFalling/src/index.ts b/presets/confettiFalling/src/index.ts index c6fda22c1c4..2c059c52fb1 100644 --- a/presets/confettiFalling/src/index.ts +++ b/presets/confettiFalling/src/index.ts @@ -1,4 +1,13 @@ import type { Engine } from "@tsparticles/engine"; +import { loadBasic } from "@tsparticles/basic"; +import { loadConfettiPalette } from "@tsparticles/palette-confetti"; +import { loadMotionPlugin } from "@tsparticles/plugin-motion"; +import { loadRollUpdater } from "@tsparticles/updater-roll"; +import { loadRotateUpdater } from "@tsparticles/updater-rotate"; +import { loadSquareShape } from "@tsparticles/shape-square"; +import { loadTiltUpdater } from "@tsparticles/updater-tilt"; +import { loadWobbleUpdater } from "@tsparticles/updater-wobble"; +import { options } from "./options.js"; const presetNames = ["confettiFalling", "confetti-falling"]; @@ -7,28 +16,6 @@ const presetNames = ["confettiFalling", "confetti-falling"]; */ export async function loadConfettiFallingPreset(engine: Engine): Promise { await engine.pluginManager.register(async e => { - const [ - { loadBasic }, - { loadMotionPlugin }, - { loadRotateUpdater }, - { loadSquareShape }, - { loadTiltUpdater }, - { loadWobbleUpdater }, - { loadRollUpdater }, - { loadConfettiPalette }, - { options }, - ] = await Promise.all([ - import("@tsparticles/basic"), - import("@tsparticles/plugin-motion"), - import("@tsparticles/updater-rotate"), - import("@tsparticles/shape-square"), - import("@tsparticles/updater-tilt"), - import("@tsparticles/updater-wobble"), - import("@tsparticles/updater-roll"), - import("@tsparticles/palette-confetti"), - import("./options.js"), - ]); - await Promise.all([ loadBasic(e), loadConfettiPalette(e), diff --git a/presets/confettiFalling/webpack.config.js b/presets/confettiFalling/webpack.config.js deleted file mode 100644 index c2754132938..00000000000 --- a/presets/confettiFalling/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPreset } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "url"; -import fs from "fs-extra"; -import path from "path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPreset({ - dir: __dirname, - moduleName: "confettiFalling", - presetName: "Confetti Falling", - version: version -}); diff --git a/presets/confettiParade/CHANGELOG.md b/presets/confettiParade/CHANGELOG.md index b7a938436d0..5b8d4722832 100644 --- a/presets/confettiParade/CHANGELOG.md +++ b/presets/confettiParade/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/preset-confetti-parade + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/preset-confetti-parade diff --git a/presets/confettiParade/package.dist.json b/presets/confettiParade/package.dist.json index 70e08b776cf..a482a5e3240 100644 --- a/presets/confettiParade/package.dist.json +++ b/presets/confettiParade/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/preset-confetti-parade", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles confetti parade preset", "homepage": "https://particles.js.org", "repository": { @@ -96,20 +96,27 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./cjs/index.lazy.js" + }, "./package.json": "./package.json" }, "dependencies": { - "@tsparticles/basic": "4.0.0-beta.12", - "@tsparticles/engine": "4.0.0-beta.12", - "@tsparticles/palette-confetti": "4.0.0-beta.12", - "@tsparticles/plugin-emitters": "4.0.0-beta.12", - "@tsparticles/plugin-motion": "4.0.0-beta.12", - "@tsparticles/shape-square": "4.0.0-beta.12", - "@tsparticles/updater-life": "4.0.0-beta.12", - "@tsparticles/updater-roll": "4.0.0-beta.12", - "@tsparticles/updater-rotate": "4.0.0-beta.12", - "@tsparticles/updater-tilt": "4.0.0-beta.12", - "@tsparticles/updater-wobble": "4.0.0-beta.12" + "@tsparticles/basic": "4.0.0-beta.15", + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/palette-confetti": "4.0.0-beta.15", + "@tsparticles/plugin-emitters": "4.0.0-beta.15", + "@tsparticles/plugin-motion": "4.0.0-beta.15", + "@tsparticles/shape-square": "4.0.0-beta.15", + "@tsparticles/updater-life": "4.0.0-beta.15", + "@tsparticles/updater-roll": "4.0.0-beta.15", + "@tsparticles/updater-rotate": "4.0.0-beta.15", + "@tsparticles/updater-tilt": "4.0.0-beta.15", + "@tsparticles/updater-wobble": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/presets/confettiParade/package.json b/presets/confettiParade/package.json index b590684eb51..cdc486c9403 100644 --- a/presets/confettiParade/package.json +++ b/presets/confettiParade/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/preset-confetti-parade", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles confetti parade preset", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,6 +106,13 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", @@ -122,5 +129,9 @@ "@tsparticles/updater-tilt": "workspace:*", "@tsparticles/updater-wobble": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/presets/confettiParade/rollup.config.js b/presets/confettiParade/rollup.config.js new file mode 100644 index 00000000000..a1eb31513f9 --- /dev/null +++ b/presets/confettiParade/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPreset } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "url"; +import fs from "fs-extra"; +import path from "path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPreset({ + dir: __dirname, + moduleName: "confettiParade", + presetName: "Confetti Parade", + version: version +}); diff --git a/presets/confettiParade/src/browser.ts b/presets/confettiParade/src/browser.ts new file mode 100644 index 00000000000..481750e621c --- /dev/null +++ b/presets/confettiParade/src/browser.ts @@ -0,0 +1,10 @@ +import { loadConfettiParadePreset } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadConfettiParadePreset?: typeof loadConfettiParadePreset; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadConfettiParadePreset = loadConfettiParadePreset; + +export * from "./index.js"; diff --git a/presets/confettiParade/src/bundle.ts b/presets/confettiParade/src/bundle.ts index 9603d1bc2f9..043037dd641 100644 --- a/presets/confettiParade/src/bundle.ts +++ b/presets/confettiParade/src/bundle.ts @@ -1,2 +1,12 @@ +import { loadConfettiParadePreset } from "./index.js"; + export { loadConfettiParadePreset } from "./index.js"; export { tsParticles } from "@tsparticles/engine"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadConfettiParadePreset?: typeof loadConfettiParadePreset; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; + +globalObject.loadConfettiParadePreset = loadConfettiParadePreset; diff --git a/presets/confettiParade/src/index.lazy.ts b/presets/confettiParade/src/index.lazy.ts new file mode 100644 index 00000000000..12b964aac26 --- /dev/null +++ b/presets/confettiParade/src/index.lazy.ts @@ -0,0 +1,53 @@ +import type { Engine } from "@tsparticles/engine/lazy"; + +const presetNames = ["confettiParade", "confetti-parade"]; + +/** + * @param engine - + */ +export async function loadConfettiParadePreset(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const [ + { loadBasic }, + { loadEmittersPluginSimple }, + { loadMotionPlugin }, + { loadRotateUpdater }, + { loadSquareShape }, + { loadTiltUpdater }, + { loadWobbleUpdater }, + { loadLifeUpdater }, + { loadRollUpdater }, + { loadConfettiPalette }, + { options }, + ] = await Promise.all([ + import("@tsparticles/basic/lazy"), + import("@tsparticles/plugin-emitters/plugin/lazy"), + import("@tsparticles/plugin-motion/lazy"), + import("@tsparticles/updater-rotate/lazy"), + import("@tsparticles/shape-square/lazy"), + import("@tsparticles/updater-tilt/lazy"), + import("@tsparticles/updater-wobble/lazy"), + import("@tsparticles/updater-life/lazy"), + import("@tsparticles/updater-roll/lazy"), + import("@tsparticles/palette-confetti/lazy"), + import("./options.js"), + ]); + + await Promise.all([ + loadBasic(e), + loadConfettiPalette(e), + loadEmittersPluginSimple(e), + loadSquareShape(e), + loadMotionPlugin(e), + loadWobbleUpdater(e), + loadRollUpdater(e), + loadRotateUpdater(e), + loadTiltUpdater(e), + loadLifeUpdater(e), + ]); + + presetNames.forEach(name => { + e.pluginManager.addPreset(name, options, false); + }); + }); +} diff --git a/presets/confettiParade/src/index.ts b/presets/confettiParade/src/index.ts index 1ea76034253..5d8e133c366 100644 --- a/presets/confettiParade/src/index.ts +++ b/presets/confettiParade/src/index.ts @@ -1,4 +1,15 @@ import type { Engine } from "@tsparticles/engine"; +import { loadBasic } from "@tsparticles/basic"; +import { loadConfettiPalette } from "@tsparticles/palette-confetti"; +import { loadEmittersPluginSimple } from "@tsparticles/plugin-emitters/plugin"; +import { loadLifeUpdater } from "@tsparticles/updater-life"; +import { loadMotionPlugin } from "@tsparticles/plugin-motion"; +import { loadRollUpdater } from "@tsparticles/updater-roll"; +import { loadRotateUpdater } from "@tsparticles/updater-rotate"; +import { loadSquareShape } from "@tsparticles/shape-square"; +import { loadTiltUpdater } from "@tsparticles/updater-tilt"; +import { loadWobbleUpdater } from "@tsparticles/updater-wobble"; +import { options } from "./options.js"; const presetNames = ["confettiParade", "confetti-parade"]; @@ -7,32 +18,6 @@ const presetNames = ["confettiParade", "confetti-parade"]; */ export async function loadConfettiParadePreset(engine: Engine): Promise { await engine.pluginManager.register(async e => { - const [ - { loadBasic }, - { loadEmittersPluginSimple }, - { loadMotionPlugin }, - { loadRotateUpdater }, - { loadSquareShape }, - { loadTiltUpdater }, - { loadWobbleUpdater }, - { loadLifeUpdater }, - { loadRollUpdater }, - { loadConfettiPalette }, - { options }, - ] = await Promise.all([ - import("@tsparticles/basic"), - import("@tsparticles/plugin-emitters/plugin"), - import("@tsparticles/plugin-motion"), - import("@tsparticles/updater-rotate"), - import("@tsparticles/shape-square"), - import("@tsparticles/updater-tilt"), - import("@tsparticles/updater-wobble"), - import("@tsparticles/updater-life"), - import("@tsparticles/updater-roll"), - import("@tsparticles/palette-confetti"), - import("./options.js"), - ]); - await Promise.all([ loadBasic(e), loadConfettiPalette(e), diff --git a/presets/confettiParade/webpack.config.js b/presets/confettiParade/webpack.config.js deleted file mode 100644 index e4ea6c14174..00000000000 --- a/presets/confettiParade/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPreset } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "url"; -import fs from "fs-extra"; -import path from "path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPreset({ - dir: __dirname, - moduleName: "confettiParade", - presetName: "Confetti Parade", - version: version -}); diff --git a/presets/fire/CHANGELOG.md b/presets/fire/CHANGELOG.md index 02b6a86a25e..9e3ee7ad8ae 100644 --- a/presets/fire/CHANGELOG.md +++ b/presets/fire/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/preset-fire + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/preset-fire diff --git a/presets/fire/package.dist.json b/presets/fire/package.dist.json index 50a85d30df6..7e7375e1c80 100644 --- a/presets/fire/package.dist.json +++ b/presets/fire/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/preset-fire", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles fire preset", "homepage": "https://particles.js.org", "repository": { @@ -99,10 +99,10 @@ "./package.json": "./package.json" }, "dependencies": { - "@tsparticles/basic": "4.0.0-beta.12", - "@tsparticles/engine": "4.0.0-beta.12", - "@tsparticles/interaction-external-push": "4.0.0-beta.12", - "@tsparticles/plugin-interactivity": "4.0.0-beta.12" + "@tsparticles/basic": "4.0.0-beta.15", + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/interaction-external-push": "4.0.0-beta.15", + "@tsparticles/plugin-interactivity": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/presets/fire/package.json b/presets/fire/package.json index 15dd5c46a01..ad41a8b1fd2 100644 --- a/presets/fire/package.json +++ b/presets/fire/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/preset-fire", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles fire preset", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,6 +106,13 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", @@ -115,5 +122,9 @@ "@tsparticles/interaction-external-push": "workspace:*", "@tsparticles/plugin-interactivity": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/presets/fire/rollup.config.js b/presets/fire/rollup.config.js new file mode 100644 index 00000000000..213f21b6dad --- /dev/null +++ b/presets/fire/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPreset } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "url"; +import fs from "fs-extra"; +import path from "path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPreset({ + dir: __dirname, + moduleName: "fire", + presetName: "Fire", + version, +}); diff --git a/presets/fire/src/browser.ts b/presets/fire/src/browser.ts new file mode 100644 index 00000000000..cd32e371651 --- /dev/null +++ b/presets/fire/src/browser.ts @@ -0,0 +1,10 @@ +import { loadFirePreset } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadFirePreset?: typeof loadFirePreset; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadFirePreset = loadFirePreset; + +export * from "./index.js"; diff --git a/presets/fire/src/bundle.ts b/presets/fire/src/bundle.ts index a2de5517d9d..fadbd8cca39 100644 --- a/presets/fire/src/bundle.ts +++ b/presets/fire/src/bundle.ts @@ -1,2 +1,12 @@ +import { loadFirePreset } from "./index.js"; + export { loadFirePreset } from "./index.js"; export { tsParticles } from "@tsparticles/engine"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadFirePreset?: typeof loadFirePreset; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; + +globalObject.loadFirePreset = loadFirePreset; diff --git a/presets/fire/src/index.lazy.ts b/presets/fire/src/index.lazy.ts new file mode 100644 index 00000000000..43668ab95b9 --- /dev/null +++ b/presets/fire/src/index.lazy.ts @@ -0,0 +1,29 @@ +import type { Engine } from "@tsparticles/engine/lazy"; + +const presetName = "fire"; + +/** + * @param engine - + */ +export async function loadFirePreset(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const [{ loadBasic }, { loadInteractivityPlugin }, { loadExternalPushInteraction }, { options }] = + await Promise.all([ + import("@tsparticles/basic/lazy"), + import("@tsparticles/plugin-interactivity/lazy"), + import("@tsparticles/interaction-external-push/lazy"), + import("./options.js"), + ]); + + await Promise.all([ + loadBasic(e), + (async (): Promise => { + await loadInteractivityPlugin(e); + + await loadExternalPushInteraction(e); + })(), + ]); + + e.pluginManager.addPreset(presetName, options); + }); +} diff --git a/presets/fire/src/index.ts b/presets/fire/src/index.ts index 45dfaf75115..cd790d60cd2 100644 --- a/presets/fire/src/index.ts +++ b/presets/fire/src/index.ts @@ -1,4 +1,8 @@ import type { Engine } from "@tsparticles/engine"; +import { loadBasic } from "@tsparticles/basic"; +import { loadExternalPushInteraction } from "@tsparticles/interaction-external-push"; +import { loadInteractivityPlugin } from "@tsparticles/plugin-interactivity"; +import { options } from "./options.js"; const presetName = "fire"; @@ -7,14 +11,6 @@ const presetName = "fire"; */ export async function loadFirePreset(engine: Engine): Promise { await engine.pluginManager.register(async e => { - const [{ loadBasic }, { loadInteractivityPlugin }, { loadExternalPushInteraction }, { options }] = - await Promise.all([ - import("@tsparticles/basic"), - import("@tsparticles/plugin-interactivity"), - import("@tsparticles/interaction-external-push"), - import("./options.js"), - ]); - await Promise.all([ loadBasic(e), (async (): Promise => { diff --git a/presets/fire/webpack.config.js b/presets/fire/webpack.config.js deleted file mode 100644 index 81307fa51fb..00000000000 --- a/presets/fire/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPreset } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "url"; -import fs from "fs-extra"; -import path from "path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPreset({ - dir: __dirname, - moduleName: "fire", - presetName: "Fire", - version, -}); diff --git a/presets/firefly/CHANGELOG.md b/presets/firefly/CHANGELOG.md index ab3c4cd888e..03493b6c15c 100644 --- a/presets/firefly/CHANGELOG.md +++ b/presets/firefly/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/preset-firefly + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/preset-firefly diff --git a/presets/firefly/package.dist.json b/presets/firefly/package.dist.json index d61de5dc859..99f7dd4df5c 100644 --- a/presets/firefly/package.dist.json +++ b/presets/firefly/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/preset-firefly", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles firefly preset", "homepage": "https://particles.js.org", "repository": { @@ -96,14 +96,21 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./cjs/index.lazy.js" + }, "./package.json": "./package.json" }, "dependencies": { - "@tsparticles/basic": "4.0.0-beta.12", - "@tsparticles/engine": "4.0.0-beta.12", - "@tsparticles/interaction-external-trail": "4.0.0-beta.12", - "@tsparticles/plugin-interactivity": "4.0.0-beta.12", - "@tsparticles/updater-life": "4.0.0-beta.12" + "@tsparticles/basic": "4.0.0-beta.15", + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/interaction-external-trail": "4.0.0-beta.15", + "@tsparticles/plugin-interactivity": "4.0.0-beta.15", + "@tsparticles/updater-life": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/presets/firefly/package.json b/presets/firefly/package.json index 849c34a59bd..636b727085a 100644 --- a/presets/firefly/package.json +++ b/presets/firefly/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/preset-firefly", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles firefly preset", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,6 +106,13 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", @@ -116,5 +123,9 @@ "@tsparticles/plugin-interactivity": "workspace:*", "@tsparticles/updater-life": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/presets/firefly/rollup.config.js b/presets/firefly/rollup.config.js new file mode 100644 index 00000000000..f1f28e684b1 --- /dev/null +++ b/presets/firefly/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPreset } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "url"; +import fs from "fs-extra"; +import path from "path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPreset({ + dir: __dirname, + moduleName: "firefly", + presetName: "Firefly", + version, +}); diff --git a/presets/firefly/src/browser.ts b/presets/firefly/src/browser.ts new file mode 100644 index 00000000000..fb0beef318a --- /dev/null +++ b/presets/firefly/src/browser.ts @@ -0,0 +1,10 @@ +import { loadFireflyPreset } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadFireflyPreset?: typeof loadFireflyPreset; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadFireflyPreset = loadFireflyPreset; + +export * from "./index.js"; diff --git a/presets/firefly/src/bundle.ts b/presets/firefly/src/bundle.ts index f2bb0a501fc..887c01dd33e 100644 --- a/presets/firefly/src/bundle.ts +++ b/presets/firefly/src/bundle.ts @@ -1,2 +1,12 @@ +import { loadFireflyPreset } from "./index.js"; + export { loadFireflyPreset } from "./index.js"; export { tsParticles } from "@tsparticles/engine"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadFireflyPreset?: typeof loadFireflyPreset; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; + +globalObject.loadFireflyPreset = loadFireflyPreset; diff --git a/presets/firefly/src/index.lazy.ts b/presets/firefly/src/index.lazy.ts new file mode 100644 index 00000000000..077bc26d5da --- /dev/null +++ b/presets/firefly/src/index.lazy.ts @@ -0,0 +1,36 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +const presetName = "firefly"; + +/** + * @param engine - + */ +export async function loadFireflyPreset(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const [ + { loadBasic }, + { loadInteractivityPlugin }, + { loadLifeUpdater }, + { loadExternalTrailInteraction }, + { options }, + ] = await Promise.all([ + import("@tsparticles/basic/lazy"), + import("@tsparticles/plugin-interactivity/lazy"), + import("@tsparticles/updater-life/lazy"), + import("@tsparticles/interaction-external-trail/lazy"), + import("./options.js"), + ]); + + await Promise.all([ + loadBasic(e), + loadLifeUpdater(e), + (async (): Promise => { + await loadInteractivityPlugin(e); + + await loadExternalTrailInteraction(e); + })(), + ]); + + e.pluginManager.addPreset(presetName, options); + }); +} diff --git a/presets/firefly/src/index.ts b/presets/firefly/src/index.ts index cfe575cd216..f132f74d2f9 100644 --- a/presets/firefly/src/index.ts +++ b/presets/firefly/src/index.ts @@ -1,4 +1,9 @@ import { type Engine } from "@tsparticles/engine"; +import { loadBasic } from "@tsparticles/basic"; +import { loadExternalTrailInteraction } from "@tsparticles/interaction-external-trail"; +import { loadInteractivityPlugin } from "@tsparticles/plugin-interactivity"; +import { loadLifeUpdater } from "@tsparticles/updater-life"; +import { options } from "./options.js"; const presetName = "firefly"; @@ -7,20 +12,6 @@ const presetName = "firefly"; */ export async function loadFireflyPreset(engine: Engine): Promise { await engine.pluginManager.register(async e => { - const [ - { loadBasic }, - { loadInteractivityPlugin }, - { loadLifeUpdater }, - { loadExternalTrailInteraction }, - { options }, - ] = await Promise.all([ - import("@tsparticles/basic"), - import("@tsparticles/plugin-interactivity"), - import("@tsparticles/updater-life"), - import("@tsparticles/interaction-external-trail"), - import("./options.js"), - ]); - await Promise.all([ loadBasic(e), loadLifeUpdater(e), diff --git a/presets/firefly/webpack.config.js b/presets/firefly/webpack.config.js deleted file mode 100644 index de422c9b663..00000000000 --- a/presets/firefly/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPreset } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "url"; -import fs from "fs-extra"; -import path from "path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPreset({ - dir: __dirname, - moduleName: "firefly", - presetName: "Firefly", - version, -}); diff --git a/presets/fireworks/CHANGELOG.md b/presets/fireworks/CHANGELOG.md index eee0720b1e4..20332fa7492 100644 --- a/presets/fireworks/CHANGELOG.md +++ b/presets/fireworks/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/preset-fireworks + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/preset-fireworks diff --git a/presets/fireworks/package.dist.json b/presets/fireworks/package.dist.json index 6f5d630eb28..cec7fc3cbf1 100644 --- a/presets/fireworks/package.dist.json +++ b/presets/fireworks/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/preset-fireworks", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles fireworks preset", "homepage": "https://particles.js.org", "repository": { @@ -96,19 +96,26 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./cjs/index.lazy.js" + }, "./package.json": "./package.json" }, "dependencies": { - "@tsparticles/basic": "4.0.0-beta.12", - "@tsparticles/effect-trail": "4.0.0-beta.12", - "@tsparticles/engine": "4.0.0-beta.12", - "@tsparticles/plugin-emitters": "4.0.0-beta.12", - "@tsparticles/plugin-emitters-shape-square": "4.0.0-beta.12", - "@tsparticles/plugin-sounds": "4.0.0-beta.12", - "@tsparticles/shape-line": "4.0.0-beta.12", - "@tsparticles/updater-destroy": "4.0.0-beta.12", - "@tsparticles/updater-life": "4.0.0-beta.12", - "@tsparticles/updater-rotate": "4.0.0-beta.12" + "@tsparticles/basic": "4.0.0-beta.15", + "@tsparticles/effect-trail": "4.0.0-beta.15", + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/plugin-emitters": "4.0.0-beta.15", + "@tsparticles/plugin-emitters-shape-square": "4.0.0-beta.15", + "@tsparticles/plugin-sounds": "4.0.0-beta.15", + "@tsparticles/shape-line": "4.0.0-beta.15", + "@tsparticles/updater-destroy": "4.0.0-beta.15", + "@tsparticles/updater-life": "4.0.0-beta.15", + "@tsparticles/updater-rotate": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/presets/fireworks/package.json b/presets/fireworks/package.json index a7ebcef24c5..b222f39de3a 100644 --- a/presets/fireworks/package.json +++ b/presets/fireworks/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/preset-fireworks", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles fireworks preset", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,6 +106,13 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", @@ -121,5 +128,9 @@ "@tsparticles/updater-life": "workspace:*", "@tsparticles/updater-rotate": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/presets/fireworks/rollup.config.js b/presets/fireworks/rollup.config.js new file mode 100644 index 00000000000..7f064c76116 --- /dev/null +++ b/presets/fireworks/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPreset } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "url"; +import fs from "fs-extra"; +import path from "path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPreset({ + dir: __dirname, + moduleName: "fireworks", + presetName: "Fireworks", + version, +}); diff --git a/presets/fireworks/src/browser.ts b/presets/fireworks/src/browser.ts new file mode 100644 index 00000000000..f37fd69fe9f --- /dev/null +++ b/presets/fireworks/src/browser.ts @@ -0,0 +1,10 @@ +import { loadFireworksPreset } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadFireworksPreset?: typeof loadFireworksPreset; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadFireworksPreset = loadFireworksPreset; + +export * from "./index.js"; diff --git a/presets/fireworks/src/bundle.ts b/presets/fireworks/src/bundle.ts index ed19475dcab..29260913e5c 100644 --- a/presets/fireworks/src/bundle.ts +++ b/presets/fireworks/src/bundle.ts @@ -1,2 +1,12 @@ +import { loadFireworksPreset } from "./index.js"; + export { loadFireworksPreset } from "./index.js"; export { tsParticles } from "@tsparticles/engine"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadFireworksPreset?: typeof loadFireworksPreset; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; + +globalObject.loadFireworksPreset = loadFireworksPreset; diff --git a/presets/fireworks/src/index.lazy.ts b/presets/fireworks/src/index.lazy.ts new file mode 100644 index 00000000000..6508e093b9f --- /dev/null +++ b/presets/fireworks/src/index.lazy.ts @@ -0,0 +1,52 @@ +import type { Engine } from "@tsparticles/engine/lazy"; + +const presetName = "fireworks"; + +/** + * @param engine - + */ +export async function loadFireworksPreset(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const [ + { loadBasic }, + { loadEmittersPluginSimple }, + { loadTrailEffect }, + { loadEmittersShapeSquare }, + { loadSoundsPlugin }, + { loadLineShape }, + { loadRotateUpdater }, + { loadDestroyUpdater }, + { loadLifeUpdater }, + { initOptions }, + ] = await Promise.all([ + import("@tsparticles/basic/lazy"), + import("@tsparticles/plugin-emitters/plugin/lazy"), + import("@tsparticles/effect-trail/lazy"), + import("@tsparticles/plugin-emitters-shape-square/lazy"), + import("@tsparticles/plugin-sounds/lazy"), + import("@tsparticles/shape-line/lazy"), + import("@tsparticles/updater-rotate/lazy"), + import("@tsparticles/updater-destroy/lazy"), + import("@tsparticles/updater-life/lazy"), + import("./options.js"), + ]), + loadEmittersForFireworks = async (e: Engine): Promise => { + await loadEmittersPluginSimple(e); + + await loadEmittersShapeSquare(e); + }; + + await Promise.all([ + loadBasic(e), + loadEmittersForFireworks(e), + loadTrailEffect(e), + loadSoundsPlugin(e), + loadLineShape(e), + loadRotateUpdater(e), + loadDestroyUpdater(e), + loadLifeUpdater(e), + ]); + + e.pluginManager.addPreset(presetName, initOptions(), false); + }); +} diff --git a/presets/fireworks/src/index.ts b/presets/fireworks/src/index.ts index 80a6a1a928a..aa4d2f5e202 100644 --- a/presets/fireworks/src/index.ts +++ b/presets/fireworks/src/index.ts @@ -1,4 +1,14 @@ import type { Engine } from "@tsparticles/engine"; +import { initOptions } from "./options.js"; +import { loadBasic } from "@tsparticles/basic"; +import { loadDestroyUpdater } from "@tsparticles/updater-destroy"; +import { loadEmittersPluginSimple } from "@tsparticles/plugin-emitters/plugin"; +import { loadEmittersShapeSquare } from "@tsparticles/plugin-emitters-shape-square"; +import { loadLifeUpdater } from "@tsparticles/updater-life"; +import { loadLineShape } from "@tsparticles/shape-line"; +import { loadRotateUpdater } from "@tsparticles/updater-rotate"; +import { loadSoundsPlugin } from "@tsparticles/plugin-sounds"; +import { loadTrailEffect } from "@tsparticles/effect-trail"; const presetName = "fireworks"; @@ -7,34 +17,11 @@ const presetName = "fireworks"; */ export async function loadFireworksPreset(engine: Engine): Promise { await engine.pluginManager.register(async e => { - const [ - { loadBasic }, - { loadEmittersPluginSimple }, - { loadTrailEffect }, - { loadEmittersShapeSquare }, - { loadSoundsPlugin }, - { loadLineShape }, - { loadRotateUpdater }, - { loadDestroyUpdater }, - { loadLifeUpdater }, - { initOptions }, - ] = await Promise.all([ - import("@tsparticles/basic"), - import("@tsparticles/plugin-emitters/plugin"), - import("@tsparticles/effect-trail"), - import("@tsparticles/plugin-emitters-shape-square"), - import("@tsparticles/plugin-sounds"), - import("@tsparticles/shape-line"), - import("@tsparticles/updater-rotate"), - import("@tsparticles/updater-destroy"), - import("@tsparticles/updater-life"), - import("./options.js"), - ]), - loadEmittersForFireworks = async (e: Engine): Promise => { - await loadEmittersPluginSimple(e); + const loadEmittersForFireworks = async (e: Engine): Promise => { + await loadEmittersPluginSimple(e); - await loadEmittersShapeSquare(e); - }; + await loadEmittersShapeSquare(e); + }; await Promise.all([ loadBasic(e), diff --git a/presets/fireworks/src/options.ts b/presets/fireworks/src/options.ts index b3906fb3dd7..9971531b630 100644 --- a/presets/fireworks/src/options.ts +++ b/presets/fireworks/src/options.ts @@ -192,10 +192,10 @@ export function initOptions(): ISourceOptions { acceleration: 5, }, speed: { min: 5, max: 15 }, - direction: "none", + direction: MoveDirection.none, outModes: OutMode.destroy, }, - } as RecursivePartial; + }; }) .filter(t => t !== undefined); diff --git a/presets/fireworks/webpack.config.js b/presets/fireworks/webpack.config.js deleted file mode 100644 index d16cfcec185..00000000000 --- a/presets/fireworks/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPreset } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "url"; -import fs from "fs-extra"; -import path from "path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPreset({ - dir: __dirname, - moduleName: "fireworks", - presetName: "Fireworks", - version, -}); diff --git a/presets/fountain/CHANGELOG.md b/presets/fountain/CHANGELOG.md index 0d4317b11f8..68b9c9b0432 100644 --- a/presets/fountain/CHANGELOG.md +++ b/presets/fountain/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/preset-fountain + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/preset-fountain diff --git a/presets/fountain/package.dist.json b/presets/fountain/package.dist.json index 0f2eeb328f1..e2d5b37d329 100644 --- a/presets/fountain/package.dist.json +++ b/presets/fountain/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/preset-fountain", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles fountain preset", "homepage": "https://particles.js.org", "repository": { @@ -96,14 +96,21 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./cjs/index.lazy.js" + }, "./package.json": "./package.json" }, "dependencies": { - "@tsparticles/basic": "4.0.0-beta.12", - "@tsparticles/engine": "4.0.0-beta.12", - "@tsparticles/plugin-emitters": "4.0.0-beta.12", - "@tsparticles/plugin-trail": "4.0.0-beta.12", - "@tsparticles/updater-destroy": "4.0.0-beta.12" + "@tsparticles/basic": "4.0.0-beta.15", + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/plugin-emitters": "4.0.0-beta.15", + "@tsparticles/plugin-trail": "4.0.0-beta.15", + "@tsparticles/updater-destroy": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/presets/fountain/package.json b/presets/fountain/package.json index 562873c03ae..a80ae081f69 100644 --- a/presets/fountain/package.json +++ b/presets/fountain/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/preset-fountain", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles fountain preset", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,6 +106,13 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", @@ -116,5 +123,9 @@ "@tsparticles/plugin-trail": "workspace:*", "@tsparticles/updater-destroy": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/presets/fountain/rollup.config.js b/presets/fountain/rollup.config.js new file mode 100644 index 00000000000..9b5a4945090 --- /dev/null +++ b/presets/fountain/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPreset } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "url"; +import fs from "fs-extra"; +import path from "path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPreset({ + dir: __dirname, + moduleName: "fountain", + presetName: "Fountain", + version, +}); diff --git a/presets/fountain/src/browser.ts b/presets/fountain/src/browser.ts new file mode 100644 index 00000000000..89e8167756f --- /dev/null +++ b/presets/fountain/src/browser.ts @@ -0,0 +1,10 @@ +import { loadFountainPreset } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadFountainPreset?: typeof loadFountainPreset; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadFountainPreset = loadFountainPreset; + +export * from "./index.js"; diff --git a/presets/fountain/src/bundle.ts b/presets/fountain/src/bundle.ts index 85791a0e4d8..fdfbe778380 100644 --- a/presets/fountain/src/bundle.ts +++ b/presets/fountain/src/bundle.ts @@ -1,2 +1,12 @@ +import { loadFountainPreset } from "./index.js"; + export { loadFountainPreset } from "./index.js"; export { tsParticles } from "@tsparticles/engine"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadFountainPreset?: typeof loadFountainPreset; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; + +globalObject.loadFountainPreset = loadFountainPreset; diff --git a/presets/fountain/src/index.lazy.ts b/presets/fountain/src/index.lazy.ts new file mode 100644 index 00000000000..ecd19f9ff1b --- /dev/null +++ b/presets/fountain/src/index.lazy.ts @@ -0,0 +1,33 @@ +import type { Engine } from "@tsparticles/engine/lazy"; + +const presetName = "fountain"; + +/** + * @param engine - + */ +export async function loadFountainPreset(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const [ + { loadBasic }, + { loadDestroyUpdater }, + { loadEmittersPluginSimple }, + { loadTrailPlugin }, + { options }, + ] = await Promise.all([ + import("@tsparticles/basic/lazy"), + import("@tsparticles/updater-destroy/lazy"), + import("@tsparticles/plugin-emitters/plugin/lazy"), + import("@tsparticles/plugin-trail/lazy"), + import("./options.js"), + ]); + + await Promise.all([ + loadBasic(e), + loadDestroyUpdater(e), + loadEmittersPluginSimple(e), + loadTrailPlugin(e), + ]); + + e.pluginManager.addPreset(presetName, options); + }); +} diff --git a/presets/fountain/src/index.ts b/presets/fountain/src/index.ts index 04f342c9abb..e2b57f6cd22 100644 --- a/presets/fountain/src/index.ts +++ b/presets/fountain/src/index.ts @@ -1,4 +1,9 @@ import type { Engine } from "@tsparticles/engine"; +import { loadBasic } from "@tsparticles/basic"; +import { loadDestroyUpdater } from "@tsparticles/updater-destroy"; +import { loadEmittersPluginSimple } from "@tsparticles/plugin-emitters/plugin"; +import { loadTrailPlugin } from "@tsparticles/plugin-trail"; +import { options } from "./options.js"; const presetName = "fountain"; @@ -7,20 +12,6 @@ const presetName = "fountain"; */ export async function loadFountainPreset(engine: Engine): Promise { await engine.pluginManager.register(async e => { - const [ - { loadBasic }, - { loadDestroyUpdater }, - { loadEmittersPluginSimple }, - { loadTrailPlugin }, - { options }, - ] = await Promise.all([ - import("@tsparticles/basic"), - import("@tsparticles/updater-destroy"), - import("@tsparticles/plugin-emitters/plugin"), - import("@tsparticles/plugin-trail"), - import("./options.js"), - ]); - await Promise.all([ loadBasic(e), loadDestroyUpdater(e), diff --git a/presets/fountain/webpack.config.js b/presets/fountain/webpack.config.js deleted file mode 100644 index 97775b76772..00000000000 --- a/presets/fountain/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPreset } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "url"; -import fs from "fs-extra"; -import path from "path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPreset({ - dir: __dirname, - moduleName: "fountain", - presetName: "Fountain", - version, -}); diff --git a/presets/hyperspace/CHANGELOG.md b/presets/hyperspace/CHANGELOG.md index d7f0246f704..4244ae7213a 100644 --- a/presets/hyperspace/CHANGELOG.md +++ b/presets/hyperspace/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/preset-hyperspace + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/preset-hyperspace diff --git a/presets/hyperspace/package.dist.json b/presets/hyperspace/package.dist.json index 5cb7c1fca48..50def323213 100644 --- a/presets/hyperspace/package.dist.json +++ b/presets/hyperspace/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/preset-hyperspace", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles hyperspace preset", "homepage": "https://particles.js.org", "repository": { @@ -96,15 +96,22 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./cjs/index.lazy.js" + }, "./package.json": "./package.json" }, "dependencies": { - "@tsparticles/basic": "4.0.0-beta.12", - "@tsparticles/engine": "4.0.0-beta.12", - "@tsparticles/plugin-emitters": "4.0.0-beta.12", - "@tsparticles/plugin-emitters-shape-square": "4.0.0-beta.12", - "@tsparticles/plugin-trail": "4.0.0-beta.12", - "@tsparticles/updater-life": "4.0.0-beta.12" + "@tsparticles/basic": "4.0.0-beta.15", + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/plugin-emitters": "4.0.0-beta.15", + "@tsparticles/plugin-emitters-shape-square": "4.0.0-beta.15", + "@tsparticles/plugin-trail": "4.0.0-beta.15", + "@tsparticles/updater-life": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/presets/hyperspace/package.json b/presets/hyperspace/package.json index cd8d133be8f..2c8fc303ad3 100644 --- a/presets/hyperspace/package.json +++ b/presets/hyperspace/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/preset-hyperspace", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles hyperspace preset", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,6 +106,13 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", @@ -117,5 +124,9 @@ "@tsparticles/plugin-trail": "workspace:*", "@tsparticles/updater-life": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/presets/hyperspace/rollup.config.js b/presets/hyperspace/rollup.config.js new file mode 100644 index 00000000000..10d52796cc9 --- /dev/null +++ b/presets/hyperspace/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPreset } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "url"; +import fs from "fs-extra"; +import path from "path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPreset({ + dir: __dirname, + moduleName: "hyperspace", + presetName: "Hyperspace", + version, +}); diff --git a/presets/hyperspace/src/browser.ts b/presets/hyperspace/src/browser.ts new file mode 100644 index 00000000000..5f43fac1eca --- /dev/null +++ b/presets/hyperspace/src/browser.ts @@ -0,0 +1,10 @@ +import { loadHyperspacePreset } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadHyperspacePreset?: typeof loadHyperspacePreset; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadHyperspacePreset = loadHyperspacePreset; + +export * from "./index.js"; diff --git a/presets/hyperspace/src/bundle.ts b/presets/hyperspace/src/bundle.ts index 9d61e8aef10..db644c4f7e0 100644 --- a/presets/hyperspace/src/bundle.ts +++ b/presets/hyperspace/src/bundle.ts @@ -1,2 +1,12 @@ +import { loadHyperspacePreset } from "./index.js"; + export { loadHyperspacePreset } from "./index.js"; export { tsParticles } from "@tsparticles/engine"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadHyperspacePreset?: typeof loadHyperspacePreset; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; + +globalObject.loadHyperspacePreset = loadHyperspacePreset; diff --git a/presets/hyperspace/src/index.lazy.ts b/presets/hyperspace/src/index.lazy.ts new file mode 100644 index 00000000000..c2192a816fc --- /dev/null +++ b/presets/hyperspace/src/index.lazy.ts @@ -0,0 +1,39 @@ +import type { Engine } from "@tsparticles/engine/lazy"; + +const presetName = "hyperspace"; + +/** + * @param engine - + */ +export async function loadHyperspacePreset(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const [ + { loadBasic }, + { loadEmittersPluginSimple }, + { loadEmittersShapeSquare }, + { loadTrailPlugin }, + { loadLifeUpdater }, + { options }, + ] = await Promise.all([ + import("@tsparticles/basic/lazy"), + import("@tsparticles/plugin-emitters/plugin/lazy"), + import("@tsparticles/plugin-emitters-shape-square/lazy"), + import("@tsparticles/plugin-trail/lazy"), + import("@tsparticles/updater-life/lazy"), + import("./options.js"), + ]); + + await Promise.all([ + loadBasic(e), + (async (): Promise => { + await loadEmittersPluginSimple(e); + + await loadEmittersShapeSquare(e); + })(), + loadTrailPlugin(e), + loadLifeUpdater(e), + ]); + + e.pluginManager.addPreset(presetName, options); + }); +} diff --git a/presets/hyperspace/src/index.ts b/presets/hyperspace/src/index.ts index e4f75ac0d42..ba625143991 100644 --- a/presets/hyperspace/src/index.ts +++ b/presets/hyperspace/src/index.ts @@ -1,4 +1,10 @@ import type { Engine } from "@tsparticles/engine"; +import { loadBasic } from "@tsparticles/basic"; +import { loadEmittersPluginSimple } from "@tsparticles/plugin-emitters/plugin"; +import { loadEmittersShapeSquare } from "@tsparticles/plugin-emitters-shape-square"; +import { loadLifeUpdater } from "@tsparticles/updater-life"; +import { loadTrailPlugin } from "@tsparticles/plugin-trail"; +import { options } from "./options.js"; const presetName = "hyperspace"; @@ -7,22 +13,6 @@ const presetName = "hyperspace"; */ export async function loadHyperspacePreset(engine: Engine): Promise { await engine.pluginManager.register(async e => { - const [ - { loadBasic }, - { loadEmittersPluginSimple }, - { loadEmittersShapeSquare }, - { loadTrailPlugin }, - { loadLifeUpdater }, - { options }, - ] = await Promise.all([ - import("@tsparticles/basic"), - import("@tsparticles/plugin-emitters/plugin"), - import("@tsparticles/plugin-emitters-shape-square"), - import("@tsparticles/plugin-trail"), - import("@tsparticles/updater-life"), - import("./options.js"), - ]); - await Promise.all([ loadBasic(e), (async (): Promise => { diff --git a/presets/hyperspace/webpack.config.js b/presets/hyperspace/webpack.config.js deleted file mode 100644 index 16fd1408620..00000000000 --- a/presets/hyperspace/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPreset } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "url"; -import fs from "fs-extra"; -import path from "path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPreset({ - dir: __dirname, - moduleName: "hyperspace", - presetName: "Hyperspace", - version, -}); diff --git a/presets/links/CHANGELOG.md b/presets/links/CHANGELOG.md index 35604e1f66b..ba58680533d 100644 --- a/presets/links/CHANGELOG.md +++ b/presets/links/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/preset-links + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/preset-links diff --git a/presets/links/package.dist.json b/presets/links/package.dist.json index f73067c9d70..1ca05862715 100644 --- a/presets/links/package.dist.json +++ b/presets/links/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/preset-links", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles links preset", "homepage": "https://particles.js.org", "repository": { @@ -96,13 +96,20 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./cjs/index.lazy.js" + }, "./package.json": "./package.json" }, "dependencies": { - "@tsparticles/basic": "4.0.0-beta.12", - "@tsparticles/engine": "4.0.0-beta.12", - "@tsparticles/interaction-particles-links": "4.0.0-beta.12", - "@tsparticles/plugin-interactivity": "4.0.0-beta.12" + "@tsparticles/basic": "4.0.0-beta.15", + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/interaction-particles-links": "4.0.0-beta.15", + "@tsparticles/plugin-interactivity": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/presets/links/package.json b/presets/links/package.json index 43cb3cbe742..0dc532ae777 100644 --- a/presets/links/package.json +++ b/presets/links/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/preset-links", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles links preset", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,6 +106,13 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", @@ -115,5 +122,9 @@ "@tsparticles/interaction-particles-links": "workspace:*", "@tsparticles/plugin-interactivity": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/presets/links/rollup.config.js b/presets/links/rollup.config.js new file mode 100644 index 00000000000..90ca7cfe8e6 --- /dev/null +++ b/presets/links/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPreset } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "url"; +import fs from "fs-extra"; +import path from "path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPreset({ + dir: __dirname, + moduleName: "links", + presetName: "Links", + version, +}); diff --git a/presets/links/src/browser.ts b/presets/links/src/browser.ts new file mode 100644 index 00000000000..d0ae62253a8 --- /dev/null +++ b/presets/links/src/browser.ts @@ -0,0 +1,10 @@ +import { loadLinksPreset } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadLinksPreset?: typeof loadLinksPreset; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadLinksPreset = loadLinksPreset; + +export * from "./index.js"; diff --git a/presets/links/src/bundle.ts b/presets/links/src/bundle.ts index bf96092ee96..3b0cd576e1f 100644 --- a/presets/links/src/bundle.ts +++ b/presets/links/src/bundle.ts @@ -1,2 +1,12 @@ +import { loadLinksPreset } from "./index.js"; + export { loadLinksPreset } from "./index.js"; export { tsParticles } from "@tsparticles/engine"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadLinksPreset?: typeof loadLinksPreset; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; + +globalObject.loadLinksPreset = loadLinksPreset; diff --git a/presets/links/src/index.lazy.ts b/presets/links/src/index.lazy.ts new file mode 100644 index 00000000000..c2b2cd806bf --- /dev/null +++ b/presets/links/src/index.lazy.ts @@ -0,0 +1,29 @@ +import type { Engine } from "@tsparticles/engine/lazy"; + +const presetName = "links"; + +/** + * @param engine - + */ +export async function loadLinksPreset(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const [{ loadBasic }, { loadParticlesLinksInteraction }, { loadInteractivityPlugin }, { options }] = + await Promise.all([ + import("@tsparticles/basic/lazy"), + import("@tsparticles/interaction-particles-links/lazy"), + import("@tsparticles/plugin-interactivity/lazy"), + import("./options.js"), + ]); + + await Promise.all([ + loadBasic(e), + (async (): Promise => { + await loadInteractivityPlugin(e); + + await loadParticlesLinksInteraction(e); + })(), + ]); + + e.pluginManager.addPreset(presetName, options); + }); +} diff --git a/presets/links/src/index.ts b/presets/links/src/index.ts index 3f128b0f2ff..8ed209b514e 100644 --- a/presets/links/src/index.ts +++ b/presets/links/src/index.ts @@ -1,4 +1,8 @@ import type { Engine } from "@tsparticles/engine"; +import { loadBasic } from "@tsparticles/basic"; +import { loadInteractivityPlugin } from "@tsparticles/plugin-interactivity"; +import { loadParticlesLinksInteraction } from "@tsparticles/interaction-particles-links"; +import { options } from "./options.js"; const presetName = "links"; @@ -7,14 +11,6 @@ const presetName = "links"; */ export async function loadLinksPreset(engine: Engine): Promise { await engine.pluginManager.register(async e => { - const [{ loadBasic }, { loadParticlesLinksInteraction }, { loadInteractivityPlugin }, { options }] = - await Promise.all([ - import("@tsparticles/basic"), - import("@tsparticles/interaction-particles-links"), - import("@tsparticles/plugin-interactivity"), - import("./options.js"), - ]); - await Promise.all([ loadBasic(e), (async (): Promise => { diff --git a/presets/links/webpack.config.js b/presets/links/webpack.config.js deleted file mode 100644 index 930b67ec201..00000000000 --- a/presets/links/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPreset } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "url"; -import fs from "fs-extra"; -import path from "path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPreset({ - dir: __dirname, - moduleName: "links", - presetName: "Links", - version, -}); diff --git a/presets/matrix/CHANGELOG.md b/presets/matrix/CHANGELOG.md index ea446732c2e..6c4b7d2b1e0 100644 --- a/presets/matrix/CHANGELOG.md +++ b/presets/matrix/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/preset-matrix + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/preset-matrix diff --git a/presets/matrix/package.dist.json b/presets/matrix/package.dist.json index 4ebdc5c79ff..74fda57bc72 100644 --- a/presets/matrix/package.dist.json +++ b/presets/matrix/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/preset-matrix", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles matrix preset", "homepage": "https://particles.js.org", "repository": { @@ -96,15 +96,22 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./cjs/index.lazy.js" + }, "./package.json": "./package.json" }, "dependencies": { - "@tsparticles/basic": "4.0.0-beta.12", - "@tsparticles/effect-shadow": "4.0.0-beta.12", - "@tsparticles/engine": "4.0.0-beta.12", - "@tsparticles/plugin-poisson-disc": "4.0.0-beta.12", - "@tsparticles/plugin-trail": "4.0.0-beta.12", - "@tsparticles/shape-matrix": "4.0.0-beta.12" + "@tsparticles/basic": "4.0.0-beta.15", + "@tsparticles/effect-shadow": "4.0.0-beta.15", + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/plugin-poisson-disc": "4.0.0-beta.15", + "@tsparticles/plugin-trail": "4.0.0-beta.15", + "@tsparticles/shape-matrix": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/presets/matrix/package.json b/presets/matrix/package.json index 64519239010..8cdb7582f1c 100644 --- a/presets/matrix/package.json +++ b/presets/matrix/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/preset-matrix", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles matrix preset", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,6 +106,13 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", @@ -117,5 +124,9 @@ "@tsparticles/plugin-trail": "workspace:*", "@tsparticles/shape-matrix": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/presets/matrix/rollup.config.js b/presets/matrix/rollup.config.js new file mode 100644 index 00000000000..0d7a3af196f --- /dev/null +++ b/presets/matrix/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesPreset } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "url"; +import fs from "fs-extra"; +import path from "path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPreset({ + dir: __dirname, + moduleName: "matrix", + presetName: "Matrix", + version, +}); + diff --git a/presets/matrix/src/browser.ts b/presets/matrix/src/browser.ts new file mode 100644 index 00000000000..5270204e582 --- /dev/null +++ b/presets/matrix/src/browser.ts @@ -0,0 +1,10 @@ +import { loadMatrixPreset } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadMatrixPreset?: typeof loadMatrixPreset; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadMatrixPreset = loadMatrixPreset; + +export * from "./index.js"; diff --git a/presets/matrix/src/bundle.ts b/presets/matrix/src/bundle.ts index a93f445b5b3..9263c84ce5d 100644 --- a/presets/matrix/src/bundle.ts +++ b/presets/matrix/src/bundle.ts @@ -1,2 +1,12 @@ +import { loadMatrixPreset } from "./index.js"; + export { loadMatrixPreset } from "./index.js"; export { tsParticles } from "@tsparticles/engine"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadMatrixPreset?: typeof loadMatrixPreset; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; + +globalObject.loadMatrixPreset = loadMatrixPreset; diff --git a/presets/matrix/src/index.lazy.ts b/presets/matrix/src/index.lazy.ts new file mode 100644 index 00000000000..af1c1a40bf2 --- /dev/null +++ b/presets/matrix/src/index.lazy.ts @@ -0,0 +1,36 @@ +import type { Engine } from "@tsparticles/engine/lazy"; + +const presetName = "matrix"; + +/** + * @param engine - + */ +export async function loadMatrixPreset(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const [ + { loadBasic }, + { loadShadowEffect }, + { loadPoissonDiscPlugin }, + { loadTrailPlugin }, + { loadMatrixShape }, + { options }, + ] = await Promise.all([ + import("@tsparticles/basic/lazy"), + import("@tsparticles/effect-shadow/lazy"), + import("@tsparticles/plugin-poisson-disc/lazy"), + import("@tsparticles/plugin-trail/lazy"), + import("@tsparticles/shape-matrix/lazy"), + import("./options.js"), + ]); + + await Promise.all([ + loadBasic(e), + loadShadowEffect(e), + loadTrailPlugin(e), + loadPoissonDiscPlugin(e), + loadMatrixShape(e), + ]); + + e.pluginManager.addPreset(presetName, options); + }); +} diff --git a/presets/matrix/src/index.ts b/presets/matrix/src/index.ts index a892c07e6ff..747612453d0 100644 --- a/presets/matrix/src/index.ts +++ b/presets/matrix/src/index.ts @@ -1,4 +1,10 @@ import type { Engine } from "@tsparticles/engine"; +import { loadBasic } from "@tsparticles/basic"; +import { loadMatrixShape } from "@tsparticles/shape-matrix"; +import { loadPoissonDiscPlugin } from "@tsparticles/plugin-poisson-disc"; +import { loadShadowEffect } from "@tsparticles/effect-shadow"; +import { loadTrailPlugin } from "@tsparticles/plugin-trail"; +import { options } from "./options.js"; const presetName = "matrix"; @@ -7,22 +13,6 @@ const presetName = "matrix"; */ export async function loadMatrixPreset(engine: Engine): Promise { await engine.pluginManager.register(async e => { - const [ - { loadBasic }, - { loadShadowEffect }, - { loadPoissonDiscPlugin }, - { loadTrailPlugin }, - { loadMatrixShape }, - { options }, - ] = await Promise.all([ - import("@tsparticles/basic"), - import("@tsparticles/effect-shadow"), - import("@tsparticles/plugin-poisson-disc"), - import("@tsparticles/plugin-trail"), - import("@tsparticles/shape-matrix"), - import("./options.js"), - ]); - await Promise.all([ loadBasic(e), loadShadowEffect(e), diff --git a/presets/matrix/webpack.config.js b/presets/matrix/webpack.config.js deleted file mode 100644 index c2b16ce579c..00000000000 --- a/presets/matrix/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesPreset } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "url"; -import fs from "fs-extra"; -import path from "path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPreset({ - dir: __dirname, - moduleName: "matrix", - presetName: "Matrix", - version, -}); - diff --git a/presets/seaAnemone/CHANGELOG.md b/presets/seaAnemone/CHANGELOG.md index b6a7c174ec0..d8bcf1ffcbc 100644 --- a/presets/seaAnemone/CHANGELOG.md +++ b/presets/seaAnemone/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/preset-sea-anemone + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/preset-sea-anemone diff --git a/presets/seaAnemone/package.dist.json b/presets/seaAnemone/package.dist.json index c5b3f1a0dc7..f83de19b66a 100644 --- a/presets/seaAnemone/package.dist.json +++ b/presets/seaAnemone/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/preset-sea-anemone", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles sea anemone preset", "homepage": "https://particles.js.org", "repository": { @@ -96,15 +96,22 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./cjs/index.lazy.js" + }, "./package.json": "./package.json" }, "dependencies": { - "@tsparticles/basic": "4.0.0-beta.12", - "@tsparticles/engine": "4.0.0-beta.12", - "@tsparticles/path-curves": "4.0.0-beta.12", - "@tsparticles/plugin-emitters": "4.0.0-beta.12", - "@tsparticles/plugin-interactivity": "4.0.0-beta.12", - "@tsparticles/plugin-trail": "4.0.0-beta.12" + "@tsparticles/basic": "4.0.0-beta.15", + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/path-curves": "4.0.0-beta.15", + "@tsparticles/plugin-emitters": "4.0.0-beta.15", + "@tsparticles/plugin-interactivity": "4.0.0-beta.15", + "@tsparticles/plugin-trail": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/presets/seaAnemone/package.json b/presets/seaAnemone/package.json index e74163b884f..54c1271f027 100644 --- a/presets/seaAnemone/package.json +++ b/presets/seaAnemone/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/preset-sea-anemone", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles sea anemone preset", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,6 +106,13 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", @@ -117,5 +124,9 @@ "@tsparticles/plugin-interactivity": "workspace:*", "@tsparticles/plugin-trail": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/presets/seaAnemone/rollup.config.js b/presets/seaAnemone/rollup.config.js new file mode 100644 index 00000000000..375063d63da --- /dev/null +++ b/presets/seaAnemone/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPreset } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "url"; +import fs from "fs-extra"; +import path from "path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPreset({ + dir: __dirname, + moduleName: "seaAnemone", + presetName: "Sea Anemone", + version, +}); diff --git a/presets/seaAnemone/src/browser.ts b/presets/seaAnemone/src/browser.ts new file mode 100644 index 00000000000..f4e3b19778a --- /dev/null +++ b/presets/seaAnemone/src/browser.ts @@ -0,0 +1,10 @@ +import { loadSeaAnemonePreset } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadSeaAnemonePreset?: typeof loadSeaAnemonePreset; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadSeaAnemonePreset = loadSeaAnemonePreset; + +export * from "./index.js"; diff --git a/presets/seaAnemone/src/bundle.ts b/presets/seaAnemone/src/bundle.ts index 971c9c2690b..7a347f119fe 100644 --- a/presets/seaAnemone/src/bundle.ts +++ b/presets/seaAnemone/src/bundle.ts @@ -1,2 +1,12 @@ +import { loadSeaAnemonePreset } from "./index.js"; + export { loadSeaAnemonePreset } from "./index.js"; export { tsParticles } from "@tsparticles/engine"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadSeaAnemonePreset?: typeof loadSeaAnemonePreset; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; + +globalObject.loadSeaAnemonePreset = loadSeaAnemonePreset; diff --git a/presets/seaAnemone/src/index.lazy.ts b/presets/seaAnemone/src/index.lazy.ts new file mode 100644 index 00000000000..f3987a0765d --- /dev/null +++ b/presets/seaAnemone/src/index.lazy.ts @@ -0,0 +1,36 @@ +import type { Engine } from "@tsparticles/engine/lazy"; + +const presetName = "seaAnemone"; + +/** + * @param engine - + */ +export async function loadSeaAnemonePreset(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const [ + { loadBasic }, + { loadEmittersPluginSimple }, + { loadTrailPlugin }, + { loadCurvesPath }, + { options }, + ] = await Promise.all([ + import("@tsparticles/basic/lazy"), + import("@tsparticles/plugin-emitters/plugin/lazy"), + import("@tsparticles/plugin-trail/lazy"), + import("@tsparticles/path-curves/lazy"), + import("./options.js"), + ]); + + await Promise.all([ + (async (): Promise => { + await loadBasic(e); + + await loadCurvesPath(e); + })(), + loadEmittersPluginSimple(e), + loadTrailPlugin(e), + ]); + + e.pluginManager.addPreset(presetName, options); + }); +} diff --git a/presets/seaAnemone/src/index.ts b/presets/seaAnemone/src/index.ts index f1c1c988548..e024dd58a84 100644 --- a/presets/seaAnemone/src/index.ts +++ b/presets/seaAnemone/src/index.ts @@ -1,4 +1,9 @@ import type { Engine } from "@tsparticles/engine"; +import { loadBasic } from "@tsparticles/basic"; +import { loadCurvesPath } from "@tsparticles/path-curves"; +import { loadEmittersPluginSimple } from "@tsparticles/plugin-emitters/plugin"; +import { loadTrailPlugin } from "@tsparticles/plugin-trail"; +import { options } from "./options.js"; const presetName = "seaAnemone"; @@ -7,20 +12,6 @@ const presetName = "seaAnemone"; */ export async function loadSeaAnemonePreset(engine: Engine): Promise { await engine.pluginManager.register(async e => { - const [ - { loadBasic }, - { loadEmittersPluginSimple }, - { loadTrailPlugin }, - { loadCurvesPath }, - { options }, - ] = await Promise.all([ - import("@tsparticles/basic"), - import("@tsparticles/plugin-emitters/plugin"), - import("@tsparticles/plugin-trail"), - import("@tsparticles/path-curves"), - import("./options.js"), - ]); - await Promise.all([ (async (): Promise => { await loadBasic(e); diff --git a/presets/seaAnemone/src/options.ts b/presets/seaAnemone/src/options.ts index 6d6164da929..2de819f4235 100644 --- a/presets/seaAnemone/src/options.ts +++ b/presets/seaAnemone/src/options.ts @@ -4,8 +4,10 @@ import { curvesPathName } from "@tsparticles/path-curves"; export const options: ISourceOptions = { fpsLimit: 120, particles: { - color: { - value: "#FF0000", + paint: { + color: { + value: "#FF0000", + }, }, move: { direction: "none", diff --git a/presets/seaAnemone/webpack.config.js b/presets/seaAnemone/webpack.config.js deleted file mode 100644 index 25defc033d7..00000000000 --- a/presets/seaAnemone/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPreset } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "url"; -import fs from "fs-extra"; -import path from "path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPreset({ - dir: __dirname, - moduleName: "seaAnemone", - presetName: "Sea Anemone", - version, -}); diff --git a/presets/snow/CHANGELOG.md b/presets/snow/CHANGELOG.md index 2aa72ba9efc..09a706fd07f 100644 --- a/presets/snow/CHANGELOG.md +++ b/presets/snow/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/preset-snow + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/preset-snow diff --git a/presets/snow/package.dist.json b/presets/snow/package.dist.json index 80908e0bbbb..9c57b47182d 100644 --- a/presets/snow/package.dist.json +++ b/presets/snow/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/preset-snow", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles snow preset", "homepage": "https://particles.js.org", "repository": { @@ -96,13 +96,20 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./cjs/index.lazy.js" + }, "./package.json": "./package.json" }, "dependencies": { - "@tsparticles/basic": "4.0.0-beta.12", - "@tsparticles/engine": "4.0.0-beta.12", - "@tsparticles/palette-snowfall": "4.0.0-beta.12", - "@tsparticles/updater-wobble": "4.0.0-beta.12" + "@tsparticles/basic": "4.0.0-beta.15", + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/palette-snowfall": "4.0.0-beta.15", + "@tsparticles/updater-wobble": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/presets/snow/package.json b/presets/snow/package.json index 34d47404728..0404d98f5ec 100644 --- a/presets/snow/package.json +++ b/presets/snow/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/preset-snow", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles snow preset", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,6 +106,13 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", @@ -115,5 +122,9 @@ "@tsparticles/palette-snowfall": "workspace:*", "@tsparticles/updater-wobble": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/presets/snow/rollup.config.js b/presets/snow/rollup.config.js new file mode 100644 index 00000000000..21fd2be6f97 --- /dev/null +++ b/presets/snow/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPreset } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "url"; +import fs from "fs-extra"; +import path from "path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPreset({ + dir: __dirname, + moduleName: "snow", + presetName: "Snow", + version, +}); diff --git a/presets/snow/src/browser.ts b/presets/snow/src/browser.ts new file mode 100644 index 00000000000..0073a20b4b4 --- /dev/null +++ b/presets/snow/src/browser.ts @@ -0,0 +1,10 @@ +import { loadSnowPreset } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadSnowPreset?: typeof loadSnowPreset; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadSnowPreset = loadSnowPreset; + +export * from "./index.js"; diff --git a/presets/snow/src/bundle.ts b/presets/snow/src/bundle.ts index 80b36ff1ff2..a4b7084f50d 100644 --- a/presets/snow/src/bundle.ts +++ b/presets/snow/src/bundle.ts @@ -1,2 +1,12 @@ +import { loadSnowPreset } from "./index.js"; + export { loadSnowPreset } from "./index.js"; export { tsParticles } from "@tsparticles/engine"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadSnowPreset?: typeof loadSnowPreset; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; + +globalObject.loadSnowPreset = loadSnowPreset; diff --git a/presets/snow/src/index.lazy.ts b/presets/snow/src/index.lazy.ts new file mode 100644 index 00000000000..39daf3008c5 --- /dev/null +++ b/presets/snow/src/index.lazy.ts @@ -0,0 +1,21 @@ +import type { Engine } from "@tsparticles/engine/lazy"; + +const presetName = "snow"; + +/** + * @param engine - + */ +export async function loadSnowPreset(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const [{ loadBasic }, { loadWobbleUpdater }, { loadSnowfallPalette }, { options }] = await Promise.all([ + import("@tsparticles/basic/lazy"), + import("@tsparticles/updater-wobble/lazy"), + import("@tsparticles/palette-snowfall/lazy"), + import("./options.js"), + ]); + + await Promise.all([loadBasic(e), loadWobbleUpdater(e), loadSnowfallPalette(e)]); + + e.pluginManager.addPreset(presetName, options); + }); +} diff --git a/presets/snow/src/index.ts b/presets/snow/src/index.ts index 5e35b3d6364..0e0dfb0ed7c 100644 --- a/presets/snow/src/index.ts +++ b/presets/snow/src/index.ts @@ -1,4 +1,8 @@ import type { Engine } from "@tsparticles/engine"; +import { loadBasic } from "@tsparticles/basic"; +import { loadSnowfallPalette } from "@tsparticles/palette-snowfall"; +import { loadWobbleUpdater } from "@tsparticles/updater-wobble"; +import { options } from "./options.js"; const presetName = "snow"; @@ -7,13 +11,6 @@ const presetName = "snow"; */ export async function loadSnowPreset(engine: Engine): Promise { await engine.pluginManager.register(async e => { - const [{ loadBasic }, { loadWobbleUpdater }, { loadSnowfallPalette }, { options }] = await Promise.all([ - import("@tsparticles/basic"), - import("@tsparticles/updater-wobble"), - import("@tsparticles/palette-snowfall"), - import("./options.js"), - ]); - await Promise.all([loadBasic(e), loadWobbleUpdater(e), loadSnowfallPalette(e)]); e.pluginManager.addPreset(presetName, options); diff --git a/presets/snow/webpack.config.js b/presets/snow/webpack.config.js deleted file mode 100644 index 1f4a48ad6b8..00000000000 --- a/presets/snow/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPreset } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "url"; -import fs from "fs-extra"; -import path from "path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPreset({ - dir: __dirname, - moduleName: "snow", - presetName: "Snow", - version, -}); diff --git a/presets/squares/CHANGELOG.md b/presets/squares/CHANGELOG.md index c74defc27bb..fe7f257f029 100644 --- a/presets/squares/CHANGELOG.md +++ b/presets/squares/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/preset-squares + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/preset-squares diff --git a/presets/squares/package.dist.json b/presets/squares/package.dist.json index e858aff016b..90679773181 100644 --- a/presets/squares/package.dist.json +++ b/presets/squares/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/preset-squares", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles squares preset", "homepage": "https://particles.js.org", "repository": { @@ -96,16 +96,23 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./cjs/index.lazy.js" + }, "./package.json": "./package.json" }, "dependencies": { - "@tsparticles/engine": "4.0.0-beta.12", - "@tsparticles/plugin-emitters": "4.0.0-beta.12", - "@tsparticles/plugin-hex-color": "4.0.0-beta.12", - "@tsparticles/shape-square": "4.0.0-beta.12", - "@tsparticles/updater-paint": "4.0.0-beta.12", - "@tsparticles/updater-rotate": "4.0.0-beta.12", - "@tsparticles/updater-size": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/plugin-emitters": "4.0.0-beta.15", + "@tsparticles/plugin-hex-color": "4.0.0-beta.15", + "@tsparticles/shape-square": "4.0.0-beta.15", + "@tsparticles/updater-paint": "4.0.0-beta.15", + "@tsparticles/updater-rotate": "4.0.0-beta.15", + "@tsparticles/updater-size": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/presets/squares/package.json b/presets/squares/package.json index 912ba77090c..ad9457776e9 100644 --- a/presets/squares/package.json +++ b/presets/squares/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/preset-squares", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles squares preset", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,6 +106,13 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", @@ -118,5 +125,9 @@ "@tsparticles/updater-rotate": "workspace:*", "@tsparticles/updater-size": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/presets/squares/rollup.config.js b/presets/squares/rollup.config.js new file mode 100644 index 00000000000..3e9fa8b8937 --- /dev/null +++ b/presets/squares/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPreset } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "url"; +import fs from "fs-extra"; +import path from "path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPreset({ + dir: __dirname, + moduleName: "squares", + templateName: "Squares", + version, +}); diff --git a/presets/squares/src/browser.ts b/presets/squares/src/browser.ts new file mode 100644 index 00000000000..847be965e6e --- /dev/null +++ b/presets/squares/src/browser.ts @@ -0,0 +1,10 @@ +import { loadSquaresPreset } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadSquaresPreset?: typeof loadSquaresPreset; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadSquaresPreset = loadSquaresPreset; + +export * from "./index.js"; diff --git a/presets/squares/src/bundle.ts b/presets/squares/src/bundle.ts index afbda20b6b2..8299931998e 100644 --- a/presets/squares/src/bundle.ts +++ b/presets/squares/src/bundle.ts @@ -1,2 +1,12 @@ +import { loadSquaresPreset } from "./index.js"; + export { loadSquaresPreset } from "./index.js"; export { tsParticles } from "@tsparticles/engine"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadSquaresPreset?: typeof loadSquaresPreset; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; + +globalObject.loadSquaresPreset = loadSquaresPreset; diff --git a/presets/squares/src/index.lazy.ts b/presets/squares/src/index.lazy.ts new file mode 100644 index 00000000000..8306b390823 --- /dev/null +++ b/presets/squares/src/index.lazy.ts @@ -0,0 +1,39 @@ +import type { Engine } from "@tsparticles/engine/lazy"; + +const presetName = "squares"; + +/** + * @param engine - the engine instance to load the preset into + */ +export async function loadSquaresPreset(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const [ + { loadHexColorPlugin }, + { loadEmittersPluginSimple }, + { loadSquareShape }, + { loadRotateUpdater }, + { loadSizeUpdater }, + { loadPaintUpdater }, + { options }, + ] = await Promise.all([ + import("@tsparticles/plugin-hex-color/lazy"), + import("@tsparticles/plugin-emitters/plugin/lazy"), + import("@tsparticles/shape-square/lazy"), + import("@tsparticles/updater-rotate/lazy"), + import("@tsparticles/updater-size/lazy"), + import("@tsparticles/updater-paint/lazy"), + import("./options.js"), + ]); + + await Promise.all([ + loadHexColorPlugin(e), + loadEmittersPluginSimple(e), + loadSquareShape(e), + loadRotateUpdater(e), + loadSizeUpdater(e), + loadPaintUpdater(e), + ]); + + e.pluginManager.addPreset(presetName, options); + }); +} diff --git a/presets/squares/src/index.ts b/presets/squares/src/index.ts index 20530cb30f7..ebc15fd316c 100644 --- a/presets/squares/src/index.ts +++ b/presets/squares/src/index.ts @@ -1,4 +1,11 @@ import type { Engine } from "@tsparticles/engine"; +import { loadEmittersPluginSimple } from "@tsparticles/plugin-emitters/plugin"; +import { loadHexColorPlugin } from "@tsparticles/plugin-hex-color"; +import { loadPaintUpdater } from "@tsparticles/updater-paint"; +import { loadRotateUpdater } from "@tsparticles/updater-rotate"; +import { loadSizeUpdater } from "@tsparticles/updater-size"; +import { loadSquareShape } from "@tsparticles/shape-square"; +import { options } from "./options.js"; const presetName = "squares"; @@ -7,24 +14,6 @@ const presetName = "squares"; */ export async function loadSquaresPreset(engine: Engine): Promise { await engine.pluginManager.register(async e => { - const [ - { loadHexColorPlugin }, - { loadEmittersPluginSimple }, - { loadSquareShape }, - { loadRotateUpdater }, - { loadSizeUpdater }, - { loadPaintUpdater }, - { options }, - ] = await Promise.all([ - import("@tsparticles/plugin-hex-color"), - import("@tsparticles/plugin-emitters/plugin"), - import("@tsparticles/shape-square"), - import("@tsparticles/updater-rotate"), - import("@tsparticles/updater-size"), - import("@tsparticles/updater-paint"), - import("./options.js"), - ]); - await Promise.all([ loadHexColorPlugin(e), loadEmittersPluginSimple(e), diff --git a/presets/squares/webpack.config.js b/presets/squares/webpack.config.js deleted file mode 100644 index 18bc6202521..00000000000 --- a/presets/squares/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPreset } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "url"; -import fs from "fs-extra"; -import path from "path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPreset({ - dir: __dirname, - moduleName: "squares", - templateName: "Squares", - version, -}); diff --git a/presets/stars/CHANGELOG.md b/presets/stars/CHANGELOG.md index c252443c72b..2832af70b8f 100644 --- a/presets/stars/CHANGELOG.md +++ b/presets/stars/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/preset-stars + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/preset-stars diff --git a/presets/stars/package.dist.json b/presets/stars/package.dist.json index fabd3156adb..4cfcb91170f 100644 --- a/presets/stars/package.dist.json +++ b/presets/stars/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/preset-stars", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles stars preset", "homepage": "https://particles.js.org", "repository": { @@ -96,11 +96,18 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./cjs/index.lazy.js" + }, "./package.json": "./package.json" }, "dependencies": { - "@tsparticles/basic": "4.0.0-beta.12", - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/basic": "4.0.0-beta.15", + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/presets/stars/package.json b/presets/stars/package.json index 0691fc145b0..4b97280f48e 100644 --- a/presets/stars/package.json +++ b/presets/stars/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/preset-stars", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles stars preset", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,6 +106,13 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", @@ -113,5 +120,9 @@ "@tsparticles/basic": "workspace:*", "@tsparticles/engine": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/presets/stars/rollup.config.js b/presets/stars/rollup.config.js new file mode 100644 index 00000000000..1682680b505 --- /dev/null +++ b/presets/stars/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPreset } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "url"; +import fs from "fs-extra"; +import path from "path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPreset({ + dir: __dirname, + moduleName: "stars", + presetName: "Stars", + version, +}); diff --git a/presets/stars/src/browser.ts b/presets/stars/src/browser.ts new file mode 100644 index 00000000000..b4caf859e68 --- /dev/null +++ b/presets/stars/src/browser.ts @@ -0,0 +1,10 @@ +import { loadStarsPreset } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadStarsPreset?: typeof loadStarsPreset; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadStarsPreset = loadStarsPreset; + +export * from "./index.js"; diff --git a/presets/stars/src/bundle.ts b/presets/stars/src/bundle.ts index adb7fac6aa8..e6ef697be1f 100644 --- a/presets/stars/src/bundle.ts +++ b/presets/stars/src/bundle.ts @@ -1,2 +1,12 @@ +import { loadStarsPreset } from "./index.js"; + export { loadStarsPreset } from "./index.js"; export { tsParticles } from "@tsparticles/engine"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadStarsPreset?: typeof loadStarsPreset; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; + +globalObject.loadStarsPreset = loadStarsPreset; diff --git a/presets/stars/src/index.lazy.ts b/presets/stars/src/index.lazy.ts new file mode 100644 index 00000000000..63e6d28ba28 --- /dev/null +++ b/presets/stars/src/index.lazy.ts @@ -0,0 +1,16 @@ +import type { Engine } from "@tsparticles/engine/lazy"; + +const presetName = "stars"; + +/** + * @param engine - + */ +export async function loadStarsPreset(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const [{ loadBasic }, { options }] = await Promise.all([import("@tsparticles/basic/lazy"), import("./options.js")]); + + await loadBasic(e); + + e.pluginManager.addPreset(presetName, options); + }); +} diff --git a/presets/stars/src/index.ts b/presets/stars/src/index.ts index cebf02017c4..bc693c8a7cc 100644 --- a/presets/stars/src/index.ts +++ b/presets/stars/src/index.ts @@ -1,4 +1,6 @@ import type { Engine } from "@tsparticles/engine"; +import { loadBasic } from "@tsparticles/basic"; +import { options } from "./options.js"; const presetName = "stars"; @@ -7,8 +9,6 @@ const presetName = "stars"; */ export async function loadStarsPreset(engine: Engine): Promise { await engine.pluginManager.register(async e => { - const [{ loadBasic }, { options }] = await Promise.all([import("@tsparticles/basic"), import("./options.js")]); - await loadBasic(e); e.pluginManager.addPreset(presetName, options); diff --git a/presets/stars/webpack.config.js b/presets/stars/webpack.config.js deleted file mode 100644 index d17aab02985..00000000000 --- a/presets/stars/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPreset } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "url"; -import fs from "fs-extra"; -import path from "path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPreset({ - dir: __dirname, - moduleName: "stars", - presetName: "Stars", - version, -}); diff --git a/presets/triangles/CHANGELOG.md b/presets/triangles/CHANGELOG.md index 7117f7700ce..95c4348f5cc 100644 --- a/presets/triangles/CHANGELOG.md +++ b/presets/triangles/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/preset-triangles + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/preset-triangles diff --git a/presets/triangles/package.dist.json b/presets/triangles/package.dist.json index 5b74cc09fec..e1f9137b7a9 100644 --- a/presets/triangles/package.dist.json +++ b/presets/triangles/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/preset-triangles", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles triangles preset", "homepage": "https://particles.js.org", "repository": { @@ -96,13 +96,20 @@ "umd": "./umd/index.js", "default": "./cjs/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./cjs/index.lazy.js" + }, "./package.json": "./package.json" }, "dependencies": { - "@tsparticles/basic": "4.0.0-beta.12", - "@tsparticles/engine": "4.0.0-beta.12", - "@tsparticles/interaction-particles-links": "4.0.0-beta.12", - "@tsparticles/plugin-interactivity": "4.0.0-beta.12" + "@tsparticles/basic": "4.0.0-beta.15", + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/interaction-particles-links": "4.0.0-beta.15", + "@tsparticles/plugin-interactivity": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/presets/triangles/package.json b/presets/triangles/package.json index 310030e2e37..effeb2319ee 100644 --- a/presets/triangles/package.json +++ b/presets/triangles/package.json @@ -1,12 +1,12 @@ { "name": "@tsparticles/preset-triangles", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles triangles preset", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "build:ci": "tsparticles-cli build --ci", - "version": "tsparticles-cli build -d && git add package.dist.json", + "build": "tsparticles-build", + "build:ci": "tsparticles-build --ci", + "version": "tsparticles-build -d && git add package.dist.json", "prepack": "pnpm run build" }, "repository": { @@ -106,6 +106,13 @@ "umd": "./dist/umd/index.js", "default": "./dist/cjs/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/cjs/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "prettier": "@tsparticles/prettier-config", @@ -115,5 +122,9 @@ "@tsparticles/interaction-particles-links": "workspace:*", "@tsparticles/plugin-interactivity": "workspace:*" }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^" + } } diff --git a/presets/triangles/rollup.config.js b/presets/triangles/rollup.config.js new file mode 100644 index 00000000000..82c8b7d4353 --- /dev/null +++ b/presets/triangles/rollup.config.js @@ -0,0 +1,17 @@ +import { loadParticlesPreset } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "url"; +import fs from "fs-extra"; +import path from "path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesPreset({ + dir: __dirname, + moduleName: "triangles", + presetName: "Triangles", + version, +}); diff --git a/presets/triangles/src/browser.ts b/presets/triangles/src/browser.ts new file mode 100644 index 00000000000..dc3fe7c2bd5 --- /dev/null +++ b/presets/triangles/src/browser.ts @@ -0,0 +1,10 @@ +import { loadTrianglesPreset } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadTrianglesPreset?: typeof loadTrianglesPreset; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadTrianglesPreset = loadTrianglesPreset; + +export * from "./index.js"; diff --git a/presets/triangles/src/bundle.ts b/presets/triangles/src/bundle.ts index 423fa324672..0244adf754d 100644 --- a/presets/triangles/src/bundle.ts +++ b/presets/triangles/src/bundle.ts @@ -1,2 +1,12 @@ +import { loadTrianglesPreset } from "./index.js"; + export { loadTrianglesPreset } from "./index.js"; export { tsParticles } from "@tsparticles/engine"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadTrianglesPreset?: typeof loadTrianglesPreset; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; + +globalObject.loadTrianglesPreset = loadTrianglesPreset; diff --git a/presets/triangles/src/index.lazy.ts b/presets/triangles/src/index.lazy.ts new file mode 100644 index 00000000000..f23ff9a7836 --- /dev/null +++ b/presets/triangles/src/index.lazy.ts @@ -0,0 +1,30 @@ +import type { Engine } from "@tsparticles/engine/lazy"; + +const presetName = "triangles"; + +/** + * @param engine - + */ +export async function loadTrianglesPreset(engine: Engine): Promise { + await engine.pluginManager.register(async e => { + const [{ loadBasic }, { loadParticlesLinksInteraction }, { loadInteractivityPlugin }, { options }] = + await Promise.all([ + import("@tsparticles/basic/lazy"), + import("@tsparticles/interaction-particles-links/lazy"), + import("@tsparticles/plugin-interactivity/lazy"), + import("./options.js"), + ]), + loadInteractivityForTriangles = async (e: Engine): Promise => { + await loadInteractivityPlugin(e); + + await loadParticlesLinksInteraction(e); + }; + + await Promise.all([ + loadBasic(e), + loadInteractivityForTriangles(e), + ]); + + e.pluginManager.addPreset(presetName, options); + }); +} diff --git a/presets/triangles/src/index.ts b/presets/triangles/src/index.ts index 76a806e9945..0661720062f 100644 --- a/presets/triangles/src/index.ts +++ b/presets/triangles/src/index.ts @@ -1,4 +1,8 @@ import type { Engine } from "@tsparticles/engine"; +import { loadBasic } from "@tsparticles/basic"; +import { loadInteractivityPlugin } from "@tsparticles/plugin-interactivity"; +import { loadParticlesLinksInteraction } from "@tsparticles/interaction-particles-links"; +import { options } from "./options.js"; const presetName = "triangles"; @@ -7,18 +11,11 @@ const presetName = "triangles"; */ export async function loadTrianglesPreset(engine: Engine): Promise { await engine.pluginManager.register(async e => { - const [{ loadBasic }, { loadParticlesLinksInteraction }, { loadInteractivityPlugin }, { options }] = - await Promise.all([ - import("@tsparticles/basic"), - import("@tsparticles/interaction-particles-links"), - import("@tsparticles/plugin-interactivity"), - import("./options.js"), - ]), - loadInteractivityForTriangles = async (e: Engine): Promise => { - await loadInteractivityPlugin(e); + const loadInteractivityForTriangles = async (e: Engine): Promise => { + await loadInteractivityPlugin(e); - await loadParticlesLinksInteraction(e); - }; + await loadParticlesLinksInteraction(e); + }; await Promise.all([ loadBasic(e), diff --git a/presets/triangles/webpack.config.js b/presets/triangles/webpack.config.js deleted file mode 100644 index 531cbff437f..00000000000 --- a/presets/triangles/webpack.config.js +++ /dev/null @@ -1,17 +0,0 @@ -import { loadParticlesPreset } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "url"; -import fs from "fs-extra"; -import path from "path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesPreset({ - dir: __dirname, - moduleName: "triangles", - presetName: "Triangles", - version, -}); diff --git a/prettier.readme.config.json b/prettier.readme.config.json new file mode 100644 index 00000000000..3b510d861bf --- /dev/null +++ b/prettier.readme.config.json @@ -0,0 +1,15 @@ +{ + "$schema": "http://json.schemastore.org/prettierrc", + "printWidth": 120, + "tabWidth": 2, + "proseWrap": "preserve", + "overrides": [ + { + "files": "*.md", + "options": { + "parser": "markdown" + } + } + ] +} + diff --git a/scripts/generate-palettes-samples.js b/scripts/generate-palettes-samples.js new file mode 100644 index 00000000000..85e5b7dccfc --- /dev/null +++ b/scripts/generate-palettes-samples.js @@ -0,0 +1,455 @@ +import { spawn } from "node:child_process"; +import { existsSync } from "node:fs"; +import { mkdir, readdir } from "node:fs/promises"; +import { dirname, join, resolve } from "node:path"; +import process from "node:process"; +import { setTimeout as delay } from "node:timers/promises"; +import { fileURLToPath } from "node:url"; + +import puppeteer from "puppeteer"; +import yargs from "yargs"; +import { hideBin } from "yargs/helpers"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); +const workspaceRoot = resolve(__dirname, ".."); +const catalogRoot = resolve(workspaceRoot, "palettes"); +const demoRoot = resolve(workspaceRoot, "demo", "vanilla"); +const demoPort = 3416; +const liveReloadPort = 0; +const pnpmCommand = process.platform === "win32" ? "pnpm.cmd" : "pnpm"; + +const toKebabCase = value => + value + .replaceAll(/([a-z0-9])([A-Z])/g, "$1-$2") + .replaceAll(/([A-Z]+)([A-Z][a-z0-9]+)/g, "$1-$2") + .toLowerCase(); + +const parseIds = value => { + if (!value) { + return []; + } + + return value + .flatMap(entry => String(entry).split(",")) + .map(entry => entry.trim()) + .filter(Boolean); +}; + +const hasPaletteOptions = path => existsSync(join(path, "src", "options.ts")); + +const toPascalCase = value => `${value.charAt(0).toUpperCase()}${value.slice(1)}`; + +const getPaletteId = (category, folder) => (category === "other" ? folder : `${category}${toPascalCase(folder)}`); + +const createItem = (category, folder, fullPath) => ({ + category, + folder, + fullPath, + id: getPaletteId(category, folder), + outputPath: join(fullPath, "images", "sample.png"), + route: `/palettes/${getPaletteId(category, folder)}`, + slug: toKebabCase(getPaletteId(category, folder)), +}); + +const discoverPalettes = async root => { + const entries = await readdir(root, { withFileTypes: true }); + const items = []; + + for (const entry of entries.filter(current => current.isDirectory() && !current.name.startsWith("."))) { + const entryPath = join(root, entry.name); + + if (hasPaletteOptions(entryPath)) { + items.push(createItem("other", entry.name, entryPath)); + + continue; + } + + const nestedEntries = await readdir(entryPath, { withFileTypes: true }); + + for (const nestedEntry of nestedEntries.filter(current => current.isDirectory() && !current.name.startsWith("."))) { + const nestedPath = join(entryPath, nestedEntry.name); + + if (hasPaletteOptions(nestedPath)) { + items.push(createItem(entry.name, nestedEntry.name, nestedPath)); + } + } + } + + return items.sort((first, second) => first.slug.localeCompare(second.slug)); +}; + +const isReachable = async (baseUrl, healthPath) => { + try { + const response = await fetch(`${baseUrl}${healthPath}`, { method: "GET" }); + + if (!response.ok) { + return false; + } + + const body = await response.text(); + + return body.includes("tsParticles"); + } catch { + return false; + } +}; + +const waitForServer = async (baseUrl, healthPath, timeout, child, output) => { + const startTime = Date.now(); + + while (Date.now() - startTime < timeout) { + if (await isReachable(baseUrl, healthPath)) { + return; + } + + if (child?.exitCode != null) { + throw new Error(`The demo server exited before becoming ready.\n${output.join("")}`.trim()); + } + + await delay(250); + } + + throw new Error(`Timed out waiting for ${baseUrl}${healthPath}.\n${output.join("")}`.trim()); +}; + +const stopServer = async child => { + if (!child || child.exitCode != null) { + return; + } + + child.kill("SIGTERM"); + + for (let index = 0; index < 20; index++) { + if (child.exitCode != null) { + return; + } + + await delay(250); + } + + child.kill("SIGKILL"); +}; + +const startDemoServer = async ({ baseUrl, healthPath, liveReload, port, timeout, verbose }) => { + const output = []; + const child = spawn(pnpmCommand, ["start"], { + cwd: demoRoot, + env: { + ...process.env, + FORCE_COLOR: "0", + LIVE_RELOAD_PORT: String(liveReload), + PORT: String(port), + }, + stdio: ["ignore", "pipe", "pipe"], + }); + const appendOutput = chunk => { + const message = chunk.toString(); + + output.push(message); + + if (output.length > 50) { + output.shift(); + } + + if (verbose) { + process.stdout.write(message); + } + }; + + child.stdout.on("data", appendOutput); + child.stderr.on("data", appendOutput); + + await waitForServer(baseUrl, healthPath, timeout, child, output); + + console.log(`[samples] Demo server started on ${baseUrl}`); + + return { + stop: async () => stopServer(child), + }; +}; + +const getBrowserCandidates = () => { + switch (process.platform) { + case "darwin": + return [ + "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome", + "/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary", + "/Applications/Chromium.app/Contents/MacOS/Chromium", + "/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge", + ]; + case "win32": + return [ + String.raw`C:\Program Files\Google\Chrome\Application\chrome.exe`, + String.raw`C:\Program Files (x86)\Google\Chrome\Application\chrome.exe`, + String.raw`C:\Program Files\Microsoft\Edge\Application\msedge.exe`, + String.raw`C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe`, + ]; + default: + return [ + "/usr/bin/google-chrome-stable", + "/usr/bin/google-chrome", + "/usr/bin/chromium-browser", + "/usr/bin/chromium", + "/snap/bin/chromium", + "/usr/bin/microsoft-edge", + ]; + } +}; + +const resolveExecutablePath = cliPath => { + // 1. Explicit CLI override always wins + if (cliPath) { + return cliPath; + } + + // 2. Prefer well-known system browsers (Chrome > Chromium > Edge) + // so a global PUPPETEER_EXECUTABLE_PATH pointing to a broken Homebrew + // Chromium does not accidentally override a working Chrome install. + const detectedBrowser = getBrowserCandidates().find(candidate => existsSync(candidate)); + + if (detectedBrowser) { + return detectedBrowser; + } + + // 3. Respect PUPPETEER_EXECUTABLE_PATH only when no known browser is found + if (process.env.PUPPETEER_EXECUTABLE_PATH) { + return process.env.PUPPETEER_EXECUTABLE_PATH; + } + + // 4. Last resort: bundled Puppeteer browser (requires pnpm approve-builds) + try { + const bundledPath = puppeteer.executablePath(); + + if (bundledPath && existsSync(bundledPath)) { + return bundledPath; + } + } catch { + // ignore bundled path lookup failures + } +}; + +const hideOverlay = async page => { + await page.evaluate(() => { + document.getElementById("stats")?.remove(); + }); +}; + +const captureItem = async (browser, item, options) => { + const page = await browser.newPage(); + + try { + await page.setViewport({ + deviceScaleFactor: 1, + height: options.height, + width: options.width, + }); + await page.goto(`${options.baseUrl}${item.route}?capture=1`, { + timeout: options.timeout, + waitUntil: "domcontentloaded", + }); + await page.waitForSelector("#tsparticles canvas", { + timeout: options.timeout, + }); + await page.waitForFunction( + () => { + const canvas = document.querySelector("#tsparticles canvas"); + + return !!canvas && canvas.clientWidth > 0 && canvas.clientHeight > 0; + }, + { timeout: options.timeout }, + ); + await hideOverlay(page); + await delay(options.delay); + await page.evaluate( + () => + new Promise(resolve => { + requestAnimationFrame(() => { + requestAnimationFrame(resolve); + }); + }), + ); + await mkdir(dirname(item.outputPath), { recursive: true }); + await page.screenshot({ + captureBeyondViewport: false, + path: item.outputPath, + type: "png", + }); + } finally { + await page.close(); + } +}; + +const rawCliArgs = hideBin(process.argv); +const cliArgs = rawCliArgs[0] === "--" ? rawCliArgs.slice(1) : rawCliArgs; + +const argv = await yargs(cliArgs) + .scriptName("generate-samples") + .option("base-url", { + describe: "Use an already running demo server instead of starting demo/vanilla automatically.", + type: "string", + }) + .option("delay", { + default: 1500, + describe: "Milliseconds to wait after the canvas is ready before taking the screenshot.", + type: "number", + }) + .option("dry-run", { + default: false, + describe: "Print the matched palettes without taking screenshots.", + type: "boolean", + }) + .option("executable-path", { + describe: "Override the browser executable used by Puppeteer.", + type: "string", + }) + .option("headful", { + default: false, + describe: "Show the browser while capturing screenshots.", + type: "boolean", + }) + .option("height", { + default: 1080, + describe: "Viewport height in pixels.", + type: "number", + }) + .option("id", { + describe: "Capture only specific palette ids/slugs. Accepts repeated flags or comma separated values.", + type: "array", + }) + .option("list", { + default: false, + describe: "List the discovered palettes and exit.", + type: "boolean", + }) + .option("live-reload-port", { + default: liveReloadPort, + describe: "Port used by the demo live reload server when launching demo/vanilla.", + type: "number", + }) + .option("port", { + default: demoPort, + describe: "Port used for the temporary demo server started by the script.", + type: "number", + }) + .option("skip-existing", { + default: false, + describe: "Skip palettes that already have images/sample.png.", + type: "boolean", + }) + .option("timeout", { + default: 30000, + describe: "Timeout in milliseconds for page load and demo server startup.", + type: "number", + }) + .option("verbose", { + default: false, + describe: "Print demo server output while running.", + type: "boolean", + }) + .option("width", { + default: 1920, + describe: "Viewport width in pixels.", + type: "number", + }) + .coerce("id", parseIds) + .strict() + .help() + .parse(); + +const allItems = await discoverPalettes(catalogRoot); +const filters = new Set((argv.id ?? []).map(value => value.toLowerCase())); +const matchedItems = allItems.filter(item => { + if (filters.size === 0) { + return true; + } + + return filters.has(item.id.toLowerCase()) || filters.has(item.slug.toLowerCase()); +}); +const items = argv["skip-existing"] ? matchedItems.filter(item => !existsSync(item.outputPath)) : matchedItems; + +if (argv.list || argv["dry-run"]) { + for (const item of items) { + console.log(`${item.id}\t${item.slug}\t${item.category}/${item.folder}\t${item.outputPath}`); + } + + process.exit(0); +} + +if (matchedItems.length === 0) { + throw new Error("No palettes matched the provided filters."); +} + +if (items.length === 0) { + console.log("[samples] Nothing to do, every selected palette already has a sample image."); + process.exit(0); +} + +const baseUrl = argv["base-url"] ?? `http://127.0.0.1:${argv.port}`; +const healthPath = "/palettes"; +const executablePath = resolveExecutablePath(argv["executable-path"]); +const server = argv["base-url"] + ? { stop: async () => undefined } + : await startDemoServer({ + baseUrl, + healthPath, + liveReload: argv["live-reload-port"], + port: argv.port, + timeout: argv.timeout, + verbose: argv.verbose, + }); +let browser; + +try { + try { + browser = await puppeteer.launch({ + args: ["--disable-dev-shm-usage"], + defaultViewport: null, + executablePath, + headless: !argv.headful, + }); + } catch (error) { + const browserMessage = executablePath + ? `Unable to launch the browser at ${executablePath}.` + : "Unable to find a Chrome/Chromium executable for Puppeteer."; + + throw new Error( + `${browserMessage} Pass --executable-path, set PUPPETEER_EXECUTABLE_PATH, or approve Puppeteer's browser download with pnpm approve-builds.\n${error.message}`, + { cause: error }, + ); + } + + const failures = []; + + for (const [index, item] of items.entries()) { + console.log(`[samples] (${index + 1}/${items.length}) Capturing ${item.id}...`); + + try { + await captureItem(browser, item, { + baseUrl, + delay: argv.delay, + height: argv.height, + timeout: argv.timeout, + width: argv.width, + }); + console.log(`[samples] Saved ${item.outputPath}`); + } catch (error) { + failures.push({ + error, + item, + }); + console.error(`[samples] Failed ${item.id}: ${error.message}`); + } + } + + if (failures.length > 0) { + const failureList = failures.map(({ error, item }) => `- ${item.id}: ${error.message}`).join("\n"); + + throw new Error(`Failed to capture ${failures.length} palette sample(s):\n${failureList}`); + } + + console.log(`[samples] Captured ${items.length} palette sample image(s).`); +} finally { + await browser?.close(); + await server.stop(); +} diff --git a/scripts/generate-presets-samples.js b/scripts/generate-presets-samples.js new file mode 100644 index 00000000000..1b54d04b206 --- /dev/null +++ b/scripts/generate-presets-samples.js @@ -0,0 +1,413 @@ +import { spawn } from "node:child_process"; +import { existsSync } from "node:fs"; +import { mkdir, readdir } from "node:fs/promises"; +import { dirname, join, resolve } from "node:path"; +import process from "node:process"; +import { setTimeout as delay } from "node:timers/promises"; +import { fileURLToPath } from "node:url"; + +import puppeteer from "puppeteer"; +import yargs from "yargs"; +import { hideBin } from "yargs/helpers"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); +const workspaceRoot = resolve(__dirname, ".."); +const catalogRoot = resolve(workspaceRoot, "presets"); +const demoRoot = resolve(workspaceRoot, "demo", "vanilla"); +const demoPort = 3415; +const liveReloadPort = 3715; +const pnpmCommand = process.platform === "win32" ? "pnpm.cmd" : "pnpm"; + +const toKebabCase = value => + value + .replaceAll(/([a-z0-9])([A-Z])/g, "$1-$2") + .replaceAll(/([A-Z]+)([A-Z][a-z0-9]+)/g, "$1-$2") + .toLowerCase(); + +const parseIds = value => { + if (!value) { + return []; + } + + return value + .flatMap(entry => String(entry).split(",")) + .map(entry => entry.trim()) + .filter(Boolean); +}; + +const discoverPresets = async root => { + const entries = await readdir(root, { withFileTypes: true }); + + return entries + .filter(entry => entry.isDirectory() && !entry.name.startsWith(".")) + .map(entry => ({ + fullPath: join(root, entry.name), + id: entry.name, + outputPath: join(root, entry.name, "images", "sample.png"), + route: `/presets/${entry.name}`, + slug: toKebabCase(entry.name), + })) + .sort((first, second) => first.slug.localeCompare(second.slug)); +}; + +const isReachable = async baseUrl => { + try { + const response = await fetch(baseUrl, { method: "GET" }); + + return response.ok; + } catch { + return false; + } +}; + +const waitForServer = async (baseUrl, timeout, child, output) => { + const startTime = Date.now(); + + while (Date.now() - startTime < timeout) { + if (await isReachable(baseUrl)) { + return; + } + + if (child?.exitCode != null) { + throw new Error(`The demo server exited before becoming ready.\n${output.join("")}`.trim()); + } + + await delay(250); + } + + throw new Error(`Timed out waiting for ${baseUrl}.\n${output.join("")}`.trim()); +}; + +const stopServer = async child => { + if (!child || child.exitCode != null) { + return; + } + + child.kill("SIGTERM"); + + for (let index = 0; index < 20; index++) { + if (child.exitCode != null) { + return; + } + + await delay(250); + } + + child.kill("SIGKILL"); +}; + +const startDemoServer = async ({ baseUrl, port, timeout, verbose }) => { + const output = []; + const child = spawn(pnpmCommand, ["start"], { + cwd: demoRoot, + env: { + ...process.env, + FORCE_COLOR: "0", + LIVE_RELOAD_PORT: String(liveReloadPort), + PORT: String(port), + }, + stdio: ["ignore", "pipe", "pipe"], + }); + const appendOutput = chunk => { + const message = chunk.toString(); + + output.push(message); + + if (output.length > 50) { + output.shift(); + } + + if (verbose) { + process.stdout.write(message); + } + }; + + child.stdout.on("data", appendOutput); + child.stderr.on("data", appendOutput); + + await waitForServer(baseUrl, timeout, child, output); + + console.log(`[samples] Demo server started on ${baseUrl}`); + + return { + stop: async () => stopServer(child), + }; +}; + +const getBrowserCandidates = () => { + switch (process.platform) { + case "darwin": + return [ + "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome", + "/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary", + "/Applications/Chromium.app/Contents/MacOS/Chromium", + "/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge", + ]; + case "win32": + return [ + String.raw`C:\Program Files\Google\Chrome\Application\chrome.exe`, + String.raw`C:\Program Files (x86)\Google\Chrome\Application\chrome.exe`, + String.raw`C:\Program Files\Microsoft\Edge\Application\msedge.exe`, + String.raw`C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe`, + ]; + default: + return [ + "/usr/bin/google-chrome-stable", + "/usr/bin/google-chrome", + "/usr/bin/chromium-browser", + "/usr/bin/chromium", + "/snap/bin/chromium", + "/usr/bin/microsoft-edge", + ]; + } +}; + +const resolveExecutablePath = cliPath => { + // 1. Explicit CLI override always wins + if (cliPath) { + return cliPath; + } + + // 2. Prefer well-known system browsers (Chrome > Chromium > Edge) + // so a global PUPPETEER_EXECUTABLE_PATH pointing to a broken Homebrew + // Chromium does not accidentally override a working Chrome install. + const detectedBrowser = getBrowserCandidates().find(candidate => existsSync(candidate)); + + if (detectedBrowser) { + return detectedBrowser; + } + + // 3. Respect PUPPETEER_EXECUTABLE_PATH only when no known browser is found + if (process.env.PUPPETEER_EXECUTABLE_PATH) { + return process.env.PUPPETEER_EXECUTABLE_PATH; + } + + // 4. Last resort: bundled Puppeteer browser (requires pnpm approve-builds) + try { + const bundledPath = puppeteer.executablePath(); + + if (bundledPath && existsSync(bundledPath)) { + return bundledPath; + } + } catch { + // ignore bundled path lookup failures + } +}; + +const hideOverlay = async page => { + await page.evaluate(() => { + document.getElementById("stats")?.remove(); + }); +}; + +const captureItem = async (browser, item, options) => { + const page = await browser.newPage(); + + try { + await page.setViewport({ + deviceScaleFactor: 1, + height: options.height, + width: options.width, + }); + await page.goto(`${options.baseUrl}${item.route}?capture=1`, { + timeout: options.timeout, + waitUntil: "domcontentloaded", + }); + await page.waitForSelector("#tsparticles canvas", { + timeout: options.timeout, + }); + await page.waitForFunction( + () => { + const canvas = document.querySelector("#tsparticles canvas"); + + return !!canvas && canvas.clientWidth > 0 && canvas.clientHeight > 0; + }, + { timeout: options.timeout }, + ); + await hideOverlay(page); + await delay(options.delay); + await page.evaluate( + () => + new Promise(resolve => { + requestAnimationFrame(() => { + requestAnimationFrame(resolve); + }); + }), + ); + await mkdir(dirname(item.outputPath), { recursive: true }); + await page.screenshot({ + captureBeyondViewport: false, + path: item.outputPath, + type: "png", + }); + } finally { + await page.close(); + } +}; + +const rawCliArgs = hideBin(process.argv); +const cliArgs = rawCliArgs[0] === "--" ? rawCliArgs.slice(1) : rawCliArgs; + +const argv = await yargs(cliArgs) + .scriptName("generate-samples") + .option("base-url", { + describe: "Use an already running demo server instead of starting demo/vanilla automatically.", + type: "string", + }) + .option("delay", { + default: 1500, + describe: "Milliseconds to wait after the canvas is ready before taking the screenshot.", + type: "number", + }) + .option("dry-run", { + default: false, + describe: "Print the matched presets without taking screenshots.", + type: "boolean", + }) + .option("executable-path", { + describe: "Override the browser executable used by Puppeteer.", + type: "string", + }) + .option("headful", { + default: false, + describe: "Show the browser while capturing screenshots.", + type: "boolean", + }) + .option("height", { + default: 1080, + describe: "Viewport height in pixels.", + type: "number", + }) + .option("id", { + describe: "Capture only specific preset ids/slugs. Accepts repeated flags or comma separated values.", + type: "array", + }) + .option("list", { + default: false, + describe: "List the discovered presets and exit.", + type: "boolean", + }) + .option("port", { + default: demoPort, + describe: "Port used for the temporary demo server started by the script.", + type: "number", + }) + .option("skip-existing", { + default: false, + describe: "Skip presets that already have images/sample.png.", + type: "boolean", + }) + .option("timeout", { + default: 30000, + describe: "Timeout in milliseconds for page load and demo server startup.", + type: "number", + }) + .option("verbose", { + default: false, + describe: "Print demo server output while running.", + type: "boolean", + }) + .option("width", { + default: 1920, + describe: "Viewport width in pixels.", + type: "number", + }) + .coerce("id", parseIds) + .strict() + .help() + .parse(); + +const allItems = await discoverPresets(catalogRoot); +const filters = new Set((argv.id ?? []).map(value => value.toLowerCase())); +const matchedItems = allItems.filter(item => { + if (filters.size === 0) { + return true; + } + + return filters.has(item.id.toLowerCase()) || filters.has(item.slug.toLowerCase()); +}); +const items = argv["skip-existing"] ? matchedItems.filter(item => !existsSync(item.outputPath)) : matchedItems; + +if (argv.list || argv["dry-run"]) { + for (const item of items) { + console.log(`${item.id}\t${item.slug}\t${item.outputPath}`); + } + + process.exit(0); +} + +if (matchedItems.length === 0) { + throw new Error("No presets matched the provided filters."); +} + +if (items.length === 0) { + console.log("[samples] Nothing to do, every selected preset already has a sample image."); + process.exit(0); +} + +const baseUrl = argv["base-url"] ?? `http://127.0.0.1:${argv.port}`; +const executablePath = resolveExecutablePath(argv["executable-path"]); +const server = argv["base-url"] + ? { stop: async () => undefined } + : await startDemoServer({ + baseUrl, + port: argv.port, + timeout: argv.timeout, + verbose: argv.verbose, + }); +let browser; + +try { + try { + browser = await puppeteer.launch({ + args: ["--disable-dev-shm-usage"], + defaultViewport: null, + executablePath, + headless: !argv.headful, + }); + } catch (error) { + const browserMessage = executablePath + ? `Unable to launch the browser at ${executablePath}.` + : "Unable to find a Chrome/Chromium executable for Puppeteer."; + + throw new Error( + `${browserMessage} Pass --executable-path, set PUPPETEER_EXECUTABLE_PATH, or approve Puppeteer's browser download with pnpm approve-builds.\n${error.message}`, + { cause: error }, + ); + } + + const failures = []; + + for (const [index, item] of items.entries()) { + console.log(`[samples] (${index + 1}/${items.length}) Capturing ${item.id}...`); + + try { + await captureItem(browser, item, { + baseUrl, + delay: argv.delay, + height: argv.height, + timeout: argv.timeout, + width: argv.width, + }); + console.log(`[samples] Saved ${item.outputPath}`); + } catch (error) { + failures.push({ + error, + item, + }); + console.error(`[samples] Failed ${item.id}: ${error.message}`); + } + } + + if (failures.length > 0) { + const failureList = failures.map(({ error, item }) => `- ${item.id}: ${error.message}`).join("\n"); + + throw new Error(`Failed to capture ${failures.length} preset sample(s):\n${failureList}`); + } + + console.log(`[samples] Captured ${items.length} preset sample image(s).`); +} finally { + await browser?.close(); + await server.stop(); +} diff --git a/scripts/sync-sample-images.py b/scripts/sync-sample-images.py new file mode 100644 index 00000000000..5bb3ffde81b --- /dev/null +++ b/scripts/sync-sample-images.py @@ -0,0 +1,186 @@ +#!/usr/bin/env python3 +import argparse +import shutil +import sys +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[1] + +PALETTES_ROOT = ROOT / "palettes" +PALETTE_DEMO_IMAGES = ROOT / "demo" / "vanilla" / "public" / "images" / "palettes" + +PRESETS_ROOT = ROOT / "presets" +PRESET_DEMO_IMAGES = ROOT / "demo" / "vanilla" / "public" / "images" / "presets" + +SYNC_FROM_SAMPLES = "samples" +SYNC_FROM_DEMO = "demo" + + +def to_pascal_case(value: str) -> str: + if not value: + return value + + return f"{value[0].upper()}{value[1:]}" + + +def palette_image_name(category: str, folder: str) -> str: + return folder if category == "other" else f"{category}{to_pascal_case(folder)}" + + +def find_palette_dirs(root: Path) -> list[tuple[str, str, Path]]: + palette_dirs: list[tuple[str, str, Path]] = [] + + for category_dir in root.iterdir(): + if not category_dir.is_dir() or category_dir.name.startswith("."): + continue + + # Legacy flat structure support: palettes//src/options.ts + if (category_dir / "src" / "options.ts").exists(): + palette_dirs.append(("other", category_dir.name, category_dir)) + continue + + for palette_dir in category_dir.iterdir(): + if not palette_dir.is_dir() or palette_dir.name.startswith("."): + continue + + if not (palette_dir / "package.json").exists(): + continue + + if not (palette_dir / "src" / "options.ts").exists(): + continue + + palette_dirs.append((category_dir.name, palette_dir.name, palette_dir)) + + return sorted(palette_dirs, key=lambda item: (item[0], item[1])) + + +def find_preset_dirs(root: Path) -> list[tuple[str, Path]]: + preset_dirs: list[tuple[str, Path]] = [] + + for preset_dir in root.iterdir(): + if not preset_dir.is_dir() or preset_dir.name.startswith("."): + continue + + if not (preset_dir / "package.json").exists(): + continue + + preset_dirs.append((preset_dir.name, preset_dir)) + + return sorted(preset_dirs, key=lambda item: item[0]) + + +def parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser( + description="Sync preset and palette screenshots between package samples and demo images." + ) + parser.add_argument( + "--from", + choices=[SYNC_FROM_SAMPLES, SYNC_FROM_DEMO], + default=SYNC_FROM_SAMPLES, + dest="source", + help=( + "Sync direction: 'samples' copies package images/sample.png to demo/vanilla/public/images/* (default); " + "'demo' copies demo images back to package sample files." + ), + ) + parser.add_argument( + "--only", + choices=["all", "palettes", "presets"], + default="all", + help="Limit synchronization to palettes, presets, or both.", + ) + parser.add_argument( + "--strict", + action="store_true", + help="Exit with code 1 if one or more source images are missing.", + ) + + return parser.parse_args() + + +def sync_palettes(source: str) -> tuple[int, int, list[str]]: + palette_dirs = find_palette_dirs(PALETTES_ROOT) + updated = 0 + missing: list[str] = [] + + for category, folder, palette_dir in palette_dirs: + image_id = palette_image_name(category, folder) + + if source == SYNC_FROM_SAMPLES: + source_image = palette_dir / "images" / "sample.png" + target_image = PALETTE_DEMO_IMAGES / f"{image_id}.png" + else: + source_image = PALETTE_DEMO_IMAGES / f"{image_id}.png" + target_image = palette_dir / "images" / "sample.png" + + if not source_image.exists(): + missing.append(f"palettes/{category}/{folder} -> {image_id}.png") + continue + + target_image.parent.mkdir(parents=True, exist_ok=True) + shutil.copy2(source_image, target_image) + updated += 1 + + return len(palette_dirs), updated, missing + + +def sync_presets(source: str) -> tuple[int, int, list[str]]: + preset_dirs = find_preset_dirs(PRESETS_ROOT) + updated = 0 + missing: list[str] = [] + + for folder, preset_dir in preset_dirs: + if source == SYNC_FROM_SAMPLES: + source_image = preset_dir / "images" / "sample.png" + target_image = PRESET_DEMO_IMAGES / f"{folder}.png" + else: + source_image = PRESET_DEMO_IMAGES / f"{folder}.png" + target_image = preset_dir / "images" / "sample.png" + + if not source_image.exists(): + missing.append(f"presets/{folder} -> {folder}.png") + continue + + target_image.parent.mkdir(parents=True, exist_ok=True) + shutil.copy2(source_image, target_image) + updated += 1 + + return len(preset_dirs), updated, missing + + +def main() -> int: + args = parse_args() + direction_target = "demo" if args.source == SYNC_FROM_SAMPLES else "samples" + + print(f"Direction: {args.source} -> {direction_target}") + print(f"Scope: {args.only}") + + missing_all: list[str] = [] + + if args.only in ("all", "palettes"): + found, updated, missing = sync_palettes(args.source) + missing_all.extend(missing) + print(f"Palette packages found: {found}") + print(f"Palette images updated: {updated}") + print(f"Palette images missing: {len(missing)}") + + if args.only in ("all", "presets"): + found, updated, missing = sync_presets(args.source) + missing_all.extend(missing) + print(f"Preset packages found: {found}") + print(f"Preset images updated: {updated}") + print(f"Preset images missing: {len(missing)}") + + if missing_all: + print("Missing:") + for item in sorted(missing_all): + print(f"- {item}") + + if args.strict and missing_all: + return 1 + + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/shapes/arrow/CHANGELOG.md b/shapes/arrow/CHANGELOG.md index 44b3b55e909..c68f3460929 100644 --- a/shapes/arrow/CHANGELOG.md +++ b/shapes/arrow/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/shape-arrow + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/shape-arrow diff --git a/shapes/arrow/package.dist.json b/shapes/arrow/package.dist.json index 71338a8064f..0d6af124c33 100644 --- a/shapes/arrow/package.dist.json +++ b/shapes/arrow/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/shape-arrow", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles arrow shape", "homepage": "https://particles.js.org", "repository": { @@ -96,10 +96,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/shapes/arrow/package.json b/shapes/arrow/package.json index 0a2b254d034..1818c5281c5 100644 --- a/shapes/arrow/package.json +++ b/shapes/arrow/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/shape-arrow", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles arrow shape", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -103,12 +103,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/shapes/arrow/rollup.config.js b/shapes/arrow/rollup.config.js new file mode 100644 index 00000000000..bb538f48e7c --- /dev/null +++ b/shapes/arrow/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesShape } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesShape({ + moduleName: "arrow", + shapeName: "Arrow", + version, + dir: __dirname, + progress: false, +}); diff --git a/shapes/arrow/src/ArrowDrawer.ts b/shapes/arrow/src/ArrowDrawer.ts index de1c5184be4..11ade10c197 100644 --- a/shapes/arrow/src/ArrowDrawer.ts +++ b/shapes/arrow/src/ArrowDrawer.ts @@ -1,6 +1,5 @@ import { type Container, type IShapeDrawData, type IShapeDrawer, getRangeValue } from "@tsparticles/engine"; import type { ArrowParticle } from "./ArrowParticle.js"; -import type { IArrowData } from "./IArrowData.js"; import { drawArrow } from "./Utils.js"; const defaultHeightFactor = 0.5, @@ -13,7 +12,7 @@ export class ArrowDrawer implements IShapeDrawer { } particleInit(_container: Container, particle: ArrowParticle): void { - const shapeData = particle.shapeData as IArrowData | undefined; + const shapeData = particle.shapeData; particle.heightFactor = getRangeValue(shapeData?.heightFactor ?? defaultHeightFactor); particle.headWidthFactor = getRangeValue(shapeData?.headWidthFactor ?? defaultHeadWidthFactor); diff --git a/shapes/arrow/src/ArrowParticle.ts b/shapes/arrow/src/ArrowParticle.ts index a6b2884b231..ba60d4fb587 100644 --- a/shapes/arrow/src/ArrowParticle.ts +++ b/shapes/arrow/src/ArrowParticle.ts @@ -1,7 +1,9 @@ +import type { IArrowData } from "./IArrowData.js"; import type { Particle } from "@tsparticles/engine"; export type ArrowParticle = Particle & { bodyHeightFactor?: number; headWidthFactor?: number; heightFactor?: number; + shapeData?: IArrowData; }; diff --git a/shapes/arrow/src/browser.ts b/shapes/arrow/src/browser.ts new file mode 100644 index 00000000000..9c489b14fc7 --- /dev/null +++ b/shapes/arrow/src/browser.ts @@ -0,0 +1,10 @@ +import { loadArrowShape } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadArrowShape?: typeof loadArrowShape; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadArrowShape = loadArrowShape; + +export * from "./index.js"; diff --git a/shapes/arrow/src/index.lazy.ts b/shapes/arrow/src/index.lazy.ts new file mode 100644 index 00000000000..582234f37fc --- /dev/null +++ b/shapes/arrow/src/index.lazy.ts @@ -0,0 +1,16 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadArrowShape(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { ArrowDrawer } = await import("./ArrowDrawer.js"); + + e.pluginManager.addShape(["arrow"], () => Promise.resolve(new ArrowDrawer())); + }); +} diff --git a/shapes/arrow/src/index.ts b/shapes/arrow/src/index.ts index 71195ce01ce..5a275796c57 100644 --- a/shapes/arrow/src/index.ts +++ b/shapes/arrow/src/index.ts @@ -1,3 +1,4 @@ +import { ArrowDrawer } from "./ArrowDrawer.js"; import { type Engine } from "@tsparticles/engine"; declare const __VERSION__: string; @@ -9,10 +10,6 @@ export async function loadArrowShape(engine: Engine): Promise { engine.checkVersion(__VERSION__); await engine.pluginManager.register(e => { - e.pluginManager.addShape(["arrow"], async () => { - const { ArrowDrawer } = await import("./ArrowDrawer.js"); - - return new ArrowDrawer(); - }); + e.pluginManager.addShape(["arrow"], () => Promise.resolve(new ArrowDrawer())); }); } diff --git a/shapes/arrow/webpack.config.js b/shapes/arrow/webpack.config.js deleted file mode 100644 index 9ff0873dcc6..00000000000 --- a/shapes/arrow/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesShape } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesShape({ - moduleName: "arrow", - shapeName: "Arrow", - version, - dir: __dirname, - progress: false, -}); diff --git a/shapes/cards/CHANGELOG.md b/shapes/cards/CHANGELOG.md index a3db756d45b..739170f121e 100644 --- a/shapes/cards/CHANGELOG.md +++ b/shapes/cards/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/shape-cards + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/shape-cards diff --git a/shapes/cards/package.dist.json b/shapes/cards/package.dist.json index b9700f557fa..cb54494108c 100644 --- a/shapes/cards/package.dist.json +++ b/shapes/cards/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/shape-cards", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles cards shape", "homepage": "https://particles.js.org", "repository": { @@ -96,6 +96,13 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./cards": { "types": "./types/cards/index.d.ts", "browser": "./browser/cards/index.js", @@ -103,6 +110,13 @@ "require": "./cjs/cards/index.js", "default": "./esm/cards/index.js" }, + "./cards/lazy": { + "types": "./types/cards/index.lazy.d.ts", + "browser": "./browser/cards/index.lazy.js", + "import": "./esm/cards/index.lazy.js", + "require": "./cjs/cards/index.lazy.js", + "default": "./esm/cards/index.lazy.js" + }, "./clubs": { "types": "./types/clubs/index.d.ts", "browser": "./browser/clubs/index.js", @@ -110,6 +124,13 @@ "require": "./cjs/clubs/index.js", "default": "./esm/clubs/index.js" }, + "./clubs/lazy": { + "types": "./types/clubs/index.lazy.d.ts", + "browser": "./browser/clubs/index.lazy.js", + "import": "./esm/clubs/index.lazy.js", + "require": "./cjs/clubs/index.lazy.js", + "default": "./esm/clubs/index.lazy.js" + }, "./diamons": { "types": "./types/diamons/index.d.ts", "browser": "./browser/diamons/index.js", @@ -117,6 +138,13 @@ "require": "./cjs/diamons/index.js", "default": "./esm/diamons/index.js" }, + "./diamons/lazy": { + "types": "./types/diamons/index.lazy.d.ts", + "browser": "./browser/diamons/index.lazy.js", + "import": "./esm/diamons/index.lazy.js", + "require": "./cjs/diamons/index.lazy.js", + "default": "./esm/diamons/index.lazy.js" + }, "./hearts": { "types": "./types/hearts/index.d.ts", "browser": "./browser/hearts/index.js", @@ -124,6 +152,13 @@ "require": "./cjs/hearts/index.js", "default": "./esm/hearts/index.js" }, + "./hearts/lazy": { + "types": "./types/hearts/index.lazy.d.ts", + "browser": "./browser/hearts/index.lazy.js", + "import": "./esm/hearts/index.lazy.js", + "require": "./cjs/hearts/index.lazy.js", + "default": "./esm/hearts/index.lazy.js" + }, "./spades": { "types": "./types/spades/index.d.ts", "browser": "./browser/spades/index.js", @@ -131,6 +166,13 @@ "require": "./cjs/spades/index.js", "default": "./esm/spades/index.js" }, + "./spades/lazy": { + "types": "./types/spades/index.lazy.d.ts", + "browser": "./browser/spades/index.lazy.js", + "import": "./esm/spades/index.lazy.js", + "require": "./cjs/spades/index.lazy.js", + "default": "./esm/spades/index.lazy.js" + }, "./suits": { "types": "./types/suits.d.ts", "browser": "./browser/suits.js", @@ -138,11 +180,18 @@ "require": "./cjs/suits.js", "default": "./esm/suits.js" }, + "./suits/lazy": { + "types": "./types/suits.lazy.d.ts", + "browser": "./browser/suits.lazy.js", + "import": "./esm/suits.lazy.js", + "require": "./cjs/suits.lazy.js", + "default": "./esm/suits.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12", - "@tsparticles/path-utils": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/path-utils": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/shapes/cards/package.json b/shapes/cards/package.json index d819b950038..0d901ab558e 100644 --- a/shapes/cards/package.json +++ b/shapes/cards/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/shape-cards", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles cards shape", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -103,6 +103,13 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./cards": { "types": "./dist/types/cards/index.d.ts", "browser": "./dist/browser/cards/index.js", @@ -110,6 +117,13 @@ "require": "./dist/cjs/cards/index.js", "default": "./dist/esm/cards/index.js" }, + "./cards/lazy": { + "types": "./dist/types/cards/index.lazy.d.ts", + "browser": "./dist/browser/cards/index.lazy.js", + "import": "./dist/esm/cards/index.lazy.js", + "require": "./dist/cjs/cards/index.lazy.js", + "default": "./dist/esm/cards/index.lazy.js" + }, "./clubs": { "types": "./dist/types/clubs/index.d.ts", "browser": "./dist/browser/clubs/index.js", @@ -117,6 +131,13 @@ "require": "./dist/cjs/clubs/index.js", "default": "./dist/esm/clubs/index.js" }, + "./clubs/lazy": { + "types": "./dist/types/clubs/index.lazy.d.ts", + "browser": "./dist/browser/clubs/index.lazy.js", + "import": "./dist/esm/clubs/index.lazy.js", + "require": "./dist/cjs/clubs/index.lazy.js", + "default": "./dist/esm/clubs/index.lazy.js" + }, "./diamons": { "types": "./dist/types/diamons/index.d.ts", "browser": "./dist/browser/diamons/index.js", @@ -124,6 +145,13 @@ "require": "./dist/cjs/diamons/index.js", "default": "./dist/esm/diamons/index.js" }, + "./diamons/lazy": { + "types": "./dist/types/diamons/index.lazy.d.ts", + "browser": "./dist/browser/diamons/index.lazy.js", + "import": "./dist/esm/diamons/index.lazy.js", + "require": "./dist/cjs/diamons/index.lazy.js", + "default": "./dist/esm/diamons/index.lazy.js" + }, "./hearts": { "types": "./dist/types/hearts/index.d.ts", "browser": "./dist/browser/hearts/index.js", @@ -131,6 +159,13 @@ "require": "./dist/cjs/hearts/index.js", "default": "./dist/esm/hearts/index.js" }, + "./hearts/lazy": { + "types": "./dist/types/hearts/index.lazy.d.ts", + "browser": "./dist/browser/hearts/index.lazy.js", + "import": "./dist/esm/hearts/index.lazy.js", + "require": "./dist/cjs/hearts/index.lazy.js", + "default": "./dist/esm/hearts/index.lazy.js" + }, "./spades": { "types": "./dist/types/spades/index.d.ts", "browser": "./dist/browser/spades/index.js", @@ -138,6 +173,13 @@ "require": "./dist/cjs/spades/index.js", "default": "./dist/esm/spades/index.js" }, + "./spades/lazy": { + "types": "./dist/types/spades/index.lazy.d.ts", + "browser": "./dist/browser/spades/index.lazy.js", + "import": "./dist/esm/spades/index.lazy.js", + "require": "./dist/cjs/spades/index.lazy.js", + "default": "./dist/esm/spades/index.lazy.js" + }, "./suits": { "types": "./dist/types/suits.d.ts", "browser": "./dist/browser/suits.js", @@ -145,6 +187,13 @@ "require": "./dist/cjs/suits.js", "default": "./dist/esm/suits.js" }, + "./suits/lazy": { + "types": "./dist/types/suits.lazy.d.ts", + "browser": "./dist/browser/suits.lazy.js", + "import": "./dist/esm/suits.lazy.js", + "require": "./dist/cjs/suits.lazy.js", + "default": "./dist/esm/suits.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { @@ -152,6 +201,8 @@ "@tsparticles/path-utils": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*", "@tsparticles/path-utils": "workspace:*" }, diff --git a/shapes/cards/rollup.config.js b/shapes/cards/rollup.config.js new file mode 100644 index 00000000000..0befcbab319 --- /dev/null +++ b/shapes/cards/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesShape } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesShape({ + moduleName: "cards", + shapeName: "Cards", + version, + dir: __dirname, + progress: false, +}); diff --git a/shapes/cards/src/browser.ts b/shapes/cards/src/browser.ts new file mode 100644 index 00000000000..2f2159d66a2 --- /dev/null +++ b/shapes/cards/src/browser.ts @@ -0,0 +1,10 @@ +import { loadCardsShape } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadCardsShape?: typeof loadCardsShape; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadCardsShape = loadCardsShape; + +export * from "./index.js"; diff --git a/shapes/cards/src/cards/index.lazy.ts b/shapes/cards/src/cards/index.lazy.ts new file mode 100644 index 00000000000..952f998af86 --- /dev/null +++ b/shapes/cards/src/cards/index.lazy.ts @@ -0,0 +1,18 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadFullCardsShape(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(e => { + e.pluginManager.addShape(["card"], async container => { + const { CardDrawer } = await import("./CardDrawer.js"); + + return new CardDrawer(container); + }); + }); +} diff --git a/shapes/cards/src/cards/index.ts b/shapes/cards/src/cards/index.ts index 851678b86c8..b0b1802a2cc 100644 --- a/shapes/cards/src/cards/index.ts +++ b/shapes/cards/src/cards/index.ts @@ -1,3 +1,4 @@ +import { CardDrawer } from "./CardDrawer.js"; import { type Engine } from "@tsparticles/engine"; declare const __VERSION__: string; @@ -9,10 +10,6 @@ export async function loadFullCardsShape(engine: Engine): Promise { engine.checkVersion(__VERSION__); await engine.pluginManager.register(e => { - e.pluginManager.addShape(["card"], async container => { - const { CardDrawer } = await import("./CardDrawer.js"); - - return new CardDrawer(container); - }); + e.pluginManager.addShape(["card"], container => Promise.resolve(new CardDrawer(container))); }); } diff --git a/shapes/cards/src/clubs/index.lazy.ts b/shapes/cards/src/clubs/index.lazy.ts new file mode 100644 index 00000000000..d6f95d7b647 --- /dev/null +++ b/shapes/cards/src/clubs/index.lazy.ts @@ -0,0 +1,18 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadClubsSuitShape(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(e => { + e.pluginManager.addShape(["club", "clubs"], async () => { + const { ClubDrawer } = await import("./ClubDrawer.js"); + + return new ClubDrawer(); + }); + }); +} diff --git a/shapes/cards/src/clubs/index.ts b/shapes/cards/src/clubs/index.ts index e5a56dfd320..45c66ef3784 100644 --- a/shapes/cards/src/clubs/index.ts +++ b/shapes/cards/src/clubs/index.ts @@ -1,3 +1,4 @@ +import { ClubDrawer } from "./ClubDrawer.js"; import { type Engine } from "@tsparticles/engine"; declare const __VERSION__: string; @@ -9,10 +10,6 @@ export async function loadClubsSuitShape(engine: Engine): Promise { engine.checkVersion(__VERSION__); await engine.pluginManager.register(e => { - e.pluginManager.addShape(["club", "clubs"], async () => { - const { ClubDrawer } = await import("./ClubDrawer.js"); - - return new ClubDrawer(); - }); + e.pluginManager.addShape(["club", "clubs"], () => Promise.resolve(new ClubDrawer())); }); } diff --git a/shapes/cards/src/diamonds/index.lazy.ts b/shapes/cards/src/diamonds/index.lazy.ts new file mode 100644 index 00000000000..4a8d2ab42aa --- /dev/null +++ b/shapes/cards/src/diamonds/index.lazy.ts @@ -0,0 +1,18 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadDiamondsSuitShape(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(e => { + e.pluginManager.addShape(["diamond", "diamonds"], async () => { + const { DiamondDrawer } = await import("./DiamondDrawer.js"); + + return new DiamondDrawer(); + }); + }); +} diff --git a/shapes/cards/src/diamonds/index.ts b/shapes/cards/src/diamonds/index.ts index e96e01549ca..4bf54cb671b 100644 --- a/shapes/cards/src/diamonds/index.ts +++ b/shapes/cards/src/diamonds/index.ts @@ -1,3 +1,4 @@ +import { DiamondDrawer } from "./DiamondDrawer.js"; import { type Engine } from "@tsparticles/engine"; declare const __VERSION__: string; @@ -9,10 +10,6 @@ export async function loadDiamondsSuitShape(engine: Engine): Promise { engine.checkVersion(__VERSION__); await engine.pluginManager.register(e => { - e.pluginManager.addShape(["diamond", "diamonds"], async () => { - const { DiamondDrawer } = await import("./DiamondDrawer.js"); - - return new DiamondDrawer(); - }); + e.pluginManager.addShape(["diamond", "diamonds"], () => Promise.resolve(new DiamondDrawer())); }); } diff --git a/shapes/cards/src/hearts/index.lazy.ts b/shapes/cards/src/hearts/index.lazy.ts new file mode 100644 index 00000000000..deca89e19a2 --- /dev/null +++ b/shapes/cards/src/hearts/index.lazy.ts @@ -0,0 +1,18 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadHeartsSuitShape(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(e => { + e.pluginManager.addShape(["heart", "hearts"], async () => { + const { HeartDrawer } = await import("./HeartDrawer.js"); + + return new HeartDrawer(); + }); + }); +} diff --git a/shapes/cards/src/hearts/index.ts b/shapes/cards/src/hearts/index.ts index adf6d091ca5..cdb5e23f59f 100644 --- a/shapes/cards/src/hearts/index.ts +++ b/shapes/cards/src/hearts/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { HeartDrawer } from "./HeartDrawer.js"; declare const __VERSION__: string; @@ -9,10 +10,6 @@ export async function loadHeartsSuitShape(engine: Engine): Promise { engine.checkVersion(__VERSION__); await engine.pluginManager.register(e => { - e.pluginManager.addShape(["heart", "hearts"], async () => { - const { HeartDrawer } = await import("./HeartDrawer.js"); - - return new HeartDrawer(); - }); + e.pluginManager.addShape(["heart", "hearts"], () => Promise.resolve(new HeartDrawer())); }); } diff --git a/shapes/cards/src/index.lazy.ts b/shapes/cards/src/index.lazy.ts new file mode 100644 index 00000000000..7ebf2c08110 --- /dev/null +++ b/shapes/cards/src/index.lazy.ts @@ -0,0 +1,22 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadCardsShape(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const [{ loadFullCardsShape }, { loadCardSuitsShape }] = await Promise.all([ + import("./cards/index.lazy.js"), + import("./suits.lazy.js"), + ]); + + await Promise.all([ + loadFullCardsShape(e), + loadCardSuitsShape(e), + ]); + }); +} diff --git a/shapes/cards/src/index.ts b/shapes/cards/src/index.ts index c50225c7af6..5c7950627a7 100644 --- a/shapes/cards/src/index.ts +++ b/shapes/cards/src/index.ts @@ -1,4 +1,6 @@ import { type Engine } from "@tsparticles/engine"; +import { loadCardSuitsShape } from "./suits.js"; +import { loadFullCardsShape } from "./cards/index.js"; declare const __VERSION__: string; @@ -8,18 +10,8 @@ declare const __VERSION__: string; export async function loadCardsShape(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async e => { - const [{ loadFullCardsShape }, { loadCardSuitsShape }] = await Promise.all([ - import("./cards/index.js"), - import("./suits.js"), - ]); - - await Promise.all([ - loadFullCardsShape(e), - loadCardSuitsShape(e), - ]); - }); + await Promise.all([ + loadFullCardsShape(engine), + loadCardSuitsShape(engine), + ]); } - -export * from "./cards/index.js"; -export * from "./suits.js"; diff --git a/shapes/cards/src/spades/index.lazy.ts b/shapes/cards/src/spades/index.lazy.ts new file mode 100644 index 00000000000..04d90084340 --- /dev/null +++ b/shapes/cards/src/spades/index.lazy.ts @@ -0,0 +1,18 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadSpadesSuitShape(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(e => { + e.pluginManager.addShape(["spade", "spades"], async () => { + const { SpadeDrawer } = await import("./SpadeDrawer.js"); + + return new SpadeDrawer(); + }); + }); +} diff --git a/shapes/cards/src/spades/index.ts b/shapes/cards/src/spades/index.ts index a124b65437c..7148c4f7d90 100644 --- a/shapes/cards/src/spades/index.ts +++ b/shapes/cards/src/spades/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { SpadeDrawer } from "./SpadeDrawer.js"; declare const __VERSION__: string; @@ -9,10 +10,6 @@ export async function loadSpadesSuitShape(engine: Engine): Promise { engine.checkVersion(__VERSION__); await engine.pluginManager.register(e => { - e.pluginManager.addShape(["spade", "spades"], async () => { - const { SpadeDrawer } = await import("./SpadeDrawer.js"); - - return new SpadeDrawer(); - }); + e.pluginManager.addShape(["spade", "spades"], () => Promise.resolve(new SpadeDrawer())); }); } diff --git a/shapes/cards/src/suits.lazy.ts b/shapes/cards/src/suits.lazy.ts new file mode 100644 index 00000000000..9642bd34484 --- /dev/null +++ b/shapes/cards/src/suits.lazy.ts @@ -0,0 +1,25 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadCardSuitsShape(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + const [{ loadClubsSuitShape }, { loadDiamondsSuitShape }, { loadHeartsSuitShape }, { loadSpadesSuitShape }] = + await Promise.all([ + import("./clubs/index.lazy.js"), + import("./diamonds/index.lazy.js"), + import("./hearts/index.lazy.js"), + import("./spades/index.lazy.js"), + ]); + + await Promise.all([ + loadClubsSuitShape(engine), + loadDiamondsSuitShape(engine), + loadHeartsSuitShape(engine), + loadSpadesSuitShape(engine), + ]); +} diff --git a/shapes/cards/src/suits.ts b/shapes/cards/src/suits.ts index 1cfc25dfd53..6ccedbd62c2 100644 --- a/shapes/cards/src/suits.ts +++ b/shapes/cards/src/suits.ts @@ -1,4 +1,8 @@ import { type Engine } from "@tsparticles/engine"; +import { loadClubsSuitShape } from "./clubs/index.js"; +import { loadDiamondsSuitShape } from "./diamonds/index.js"; +import { loadHeartsSuitShape } from "./hearts/index.js"; +import { loadSpadesSuitShape } from "./spades/index.js"; declare const __VERSION__: string; @@ -8,29 +12,10 @@ declare const __VERSION__: string; export async function loadCardSuitsShape(engine: Engine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async e => { - const [ - { loadClubsSuitShape }, - { loadDiamondsSuitShape }, - { loadHeartsSuitShape }, - { loadSpadesSuitShape }, - ] = await Promise.all([ - import("./clubs/index.js"), - import("./diamonds/index.js"), - import("./hearts/index.js"), - import("./spades/index.js"), - ]); - - await Promise.all([ - loadClubsSuitShape(e), - loadDiamondsSuitShape(e), - loadHeartsSuitShape(e), - loadSpadesSuitShape(e), - ]); - }); + await Promise.all([ + loadClubsSuitShape(engine), + loadDiamondsSuitShape(engine), + loadHeartsSuitShape(engine), + loadSpadesSuitShape(engine), + ]); } - -export * from "./clubs/index.js"; -export * from "./diamonds/index.js"; -export * from "./hearts/index.js"; -export * from "./spades/index.js"; diff --git a/shapes/cards/webpack.config.js b/shapes/cards/webpack.config.js deleted file mode 100644 index 8027375be6e..00000000000 --- a/shapes/cards/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesShape } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesShape({ - moduleName: "cards", - shapeName: "Cards", - version, - dir: __dirname, - progress: false, -}); diff --git a/shapes/circle/CHANGELOG.md b/shapes/circle/CHANGELOG.md index 93606c9d3a4..8db25f2b336 100644 --- a/shapes/circle/CHANGELOG.md +++ b/shapes/circle/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/shape-circle + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/shape-circle diff --git a/shapes/circle/package.dist.json b/shapes/circle/package.dist.json index fe4e69f1fdb..ec2e88ab604 100644 --- a/shapes/circle/package.dist.json +++ b/shapes/circle/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/shape-circle", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles circle shape", "homepage": "https://particles.js.org", "repository": { @@ -55,10 +55,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/shapes/circle/package.json b/shapes/circle/package.json index 2cb10866786..e7ad6b75508 100644 --- a/shapes/circle/package.json +++ b/shapes/circle/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/shape-circle", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles circle shape", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -59,12 +59,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/shapes/circle/rollup.config.js b/shapes/circle/rollup.config.js new file mode 100644 index 00000000000..34a51140807 --- /dev/null +++ b/shapes/circle/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesShape } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesShape({ + moduleName: "circle", + shapeName: "Circle", + version, + dir: __dirname, + progress: false, +}); diff --git a/shapes/circle/src/browser.ts b/shapes/circle/src/browser.ts new file mode 100644 index 00000000000..0a1169836e5 --- /dev/null +++ b/shapes/circle/src/browser.ts @@ -0,0 +1,10 @@ +import { loadCircleShape } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadCircleShape?: typeof loadCircleShape; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadCircleShape = loadCircleShape; + +export * from "./index.js"; diff --git a/shapes/circle/src/index.lazy.ts b/shapes/circle/src/index.lazy.ts new file mode 100644 index 00000000000..8b905db108b --- /dev/null +++ b/shapes/circle/src/index.lazy.ts @@ -0,0 +1,18 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadCircleShape(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(e => { + e.pluginManager.addShape(["circle"], async () => { + const { CircleDrawer } = await import("./CircleDrawer.js"); + + return new CircleDrawer(); + }); + }); +} diff --git a/shapes/circle/src/index.ts b/shapes/circle/src/index.ts index d53acffa8e3..2a81a6349cd 100644 --- a/shapes/circle/src/index.ts +++ b/shapes/circle/src/index.ts @@ -1,3 +1,4 @@ +import { CircleDrawer } from "./CircleDrawer.js"; import { type Engine } from "@tsparticles/engine"; declare const __VERSION__: string; @@ -9,10 +10,8 @@ export async function loadCircleShape(engine: Engine): Promise { engine.checkVersion(__VERSION__); await engine.pluginManager.register(e => { - e.pluginManager.addShape(["circle"], async () => { - const { CircleDrawer } = await import("./CircleDrawer.js"); - - return new CircleDrawer(); + e.pluginManager.addShape(["circle"], () => { + return Promise.resolve(new CircleDrawer()); }); }); } diff --git a/shapes/circle/webpack.config.js b/shapes/circle/webpack.config.js deleted file mode 100644 index e009e7f1b40..00000000000 --- a/shapes/circle/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesShape } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesShape({ - moduleName: "circle", - shapeName: "Circle", - version, - dir: __dirname, - progress: false, -}); diff --git a/shapes/cog/CHANGELOG.md b/shapes/cog/CHANGELOG.md index 3976e2ffb23..65dbeabb407 100644 --- a/shapes/cog/CHANGELOG.md +++ b/shapes/cog/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/shape-cog + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/shape-cog diff --git a/shapes/cog/package.dist.json b/shapes/cog/package.dist.json index 2fb67cc7846..bf218201091 100644 --- a/shapes/cog/package.dist.json +++ b/shapes/cog/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/shape-cog", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles cog shape", "homepage": "https://particles.js.org", "repository": { @@ -96,10 +96,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/shapes/cog/package.json b/shapes/cog/package.json index 00789728601..5cda3e5c975 100644 --- a/shapes/cog/package.json +++ b/shapes/cog/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/shape-cog", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles cog shape", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -103,12 +103,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/shapes/cog/rollup.config.js b/shapes/cog/rollup.config.js new file mode 100644 index 00000000000..710f126bff4 --- /dev/null +++ b/shapes/cog/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesShape } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesShape({ + moduleName: "cog", + shapeName: "Cog", + version, + dir: __dirname, + progress: false, +}); diff --git a/shapes/cog/src/CogDrawer.ts b/shapes/cog/src/CogDrawer.ts index ff4d7f3d0ac..759677c8626 100644 --- a/shapes/cog/src/CogDrawer.ts +++ b/shapes/cog/src/CogDrawer.ts @@ -1,7 +1,6 @@ import { type Container, type IShapeDrawData, type IShapeDrawer, getRangeValue } from "@tsparticles/engine"; import { drawCog, drawCogHole } from "./Utils.js"; import type { CogParticle } from "./CogParticle.js"; -import type { ICogData } from "./ICogData.js"; const defaultHoleRadius = 44, defaultInnerRadius = 72, @@ -19,7 +18,7 @@ export class CogDrawer implements IShapeDrawer { } particleInit(_container: Container, particle: CogParticle): void { - const shapeData = particle.shapeData as ICogData | undefined; + const shapeData = particle.shapeData; particle.cogHoleRadius = getRangeValue(shapeData?.holeRadius ?? defaultHoleRadius); particle.cogInnerRadius = getRangeValue(shapeData?.innerRadius ?? defaultInnerRadius); diff --git a/shapes/cog/src/CogParticle.ts b/shapes/cog/src/CogParticle.ts index fb1f2c45712..7fa2b42ea2f 100644 --- a/shapes/cog/src/CogParticle.ts +++ b/shapes/cog/src/CogParticle.ts @@ -1,3 +1,4 @@ +import type { ICogData } from "./ICogData.js"; import type { Particle } from "@tsparticles/engine"; export type CogParticle = Particle & { @@ -6,4 +7,5 @@ export type CogParticle = Particle & { cogInnerTaper?: number; cogNotches?: number; cogOuterTaper?: number; + shapeData?: ICogData; }; diff --git a/shapes/cog/src/browser.ts b/shapes/cog/src/browser.ts new file mode 100644 index 00000000000..33cb96ed868 --- /dev/null +++ b/shapes/cog/src/browser.ts @@ -0,0 +1,10 @@ +import { loadCogShape } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadCogShape?: typeof loadCogShape; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadCogShape = loadCogShape; + +export * from "./index.js"; diff --git a/shapes/cog/src/index.lazy.ts b/shapes/cog/src/index.lazy.ts new file mode 100644 index 00000000000..1862574c328 --- /dev/null +++ b/shapes/cog/src/index.lazy.ts @@ -0,0 +1,16 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadCogShape(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { CogDrawer } = await import("./CogDrawer.js"); + + e.pluginManager.addShape(["cog"], () => Promise.resolve(new CogDrawer())); + }); +} diff --git a/shapes/cog/src/index.ts b/shapes/cog/src/index.ts index c5d0d2fc32f..da6954d80c8 100644 --- a/shapes/cog/src/index.ts +++ b/shapes/cog/src/index.ts @@ -1,3 +1,4 @@ +import { CogDrawer } from "./CogDrawer.js"; import { type Engine } from "@tsparticles/engine"; declare const __VERSION__: string; @@ -9,10 +10,6 @@ export async function loadCogShape(engine: Engine): Promise { engine.checkVersion(__VERSION__); await engine.pluginManager.register(e => { - e.pluginManager.addShape(["cog"], async () => { - const { CogDrawer } = await import("./CogDrawer.js"); - - return new CogDrawer(); - }); + e.pluginManager.addShape(["cog"], () => Promise.resolve(new CogDrawer())); }); } diff --git a/shapes/cog/webpack.config.js b/shapes/cog/webpack.config.js deleted file mode 100644 index c58f016923a..00000000000 --- a/shapes/cog/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesShape } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesShape({ - moduleName: "cog", - shapeName: "Cog", - version, - dir: __dirname, - progress: false, -}); diff --git a/shapes/emoji/CHANGELOG.md b/shapes/emoji/CHANGELOG.md index 39b9cdd9c62..938c620d424 100644 --- a/shapes/emoji/CHANGELOG.md +++ b/shapes/emoji/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/shape-emoji + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/shape-emoji diff --git a/shapes/emoji/package.dist.json b/shapes/emoji/package.dist.json index 31676177de9..03d1b70ffd3 100644 --- a/shapes/emoji/package.dist.json +++ b/shapes/emoji/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/shape-emoji", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles emoji shape", "homepage": "https://particles.js.org", "repository": { @@ -55,11 +55,18 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/canvas-utils": "4.0.0-beta.12", - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/canvas-utils": "4.0.0-beta.15", + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/shapes/emoji/package.json b/shapes/emoji/package.json index 68eae5e8e9b..055214d2b89 100644 --- a/shapes/emoji/package.json +++ b/shapes/emoji/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/shape-emoji", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles emoji shape", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -62,6 +62,13 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { @@ -70,6 +77,8 @@ }, "devDependencies": { "@tsparticles/canvas-utils": "workspace:*", + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/shapes/emoji/rollup.config.js b/shapes/emoji/rollup.config.js new file mode 100644 index 00000000000..c9d253c8c94 --- /dev/null +++ b/shapes/emoji/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesShape } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesShape({ + moduleName: "emoji", + shapeName: "Emoji", + version, + dir: __dirname, + progress: false, +}); diff --git a/shapes/emoji/src/browser.ts b/shapes/emoji/src/browser.ts new file mode 100644 index 00000000000..7f93aaa68dc --- /dev/null +++ b/shapes/emoji/src/browser.ts @@ -0,0 +1,10 @@ +import { loadEmojiShape } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadEmojiShape?: typeof loadEmojiShape; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadEmojiShape = loadEmojiShape; + +export * from "./index.js"; diff --git a/shapes/emoji/src/index.lazy.ts b/shapes/emoji/src/index.lazy.ts new file mode 100644 index 00000000000..e0652006b68 --- /dev/null +++ b/shapes/emoji/src/index.lazy.ts @@ -0,0 +1,18 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +import { validTypes } from "./Utils.js"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadEmojiShape(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { EmojiDrawer } = await import("./EmojiDrawer.js"); + + e.pluginManager.addShape(validTypes, () => Promise.resolve(new EmojiDrawer())); + }); +} diff --git a/shapes/emoji/src/index.ts b/shapes/emoji/src/index.ts index 6924dcf9cc9..eccce196238 100644 --- a/shapes/emoji/src/index.ts +++ b/shapes/emoji/src/index.ts @@ -1,3 +1,4 @@ +import { EmojiDrawer } from "./EmojiDrawer.js"; import { type Engine } from "@tsparticles/engine"; import { validTypes } from "./Utils.js"; @@ -10,10 +11,6 @@ export async function loadEmojiShape(engine: Engine): Promise { engine.checkVersion(__VERSION__); await engine.pluginManager.register(e => { - e.pluginManager.addShape(validTypes, async () => { - const { EmojiDrawer } = await import("./EmojiDrawer.js"); - - return new EmojiDrawer(); - }); + e.pluginManager.addShape(validTypes, () => Promise.resolve(new EmojiDrawer())); }); } diff --git a/shapes/emoji/webpack.config.js b/shapes/emoji/webpack.config.js deleted file mode 100644 index cad5bcf2fcf..00000000000 --- a/shapes/emoji/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesShape } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesShape({ - moduleName: "emoji", - shapeName: "Emoji", - version, - dir: __dirname, - progress: false, -}); diff --git a/shapes/heart/CHANGELOG.md b/shapes/heart/CHANGELOG.md index 440f6053037..35269c638a8 100644 --- a/shapes/heart/CHANGELOG.md +++ b/shapes/heart/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/shape-heart + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/shape-heart diff --git a/shapes/heart/package.dist.json b/shapes/heart/package.dist.json index 65bfd79f7e9..e50cf435151 100644 --- a/shapes/heart/package.dist.json +++ b/shapes/heart/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/shape-heart", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles heart shape", "homepage": "https://particles.js.org", "repository": { @@ -96,10 +96,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/shapes/heart/package.json b/shapes/heart/package.json index 9ff42d554e1..3b72aef7822 100644 --- a/shapes/heart/package.json +++ b/shapes/heart/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/shape-heart", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles heart shape", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -103,12 +103,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/shapes/heart/rollup.config.js b/shapes/heart/rollup.config.js new file mode 100644 index 00000000000..5bb7c65e940 --- /dev/null +++ b/shapes/heart/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesShape } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesShape({ + moduleName: "heart", + shapeName: "Heart", + version, + dir: __dirname, + progress: false, +}); diff --git a/shapes/heart/src/browser.ts b/shapes/heart/src/browser.ts new file mode 100644 index 00000000000..610f14e236e --- /dev/null +++ b/shapes/heart/src/browser.ts @@ -0,0 +1,10 @@ +import { loadHeartShape } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadHeartShape?: typeof loadHeartShape; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadHeartShape = loadHeartShape; + +export * from "./index.js"; diff --git a/shapes/heart/src/index.lazy.ts b/shapes/heart/src/index.lazy.ts new file mode 100644 index 00000000000..2cf9e9f16b3 --- /dev/null +++ b/shapes/heart/src/index.lazy.ts @@ -0,0 +1,16 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadHeartShape(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { HeartDrawer } = await import("./HeartDrawer.js"); + + e.pluginManager.addShape(["heart"], () => Promise.resolve(new HeartDrawer())); + }); +} diff --git a/shapes/heart/src/index.ts b/shapes/heart/src/index.ts index 3764317047f..062c0d5f3ad 100644 --- a/shapes/heart/src/index.ts +++ b/shapes/heart/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { HeartDrawer } from "./HeartDrawer.js"; declare const __VERSION__: string; @@ -9,10 +10,6 @@ export async function loadHeartShape(engine: Engine): Promise { engine.checkVersion(__VERSION__); await engine.pluginManager.register(e => { - e.pluginManager.addShape(["heart"], async () => { - const { HeartDrawer } = await import("./HeartDrawer.js"); - - return new HeartDrawer(); - }); + e.pluginManager.addShape(["heart"], () => Promise.resolve(new HeartDrawer())); }); } diff --git a/shapes/heart/webpack.config.js b/shapes/heart/webpack.config.js deleted file mode 100644 index 30b00c8f572..00000000000 --- a/shapes/heart/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesShape } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesShape({ - moduleName: "heart", - shapeName: "Heart", - version, - dir: __dirname, - progress: false, -}); diff --git a/shapes/image/CHANGELOG.md b/shapes/image/CHANGELOG.md index 4106657d491..ab4cf40293a 100644 --- a/shapes/image/CHANGELOG.md +++ b/shapes/image/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/shape-image + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/shape-image diff --git a/shapes/image/package.dist.json b/shapes/image/package.dist.json index 1c30a594bcf..498cf954a87 100644 --- a/shapes/image/package.dist.json +++ b/shapes/image/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/shape-image", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles image shape", "homepage": "https://particles.js.org", "repository": { @@ -55,10 +55,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/shapes/image/package.json b/shapes/image/package.json index c231139fc1b..d9003a1e33e 100644 --- a/shapes/image/package.json +++ b/shapes/image/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/shape-image", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles image shape", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -62,12 +62,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/shapes/image/rollup.config.js b/shapes/image/rollup.config.js new file mode 100644 index 00000000000..e16a2afa123 --- /dev/null +++ b/shapes/image/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesShape } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesShape({ + moduleName: "image", + shapeName: "Image", + version, + dir: __dirname, + progress: false, +}); diff --git a/shapes/image/src/GifUtils/ByteStream.ts b/shapes/image/src/GifUtils/ByteStream.ts index bd2fd159439..6457f8b18b8 100644 --- a/shapes/image/src/GifUtils/ByteStream.ts +++ b/shapes/image/src/GifUtils/ByteStream.ts @@ -1,5 +1,7 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion */ +import type { GIFDataHeaders } from "./Types/GIFDataHeaders.js"; + export class ByteStream { /** * this streams raw data @@ -33,7 +35,7 @@ export class ByteStream { * get the next byte and increase cursors position by one * @returns the next byte */ - nextByte(): number { + nextByte(): GIFDataHeaders { return this.data[this.pos++]!; } diff --git a/shapes/image/src/GifUtils/Utils.ts b/shapes/image/src/GifUtils/Utils.ts index 3b5e0b6eb54..1e5f1701efa 100644 --- a/shapes/image/src/GifUtils/Utils.ts +++ b/shapes/image/src/GifUtils/Utils.ts @@ -50,7 +50,7 @@ function parseExtensionBlock( getFrameIndex: (increment: boolean) => number, getTransparencyIndex: (newValue?: number | null) => number, ): void { - switch (byteStream.nextByte() as GIFDataHeaders) { + switch (byteStream.nextByte()) { case GIFDataHeaders.GraphicsControlExtension: { // ~ parse graphics control extension data - applies to the next frame in the byte stream const frame = gif.frames[getFrameIndex(false)]!; @@ -402,7 +402,7 @@ async function parseBlock( canvasSettings: CanvasRenderingContext2DSettings, progressCallback?: GIFProgressCallbackFunction, ): Promise { - switch (byteStream.nextByte() as GIFDataHeaders) { + switch (byteStream.nextByte()) { case GIFDataHeaders.EndOfFile: return true; case GIFDataHeaders.Image: diff --git a/shapes/image/src/browser.ts b/shapes/image/src/browser.ts new file mode 100644 index 00000000000..efcc6235b96 --- /dev/null +++ b/shapes/image/src/browser.ts @@ -0,0 +1,10 @@ +import { loadImageShape } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadImageShape?: typeof loadImageShape; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadImageShape = loadImageShape; + +export * from "./index.js"; diff --git a/shapes/image/src/index.lazy.ts b/shapes/image/src/index.lazy.ts new file mode 100644 index 00000000000..17c73d8cdb6 --- /dev/null +++ b/shapes/image/src/index.lazy.ts @@ -0,0 +1,103 @@ +import { type IImage, shapeTypes } from "./Utils.js"; +import type { ImageContainer, ImageEngine } from "./types.js"; +import type { IPreload } from "./Options/Interfaces/IPreload.js"; + +const extLength = 3; + +/** + * + * @param engine - + */ +function addLoadImageToEngine(engine: ImageEngine): void { + engine.getImages ??= (container: ImageContainer): IImage[] => { + engine.images ??= new Map(); + + let images = engine.images.get(container); + + if (!images) { + images = []; + + engine.images.set(container, images); + } + + return images; + }; + + engine.loadImage ??= async (container: ImageContainer, data: IPreload): Promise => { + if (!engine.getImages) { + throw new Error("No images collection found"); + } + + if (!data.name && !data.src) { + throw new Error("No image source provided"); + } + + engine.images ??= new Map(); + + const containerImages = engine.getImages(container); + + if (containerImages.some((t: IImage) => t.name === data.name || t.source === data.src)) { + return; + } + + try { + const image: IImage = { + gif: data.gif, + name: data.name ?? data.src, + source: data.src, + type: data.src.substring(data.src.length - extLength), + error: false, + loading: true, + replaceColor: data.replaceColor, + ratio: data.width && data.height ? data.width / data.height : undefined, + }; + + containerImages.push(image); + + engine.images.set(container, containerImages); + + let imageFunc: (image: IImage) => Promise; + + if (data.gif) { + const { loadGifImage } = await import("./GifUtils/Utils.js"); + + imageFunc = (img): Promise => loadGifImage(img, { colorSpace: "srgb" }); + } else if (data.replaceColor) { + const { downloadSvgImage } = await import("./Utils.js"); + + imageFunc = downloadSvgImage; + } else { + const { loadImage } = await import("./Utils.js"); + + imageFunc = loadImage; + } + + await imageFunc(image); + } catch { + throw new Error(`${data.name ?? data.src} not found`); + } + }; +} + +declare const __VERSION__: string; + +/** + * Loads the image shape in the given engine + * @param engine - the engine where the image shape is going to be added + */ +export async function loadImageShape(engine: ImageEngine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { ImagePreloaderPlugin } = await import("./ImagePreloader.js"); + + addLoadImageToEngine(e); + + e.pluginManager.addPlugin(new ImagePreloaderPlugin(e)); + e.pluginManager.addShape(shapeTypes, async container => { + const { ImageDrawer } = await import("./ImageDrawer.js"); + + return new ImageDrawer(e, container); + }); + }); +} diff --git a/shapes/image/src/index.ts b/shapes/image/src/index.ts index 17c73d8cdb6..de434fc9945 100644 --- a/shapes/image/src/index.ts +++ b/shapes/image/src/index.ts @@ -1,6 +1,9 @@ -import { type IImage, shapeTypes } from "./Utils.js"; +import { type IImage, downloadSvgImage, loadImage, shapeTypes } from "./Utils.js"; import type { ImageContainer, ImageEngine } from "./types.js"; import type { IPreload } from "./Options/Interfaces/IPreload.js"; +import { ImageDrawer } from "./ImageDrawer.js"; +import { ImagePreloaderPlugin } from "./ImagePreloader.js"; +import { loadGifImage } from "./GifUtils/Utils.js"; const extLength = 3; @@ -59,16 +62,10 @@ function addLoadImageToEngine(engine: ImageEngine): void { let imageFunc: (image: IImage) => Promise; if (data.gif) { - const { loadGifImage } = await import("./GifUtils/Utils.js"); - imageFunc = (img): Promise => loadGifImage(img, { colorSpace: "srgb" }); } else if (data.replaceColor) { - const { downloadSvgImage } = await import("./Utils.js"); - imageFunc = downloadSvgImage; } else { - const { loadImage } = await import("./Utils.js"); - imageFunc = loadImage; } @@ -88,16 +85,10 @@ declare const __VERSION__: string; export async function loadImageShape(engine: ImageEngine): Promise { engine.checkVersion(__VERSION__); - await engine.pluginManager.register(async e => { - const { ImagePreloaderPlugin } = await import("./ImagePreloader.js"); - + await engine.pluginManager.register(e => { addLoadImageToEngine(e); e.pluginManager.addPlugin(new ImagePreloaderPlugin(e)); - e.pluginManager.addShape(shapeTypes, async container => { - const { ImageDrawer } = await import("./ImageDrawer.js"); - - return new ImageDrawer(e, container); - }); + e.pluginManager.addShape(shapeTypes, container => Promise.resolve(new ImageDrawer(e, container))); }); } diff --git a/shapes/image/webpack.config.js b/shapes/image/webpack.config.js deleted file mode 100644 index 427b1df1e52..00000000000 --- a/shapes/image/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesShape } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesShape({ - moduleName: "image", - shapeName: "Image", - version, - dir: __dirname, - progress: false, -}); diff --git a/shapes/infinity/CHANGELOG.md b/shapes/infinity/CHANGELOG.md index dc4fcde216b..a81e0b619bb 100644 --- a/shapes/infinity/CHANGELOG.md +++ b/shapes/infinity/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/shape-infinity + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/shape-infinity diff --git a/shapes/infinity/package.dist.json b/shapes/infinity/package.dist.json index 996db2e3175..6ab261f9449 100644 --- a/shapes/infinity/package.dist.json +++ b/shapes/infinity/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/shape-infinity", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles infinity shape", "homepage": "https://particles.js.org", "repository": { @@ -96,10 +96,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/shapes/infinity/package.json b/shapes/infinity/package.json index 555fde26d89..14f2ec0cbe5 100644 --- a/shapes/infinity/package.json +++ b/shapes/infinity/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/shape-infinity", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles infinity shape", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -103,12 +103,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/shapes/infinity/rollup.config.js b/shapes/infinity/rollup.config.js new file mode 100644 index 00000000000..464eba4f356 --- /dev/null +++ b/shapes/infinity/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesShape } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesShape({ + moduleName: "infinity", + shapeName: "Infinity", + version, + dir: __dirname, + progress: false, +}); diff --git a/shapes/infinity/src/browser.ts b/shapes/infinity/src/browser.ts new file mode 100644 index 00000000000..8a84c751dfb --- /dev/null +++ b/shapes/infinity/src/browser.ts @@ -0,0 +1,10 @@ +import { loadInfinityShape } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadInfinityShape?: typeof loadInfinityShape; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadInfinityShape = loadInfinityShape; + +export * from "./index.js"; diff --git a/shapes/infinity/src/index.lazy.ts b/shapes/infinity/src/index.lazy.ts new file mode 100644 index 00000000000..5660d0c6339 --- /dev/null +++ b/shapes/infinity/src/index.lazy.ts @@ -0,0 +1,16 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadInfinityShape(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { InfinityDrawer } = await import("./InfinityDrawer.js"); + + e.pluginManager.addShape(["infinity"], () => Promise.resolve(new InfinityDrawer())); + }); +} diff --git a/shapes/infinity/src/index.ts b/shapes/infinity/src/index.ts index c27dad5e797..96fa65c941f 100644 --- a/shapes/infinity/src/index.ts +++ b/shapes/infinity/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { InfinityDrawer } from "./InfinityDrawer.js"; declare const __VERSION__: string; @@ -9,10 +10,6 @@ export async function loadInfinityShape(engine: Engine): Promise { engine.checkVersion(__VERSION__); await engine.pluginManager.register(e => { - e.pluginManager.addShape(["infinity"], async () => { - const { InfinityDrawer } = await import("./InfinityDrawer.js"); - - return new InfinityDrawer(); - }); + e.pluginManager.addShape(["infinity"], () => Promise.resolve(new InfinityDrawer())); }); } diff --git a/shapes/infinity/webpack.config.js b/shapes/infinity/webpack.config.js deleted file mode 100644 index 7831e546c67..00000000000 --- a/shapes/infinity/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesShape } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesShape({ - moduleName: "infinity", - shapeName: "Infinity", - version, - dir: __dirname, - progress: false, -}); diff --git a/shapes/line/CHANGELOG.md b/shapes/line/CHANGELOG.md index 8f467e9f561..f37fd908b48 100644 --- a/shapes/line/CHANGELOG.md +++ b/shapes/line/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/shape-line + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/shape-line diff --git a/shapes/line/package.dist.json b/shapes/line/package.dist.json index a265b095467..836fd70444f 100644 --- a/shapes/line/package.dist.json +++ b/shapes/line/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/shape-line", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles line shape", "homepage": "https://particles.js.org", "repository": { @@ -55,10 +55,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/shapes/line/package.json b/shapes/line/package.json index 19f3d7e5473..8c05892b219 100644 --- a/shapes/line/package.json +++ b/shapes/line/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/shape-line", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles line shape", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -67,12 +67,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "type": "module" diff --git a/shapes/line/rollup.config.js b/shapes/line/rollup.config.js new file mode 100644 index 00000000000..29c5f9a20ae --- /dev/null +++ b/shapes/line/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesShape } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesShape({ + moduleName: "line", + shapeName: "Line", + version, + dir: __dirname, + progress: false, +}); diff --git a/shapes/line/src/browser.ts b/shapes/line/src/browser.ts new file mode 100644 index 00000000000..b016c5fb98e --- /dev/null +++ b/shapes/line/src/browser.ts @@ -0,0 +1,10 @@ +import { loadLineShape } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadLineShape?: typeof loadLineShape; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadLineShape = loadLineShape; + +export * from "./index.js"; diff --git a/shapes/line/src/index.lazy.ts b/shapes/line/src/index.lazy.ts new file mode 100644 index 00000000000..d6292b9047e --- /dev/null +++ b/shapes/line/src/index.lazy.ts @@ -0,0 +1,16 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadLineShape(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { LineDrawer } = await import("./LineDrawer.js"); + + e.pluginManager.addShape(["line"], () => Promise.resolve(new LineDrawer())); + }); +} diff --git a/shapes/line/src/index.ts b/shapes/line/src/index.ts index 21d08ecac15..eb1d6fa9d50 100644 --- a/shapes/line/src/index.ts +++ b/shapes/line/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { LineDrawer } from "./LineDrawer.js"; declare const __VERSION__: string; @@ -9,10 +10,6 @@ export async function loadLineShape(engine: Engine): Promise { engine.checkVersion(__VERSION__); await engine.pluginManager.register(e => { - e.pluginManager.addShape(["line"], async () => { - const { LineDrawer } = await import("./LineDrawer.js"); - - return new LineDrawer(); - }); + e.pluginManager.addShape(["line"], () => Promise.resolve(new LineDrawer())); }); } diff --git a/shapes/line/webpack.config.js b/shapes/line/webpack.config.js deleted file mode 100644 index bdbd8cc59e2..00000000000 --- a/shapes/line/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesShape } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesShape({ - moduleName: "line", - shapeName: "Line", - version, - dir: __dirname, - progress: false, -}); diff --git a/shapes/matrix/CHANGELOG.md b/shapes/matrix/CHANGELOG.md index 0ad24982047..e3f19641bf0 100644 --- a/shapes/matrix/CHANGELOG.md +++ b/shapes/matrix/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/shape-matrix + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/shape-matrix diff --git a/shapes/matrix/package.dist.json b/shapes/matrix/package.dist.json index 6f40d56db37..7e7f0289fa6 100644 --- a/shapes/matrix/package.dist.json +++ b/shapes/matrix/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/shape-matrix", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles matrix shape", "homepage": "https://particles.js.org", "repository": { @@ -96,10 +96,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/shapes/matrix/package.json b/shapes/matrix/package.json index 3716b8e0919..0e305eb6dcf 100644 --- a/shapes/matrix/package.json +++ b/shapes/matrix/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/shape-matrix", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles matrix shape", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -103,12 +103,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/shapes/matrix/rollup.config.js b/shapes/matrix/rollup.config.js new file mode 100644 index 00000000000..f75e0a4c569 --- /dev/null +++ b/shapes/matrix/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesShape } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesShape({ + moduleName: "matrix", + shapeName: "Matrix", + version, + dir: __dirname, + progress: false, +}); diff --git a/shapes/matrix/src/MatrixDrawer.ts b/shapes/matrix/src/MatrixDrawer.ts index 65f422d43f8..603c2bee94a 100644 --- a/shapes/matrix/src/MatrixDrawer.ts +++ b/shapes/matrix/src/MatrixDrawer.ts @@ -1,8 +1,9 @@ import type { IShapeDrawData, IShapeDrawer } from "@tsparticles/engine"; +import type { MatrixParticle } from "./MatrixParticle.js"; import { drawMatrix } from "./Utils.js"; -export class MatrixDrawer implements IShapeDrawer { - draw(data: IShapeDrawData): void { +export class MatrixDrawer implements IShapeDrawer { + draw(data: IShapeDrawData): void { drawMatrix(data); } } diff --git a/shapes/matrix/src/MatrixParticle.ts b/shapes/matrix/src/MatrixParticle.ts new file mode 100644 index 00000000000..ed97f59588a --- /dev/null +++ b/shapes/matrix/src/MatrixParticle.ts @@ -0,0 +1,6 @@ +import type { IMatrixOptions } from "./IMatrixOptions.js"; +import type { Particle } from "@tsparticles/engine"; + +export type MatrixParticle = Particle & { + shapeData?: IMatrixOptions; +}; diff --git a/shapes/matrix/src/Utils.ts b/shapes/matrix/src/Utils.ts index 5ecf4e8f7bd..a84f5b3a4c6 100644 --- a/shapes/matrix/src/Utils.ts +++ b/shapes/matrix/src/Utils.ts @@ -7,7 +7,7 @@ import { getRangeMin, originPoint, } from "@tsparticles/engine"; -import type { IMatrixOptions } from "./IMatrixOptions.js"; +import type { MatrixParticle } from "./MatrixParticle.js"; /** * Pool of Matrix-style characters: katakana, digits, Latin letters @@ -254,9 +254,9 @@ function getState(particle: Particle, minInterval: number, maxInterval: number): * Each particle changes its character at its own random speed. * @param data - shape draw data provided by tsparticles engine */ -export function drawMatrix(data: IShapeDrawData): void { +export function drawMatrix(data: IShapeDrawData): void { const { context, radius, particle, delta, fill, stroke } = data, - shapeData = particle.shapeData as IMatrixOptions | undefined, + shapeData = particle.shapeData, minInterval = getRangeMin(shapeData?.interval ?? defaultMinInterval), maxInterval = getRangeMax(shapeData?.interval ?? defaultMaxInterval), state = getState(particle, minInterval, maxInterval); diff --git a/shapes/matrix/src/browser.ts b/shapes/matrix/src/browser.ts new file mode 100644 index 00000000000..12d30cb0467 --- /dev/null +++ b/shapes/matrix/src/browser.ts @@ -0,0 +1,10 @@ +import { loadMatrixShape } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadMatrixShape?: typeof loadMatrixShape; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadMatrixShape = loadMatrixShape; + +export * from "./index.js"; diff --git a/shapes/matrix/src/index.lazy.ts b/shapes/matrix/src/index.lazy.ts new file mode 100644 index 00000000000..83f502f3cc2 --- /dev/null +++ b/shapes/matrix/src/index.lazy.ts @@ -0,0 +1,16 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadMatrixShape(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { MatrixDrawer } = await import("./MatrixDrawer.js"); + + e.pluginManager.addShape(["matrix"], () => Promise.resolve(new MatrixDrawer())); + }); +} diff --git a/shapes/matrix/src/index.ts b/shapes/matrix/src/index.ts index bbd771a9f01..57a432b275d 100644 --- a/shapes/matrix/src/index.ts +++ b/shapes/matrix/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { MatrixDrawer } from "./MatrixDrawer.js"; declare const __VERSION__: string; @@ -9,10 +10,6 @@ export async function loadMatrixShape(engine: Engine): Promise { engine.checkVersion(__VERSION__); await engine.pluginManager.register(e => { - e.pluginManager.addShape(["matrix"], async () => { - const { MatrixDrawer } = await import("./MatrixDrawer.js"); - - return new MatrixDrawer(); - }); + e.pluginManager.addShape(["matrix"], () => Promise.resolve(new MatrixDrawer())); }); } diff --git a/shapes/matrix/webpack.config.js b/shapes/matrix/webpack.config.js deleted file mode 100644 index 2e9fd1df891..00000000000 --- a/shapes/matrix/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesShape } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesShape({ - moduleName: "matrix", - shapeName: "Matrix", - version, - dir: __dirname, - progress: false, -}); diff --git a/shapes/path/CHANGELOG.md b/shapes/path/CHANGELOG.md index b6b3ff63a6a..7b66563ffd4 100644 --- a/shapes/path/CHANGELOG.md +++ b/shapes/path/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/shape-path + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/shape-path diff --git a/shapes/path/package.dist.json b/shapes/path/package.dist.json index e07b5f26e48..3550b820468 100644 --- a/shapes/path/package.dist.json +++ b/shapes/path/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/shape-path", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles path shape", "homepage": "https://particles.js.org", "repository": { @@ -96,11 +96,18 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12", - "@tsparticles/path-utils": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/path-utils": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/shapes/path/package.json b/shapes/path/package.json index ba4a8269757..844c026d7bb 100644 --- a/shapes/path/package.json +++ b/shapes/path/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/shape-path", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles path shape", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -103,6 +103,13 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { @@ -110,6 +117,8 @@ "@tsparticles/path-utils": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*", "@tsparticles/path-utils": "workspace:*" }, diff --git a/shapes/path/rollup.config.js b/shapes/path/rollup.config.js new file mode 100644 index 00000000000..bafb3b8ed4f --- /dev/null +++ b/shapes/path/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesShape } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesShape({ + moduleName: "path", + shapeName: "Path", + version, + dir: __dirname, + progress: false, +}); diff --git a/shapes/path/src/browser.ts b/shapes/path/src/browser.ts new file mode 100644 index 00000000000..e3687f58fc5 --- /dev/null +++ b/shapes/path/src/browser.ts @@ -0,0 +1,10 @@ +import { loadPathShape } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadPathShape?: typeof loadPathShape; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadPathShape = loadPathShape; + +export * from "./index.js"; diff --git a/shapes/path/src/index.lazy.ts b/shapes/path/src/index.lazy.ts new file mode 100644 index 00000000000..33371c0f0a4 --- /dev/null +++ b/shapes/path/src/index.lazy.ts @@ -0,0 +1,16 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadPathShape(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { PathDrawer } = await import("./PathDrawer.js"); + + e.pluginManager.addShape(["path"], () => Promise.resolve(new PathDrawer())); + }); +} diff --git a/shapes/path/src/index.ts b/shapes/path/src/index.ts index 6dccbd7f8dc..c078a58b204 100644 --- a/shapes/path/src/index.ts +++ b/shapes/path/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { PathDrawer } from "./PathDrawer.js"; declare const __VERSION__: string; @@ -9,10 +10,6 @@ export async function loadPathShape(engine: Engine): Promise { engine.checkVersion(__VERSION__); await engine.pluginManager.register(e => { - e.pluginManager.addShape(["path"], async () => { - const { PathDrawer } = await import("./PathDrawer.js"); - - return new PathDrawer(); - }); + e.pluginManager.addShape(["path"], () => Promise.resolve(new PathDrawer())); }); } diff --git a/shapes/path/webpack.config.js b/shapes/path/webpack.config.js deleted file mode 100644 index 1dad8a0a6d7..00000000000 --- a/shapes/path/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesShape } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesShape({ - moduleName: "path", - shapeName: "Path", - version, - dir: __dirname, - progress: false, -}); diff --git a/shapes/polygon/CHANGELOG.md b/shapes/polygon/CHANGELOG.md index 6b2f3f706c8..2ab801c7b67 100644 --- a/shapes/polygon/CHANGELOG.md +++ b/shapes/polygon/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/shape-polygon + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/shape-polygon diff --git a/shapes/polygon/package.dist.json b/shapes/polygon/package.dist.json index 02efeedd4b0..c9c38d8e35e 100644 --- a/shapes/polygon/package.dist.json +++ b/shapes/polygon/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/shape-polygon", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles polygon shape", "homepage": "https://particles.js.org", "repository": { @@ -55,10 +55,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/shapes/polygon/package.json b/shapes/polygon/package.json index 8743ae12247..4a0409e81d6 100644 --- a/shapes/polygon/package.json +++ b/shapes/polygon/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/shape-polygon", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles polygon shape", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -62,12 +62,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/shapes/polygon/rollup.config.js b/shapes/polygon/rollup.config.js new file mode 100644 index 00000000000..5c7edbe4d01 --- /dev/null +++ b/shapes/polygon/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesShape } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesShape({ + moduleName: "polygon", + shapeName: "Polygon", + version, + dir: __dirname, + progress: false, +}); diff --git a/shapes/polygon/src/browser.ts b/shapes/polygon/src/browser.ts new file mode 100644 index 00000000000..5b336600261 --- /dev/null +++ b/shapes/polygon/src/browser.ts @@ -0,0 +1,14 @@ +import { loadGenericPolygonShape, loadPolygonShape, loadTriangleShape } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadGenericPolygonShape?: typeof loadGenericPolygonShape; + loadPolygonShape?: typeof loadPolygonShape; + loadTriangleShape?: typeof loadTriangleShape; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadGenericPolygonShape = loadGenericPolygonShape; +globalObject.loadPolygonShape = loadPolygonShape; +globalObject.loadTriangleShape = loadTriangleShape; + +export * from "./index.js"; diff --git a/shapes/polygon/src/index.lazy.ts b/shapes/polygon/src/index.lazy.ts new file mode 100644 index 00000000000..230a0f8dcb6 --- /dev/null +++ b/shapes/polygon/src/index.lazy.ts @@ -0,0 +1,41 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadGenericPolygonShape(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { PolygonDrawer } = await import("./PolygonDrawer.js"); + + e.pluginManager.addShape(["polygon"], () => Promise.resolve(new PolygonDrawer())); + }); +} + +/** + * @param engine - + */ +export async function loadTriangleShape(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { TriangleDrawer } = await import("./TriangleDrawer.js"); + + e.pluginManager.addShape(["triangle"], () => Promise.resolve(new TriangleDrawer())); + }); +} + +/** + * @param engine - + */ +export async function loadPolygonShape(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await Promise.all([ + loadGenericPolygonShape(engine), + loadTriangleShape(engine), + ]); +} diff --git a/shapes/polygon/src/index.ts b/shapes/polygon/src/index.ts index 3616bb95e17..7b302f2d5d9 100644 --- a/shapes/polygon/src/index.ts +++ b/shapes/polygon/src/index.ts @@ -1,4 +1,6 @@ import { type Engine } from "@tsparticles/engine"; +import { PolygonDrawer } from "./PolygonDrawer.js"; +import { TriangleDrawer } from "./TriangleDrawer.js"; declare const __VERSION__: string; @@ -9,11 +11,7 @@ export async function loadGenericPolygonShape(engine: Engine): Promise { engine.checkVersion(__VERSION__); await engine.pluginManager.register(e => { - e.pluginManager.addShape(["polygon"], async () => { - const { PolygonDrawer } = await import("./PolygonDrawer.js"); - - return new PolygonDrawer(); - }); + e.pluginManager.addShape(["polygon"], () => Promise.resolve(new PolygonDrawer())); }); } @@ -24,11 +22,7 @@ export async function loadTriangleShape(engine: Engine): Promise { engine.checkVersion(__VERSION__); await engine.pluginManager.register(e => { - e.pluginManager.addShape(["triangle"], async () => { - const { TriangleDrawer } = await import("./TriangleDrawer.js"); - - return new TriangleDrawer(); - }); + e.pluginManager.addShape(["triangle"], () => Promise.resolve(new TriangleDrawer())); }); } diff --git a/shapes/polygon/webpack.config.js b/shapes/polygon/webpack.config.js deleted file mode 100644 index 933ab3fe3f9..00000000000 --- a/shapes/polygon/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesShape } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesShape({ - moduleName: "polygon", - shapeName: "Polygon", - version, - dir: __dirname, - progress: false, -}); diff --git a/shapes/rounded-polygon/CHANGELOG.md b/shapes/rounded-polygon/CHANGELOG.md index 767a772f021..1a4352674bb 100644 --- a/shapes/rounded-polygon/CHANGELOG.md +++ b/shapes/rounded-polygon/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/shape-rounded-polygon + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/shape-rounded-polygon diff --git a/shapes/rounded-polygon/package.dist.json b/shapes/rounded-polygon/package.dist.json index d633796be95..c1b5db9e47d 100644 --- a/shapes/rounded-polygon/package.dist.json +++ b/shapes/rounded-polygon/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/shape-rounded-polygon", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles rounded polygon shape", "homepage": "https://particles.js.org", "repository": { @@ -55,10 +55,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/shapes/rounded-polygon/package.json b/shapes/rounded-polygon/package.json index f3aa7995c85..1b62586b1a6 100644 --- a/shapes/rounded-polygon/package.json +++ b/shapes/rounded-polygon/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/shape-rounded-polygon", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles rounded polygon shape", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -62,12 +62,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/shapes/rounded-polygon/rollup.config.js b/shapes/rounded-polygon/rollup.config.js new file mode 100644 index 00000000000..c06618465b1 --- /dev/null +++ b/shapes/rounded-polygon/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesShape } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesShape({ + moduleName: "rounded-polygon", + shapeName: "RoundedPolygon", + version, + dir: __dirname, + progress: false, +}); diff --git a/shapes/rounded-polygon/src/IRoundedPolygonShape.ts b/shapes/rounded-polygon/src/IRoundedPolygonShape.ts index 4f6cc8e4626..8cafa6f8dc1 100644 --- a/shapes/rounded-polygon/src/IRoundedPolygonShape.ts +++ b/shapes/rounded-polygon/src/IRoundedPolygonShape.ts @@ -1,6 +1,6 @@ import type { IShapeValues, RangeValue } from "@tsparticles/engine"; export interface IRoundedPolygonShape extends IShapeValues { - radius: number; - sides: RangeValue; + radius?: number; + sides?: RangeValue; } diff --git a/shapes/rounded-polygon/src/RoundedParticle.ts b/shapes/rounded-polygon/src/RoundedParticle.ts index a267e8294a5..d2f25903248 100644 --- a/shapes/rounded-polygon/src/RoundedParticle.ts +++ b/shapes/rounded-polygon/src/RoundedParticle.ts @@ -1,5 +1,7 @@ +import type { IRoundedPolygonShape } from "./IRoundedPolygonShape.js"; import type { Particle } from "@tsparticles/engine"; export type RoundedParticle = Particle & { borderRadius?: number; + shapeData?: IRoundedPolygonShape; }; diff --git a/shapes/rounded-polygon/src/RoundedPolygonDrawer.ts b/shapes/rounded-polygon/src/RoundedPolygonDrawer.ts index 0e8e70e8fac..b9f9b0e18c8 100644 --- a/shapes/rounded-polygon/src/RoundedPolygonDrawer.ts +++ b/shapes/rounded-polygon/src/RoundedPolygonDrawer.ts @@ -1,12 +1,5 @@ -import { - type Container, - type IShapeDrawData, - type IShapeDrawer, - type Particle, - getRangeValue, -} from "@tsparticles/engine"; +import { type Container, type IShapeDrawData, type IShapeDrawer, getRangeValue } from "@tsparticles/engine"; import { polygon, roundedPath } from "./Utils.js"; -import type { IRoundedPolygonShape } from "./IRoundedPolygonShape.js"; import type { RoundedParticle } from "./RoundedParticle.js"; const defaultSides = 5, @@ -21,14 +14,14 @@ export class RoundedPolygonDrawer implements IShapeDrawer { roundedPath(context, polygon(particle.sides, radius), particle.borderRadius ?? defaultRadius); } - getSidesCount(particle: Particle): number { - const roundedPolygon = particle.shapeData as IRoundedPolygonShape | undefined; + getSidesCount(particle: RoundedParticle): number { + const roundedPolygon = particle.shapeData; return Math.round(getRangeValue(roundedPolygon?.sides ?? defaultSides)); } particleInit(container: Container, particle: RoundedParticle): void { - const shapeData = particle.shapeData as IRoundedPolygonShape | undefined; + const shapeData = particle.shapeData; particle.borderRadius = Math.round(getRangeValue(shapeData?.radius ?? defaultSides)) * container.retina.pixelRatio; } diff --git a/shapes/rounded-polygon/src/browser.ts b/shapes/rounded-polygon/src/browser.ts new file mode 100644 index 00000000000..2271f88bc14 --- /dev/null +++ b/shapes/rounded-polygon/src/browser.ts @@ -0,0 +1,10 @@ +import { loadRoundedPolygonShape } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadRoundedPolygonShape?: typeof loadRoundedPolygonShape; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadRoundedPolygonShape = loadRoundedPolygonShape; + +export * from "./index.js"; diff --git a/shapes/rounded-polygon/src/index.lazy.ts b/shapes/rounded-polygon/src/index.lazy.ts new file mode 100644 index 00000000000..771206bfb86 --- /dev/null +++ b/shapes/rounded-polygon/src/index.lazy.ts @@ -0,0 +1,16 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadRoundedPolygonShape(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { RoundedPolygonDrawer } = await import("./RoundedPolygonDrawer.js"); + + e.pluginManager.addShape(["rounded-polygon"], () => Promise.resolve(new RoundedPolygonDrawer())); + }); +} diff --git a/shapes/rounded-polygon/src/index.ts b/shapes/rounded-polygon/src/index.ts index 4493fbb01a5..0e9638fea61 100644 --- a/shapes/rounded-polygon/src/index.ts +++ b/shapes/rounded-polygon/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { RoundedPolygonDrawer } from "./RoundedPolygonDrawer.js"; declare const __VERSION__: string; @@ -9,10 +10,6 @@ export async function loadRoundedPolygonShape(engine: Engine): Promise { engine.checkVersion(__VERSION__); await engine.pluginManager.register(e => { - e.pluginManager.addShape(["rounded-polygon"], async () => { - const { RoundedPolygonDrawer } = await import("./RoundedPolygonDrawer.js"); - - return new RoundedPolygonDrawer(); - }); + e.pluginManager.addShape(["rounded-polygon"], () => Promise.resolve(new RoundedPolygonDrawer())); }); } diff --git a/shapes/rounded-polygon/webpack.config.js b/shapes/rounded-polygon/webpack.config.js deleted file mode 100644 index bee1af56bef..00000000000 --- a/shapes/rounded-polygon/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesShape } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesShape({ - moduleName: "rounded-polygon", - shapeName: "RoundedPolygon", - version, - dir: __dirname, - progress: false, -}); diff --git a/shapes/rounded-rect/CHANGELOG.md b/shapes/rounded-rect/CHANGELOG.md index 051c988b818..0a69a093ddd 100644 --- a/shapes/rounded-rect/CHANGELOG.md +++ b/shapes/rounded-rect/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/shape-rounded-rect + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/shape-rounded-rect diff --git a/shapes/rounded-rect/package.dist.json b/shapes/rounded-rect/package.dist.json index cbd9b1b662c..dd58086af2e 100644 --- a/shapes/rounded-rect/package.dist.json +++ b/shapes/rounded-rect/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/shape-rounded-rect", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles rounded rect shape", "homepage": "https://particles.js.org", "repository": { @@ -96,10 +96,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/shapes/rounded-rect/package.json b/shapes/rounded-rect/package.json index e5c1dc7e7ad..4534557e74d 100644 --- a/shapes/rounded-rect/package.json +++ b/shapes/rounded-rect/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/shape-rounded-rect", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles rounded rect shape", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -103,12 +103,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/shapes/rounded-rect/rollup.config.js b/shapes/rounded-rect/rollup.config.js new file mode 100644 index 00000000000..6bec265ce18 --- /dev/null +++ b/shapes/rounded-rect/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesShape } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesShape({ + moduleName: "rounded-rect", + shapeName: "Rounded Rect", + version, + dir: __dirname, + progress: false, +}); diff --git a/shapes/rounded-rect/src/IRoundedRectData.ts b/shapes/rounded-rect/src/IRoundedRectData.ts index 533fb0c8d60..42470c2e0d3 100644 --- a/shapes/rounded-rect/src/IRoundedRectData.ts +++ b/shapes/rounded-rect/src/IRoundedRectData.ts @@ -1,5 +1,5 @@ import type { IShapeValues, RangeValue } from "@tsparticles/engine"; export interface IRoundedRectData extends IShapeValues { - radius: RangeValue; + radius?: RangeValue; } diff --git a/shapes/rounded-rect/src/RoundedParticle.ts b/shapes/rounded-rect/src/RoundedParticle.ts index a267e8294a5..55665d2bd38 100644 --- a/shapes/rounded-rect/src/RoundedParticle.ts +++ b/shapes/rounded-rect/src/RoundedParticle.ts @@ -1,5 +1,7 @@ +import type { IRoundedRectData } from "./IRoundedRectData.js"; import type { Particle } from "@tsparticles/engine"; export type RoundedParticle = Particle & { borderRadius?: number; + shapeData?: IRoundedRectData; }; diff --git a/shapes/rounded-rect/src/RoundedRectDrawer.ts b/shapes/rounded-rect/src/RoundedRectDrawer.ts index cf9eb16a6ae..6fdd775942f 100644 --- a/shapes/rounded-rect/src/RoundedRectDrawer.ts +++ b/shapes/rounded-rect/src/RoundedRectDrawer.ts @@ -1,5 +1,4 @@ import { type Container, type IShapeDrawData, type IShapeDrawer, double, getRangeValue } from "@tsparticles/engine"; -import type { IRoundedRectData } from "./IRoundedRectData.js"; import type { RoundedParticle } from "./RoundedParticle.js"; import { drawRoundedRect } from "./Utils.js"; @@ -20,7 +19,7 @@ export class RoundedRectDrawer implements IShapeDrawer { } particleInit(container: Container, particle: RoundedParticle): void { - const shapeData = particle.shapeData as IRoundedRectData | undefined; + const shapeData = particle.shapeData; particle.borderRadius = getRangeValue(shapeData?.radius ?? defaultRadius) * container.retina.pixelRatio; } diff --git a/shapes/rounded-rect/src/browser.ts b/shapes/rounded-rect/src/browser.ts new file mode 100644 index 00000000000..bd8cbcea29d --- /dev/null +++ b/shapes/rounded-rect/src/browser.ts @@ -0,0 +1,10 @@ +import { loadRoundedRectShape } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadRoundedRectShape?: typeof loadRoundedRectShape; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadRoundedRectShape = loadRoundedRectShape; + +export * from "./index.js"; diff --git a/shapes/rounded-rect/src/index.lazy.ts b/shapes/rounded-rect/src/index.lazy.ts new file mode 100644 index 00000000000..dd06fbde690 --- /dev/null +++ b/shapes/rounded-rect/src/index.lazy.ts @@ -0,0 +1,18 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadRoundedRectShape(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(e => { + e.pluginManager.addShape(["rounded-rect"], async () => { + const { RoundedRectDrawer } = await import("./RoundedRectDrawer.js"); + + return new RoundedRectDrawer(); + }); + }); +} diff --git a/shapes/rounded-rect/src/index.ts b/shapes/rounded-rect/src/index.ts index 63b0349b6b6..92c5d072593 100644 --- a/shapes/rounded-rect/src/index.ts +++ b/shapes/rounded-rect/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { RoundedRectDrawer } from "./RoundedRectDrawer.js"; declare const __VERSION__: string; @@ -9,10 +10,6 @@ export async function loadRoundedRectShape(engine: Engine): Promise { engine.checkVersion(__VERSION__); await engine.pluginManager.register(e => { - e.pluginManager.addShape(["rounded-rect"], async () => { - const { RoundedRectDrawer } = await import("./RoundedRectDrawer.js"); - - return new RoundedRectDrawer(); - }); + e.pluginManager.addShape(["rounded-rect"], () => Promise.resolve(new RoundedRectDrawer())); }); } diff --git a/shapes/rounded-rect/webpack.config.js b/shapes/rounded-rect/webpack.config.js deleted file mode 100644 index 95f9bd8c281..00000000000 --- a/shapes/rounded-rect/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesShape } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesShape({ - moduleName: "rounded-rect", - shapeName: "Rounded Rect", - version, - dir: __dirname, - progress: false, -}); diff --git a/shapes/spiral/CHANGELOG.md b/shapes/spiral/CHANGELOG.md index f5b79e697f4..c7cc0f7c2d8 100644 --- a/shapes/spiral/CHANGELOG.md +++ b/shapes/spiral/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/shape-spiral + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/shape-spiral diff --git a/shapes/spiral/package.dist.json b/shapes/spiral/package.dist.json index a90c45b2481..910d697a1d9 100644 --- a/shapes/spiral/package.dist.json +++ b/shapes/spiral/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/shape-spiral", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles spiral shape", "homepage": "https://particles.js.org", "repository": { @@ -96,10 +96,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/shapes/spiral/package.json b/shapes/spiral/package.json index e048ed2a670..ac14a78a1d2 100644 --- a/shapes/spiral/package.json +++ b/shapes/spiral/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/shape-spiral", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles spiral shape", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -103,12 +103,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/shapes/spiral/rollup.config.js b/shapes/spiral/rollup.config.js new file mode 100644 index 00000000000..a25e21ce858 --- /dev/null +++ b/shapes/spiral/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesShape } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesShape({ + moduleName: "spiral", + shapeName: "Spiral", + version, + dir: __dirname, + progress: false, +}); diff --git a/shapes/spiral/src/ISpiralData.ts b/shapes/spiral/src/ISpiralData.ts index 696efa760fb..945bfbed76a 100644 --- a/shapes/spiral/src/ISpiralData.ts +++ b/shapes/spiral/src/ISpiralData.ts @@ -1,7 +1,7 @@ import type { IShapeValues, RangeValue } from "@tsparticles/engine"; export interface ISpiralData extends IShapeValues { - innerRadius: RangeValue; - lineSpacing: RangeValue; - widthFactor: RangeValue; + innerRadius?: RangeValue; + lineSpacing?: RangeValue; + widthFactor?: RangeValue; } diff --git a/shapes/spiral/src/SpiralDrawer.ts b/shapes/spiral/src/SpiralDrawer.ts index 9080fcc5734..7f0d10cb7b9 100644 --- a/shapes/spiral/src/SpiralDrawer.ts +++ b/shapes/spiral/src/SpiralDrawer.ts @@ -1,5 +1,4 @@ import { type Container, type IShapeDrawData, type IShapeDrawer, getRangeValue } from "@tsparticles/engine"; -import type { ISpiralData } from "./ISpiralData.js"; import type { SpiralParticle } from "./SpiralParticle.js"; import { drawSpiral } from "./Utils.js"; @@ -14,7 +13,7 @@ export class SpiralDrawer implements IShapeDrawer { particleInit(container: Container, particle: SpiralParticle): void { const pixelRatio = container.retina.pixelRatio, - shapeData = particle.shapeData as ISpiralData | undefined; + shapeData = particle.shapeData; particle.spiralInnerRadius = getRangeValue(shapeData?.innerRadius ?? defaultInnerRadius) * pixelRatio; particle.spiralLineSpacing = getRangeValue(shapeData?.lineSpacing ?? defaultLineSpacing) * pixelRatio; diff --git a/shapes/spiral/src/SpiralParticle.ts b/shapes/spiral/src/SpiralParticle.ts index ff68436e056..6f566f5348a 100644 --- a/shapes/spiral/src/SpiralParticle.ts +++ b/shapes/spiral/src/SpiralParticle.ts @@ -1,6 +1,8 @@ +import type { ISpiralData } from "./ISpiralData.js"; import type { Particle } from "@tsparticles/engine"; export type SpiralParticle = Particle & { + shapeData?: ISpiralData; spiralInnerRadius?: number; spiralLineSpacing?: number; spiralWidthFactor?: number; diff --git a/shapes/spiral/src/browser.ts b/shapes/spiral/src/browser.ts new file mode 100644 index 00000000000..896b59d380f --- /dev/null +++ b/shapes/spiral/src/browser.ts @@ -0,0 +1,10 @@ +import { loadSpiralShape } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadSpiralShape?: typeof loadSpiralShape; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadSpiralShape = loadSpiralShape; + +export * from "./index.js"; diff --git a/shapes/spiral/src/index.lazy.ts b/shapes/spiral/src/index.lazy.ts new file mode 100644 index 00000000000..06562518cee --- /dev/null +++ b/shapes/spiral/src/index.lazy.ts @@ -0,0 +1,16 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadSpiralShape(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { SpiralDrawer } = await import("./SpiralDrawer.js"); + + e.pluginManager.addShape(["spiral"], () => Promise.resolve(new SpiralDrawer())); + }); +} diff --git a/shapes/spiral/src/index.ts b/shapes/spiral/src/index.ts index 4723c1d6ef4..94f300d3fd5 100644 --- a/shapes/spiral/src/index.ts +++ b/shapes/spiral/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { SpiralDrawer } from "./SpiralDrawer.js"; declare const __VERSION__: string; @@ -9,10 +10,6 @@ export async function loadSpiralShape(engine: Engine): Promise { engine.checkVersion(__VERSION__); await engine.pluginManager.register(e => { - e.pluginManager.addShape(["spiral"], async () => { - const { SpiralDrawer } = await import("./SpiralDrawer.js"); - - return new SpiralDrawer(); - }); + e.pluginManager.addShape(["spiral"], () => Promise.resolve(new SpiralDrawer())); }); } diff --git a/shapes/spiral/webpack.config.js b/shapes/spiral/webpack.config.js deleted file mode 100644 index ee1a15bf68a..00000000000 --- a/shapes/spiral/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesShape } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesShape({ - moduleName: "spiral", - shapeName: "Spiral", - version, - dir: __dirname, - progress: false, -}); diff --git a/shapes/square/CHANGELOG.md b/shapes/square/CHANGELOG.md index 697615b0b7a..698098907db 100644 --- a/shapes/square/CHANGELOG.md +++ b/shapes/square/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/shape-square + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/shape-square diff --git a/shapes/square/package.dist.json b/shapes/square/package.dist.json index 280e9e1ba56..91302e38137 100644 --- a/shapes/square/package.dist.json +++ b/shapes/square/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/shape-square", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles square shape", "homepage": "https://particles.js.org", "repository": { @@ -55,10 +55,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/shapes/square/package.json b/shapes/square/package.json index 6bc05548153..0798ab9d72f 100644 --- a/shapes/square/package.json +++ b/shapes/square/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/shape-square", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles square shape", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -67,12 +67,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "type": "module" diff --git a/shapes/square/rollup.config.js b/shapes/square/rollup.config.js new file mode 100644 index 00000000000..f8b9078ad7a --- /dev/null +++ b/shapes/square/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesShape } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesShape({ + moduleName: "square", + shapeName: "Square", + version, + dir: __dirname, + progress: false, +}); diff --git a/shapes/square/src/browser.ts b/shapes/square/src/browser.ts new file mode 100644 index 00000000000..e10c5125e83 --- /dev/null +++ b/shapes/square/src/browser.ts @@ -0,0 +1,10 @@ +import { loadSquareShape } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadSquareShape?: typeof loadSquareShape; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadSquareShape = loadSquareShape; + +export * from "./index.js"; diff --git a/shapes/square/src/index.lazy.ts b/shapes/square/src/index.lazy.ts new file mode 100644 index 00000000000..37f4a88bbbe --- /dev/null +++ b/shapes/square/src/index.lazy.ts @@ -0,0 +1,16 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadSquareShape(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { SquareDrawer } = await import("./SquareDrawer.js"); + + e.pluginManager.addShape(["edge", "square"], () => Promise.resolve(new SquareDrawer())); + }); +} diff --git a/shapes/square/src/index.ts b/shapes/square/src/index.ts index f9b017a73ab..c40bb29d2c1 100644 --- a/shapes/square/src/index.ts +++ b/shapes/square/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { SquareDrawer } from "./SquareDrawer.js"; declare const __VERSION__: string; @@ -9,10 +10,6 @@ export async function loadSquareShape(engine: Engine): Promise { engine.checkVersion(__VERSION__); await engine.pluginManager.register(e => { - e.pluginManager.addShape(["edge", "square"], async () => { - const { SquareDrawer } = await import("./SquareDrawer.js"); - - return new SquareDrawer(); - }); + e.pluginManager.addShape(["edge", "square"], () => Promise.resolve(new SquareDrawer())); }); } diff --git a/shapes/square/webpack.config.js b/shapes/square/webpack.config.js deleted file mode 100644 index f98ae8cb4f5..00000000000 --- a/shapes/square/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesShape } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesShape({ - moduleName: "square", - shapeName: "Square", - version, - dir: __dirname, - progress: false, -}); diff --git a/shapes/squircle/CHANGELOG.md b/shapes/squircle/CHANGELOG.md index 4e0b0b71ad1..e54779a410c 100644 --- a/shapes/squircle/CHANGELOG.md +++ b/shapes/squircle/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/shape-squircle + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/shape-squircle diff --git a/shapes/squircle/package.dist.json b/shapes/squircle/package.dist.json index 0317f9fd23c..f1bdad53888 100644 --- a/shapes/squircle/package.dist.json +++ b/shapes/squircle/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/shape-squircle", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles squircle shape", "homepage": "https://particles.js.org", "repository": { @@ -96,10 +96,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/shapes/squircle/package.json b/shapes/squircle/package.json index 2882da4e2c9..c0d7b10c761 100644 --- a/shapes/squircle/package.json +++ b/shapes/squircle/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/shape-squircle", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles squircle shape", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -103,12 +103,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/shapes/squircle/rollup.config.js b/shapes/squircle/rollup.config.js new file mode 100644 index 00000000000..350b4363ecc --- /dev/null +++ b/shapes/squircle/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesShape } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesShape({ + moduleName: "squircle", + shapeName: "Squircle", + version, + dir: __dirname, + progress: false, +}); diff --git a/shapes/squircle/src/SquircleDrawer.ts b/shapes/squircle/src/SquircleDrawer.ts index 9d133a69088..f0135d3cffc 100644 --- a/shapes/squircle/src/SquircleDrawer.ts +++ b/shapes/squircle/src/SquircleDrawer.ts @@ -1,6 +1,5 @@ import { type Container, type IShapeDrawData, type IShapeDrawer, getRangeValue } from "@tsparticles/engine"; import { defaultExponent, defaultSteps, drawSquircle } from "./Utils.js"; -import type { ISquircleData } from "./ISquircleData.js"; import type { SquircleParticle } from "./SquircleParticle.js"; export class SquircleDrawer implements IShapeDrawer { @@ -9,7 +8,7 @@ export class SquircleDrawer implements IShapeDrawer { } particleInit(_container: Container, particle: SquircleParticle): void { - const shapeData = particle.shapeData as ISquircleData | undefined; + const shapeData = particle.shapeData; particle.squircleExponent = getRangeValue(shapeData?.exponent ?? defaultExponent); particle.squircleSteps = getRangeValue(shapeData?.steps ?? defaultSteps); diff --git a/shapes/squircle/src/SquircleParticle.ts b/shapes/squircle/src/SquircleParticle.ts index 7ee1457ef39..0798a761403 100644 --- a/shapes/squircle/src/SquircleParticle.ts +++ b/shapes/squircle/src/SquircleParticle.ts @@ -1,6 +1,8 @@ +import type { ISquircleData } from "./ISquircleData.js"; import type { Particle } from "@tsparticles/engine"; export type SquircleParticle = Particle & { + shapeData?: ISquircleData; squircleExponent?: number; squircleSteps?: number; }; diff --git a/shapes/squircle/src/browser.ts b/shapes/squircle/src/browser.ts new file mode 100644 index 00000000000..26aac50ebd2 --- /dev/null +++ b/shapes/squircle/src/browser.ts @@ -0,0 +1,10 @@ +import { loadSquircleShape } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadSquircleShape?: typeof loadSquircleShape; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadSquircleShape = loadSquircleShape; + +export * from "./index.js"; diff --git a/shapes/squircle/src/index.lazy.ts b/shapes/squircle/src/index.lazy.ts new file mode 100644 index 00000000000..d250f06e8dc --- /dev/null +++ b/shapes/squircle/src/index.lazy.ts @@ -0,0 +1,16 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadSquircleShape(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(async e => { + const { SquircleDrawer } = await import("./SquircleDrawer.js"); + + e.pluginManager.addShape(["squircle"], () => Promise.resolve(new SquircleDrawer())); + }); +} diff --git a/shapes/squircle/src/index.ts b/shapes/squircle/src/index.ts index 9f2a37ee088..2a853c9a0d0 100644 --- a/shapes/squircle/src/index.ts +++ b/shapes/squircle/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { SquircleDrawer } from "./SquircleDrawer.js"; declare const __VERSION__: string; @@ -9,10 +10,6 @@ export async function loadSquircleShape(engine: Engine): Promise { engine.checkVersion(__VERSION__); await engine.pluginManager.register(e => { - e.pluginManager.addShape(["squircle"], async () => { - const { SquircleDrawer } = await import("./SquircleDrawer.js"); - - return new SquircleDrawer(); - }); + e.pluginManager.addShape(["squircle"], () => Promise.resolve(new SquircleDrawer())); }); } diff --git a/shapes/squircle/webpack.config.js b/shapes/squircle/webpack.config.js deleted file mode 100644 index 99d2d5aba01..00000000000 --- a/shapes/squircle/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesShape } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesShape({ - moduleName: "squircle", - shapeName: "Squircle", - version, - dir: __dirname, - progress: false, -}); diff --git a/shapes/star/CHANGELOG.md b/shapes/star/CHANGELOG.md index bedbbf368e1..a6053283b85 100644 --- a/shapes/star/CHANGELOG.md +++ b/shapes/star/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/shape-star + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/shape-star diff --git a/shapes/star/package.dist.json b/shapes/star/package.dist.json index ab943c005b8..a43de40d5eb 100644 --- a/shapes/star/package.dist.json +++ b/shapes/star/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/shape-star", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles star shape", "homepage": "https://particles.js.org", "repository": { @@ -55,10 +55,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/shapes/star/package.json b/shapes/star/package.json index 2cafe1552eb..8ac4326d9dd 100644 --- a/shapes/star/package.json +++ b/shapes/star/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/shape-star", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles star shape", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -62,12 +62,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/shapes/star/rollup.config.js b/shapes/star/rollup.config.js new file mode 100644 index 00000000000..9b7a84cef22 --- /dev/null +++ b/shapes/star/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesShape } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesShape({ + moduleName: "star", + shapeName: "Star", + version, + dir: __dirname, + progress: false, +}); diff --git a/shapes/star/src/browser.ts b/shapes/star/src/browser.ts new file mode 100644 index 00000000000..48c7e6651d1 --- /dev/null +++ b/shapes/star/src/browser.ts @@ -0,0 +1,10 @@ +import { loadStarShape } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadStarShape?: typeof loadStarShape; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadStarShape = loadStarShape; + +export * from "./index.js"; diff --git a/shapes/star/src/index.lazy.ts b/shapes/star/src/index.lazy.ts new file mode 100644 index 00000000000..4555db020a4 --- /dev/null +++ b/shapes/star/src/index.lazy.ts @@ -0,0 +1,18 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadStarShape(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(e => { + e.pluginManager.addShape(["star"], async () => { + const { StarDrawer } = await import("./StarDrawer.js"); + + return new StarDrawer(); + }); + }); +} diff --git a/shapes/star/src/index.ts b/shapes/star/src/index.ts index eae8a7a4b52..38a98b5841e 100644 --- a/shapes/star/src/index.ts +++ b/shapes/star/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { StarDrawer } from "./StarDrawer.js"; declare const __VERSION__: string; @@ -9,10 +10,6 @@ export async function loadStarShape(engine: Engine): Promise { engine.checkVersion(__VERSION__); await engine.pluginManager.register(e => { - e.pluginManager.addShape(["star"], async () => { - const { StarDrawer } = await import("./StarDrawer.js"); - - return new StarDrawer(); - }); + e.pluginManager.addShape(["star"], () => Promise.resolve(new StarDrawer())); }); } diff --git a/shapes/star/webpack.config.js b/shapes/star/webpack.config.js deleted file mode 100644 index 4e52c0b7388..00000000000 --- a/shapes/star/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesShape } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesShape({ - moduleName: "star", - shapeName: "Star", - version, - dir: __dirname, - progress: false, -}); diff --git a/shapes/text/CHANGELOG.md b/shapes/text/CHANGELOG.md index c8be140f0e3..5c7644fb9a1 100644 --- a/shapes/text/CHANGELOG.md +++ b/shapes/text/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/shape-text + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/shape-text diff --git a/shapes/text/package.dist.json b/shapes/text/package.dist.json index 5f6a8bf7449..2cc71b611e2 100644 --- a/shapes/text/package.dist.json +++ b/shapes/text/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/shape-text", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles text shape", "homepage": "https://particles.js.org", "repository": { @@ -55,11 +55,18 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/canvas-utils": "4.0.0-beta.12", - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/canvas-utils": "4.0.0-beta.15", + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/shapes/text/package.json b/shapes/text/package.json index 5b02b7b6c23..5e2aee37b72 100644 --- a/shapes/text/package.json +++ b/shapes/text/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/shape-text", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles text shape", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -62,6 +62,13 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { @@ -70,6 +77,8 @@ }, "devDependencies": { "@tsparticles/canvas-utils": "workspace:*", + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/shapes/text/rollup.config.js b/shapes/text/rollup.config.js new file mode 100644 index 00000000000..5f41f6dc285 --- /dev/null +++ b/shapes/text/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesShape } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesShape({ + moduleName: "text", + shapeName: "Text", + version, + dir: __dirname, + progress: false, +}); diff --git a/shapes/text/src/TextDrawer.ts b/shapes/text/src/TextDrawer.ts index 443dba34ed2..c41f07244af 100644 --- a/shapes/text/src/TextDrawer.ts +++ b/shapes/text/src/TextDrawer.ts @@ -50,7 +50,7 @@ export class TextDrawer implements IShapeDrawer { return; } - const character = particle.shapeData as ITextShape | undefined; + const character = particle.shapeData; if (character === undefined) { return; diff --git a/shapes/text/src/TextParticle.ts b/shapes/text/src/TextParticle.ts index 28c3d98ab54..31c0412b561 100644 --- a/shapes/text/src/TextParticle.ts +++ b/shapes/text/src/TextParticle.ts @@ -1,6 +1,8 @@ +import type { ITextShape } from "./ITextShape.js"; import type { Particle } from "@tsparticles/engine"; export interface TextParticle extends Particle { maxTextLength?: number; + shapeData?: ITextShape; textLines?: string[]; } diff --git a/shapes/text/src/Utils.ts b/shapes/text/src/Utils.ts index 632af9c14f9..e5547c4496b 100644 --- a/shapes/text/src/Utils.ts +++ b/shapes/text/src/Utils.ts @@ -5,7 +5,6 @@ import { half, itemFromSingleOrMultiple, } from "@tsparticles/engine"; -import type { ITextShape } from "./ITextShape.js"; import type { TextParticle } from "./TextParticle.js"; export const validTypes = ["text", "character", "char", "multiline-text"]; @@ -19,7 +18,7 @@ const firstIndex = 0, */ export function drawText(data: IShapeDrawData): void { const { context, particle, fill, stroke, radius, opacity } = data, - character = particle.shapeData as ITextShape | undefined; + character = particle.shapeData; if (!character) { return; diff --git a/shapes/text/src/browser.ts b/shapes/text/src/browser.ts new file mode 100644 index 00000000000..9add4854c75 --- /dev/null +++ b/shapes/text/src/browser.ts @@ -0,0 +1,10 @@ +import { loadTextShape } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadTextShape?: typeof loadTextShape; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadTextShape = loadTextShape; + +export * from "./index.js"; diff --git a/shapes/text/src/index.lazy.ts b/shapes/text/src/index.lazy.ts new file mode 100644 index 00000000000..6f6cf6c8884 --- /dev/null +++ b/shapes/text/src/index.lazy.ts @@ -0,0 +1,19 @@ +import { type Engine } from "@tsparticles/engine/lazy"; +import { validTypes } from "./Utils.js"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadTextShape(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(e => { + e.pluginManager.addShape(validTypes, async () => { + const { TextDrawer } = await import("./TextDrawer.js"); + + return new TextDrawer(); + }); + }); +} diff --git a/shapes/text/src/index.ts b/shapes/text/src/index.ts index e3ffd6a52e0..a60e4e49872 100644 --- a/shapes/text/src/index.ts +++ b/shapes/text/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { TextDrawer } from "./TextDrawer.js"; import { validTypes } from "./Utils.js"; declare const __VERSION__: string; @@ -10,10 +11,6 @@ export async function loadTextShape(engine: Engine): Promise { engine.checkVersion(__VERSION__); await engine.pluginManager.register(e => { - e.pluginManager.addShape(validTypes, async () => { - const { TextDrawer } = await import("./TextDrawer.js"); - - return new TextDrawer(); - }); + e.pluginManager.addShape(validTypes, () => Promise.resolve(new TextDrawer())); }); } diff --git a/shapes/text/webpack.config.js b/shapes/text/webpack.config.js deleted file mode 100644 index 81516f64573..00000000000 --- a/shapes/text/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesShape } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesShape({ - moduleName: "text", - shapeName: "Text", - version, - dir: __dirname, - progress: false, -}); diff --git a/templates/react-ts/CHANGELOG.md b/templates/react-ts/CHANGELOG.md index 39c4d8b0e94..4dcaa00e1b3 100644 --- a/templates/react-ts/CHANGELOG.md +++ b/templates/react-ts/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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 cra-template-particles-typescript + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package cra-template-particles-typescript diff --git a/templates/react-ts/package.json b/templates/react-ts/package.json index d1452d557be..8f0603c0a0e 100644 --- a/templates/react-ts/package.json +++ b/templates/react-ts/package.json @@ -1,6 +1,6 @@ { "name": "cra-template-particles-typescript", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "Official TypeScript React tsParticles template", "keywords": [ "front-end", diff --git a/templates/react-ts/template.json b/templates/react-ts/template.json index 844b01e5c91..71a286a68cf 100644 --- a/templates/react-ts/template.json +++ b/templates/react-ts/template.json @@ -9,12 +9,12 @@ "@types/react": "^19.2.14", "@types/react-dom": "^19.2.3", "@types/jest": "^30.0.0", - "@tsparticles/react": "^4.0.0-beta.12", - "@tsparticles/engine": "^4.0.0-beta.12", + "@tsparticles/react": "^4.0.0-beta.15", + "@tsparticles/engine": "^4.0.0-beta.15", "tslib": "^2.8.1", "typescript": "^6.0.2", "web-vitals": "^5.2.0", - "tsparticles": "^4.0.0-beta.12" + "tsparticles": "^4.0.0-beta.15" } } } \ No newline at end of file diff --git a/templates/react/CHANGELOG.md b/templates/react/CHANGELOG.md index ce64b63b192..9046b5c1c7f 100644 --- a/templates/react/CHANGELOG.md +++ b/templates/react/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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 cra-template-particles + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package cra-template-particles diff --git a/templates/react/package.json b/templates/react/package.json index f411d0bc83f..2c13bfb49b3 100644 --- a/templates/react/package.json +++ b/templates/react/package.json @@ -1,6 +1,6 @@ { "name": "cra-template-particles", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "Official React tsParticles template", "keywords": [ "front-end", diff --git a/templates/react/template.json b/templates/react/template.json index 06b576eced2..af06c6822e0 100644 --- a/templates/react/template.json +++ b/templates/react/template.json @@ -1,9 +1,9 @@ { "package": { "dependencies": { - "@tsparticles/react": "^4.0.0-beta.12", - "@tsparticles/engine": "^4.0.0-beta.12", - "tsparticles": "^4.0.0-beta.12", + "@tsparticles/react": "^4.0.0-beta.15", + "@tsparticles/engine": "^4.0.0-beta.15", + "tsparticles": "^4.0.0-beta.15", "tslib": "^2.8.1" } } diff --git a/tsconfig.json b/tsconfig.json index 60113bf665f..39bc88f9e15 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -11,7 +11,7 @@ // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ /* Language and Environment */ - "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + "target": "es2016" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ // "jsx": "preserve", /* Specify what JSX code is generated. */ // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ @@ -25,7 +25,7 @@ // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ /* Modules */ - "module": "commonjs", /* Specify what module code is generated. */ + "module": "commonjs" /* Specify what module code is generated. */, //"rootDir": "./", /* Specify the root folder within your source files. */ // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ @@ -35,7 +35,7 @@ // "types": [], /* Specify type package names to be included without being referenced in a source file. */ // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ - "resolveJsonModule": true, /* Enable importing .json files. */ + "resolveJsonModule": true /* Enable importing .json files. */, // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ /* JavaScript Support */ @@ -70,12 +70,12 @@ /* Interop Constraints */ // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ - "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ - "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, /* Type Checking */ - "strict": true /* Enable all strict type-checking options. */ + "strict": true /* Enable all strict type-checking options. */ // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ @@ -98,5 +98,5 @@ /* Completeness */ // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ // "skipLibCheck": true /* Skip type checking all .d.ts files. */ - } + } } diff --git a/updaters/destroy/CHANGELOG.md b/updaters/destroy/CHANGELOG.md index 49ad2cf2f99..15785a5062a 100644 --- a/updaters/destroy/CHANGELOG.md +++ b/updaters/destroy/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/updater-destroy + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) ### Features diff --git a/updaters/destroy/package.dist.json b/updaters/destroy/package.dist.json index 069557c764b..689d3f99e36 100644 --- a/updaters/destroy/package.dist.json +++ b/updaters/destroy/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/updater-destroy", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles particles destroy updater", "homepage": "https://particles.js.org", "repository": { @@ -83,10 +83,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/updaters/destroy/package.json b/updaters/destroy/package.json index 0ae6eaadc94..c741b9197f2 100644 --- a/updaters/destroy/package.json +++ b/updaters/destroy/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/updater-destroy", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles particles destroy updater", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -90,12 +90,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/updaters/destroy/rollup.config.js b/updaters/destroy/rollup.config.js new file mode 100644 index 00000000000..9817a56a485 --- /dev/null +++ b/updaters/destroy/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesUpdater } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesUpdater({ + moduleName: "destroy", + updaterName: "Destroy", + version, + dir: __dirname, + progress: false, +}); diff --git a/updaters/destroy/src/browser.ts b/updaters/destroy/src/browser.ts new file mode 100644 index 00000000000..b8f428967df --- /dev/null +++ b/updaters/destroy/src/browser.ts @@ -0,0 +1,10 @@ +import { loadDestroyUpdater } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadDestroyUpdater?: typeof loadDestroyUpdater; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadDestroyUpdater = loadDestroyUpdater; + +export * from "./index.js"; diff --git a/updaters/destroy/src/index.lazy.ts b/updaters/destroy/src/index.lazy.ts new file mode 100644 index 00000000000..eeac5fc9535 --- /dev/null +++ b/updaters/destroy/src/index.lazy.ts @@ -0,0 +1,18 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadDestroyUpdater(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(e => { + e.pluginManager.addParticleUpdater("destroy", async container => { + const { DestroyUpdater } = await import("./DestroyUpdater.js"); + + return new DestroyUpdater(e.pluginManager, container); + }); + }); +} diff --git a/updaters/destroy/src/index.ts b/updaters/destroy/src/index.ts index a9a7a1851d3..cc13ee05741 100644 --- a/updaters/destroy/src/index.ts +++ b/updaters/destroy/src/index.ts @@ -1,3 +1,4 @@ +import { DestroyUpdater } from "./DestroyUpdater.js"; import { type Engine } from "@tsparticles/engine"; declare const __VERSION__: string; @@ -9,10 +10,8 @@ export async function loadDestroyUpdater(engine: Engine): Promise { engine.checkVersion(__VERSION__); await engine.pluginManager.register(e => { - e.pluginManager.addParticleUpdater("destroy", async container => { - const { DestroyUpdater } = await import("./DestroyUpdater.js"); - - return new DestroyUpdater(e.pluginManager, container); + e.pluginManager.addParticleUpdater("destroy", container => { + return Promise.resolve(new DestroyUpdater(e.pluginManager, container)); }); }); } diff --git a/updaters/destroy/webpack.config.js b/updaters/destroy/webpack.config.js deleted file mode 100644 index 2faa9e9a207..00000000000 --- a/updaters/destroy/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesUpdater } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesUpdater({ - moduleName: "destroy", - updaterName: "Destroy", - version, - dir: __dirname, - progress: false, -}); diff --git a/updaters/gradient/CHANGELOG.md b/updaters/gradient/CHANGELOG.md index faf5c193b07..4469544cf7d 100644 --- a/updaters/gradient/CHANGELOG.md +++ b/updaters/gradient/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/updater-gradient + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/updater-gradient diff --git a/updaters/gradient/package.dist.json b/updaters/gradient/package.dist.json index 256730c665c..85a74aa639d 100644 --- a/updaters/gradient/package.dist.json +++ b/updaters/gradient/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/updater-gradient", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles particles gradient updater", "homepage": "https://particles.js.org", "repository": { @@ -97,10 +97,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/updaters/gradient/package.json b/updaters/gradient/package.json index f8d431b18bb..9e41f54ef4e 100644 --- a/updaters/gradient/package.json +++ b/updaters/gradient/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/updater-gradient", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles particles gradient updater", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -104,12 +104,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/updaters/gradient/rollup.config.js b/updaters/gradient/rollup.config.js new file mode 100644 index 00000000000..b128cfe8527 --- /dev/null +++ b/updaters/gradient/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesUpdater } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesUpdater({ + moduleName: "gradient", + updaterName: "Gradient", + version, + dir: __dirname, + progress: false, +}); diff --git a/updaters/gradient/src/browser.ts b/updaters/gradient/src/browser.ts new file mode 100644 index 00000000000..d8e3ca87791 --- /dev/null +++ b/updaters/gradient/src/browser.ts @@ -0,0 +1,10 @@ +import { loadGradientUpdater } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadGradientUpdater?: typeof loadGradientUpdater; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadGradientUpdater = loadGradientUpdater; + +export * from "./index.js"; diff --git a/updaters/gradient/src/index.lazy.ts b/updaters/gradient/src/index.lazy.ts new file mode 100644 index 00000000000..6fc686f7414 --- /dev/null +++ b/updaters/gradient/src/index.lazy.ts @@ -0,0 +1,18 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadGradientUpdater(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(e => { + e.pluginManager.addParticleUpdater("gradient", async container => { + const { GradientUpdater } = await import("./GradientUpdater.js"); + + return new GradientUpdater(e.pluginManager, container); + }); + }); +} diff --git a/updaters/gradient/src/index.ts b/updaters/gradient/src/index.ts index 417182523b0..d20c2a6e510 100644 --- a/updaters/gradient/src/index.ts +++ b/updaters/gradient/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { GradientUpdater } from "./GradientUpdater.js"; declare const __VERSION__: string; @@ -9,10 +10,8 @@ export async function loadGradientUpdater(engine: Engine): Promise { engine.checkVersion(__VERSION__); await engine.pluginManager.register(e => { - e.pluginManager.addParticleUpdater("gradient", async container => { - const { GradientUpdater } = await import("./GradientUpdater.js"); - - return new GradientUpdater(e.pluginManager, container); + e.pluginManager.addParticleUpdater("gradient", container => { + return Promise.resolve(new GradientUpdater(e.pluginManager, container)); }); }); } diff --git a/updaters/gradient/webpack.config.js b/updaters/gradient/webpack.config.js deleted file mode 100644 index 905175d41ae..00000000000 --- a/updaters/gradient/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesUpdater } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesUpdater({ - moduleName: "gradient", - updaterName: "Gradient", - version, - dir: __dirname, - progress: false, -}); diff --git a/updaters/life/CHANGELOG.md b/updaters/life/CHANGELOG.md index 76236d48a1a..4b75fe984f7 100644 --- a/updaters/life/CHANGELOG.md +++ b/updaters/life/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/updater-life + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/updater-life diff --git a/updaters/life/package.dist.json b/updaters/life/package.dist.json index 15f557ab586..fa2574692f3 100644 --- a/updaters/life/package.dist.json +++ b/updaters/life/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/updater-life", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles particles life updater", "homepage": "https://particles.js.org", "repository": { @@ -83,10 +83,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/updaters/life/package.json b/updaters/life/package.json index 0bee3f0f58a..2d24c4efe89 100644 --- a/updaters/life/package.json +++ b/updaters/life/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/updater-life", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles particles life updater", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -90,12 +90,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/updaters/life/rollup.config.js b/updaters/life/rollup.config.js new file mode 100644 index 00000000000..a141b43e834 --- /dev/null +++ b/updaters/life/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesUpdater } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesUpdater({ + moduleName: "life", + updaterName: "Life", + version, + dir: __dirname, + progress: false, +}); diff --git a/updaters/life/src/LifeUpdater.ts b/updaters/life/src/LifeUpdater.ts index 038e02e841c..b3b92bf86cd 100644 --- a/updaters/life/src/LifeUpdater.ts +++ b/updaters/life/src/LifeUpdater.ts @@ -32,16 +32,17 @@ export class LifeUpdater implements IParticleUpdater { return; } + const delayFactor = lifeOptions.delay.sync ? identity : getRandom(), + durationFactor = lifeOptions.duration.sync ? identity : getRandom(); + particle.life = { delay: container.retina.reduceFactor - ? ((getRangeValue(lifeOptions.delay.value) * (lifeOptions.delay.sync ? identity : getRandom())) / - container.retina.reduceFactor) * + ? ((getRangeValue(lifeOptions.delay.value) * delayFactor) / container.retina.reduceFactor) * millisecondsToSeconds : noTime, delayTime: noTime, duration: container.retina.reduceFactor - ? ((getRangeValue(lifeOptions.duration.value) * (lifeOptions.duration.sync ? identity : getRandom())) / - container.retina.reduceFactor) * + ? ((getRangeValue(lifeOptions.duration.value) * durationFactor) / container.retina.reduceFactor) * millisecondsToSeconds : noTime, time: noTime, diff --git a/updaters/life/src/browser.ts b/updaters/life/src/browser.ts new file mode 100644 index 00000000000..09e600d30a8 --- /dev/null +++ b/updaters/life/src/browser.ts @@ -0,0 +1,10 @@ +import { loadLifeUpdater } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadLifeUpdater?: typeof loadLifeUpdater; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadLifeUpdater = loadLifeUpdater; + +export * from "./index.js"; diff --git a/updaters/life/src/index.lazy.ts b/updaters/life/src/index.lazy.ts new file mode 100644 index 00000000000..e33eb144fde --- /dev/null +++ b/updaters/life/src/index.lazy.ts @@ -0,0 +1,18 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadLifeUpdater(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(e => { + e.pluginManager.addParticleUpdater("life", async container => { + const { LifeUpdater } = await import("./LifeUpdater.js"); + + return new LifeUpdater(container); + }); + }); +} diff --git a/updaters/life/src/index.ts b/updaters/life/src/index.ts index 44b654ff89b..4f36ac6e1d8 100644 --- a/updaters/life/src/index.ts +++ b/updaters/life/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { LifeUpdater } from "./LifeUpdater.js"; declare const __VERSION__: string; @@ -9,10 +10,8 @@ export async function loadLifeUpdater(engine: Engine): Promise { engine.checkVersion(__VERSION__); await engine.pluginManager.register(e => { - e.pluginManager.addParticleUpdater("life", async container => { - const { LifeUpdater } = await import("./LifeUpdater.js"); - - return new LifeUpdater(container); + e.pluginManager.addParticleUpdater("life", container => { + return Promise.resolve(new LifeUpdater(container)); }); }); } diff --git a/updaters/life/webpack.config.js b/updaters/life/webpack.config.js deleted file mode 100644 index 519ad4931cb..00000000000 --- a/updaters/life/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesUpdater } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesUpdater({ - moduleName: "life", - updaterName: "Life", - version, - dir: __dirname, - progress: false, -}); diff --git a/updaters/opacity/CHANGELOG.md b/updaters/opacity/CHANGELOG.md index c6f8d0b0e4f..09ca1782ef8 100644 --- a/updaters/opacity/CHANGELOG.md +++ b/updaters/opacity/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/updater-opacity + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/updater-opacity diff --git a/updaters/opacity/package.dist.json b/updaters/opacity/package.dist.json index f47c6c52397..3c51d670221 100644 --- a/updaters/opacity/package.dist.json +++ b/updaters/opacity/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/updater-opacity", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles particles opacity updater", "homepage": "https://particles.js.org", "repository": { @@ -83,10 +83,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/updaters/opacity/package.json b/updaters/opacity/package.json index 948fecf5bde..64ef9da3df4 100644 --- a/updaters/opacity/package.json +++ b/updaters/opacity/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/updater-opacity", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles particles opacity updater", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -87,12 +87,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/updaters/opacity/rollup.config.js b/updaters/opacity/rollup.config.js new file mode 100644 index 00000000000..85a7347e5ab --- /dev/null +++ b/updaters/opacity/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesUpdater } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesUpdater({ + moduleName: "opacity", + updaterName: "Opacity", + version, + dir: __dirname, + progress: false, +}); diff --git a/updaters/opacity/src/browser.ts b/updaters/opacity/src/browser.ts new file mode 100644 index 00000000000..ea3c871e076 --- /dev/null +++ b/updaters/opacity/src/browser.ts @@ -0,0 +1,10 @@ +import { loadOpacityUpdater } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadOpacityUpdater?: typeof loadOpacityUpdater; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadOpacityUpdater = loadOpacityUpdater; + +export * from "./index.js"; diff --git a/updaters/opacity/src/index.lazy.ts b/updaters/opacity/src/index.lazy.ts new file mode 100644 index 00000000000..fb36d9782bb --- /dev/null +++ b/updaters/opacity/src/index.lazy.ts @@ -0,0 +1,18 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - The engine instance to load the updater for + */ +export async function loadOpacityUpdater(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(e => { + e.pluginManager.addParticleUpdater("opacity", async container => { + const { OpacityUpdater } = await import("./OpacityUpdater.js"); + + return new OpacityUpdater(container); + }); + }); +} diff --git a/updaters/opacity/src/index.ts b/updaters/opacity/src/index.ts index 0fc3b6dfa05..2f804bc91f7 100644 --- a/updaters/opacity/src/index.ts +++ b/updaters/opacity/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { OpacityUpdater } from "./OpacityUpdater.js"; declare const __VERSION__: string; @@ -9,10 +10,8 @@ export async function loadOpacityUpdater(engine: Engine): Promise { engine.checkVersion(__VERSION__); await engine.pluginManager.register(e => { - e.pluginManager.addParticleUpdater("opacity", async container => { - const { OpacityUpdater } = await import("./OpacityUpdater.js"); - - return new OpacityUpdater(container); + e.pluginManager.addParticleUpdater("opacity", container => { + return Promise.resolve(new OpacityUpdater(container)); }); }); } diff --git a/updaters/opacity/webpack.config.js b/updaters/opacity/webpack.config.js deleted file mode 100644 index 16efdb892c1..00000000000 --- a/updaters/opacity/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesUpdater } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesUpdater({ - moduleName: "opacity", - updaterName: "Opacity", - version, - dir: __dirname, - progress: false, -}); diff --git a/updaters/orbit/CHANGELOG.md b/updaters/orbit/CHANGELOG.md index 32c34d9878c..290cf25d8b3 100644 --- a/updaters/orbit/CHANGELOG.md +++ b/updaters/orbit/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/updater-orbit + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/updater-orbit diff --git a/updaters/orbit/package.dist.json b/updaters/orbit/package.dist.json index 77b428b3e5b..66430c40f1e 100644 --- a/updaters/orbit/package.dist.json +++ b/updaters/orbit/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/updater-orbit", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles particles orbit updater", "homepage": "https://particles.js.org", "repository": { @@ -97,10 +97,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/updaters/orbit/package.json b/updaters/orbit/package.json index 0423d7de366..1b5e8c02340 100644 --- a/updaters/orbit/package.json +++ b/updaters/orbit/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/updater-orbit", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles particles orbit updater", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -104,12 +104,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/updaters/orbit/rollup.config.js b/updaters/orbit/rollup.config.js new file mode 100644 index 00000000000..94382b03c97 --- /dev/null +++ b/updaters/orbit/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesUpdater } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesUpdater({ + moduleName: "orbit", + updaterName: "Orbit", + version, + dir: __dirname, + progress: false, +}); diff --git a/updaters/orbit/src/browser.ts b/updaters/orbit/src/browser.ts new file mode 100644 index 00000000000..a827d241958 --- /dev/null +++ b/updaters/orbit/src/browser.ts @@ -0,0 +1,10 @@ +import { loadOrbitUpdater } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadOrbitUpdater?: typeof loadOrbitUpdater; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadOrbitUpdater = loadOrbitUpdater; + +export * from "./index.js"; diff --git a/updaters/orbit/src/index.lazy.ts b/updaters/orbit/src/index.lazy.ts new file mode 100644 index 00000000000..ccfe30bbc7c --- /dev/null +++ b/updaters/orbit/src/index.lazy.ts @@ -0,0 +1,18 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadOrbitUpdater(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(e => { + e.pluginManager.addParticleUpdater("orbit", async container => { + const { OrbitUpdater } = await import("./OrbitUpdater.js"); + + return new OrbitUpdater(e.pluginManager, container); + }); + }); +} diff --git a/updaters/orbit/src/index.ts b/updaters/orbit/src/index.ts index a34807bc1c7..4f97cc9f663 100644 --- a/updaters/orbit/src/index.ts +++ b/updaters/orbit/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { OrbitUpdater } from "./OrbitUpdater.js"; declare const __VERSION__: string; @@ -9,10 +10,8 @@ export async function loadOrbitUpdater(engine: Engine): Promise { engine.checkVersion(__VERSION__); await engine.pluginManager.register(e => { - e.pluginManager.addParticleUpdater("orbit", async container => { - const { OrbitUpdater } = await import("./OrbitUpdater.js"); - - return new OrbitUpdater(e.pluginManager, container); + e.pluginManager.addParticleUpdater("orbit", container => { + return Promise.resolve(new OrbitUpdater(e.pluginManager, container)); }); }); } diff --git a/updaters/orbit/webpack.config.js b/updaters/orbit/webpack.config.js deleted file mode 100644 index b79e559609c..00000000000 --- a/updaters/orbit/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesUpdater } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesUpdater({ - moduleName: "orbit", - updaterName: "Orbit", - version, - dir: __dirname, - progress: false, -}); diff --git a/updaters/outModes/CHANGELOG.md b/updaters/outModes/CHANGELOG.md index 80ebe2e6368..989651b9ceb 100644 --- a/updaters/outModes/CHANGELOG.md +++ b/updaters/outModes/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/updater-out-modes + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/updater-out-modes diff --git a/updaters/outModes/package.dist.json b/updaters/outModes/package.dist.json index ae52407b7f5..6ed48e3371f 100644 --- a/updaters/outModes/package.dist.json +++ b/updaters/outModes/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/updater-out-modes", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles particles out modes updater", "homepage": "https://particles.js.org", "repository": { @@ -83,10 +83,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/updaters/outModes/package.json b/updaters/outModes/package.json index ad2e0403e67..59760aa8eca 100644 --- a/updaters/outModes/package.json +++ b/updaters/outModes/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/updater-out-modes", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles particles out modes updater", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -87,12 +87,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/updaters/outModes/rollup.config.js b/updaters/outModes/rollup.config.js new file mode 100644 index 00000000000..f87eb04ca42 --- /dev/null +++ b/updaters/outModes/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesUpdater } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesUpdater({ + moduleName: "out-modes", + updaterName: "Out Modes", + version, + dir: __dirname, + progress: false, +}); diff --git a/updaters/outModes/src/OutOfCanvasUpdater.ts b/updaters/outModes/src/OutOfCanvasUpdater.ts index f9a8ab4e439..936f9e06b38 100644 --- a/updaters/outModes/src/OutOfCanvasUpdater.ts +++ b/updaters/outModes/src/OutOfCanvasUpdater.ts @@ -47,6 +47,8 @@ export class OutOfCanvasUpdater implements IParticleUpdater { update(particle: Particle, delta: IDelta): void { const outModes = particle.options.move.outModes; + particle.justWarped = false; + this._updateOutMode(particle, delta, outModes.bottom ?? outModes.default, OutModeDirection.bottom); this._updateOutMode(particle, delta, outModes.left ?? outModes.default, OutModeDirection.left); this._updateOutMode(particle, delta, outModes.right ?? outModes.default, OutModeDirection.right); diff --git a/updaters/outModes/src/OutOutMode.ts b/updaters/outModes/src/OutOutMode.ts index 4dd74e9944e..d2ee7b3515a 100644 --- a/updaters/outModes/src/OutOutMode.ts +++ b/updaters/outModes/src/OutOutMode.ts @@ -78,6 +78,8 @@ export class OutOutMode implements IOutModeManager { particle.direction = Math.atan2(-newDy, -newDx); particle.velocity.angle = particle.direction; + particle.justWarped = true; + break; } default: { @@ -110,6 +112,8 @@ export class OutOutMode implements IOutModeManager { particle.velocity.angle = particle.direction; } + particle.justWarped = true; + break; } @@ -133,6 +137,8 @@ export class OutOutMode implements IOutModeManager { particle.position.y = getRandom() * canvasSize.height; particle.initialPosition.y = particle.position.y; } + + particle.justWarped = true; } else if (direction === OutModeDirection.left && nextBounds.right < -particle.offset.x) { particle.position.x = newPos.right; particle.initialPosition.x = particle.position.x; @@ -141,6 +147,8 @@ export class OutOutMode implements IOutModeManager { particle.position.y = getRandom() * canvasSize.height; particle.initialPosition.y = particle.position.y; } + + particle.justWarped = true; } if (direction === OutModeDirection.bottom && nextBounds.top > canvasSize.height + particle.offset.y) { @@ -151,6 +159,8 @@ export class OutOutMode implements IOutModeManager { particle.position.y = newPos.top; particle.initialPosition.y = particle.position.y; + + particle.justWarped = true; } else if (direction === OutModeDirection.top && nextBounds.bottom < -particle.offset.y) { if (!warp) { particle.position.x = getRandom() * canvasSize.width; @@ -159,6 +169,8 @@ export class OutOutMode implements IOutModeManager { particle.position.y = newPos.bottom; particle.initialPosition.y = particle.position.y; + + particle.justWarped = true; } break; diff --git a/updaters/outModes/src/browser.ts b/updaters/outModes/src/browser.ts new file mode 100644 index 00000000000..297dd035813 --- /dev/null +++ b/updaters/outModes/src/browser.ts @@ -0,0 +1,10 @@ +import { loadOutModesUpdater } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadOutModesUpdater?: typeof loadOutModesUpdater; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadOutModesUpdater = loadOutModesUpdater; + +export * from "./index.js"; diff --git a/updaters/outModes/src/index.lazy.ts b/updaters/outModes/src/index.lazy.ts new file mode 100644 index 00000000000..207ca22adef --- /dev/null +++ b/updaters/outModes/src/index.lazy.ts @@ -0,0 +1,18 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - The engine instance loading this plugin + */ +export async function loadOutModesUpdater(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(e => { + e.pluginManager.addParticleUpdater("outModes", async container => { + const { OutOfCanvasUpdater } = await import("./OutOfCanvasUpdater.js"); + + return new OutOfCanvasUpdater(container); + }); + }); +} diff --git a/updaters/outModes/src/index.ts b/updaters/outModes/src/index.ts index e1708df1f1a..d436da53d3f 100644 --- a/updaters/outModes/src/index.ts +++ b/updaters/outModes/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { OutOfCanvasUpdater } from "./OutOfCanvasUpdater.js"; declare const __VERSION__: string; @@ -9,10 +10,8 @@ export async function loadOutModesUpdater(engine: Engine): Promise { engine.checkVersion(__VERSION__); await engine.pluginManager.register(e => { - e.pluginManager.addParticleUpdater("outModes", async container => { - const { OutOfCanvasUpdater } = await import("./OutOfCanvasUpdater.js"); - - return new OutOfCanvasUpdater(container); + e.pluginManager.addParticleUpdater("outModes", container => { + return Promise.resolve(new OutOfCanvasUpdater(container)); }); }); } diff --git a/updaters/outModes/webpack.config.js b/updaters/outModes/webpack.config.js deleted file mode 100644 index 5bccaf652bd..00000000000 --- a/updaters/outModes/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesUpdater } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesUpdater({ - moduleName: "out-modes", - updaterName: "Out Modes", - version, - dir: __dirname, - progress: false, -}); diff --git a/updaters/paint/CHANGELOG.md b/updaters/paint/CHANGELOG.md index 0ac6fa6205f..f2509d95af0 100644 --- a/updaters/paint/CHANGELOG.md +++ b/updaters/paint/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/updater-paint + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/updater-paint diff --git a/updaters/paint/package.dist.json b/updaters/paint/package.dist.json index 7891465382a..7388e45d30a 100644 --- a/updaters/paint/package.dist.json +++ b/updaters/paint/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/updater-paint", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles particles paint updater", "homepage": "https://particles.js.org", "repository": { @@ -83,10 +83,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/updaters/paint/package.json b/updaters/paint/package.json index 93cb7f76ac3..5be32421a63 100644 --- a/updaters/paint/package.json +++ b/updaters/paint/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/updater-paint", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles particles paint updater", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -92,12 +92,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "type": "module" diff --git a/updaters/paint/rollup.config.js b/updaters/paint/rollup.config.js new file mode 100644 index 00000000000..f8393832abb --- /dev/null +++ b/updaters/paint/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesUpdater } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesUpdater({ + moduleName: "paint", + updaterName: "Paint", + version, + dir: __dirname, + progress: false, +}); diff --git a/updaters/paint/src/PaintUpdater.ts b/updaters/paint/src/PaintUpdater.ts index 207a07c2103..d0ee9692330 100644 --- a/updaters/paint/src/PaintUpdater.ts +++ b/updaters/paint/src/PaintUpdater.ts @@ -1,4 +1,5 @@ import { + AnimatableColor, type Container, type IDelta, type IParticleUpdater, @@ -27,15 +28,22 @@ export class PaintUpdater implements IParticleUpdater { const container = this._container, options = particle.options, paint = itemFromSingleOrMultiple(options.paint, particle.id, options.reduceDuplicates), + color = (paint as { color?: unknown } | undefined)?.color, + paintColor = color ?? undefined, fill = paint?.fill, stroke = paint?.stroke; if (fill) { + const fillColor = AnimatableColor.create( + paintColor === undefined ? undefined : AnimatableColor.create(undefined, paintColor), + fill.color, + ); + particle.fillEnabled = fill.enable; particle.fillOpacity = getRangeValue(fill.opacity); - particle.fillAnimation = fill.color.animation; + particle.fillAnimation = fillColor.animation; - const fillHslColor = rangeColorToHsl(this._pluginManager, fill.color); + const fillHslColor = rangeColorToHsl(this._pluginManager, fillColor); if (fillHslColor) { particle.fillColor = getHslAnimationFromHsl( @@ -52,11 +60,16 @@ export class PaintUpdater implements IParticleUpdater { } if (stroke) { + const strokeColor = AnimatableColor.create( + paintColor === undefined ? undefined : AnimatableColor.create(undefined, paintColor), + stroke.color, + ); + particle.strokeWidth = getRangeValue(stroke.width) * container.retina.pixelRatio; particle.strokeOpacity = getRangeValue(stroke.opacity ?? defaultOpacity); - particle.strokeAnimation = stroke.color?.animation; + particle.strokeAnimation = strokeColor.animation; - const strokeHslColor = rangeColorToHsl(this._pluginManager, stroke.color) ?? particle.getFillColor(); + const strokeHslColor = rangeColorToHsl(this._pluginManager, strokeColor) ?? particle.getFillColor(); if (strokeHslColor) { particle.strokeColor = getHslAnimationFromHsl( diff --git a/updaters/paint/src/browser.ts b/updaters/paint/src/browser.ts new file mode 100644 index 00000000000..50c51a8744e --- /dev/null +++ b/updaters/paint/src/browser.ts @@ -0,0 +1,10 @@ +import { loadPaintUpdater } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadPaintUpdater?: typeof loadPaintUpdater; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadPaintUpdater = loadPaintUpdater; + +export * from "./index.js"; diff --git a/updaters/paint/src/index.lazy.ts b/updaters/paint/src/index.lazy.ts new file mode 100644 index 00000000000..2acebdf984a --- /dev/null +++ b/updaters/paint/src/index.lazy.ts @@ -0,0 +1,18 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadPaintUpdater(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(e => { + e.pluginManager.addParticleUpdater("paint", async container => { + const { PaintUpdater } = await import("./PaintUpdater.js"); + + return new PaintUpdater(e.pluginManager, container); + }); + }); +} diff --git a/updaters/paint/src/index.ts b/updaters/paint/src/index.ts index 44753396939..606fe870931 100644 --- a/updaters/paint/src/index.ts +++ b/updaters/paint/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { PaintUpdater } from "./PaintUpdater.js"; declare const __VERSION__: string; @@ -9,10 +10,8 @@ export async function loadPaintUpdater(engine: Engine): Promise { engine.checkVersion(__VERSION__); await engine.pluginManager.register(e => { - e.pluginManager.addParticleUpdater("paint", async container => { - const { PaintUpdater } = await import("./PaintUpdater.js"); - - return new PaintUpdater(e.pluginManager, container); + e.pluginManager.addParticleUpdater("paint", container => { + return Promise.resolve(new PaintUpdater(e.pluginManager, container)); }); }); } diff --git a/updaters/paint/webpack.config.js b/updaters/paint/webpack.config.js deleted file mode 100644 index 31108bd1973..00000000000 --- a/updaters/paint/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesUpdater } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesUpdater({ - moduleName: "paint", - updaterName: "Paint", - version, - dir: __dirname, - progress: false, -}); diff --git a/updaters/roll/CHANGELOG.md b/updaters/roll/CHANGELOG.md index d7ef7d18583..505774a3647 100644 --- a/updaters/roll/CHANGELOG.md +++ b/updaters/roll/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/updater-roll + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/updater-roll diff --git a/updaters/roll/package.dist.json b/updaters/roll/package.dist.json index 81c691dccde..1a64e100998 100644 --- a/updaters/roll/package.dist.json +++ b/updaters/roll/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/updater-roll", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles particles roll updater", "homepage": "https://particles.js.org", "repository": { @@ -83,10 +83,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/updaters/roll/package.json b/updaters/roll/package.json index 1ada1b1e222..3f7ca2d57b1 100644 --- a/updaters/roll/package.json +++ b/updaters/roll/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/updater-roll", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles particles roll updater", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -90,12 +90,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/updaters/roll/rollup.config.js b/updaters/roll/rollup.config.js new file mode 100644 index 00000000000..d79797b8736 --- /dev/null +++ b/updaters/roll/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesUpdater } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesUpdater({ + moduleName: "roll", + updaterName: "Roll", + version, + dir: __dirname, + progress: false, +}); diff --git a/updaters/roll/src/browser.ts b/updaters/roll/src/browser.ts new file mode 100644 index 00000000000..d2723b614c6 --- /dev/null +++ b/updaters/roll/src/browser.ts @@ -0,0 +1,10 @@ +import { loadRollUpdater } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadRollUpdater?: typeof loadRollUpdater; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadRollUpdater = loadRollUpdater; + +export * from "./index.js"; diff --git a/updaters/roll/src/index.lazy.ts b/updaters/roll/src/index.lazy.ts new file mode 100644 index 00000000000..b325a50da0c --- /dev/null +++ b/updaters/roll/src/index.lazy.ts @@ -0,0 +1,18 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - The engine instance + */ +export async function loadRollUpdater(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(e => { + e.pluginManager.addParticleUpdater("roll", async () => { + const { RollUpdater } = await import("./RollUpdater.js"); + + return new RollUpdater(e.pluginManager); + }); + }); +} diff --git a/updaters/roll/src/index.ts b/updaters/roll/src/index.ts index e3552e351e1..6494ecf90c3 100644 --- a/updaters/roll/src/index.ts +++ b/updaters/roll/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { RollUpdater } from "./RollUpdater.js"; declare const __VERSION__: string; @@ -9,10 +10,8 @@ export async function loadRollUpdater(engine: Engine): Promise { engine.checkVersion(__VERSION__); await engine.pluginManager.register(e => { - e.pluginManager.addParticleUpdater("roll", async () => { - const { RollUpdater } = await import("./RollUpdater.js"); - - return new RollUpdater(e.pluginManager); + e.pluginManager.addParticleUpdater("roll", () => { + return Promise.resolve(new RollUpdater(e.pluginManager)); }); }); } diff --git a/updaters/roll/webpack.config.js b/updaters/roll/webpack.config.js deleted file mode 100644 index f77d207d422..00000000000 --- a/updaters/roll/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesUpdater } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesUpdater({ - moduleName: "roll", - updaterName: "Roll", - version, - dir: __dirname, - progress: false, -}); diff --git a/updaters/rotate/CHANGELOG.md b/updaters/rotate/CHANGELOG.md index eec57861b5c..4764326f425 100644 --- a/updaters/rotate/CHANGELOG.md +++ b/updaters/rotate/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/updater-rotate + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/updater-rotate diff --git a/updaters/rotate/package.dist.json b/updaters/rotate/package.dist.json index c98561a90f0..8093206ea1a 100644 --- a/updaters/rotate/package.dist.json +++ b/updaters/rotate/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/updater-rotate", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles particles rotate updater", "homepage": "https://particles.js.org", "repository": { @@ -83,10 +83,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/updaters/rotate/package.json b/updaters/rotate/package.json index 9a5c6572bab..7f5338d8347 100644 --- a/updaters/rotate/package.json +++ b/updaters/rotate/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/updater-rotate", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles particles rotate updater", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -90,12 +90,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/updaters/rotate/rollup.config.js b/updaters/rotate/rollup.config.js new file mode 100644 index 00000000000..ffa2bcb5880 --- /dev/null +++ b/updaters/rotate/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesUpdater } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesUpdater({ + moduleName: "rotate", + updaterName: "Rotate", + version, + dir: __dirname, + progress: false, +}); diff --git a/updaters/rotate/src/browser.ts b/updaters/rotate/src/browser.ts new file mode 100644 index 00000000000..0b34cbfc768 --- /dev/null +++ b/updaters/rotate/src/browser.ts @@ -0,0 +1,10 @@ +import { loadRotateUpdater } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadRotateUpdater?: typeof loadRotateUpdater; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadRotateUpdater = loadRotateUpdater; + +export * from "./index.js"; diff --git a/updaters/rotate/src/index.lazy.ts b/updaters/rotate/src/index.lazy.ts new file mode 100644 index 00000000000..6c604ee33bb --- /dev/null +++ b/updaters/rotate/src/index.lazy.ts @@ -0,0 +1,18 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadRotateUpdater(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(e => { + e.pluginManager.addParticleUpdater("rotate", async container => { + const { RotateUpdater } = await import("./RotateUpdater.js"); + + return new RotateUpdater(container); + }); + }); +} diff --git a/updaters/rotate/src/index.ts b/updaters/rotate/src/index.ts index 224ab32dd66..33e32b63e92 100644 --- a/updaters/rotate/src/index.ts +++ b/updaters/rotate/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { RotateUpdater } from "./RotateUpdater.js"; declare const __VERSION__: string; @@ -9,10 +10,8 @@ export async function loadRotateUpdater(engine: Engine): Promise { engine.checkVersion(__VERSION__); await engine.pluginManager.register(e => { - e.pluginManager.addParticleUpdater("rotate", async container => { - const { RotateUpdater } = await import("./RotateUpdater.js"); - - return new RotateUpdater(container); + e.pluginManager.addParticleUpdater("rotate", container => { + return Promise.resolve(new RotateUpdater(container)); }); }); } diff --git a/updaters/rotate/webpack.config.js b/updaters/rotate/webpack.config.js deleted file mode 100644 index 3ebe8719427..00000000000 --- a/updaters/rotate/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesUpdater } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesUpdater({ - moduleName: "rotate", - updaterName: "Rotate", - version, - dir: __dirname, - progress: false, -}); diff --git a/updaters/size/CHANGELOG.md b/updaters/size/CHANGELOG.md index 3b714bcbeda..e6bfa9983fe 100644 --- a/updaters/size/CHANGELOG.md +++ b/updaters/size/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/updater-size + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/updater-size diff --git a/updaters/size/package.dist.json b/updaters/size/package.dist.json index b70aa8a421d..85fa14df295 100644 --- a/updaters/size/package.dist.json +++ b/updaters/size/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/updater-size", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles particles size updater", "homepage": "https://particles.js.org", "repository": { @@ -83,10 +83,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/updaters/size/package.json b/updaters/size/package.json index c0165d5b0d0..ef78ec14821 100644 --- a/updaters/size/package.json +++ b/updaters/size/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/updater-size", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles particles size updater", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -87,12 +87,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/updaters/size/rollup.config.js b/updaters/size/rollup.config.js new file mode 100644 index 00000000000..b4c03c8400b --- /dev/null +++ b/updaters/size/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesUpdater } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesUpdater({ + moduleName: "size", + updaterName: "Size", + version, + dir: __dirname, + progress: false, +}); diff --git a/updaters/size/src/browser.ts b/updaters/size/src/browser.ts new file mode 100644 index 00000000000..f5f47dbaa86 --- /dev/null +++ b/updaters/size/src/browser.ts @@ -0,0 +1,10 @@ +import { loadSizeUpdater } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadSizeUpdater?: typeof loadSizeUpdater; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadSizeUpdater = loadSizeUpdater; + +export * from "./index.js"; diff --git a/updaters/size/src/index.lazy.ts b/updaters/size/src/index.lazy.ts new file mode 100644 index 00000000000..4cc3792b480 --- /dev/null +++ b/updaters/size/src/index.lazy.ts @@ -0,0 +1,18 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadSizeUpdater(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(e => { + e.pluginManager.addParticleUpdater("size", async container => { + const { SizeUpdater } = await import("./SizeUpdater.js"); + + return new SizeUpdater(container); + }); + }); +} diff --git a/updaters/size/src/index.ts b/updaters/size/src/index.ts index fd572de518e..ba82dcc0883 100644 --- a/updaters/size/src/index.ts +++ b/updaters/size/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { SizeUpdater } from "./SizeUpdater.js"; declare const __VERSION__: string; @@ -9,10 +10,8 @@ export async function loadSizeUpdater(engine: Engine): Promise { engine.checkVersion(__VERSION__); await engine.pluginManager.register(e => { - e.pluginManager.addParticleUpdater("size", async container => { - const { SizeUpdater } = await import("./SizeUpdater.js"); - - return new SizeUpdater(container); + e.pluginManager.addParticleUpdater("size", container => { + return Promise.resolve(new SizeUpdater(container)); }); }); } diff --git a/updaters/size/webpack.config.js b/updaters/size/webpack.config.js deleted file mode 100644 index 9a794e07214..00000000000 --- a/updaters/size/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesUpdater } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesUpdater({ - moduleName: "size", - updaterName: "Size", - version, - dir: __dirname, - progress: false, -}); diff --git a/updaters/tilt/CHANGELOG.md b/updaters/tilt/CHANGELOG.md index 8395b3921d8..e9b71de7cd5 100644 --- a/updaters/tilt/CHANGELOG.md +++ b/updaters/tilt/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/updater-tilt + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/updater-tilt diff --git a/updaters/tilt/package.dist.json b/updaters/tilt/package.dist.json index dc4dff2aef9..ce4a1538cc5 100644 --- a/updaters/tilt/package.dist.json +++ b/updaters/tilt/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/updater-tilt", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles particles tilt updater", "homepage": "https://particles.js.org", "repository": { @@ -83,10 +83,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/updaters/tilt/package.json b/updaters/tilt/package.json index b7a5a40a57d..9acdd21f68f 100644 --- a/updaters/tilt/package.json +++ b/updaters/tilt/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/updater-tilt", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles particles tilt updater", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -90,12 +90,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/updaters/tilt/rollup.config.js b/updaters/tilt/rollup.config.js new file mode 100644 index 00000000000..332c8d982a6 --- /dev/null +++ b/updaters/tilt/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesUpdater } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesUpdater({ + moduleName: "tilt", + updaterName: "Tilt", + version, + dir: __dirname, + progress: false, +}); diff --git a/updaters/tilt/src/browser.ts b/updaters/tilt/src/browser.ts new file mode 100644 index 00000000000..1d0a17e0357 --- /dev/null +++ b/updaters/tilt/src/browser.ts @@ -0,0 +1,10 @@ +import { loadTiltUpdater } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadTiltUpdater?: typeof loadTiltUpdater; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadTiltUpdater = loadTiltUpdater; + +export * from "./index.js"; diff --git a/updaters/tilt/src/index.lazy.ts b/updaters/tilt/src/index.lazy.ts new file mode 100644 index 00000000000..92d0b4f7b4d --- /dev/null +++ b/updaters/tilt/src/index.lazy.ts @@ -0,0 +1,18 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - The engine to load the updater for + */ +export async function loadTiltUpdater(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(e => { + e.pluginManager.addParticleUpdater("tilt", async container => { + const { TiltUpdater } = await import("./TiltUpdater.js"); + + return new TiltUpdater(container); + }); + }); +} diff --git a/updaters/tilt/src/index.ts b/updaters/tilt/src/index.ts index b3141bab3bc..b7b7b2faa58 100644 --- a/updaters/tilt/src/index.ts +++ b/updaters/tilt/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { TiltUpdater } from "./TiltUpdater.js"; declare const __VERSION__: string; @@ -9,10 +10,8 @@ export async function loadTiltUpdater(engine: Engine): Promise { engine.checkVersion(__VERSION__); await engine.pluginManager.register(e => { - e.pluginManager.addParticleUpdater("tilt", async container => { - const { TiltUpdater } = await import("./TiltUpdater.js"); - - return new TiltUpdater(container); + e.pluginManager.addParticleUpdater("tilt", container => { + return Promise.resolve(new TiltUpdater(container)); }); }); } diff --git a/updaters/tilt/webpack.config.js b/updaters/tilt/webpack.config.js deleted file mode 100644 index 3595a75a35d..00000000000 --- a/updaters/tilt/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesUpdater } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesUpdater({ - moduleName: "tilt", - updaterName: "Tilt", - version, - dir: __dirname, - progress: false, -}); diff --git a/updaters/twinkle/CHANGELOG.md b/updaters/twinkle/CHANGELOG.md index 940511d7bea..af373262d14 100644 --- a/updaters/twinkle/CHANGELOG.md +++ b/updaters/twinkle/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/updater-twinkle + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/updater-twinkle diff --git a/updaters/twinkle/package.dist.json b/updaters/twinkle/package.dist.json index 89e445ea6d5..53e1829765d 100644 --- a/updaters/twinkle/package.dist.json +++ b/updaters/twinkle/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/updater-twinkle", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles particles twinkle updater", "homepage": "https://particles.js.org", "repository": { @@ -83,10 +83,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/updaters/twinkle/package.json b/updaters/twinkle/package.json index 0bdd8386e23..eced8ecc412 100644 --- a/updaters/twinkle/package.json +++ b/updaters/twinkle/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/updater-twinkle", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles particles twinkle updater", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -90,12 +90,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/updaters/twinkle/rollup.config.js b/updaters/twinkle/rollup.config.js new file mode 100644 index 00000000000..00be67cbea5 --- /dev/null +++ b/updaters/twinkle/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesUpdater } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesUpdater({ + moduleName: "twinkle", + updaterName: "Twinkle", + version, + dir: __dirname, + progress: false, +}); diff --git a/updaters/twinkle/src/browser.ts b/updaters/twinkle/src/browser.ts new file mode 100644 index 00000000000..f1f9899a187 --- /dev/null +++ b/updaters/twinkle/src/browser.ts @@ -0,0 +1,10 @@ +import { loadTwinkleUpdater } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadTwinkleUpdater?: typeof loadTwinkleUpdater; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadTwinkleUpdater = loadTwinkleUpdater; + +export * from "./index.js"; diff --git a/updaters/twinkle/src/index.lazy.ts b/updaters/twinkle/src/index.lazy.ts new file mode 100644 index 00000000000..e9dd33c5da6 --- /dev/null +++ b/updaters/twinkle/src/index.lazy.ts @@ -0,0 +1,18 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadTwinkleUpdater(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(e => { + e.pluginManager.addParticleUpdater("twinkle", async container => { + const { TwinkleUpdater } = await import("./TwinkleUpdater.js"); + + return new TwinkleUpdater(e.pluginManager, container); + }); + }); +} diff --git a/updaters/twinkle/src/index.ts b/updaters/twinkle/src/index.ts index c85d1c636fb..fef79382a5c 100644 --- a/updaters/twinkle/src/index.ts +++ b/updaters/twinkle/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { TwinkleUpdater } from "./TwinkleUpdater.js"; declare const __VERSION__: string; @@ -9,10 +10,8 @@ export async function loadTwinkleUpdater(engine: Engine): Promise { engine.checkVersion(__VERSION__); await engine.pluginManager.register(e => { - e.pluginManager.addParticleUpdater("twinkle", async container => { - const { TwinkleUpdater } = await import("./TwinkleUpdater.js"); - - return new TwinkleUpdater(e.pluginManager, container); + e.pluginManager.addParticleUpdater("twinkle", container => { + return Promise.resolve(new TwinkleUpdater(e.pluginManager, container)); }); }); } diff --git a/updaters/twinkle/webpack.config.js b/updaters/twinkle/webpack.config.js deleted file mode 100644 index 0b6823e0802..00000000000 --- a/updaters/twinkle/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesUpdater } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesUpdater({ - moduleName: "twinkle", - updaterName: "Twinkle", - version, - dir: __dirname, - progress: false, -}); diff --git a/updaters/wobble/CHANGELOG.md b/updaters/wobble/CHANGELOG.md index 5585a14542b..1df9b5df637 100644 --- a/updaters/wobble/CHANGELOG.md +++ b/updaters/wobble/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/updater-wobble + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/updater-wobble diff --git a/updaters/wobble/package.dist.json b/updaters/wobble/package.dist.json index 5a6c83ef62a..abc7bca39f1 100644 --- a/updaters/wobble/package.dist.json +++ b/updaters/wobble/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/updater-wobble", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles particles wobble updater", "homepage": "https://particles.js.org", "repository": { @@ -83,10 +83,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/updaters/wobble/package.json b/updaters/wobble/package.json index 894b50edc92..761180c79fc 100644 --- a/updaters/wobble/package.json +++ b/updaters/wobble/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/updater-wobble", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles particles wobble updater", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -90,12 +90,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/updaters/wobble/rollup.config.js b/updaters/wobble/rollup.config.js new file mode 100644 index 00000000000..478cbaa3f13 --- /dev/null +++ b/updaters/wobble/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesUpdater } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesUpdater({ + moduleName: "wobble", + updaterName: "Wobble", + version, + dir: __dirname, + progress: false, +}); diff --git a/updaters/wobble/src/browser.ts b/updaters/wobble/src/browser.ts new file mode 100644 index 00000000000..91ba5db3475 --- /dev/null +++ b/updaters/wobble/src/browser.ts @@ -0,0 +1,10 @@ +import { loadWobbleUpdater } from "./index.js"; + +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; + loadWobbleUpdater?: typeof loadWobbleUpdater; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; +globalObject.loadWobbleUpdater = loadWobbleUpdater; + +export * from "./index.js"; diff --git a/updaters/wobble/src/index.lazy.ts b/updaters/wobble/src/index.lazy.ts new file mode 100644 index 00000000000..b2921b48b53 --- /dev/null +++ b/updaters/wobble/src/index.lazy.ts @@ -0,0 +1,18 @@ +import { type Engine } from "@tsparticles/engine/lazy"; + +declare const __VERSION__: string; + +/** + * @param engine - + */ +export async function loadWobbleUpdater(engine: Engine): Promise { + engine.checkVersion(__VERSION__); + + await engine.pluginManager.register(e => { + e.pluginManager.addParticleUpdater("wobble", async container => { + const { WobbleUpdater } = await import("./WobbleUpdater.js"); + + return new WobbleUpdater(container); + }); + }); +} diff --git a/updaters/wobble/src/index.ts b/updaters/wobble/src/index.ts index c208c248745..607a142b130 100644 --- a/updaters/wobble/src/index.ts +++ b/updaters/wobble/src/index.ts @@ -1,4 +1,5 @@ import { type Engine } from "@tsparticles/engine"; +import { WobbleUpdater } from "./WobbleUpdater.js"; declare const __VERSION__: string; @@ -9,10 +10,8 @@ export async function loadWobbleUpdater(engine: Engine): Promise { engine.checkVersion(__VERSION__); await engine.pluginManager.register(e => { - e.pluginManager.addParticleUpdater("wobble", async container => { - const { WobbleUpdater } = await import("./WobbleUpdater.js"); - - return new WobbleUpdater(container); + e.pluginManager.addParticleUpdater("wobble", container => { + return Promise.resolve(new WobbleUpdater(container)); }); }); } diff --git a/updaters/wobble/webpack.config.js b/updaters/wobble/webpack.config.js deleted file mode 100644 index d532c3503f7..00000000000 --- a/updaters/wobble/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesUpdater } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesUpdater({ - moduleName: "wobble", - updaterName: "Wobble", - version, - dir: __dirname, - progress: false, -}); diff --git a/utils/canvasUtils/CHANGELOG.md b/utils/canvasUtils/CHANGELOG.md index 57b40666b7c..79b4a7db368 100644 --- a/utils/canvasUtils/CHANGELOG.md +++ b/utils/canvasUtils/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/canvas-utils + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/canvas-utils diff --git a/utils/canvasUtils/package.dist.json b/utils/canvasUtils/package.dist.json index 8beb155c001..4b0105435f0 100644 --- a/utils/canvasUtils/package.dist.json +++ b/utils/canvasUtils/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/canvas-utils", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles canvas utils library", "homepage": "https://particles.js.org", "repository": { @@ -99,10 +99,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "type": "module" } diff --git a/utils/canvasUtils/package.json b/utils/canvasUtils/package.json index 98c6cec9964..5ba8d917c3e 100644 --- a/utils/canvasUtils/package.json +++ b/utils/canvasUtils/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/canvas-utils", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles canvas utils path", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -103,12 +103,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/utils/canvasUtils/rollup.config.js b/utils/canvasUtils/rollup.config.js new file mode 100644 index 00000000000..14c083dccf4 --- /dev/null +++ b/utils/canvasUtils/rollup.config.js @@ -0,0 +1,19 @@ +import { loadParticlesUtil } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesUtil({ + moduleName: "canvas.utils", + bundle: false, + bundleName: "Canvas Utils", + version, + dir: __dirname, + progress: false, +}); diff --git a/utils/canvasUtils/src/browser.ts b/utils/canvasUtils/src/browser.ts new file mode 100644 index 00000000000..f6874998b9f --- /dev/null +++ b/utils/canvasUtils/src/browser.ts @@ -0,0 +1,6 @@ +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; + +export * from "./index.js"; diff --git a/utils/canvasUtils/src/index.lazy.ts b/utils/canvasUtils/src/index.lazy.ts new file mode 100644 index 00000000000..e9a4fa294f5 --- /dev/null +++ b/utils/canvasUtils/src/index.lazy.ts @@ -0,0 +1,2 @@ +export type * from "./types.js"; +export * from "./Utils.js"; diff --git a/utils/canvasUtils/webpack.config.js b/utils/canvasUtils/webpack.config.js deleted file mode 100644 index 67f7d7ce09d..00000000000 --- a/utils/canvasUtils/webpack.config.js +++ /dev/null @@ -1,19 +0,0 @@ -import { loadParticlesBundle } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesBundle({ - moduleName: "canvas.utils", - bundle: false, - bundleName: "Canvas Utils", - version, - dir: __dirname, - progress: false, -}); diff --git a/utils/configs/CHANGELOG.md b/utils/configs/CHANGELOG.md index 595fff608d8..1b10dff63a4 100644 --- a/utils/configs/CHANGELOG.md +++ b/utils/configs/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/configs + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) ### Features diff --git a/utils/configs/package.dist.json b/utils/configs/package.dist.json index 2f2b1944ec0..695e070adbf 100644 --- a/utils/configs/package.dist.json +++ b/utils/configs/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/configs", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles demo configurations", "homepage": "https://particles.js.org", "repository": { @@ -95,10 +95,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "publishConfig": { "access": "public" diff --git a/utils/configs/package.json b/utils/configs/package.json index c13f73568df..b987358c270 100644 --- a/utils/configs/package.json +++ b/utils/configs/package.json @@ -1,10 +1,10 @@ { "name": "@tsparticles/configs", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -88,7 +88,10 @@ "files": [ "dist" ], - "sideEffects": false, + "sideEffects": [ + "dist/browser/browser.js", + "dist/browser/index.js" + ], "browser": "dist/browser/index.js", "main": "dist/cjs/index.js", "module": "dist/esm/index.js", @@ -101,12 +104,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/utils/configs/rollup.config.js b/utils/configs/rollup.config.js new file mode 100644 index 00000000000..8f77c316724 --- /dev/null +++ b/utils/configs/rollup.config.js @@ -0,0 +1,18 @@ +import { loadParticlesUtil } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesUtil({ + moduleName: "configs", + bundleName: "Configs", + version, + dir: __dirname, + progress: false, +}); diff --git a/utils/configs/src/browser.ts b/utils/configs/src/browser.ts new file mode 100644 index 00000000000..f6874998b9f --- /dev/null +++ b/utils/configs/src/browser.ts @@ -0,0 +1,6 @@ +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; + +export * from "./index.js"; diff --git a/utils/configs/src/bundle.ts b/utils/configs/src/bundle.ts index 8e893de15df..03ceb8a5396 100644 --- a/utils/configs/src/bundle.ts +++ b/utils/configs/src/bundle.ts @@ -1 +1,6 @@ export * from "./index.js"; +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; +}; + +globalObject.__tsParticlesInternals ??= {}; diff --git a/utils/configs/src/c/chars.ts b/utils/configs/src/c/chars.ts index 7f40c5c893b..d6b28eb2f14 100644 --- a/utils/configs/src/c/chars.ts +++ b/utils/configs/src/c/chars.ts @@ -11,6 +11,9 @@ const options: ISourceOptions = { }, }, paint: { + fill: { + enable: false, + }, stroke: { width: 1, color: { value: "#ffffff" }, diff --git a/utils/configs/src/c/confettiExplosions.ts b/utils/configs/src/c/confettiExplosions.ts new file mode 100644 index 00000000000..c61192f0abf --- /dev/null +++ b/utils/configs/src/c/confettiExplosions.ts @@ -0,0 +1,154 @@ +import type { ISourceOptions } from "@tsparticles/engine"; + +const options: ISourceOptions = { + key: "confettiExplosions", + name: "Confetti Explosions", + background: { + color: "#1a1a2e", + }, + fullScreen: { + enable: true, + zIndex: 100, + }, + particles: { + paint: { + fill: { + enable: true, + color: { + value: [ + "#FF0044", + "#FF4400", + "#FFCC00", + "#00CC44", + "#00AAFF", + "#AA00FF", + "#FF00AA", + "#00FFCC", + "#FF6600", + "#FFFFFF", + ], + }, + }, + }, + number: { + value: 0, + density: { + enable: true, + }, + }, + shape: { + type: ["square", "circle"], + }, + size: { + value: { + min: 3, + max: 5, + }, + }, + opacity: { + value: { min: 0, max: 1 }, + animation: { + enable: true, + startValue: "max", + destroy: "min", + speed: 3, + }, + }, + move: { + angle: { + value: 45, + offset: 0, + }, + drift: 0, + enable: true, + gravity: { + enable: true, + acceleration: 9.81, + }, + speed: { + min: 15, + max: 25, + }, + decay: 0.1, + random: true, + straight: false, + outModes: { + default: "destroy", + top: "none", + }, + }, + rotate: { + value: { + min: 0, + max: 360, + }, + direction: "random", + move: true, + animation: { + enable: true, + speed: 60, + }, + }, + tilt: { + direction: "random", + enable: true, + value: { + min: 0, + max: 360, + }, + animation: { + enable: true, + speed: 60, + }, + }, + roll: { + darken: { + enable: true, + value: 30, + }, + enlighten: { + enable: true, + value: 30, + }, + enable: true, + mode: "both", + speed: { + min: 15, + max: 25, + }, + }, + wobble: { + distance: 30, + enable: true, + move: true, + speed: { + min: -15, + max: 15, + }, + }, + }, + emitters: { + name: "confetti", + size: { + width: 0, + height: 0, + }, + rate: { + delay: 0, + quantity: 50, + }, + life: { + count: 0, + duration: 0.1, + delay: 0.4, + }, + }, + motion: { + disable: true, + }, + blend: { + mode: "source-over", + }, +}; + +export default options; diff --git a/utils/configs/src/c/index.ts b/utils/configs/src/c/index.ts index 0d3a83e881a..349aa0607cc 100644 --- a/utils/configs/src/c/index.ts +++ b/utils/configs/src/c/index.ts @@ -7,6 +7,7 @@ import collisionsAbsorb from "./collisionsAbsorb.js"; import collisionsBounce from "./collisionsBounce.js"; import collisionsDestroy from "./collisionsDestroy.js"; import colorAnimation from "./colorAnimation.js"; +import confettiExplosions from "./confettiExplosions.js"; import connect from "./connect.js"; import curlNoise from "./curlNoise.js"; @@ -20,6 +21,7 @@ export default { collisionsBounce, collisionsDestroy, colorAnimation, + confettiExplosions, connect, curlNoise, }; diff --git a/utils/configs/src/f/fireworks.ts b/utils/configs/src/f/fireworks.ts index 3e5fdf32774..ee100027c46 100644 --- a/utils/configs/src/f/fireworks.ts +++ b/utils/configs/src/f/fireworks.ts @@ -177,6 +177,9 @@ const options: ISourceOptions = { }, }, paint: { + fill: { + enable: false, + }, stroke: { color: { value: "#ffffff", diff --git a/utils/configs/src/f/fireworks3.ts b/utils/configs/src/f/fireworks3.ts index 1ecea7b0f00..d3f77433d5b 100644 --- a/utils/configs/src/f/fireworks3.ts +++ b/utils/configs/src/f/fireworks3.ts @@ -37,6 +37,9 @@ const thirdFactor = 3, }, particles: { paint: { + fill: { + enable: false, + }, stroke: { color: { value: [ diff --git a/utils/configs/src/index.lazy.ts b/utils/configs/src/index.lazy.ts new file mode 100644 index 00000000000..51300845169 --- /dev/null +++ b/utils/configs/src/index.lazy.ts @@ -0,0 +1,79 @@ +import { type ISourceOptions, tsParticles } from "@tsparticles/engine/lazy"; +import a from "./a/index.js"; +import b from "./b/index.js"; +import c from "./c/index.js"; +import d from "./d/index.js"; +import e from "./e/index.js"; +import f from "./f/index.js"; +import g from "./g/index.js"; +import h from "./h/index.js"; +import i from "./i/index.js"; +import j from "./j/index.js"; +import k from "./k/index.js"; +import l from "./l/index.js"; +import m from "./m/index.js"; +import n from "./n/index.js"; +import o from "./o/index.js"; +import p from "./p/index.js"; +import { palettes } from "./palettes.js"; +import q from "./q/index.js"; +import r from "./r/index.js"; +import s from "./s/index.js"; +import t from "./t/index.js"; +import u from "./u/index.js"; +import v from "./v/index.js"; +import w from "./w/index.js"; +import x from "./x/index.js"; +import y from "./y/index.js"; +import z from "./z/index.js"; + +for (const key of Object.keys(palettes)) { + const palette = palettes[key]; + + if (!palette) { + continue; + } + + tsParticles.pluginManager.addPalette(key, palette); +} + +const configs = { + ...a, + ...b, + ...c, + ...d, + ...e, + ...f, + ...g, + ...h, + ...i, + ...j, + ...k, + ...l, + ...m, + ...n, + ...o, + ...p, + ...q, + ...r, + ...s, + ...t, + ...u, + ...v, + ...w, + ...x, + ...y, + ...z, +}; + +for (const key of Object.keys(configs)) { + const config = (configs as Record)[key]; + + if (!config) { + continue; + } + + tsParticles.pluginManager.addConfig(config); +} + +export default configs; diff --git a/utils/configs/src/m/mouseDestroyExplode.ts b/utils/configs/src/m/mouseDestroyExplode.ts index 3fa40e62b23..a2ce58fbd7f 100644 --- a/utils/configs/src/m/mouseDestroyExplode.ts +++ b/utils/configs/src/m/mouseDestroyExplode.ts @@ -15,6 +15,9 @@ const options: ISourceOptions = { }, }, paint: { + fill: { + enable: false, + }, stroke: { color: { value: ["#60a5fa", "#22d3ee", "#22c55e", "#fde047", "#f97316", "#ef4444"], diff --git a/utils/configs/webpack.config.js b/utils/configs/webpack.config.js deleted file mode 100644 index 08786ce6cde..00000000000 --- a/utils/configs/webpack.config.js +++ /dev/null @@ -1,18 +0,0 @@ -import { loadParticlesBundle } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesBundle({ - moduleName: "configs", - bundleName: "Configs", - version, - dir: __dirname, - progress: false, -}); diff --git a/utils/fractalNoise/CHANGELOG.md b/utils/fractalNoise/CHANGELOG.md index cdde6764d25..aa9061880c6 100644 --- a/utils/fractalNoise/CHANGELOG.md +++ b/utils/fractalNoise/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/fractal-noise + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/fractal-noise diff --git a/utils/fractalNoise/package.dist.json b/utils/fractalNoise/package.dist.json index f11232b25b5..c2007392c9c 100644 --- a/utils/fractalNoise/package.dist.json +++ b/utils/fractalNoise/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/fractal-noise", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles fractal noise library", "homepage": "https://particles.js.org", "repository": { @@ -92,7 +92,7 @@ "module": "esm/index.js", "types": "types/index.d.ts", "peerDependencies": { - "@tsparticles/smooth-value-noise": "4.0.0-beta.12" + "@tsparticles/smooth-value-noise": "4.0.0-beta.15" }, "exports": { ".": { @@ -102,6 +102,13 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "type": "module" diff --git a/utils/fractalNoise/package.json b/utils/fractalNoise/package.json index 07f5b152953..3c5e01e4b64 100644 --- a/utils/fractalNoise/package.json +++ b/utils/fractalNoise/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/fractal-noise", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles fractal noise path", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -103,12 +103,22 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/smooth-value-noise": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", + "@tsparticles/engine": "workspace:*", "@tsparticles/smooth-value-noise": "workspace:*" }, "publishConfig": { diff --git a/utils/fractalNoise/rollup.config.js b/utils/fractalNoise/rollup.config.js new file mode 100644 index 00000000000..f6f69720ae5 --- /dev/null +++ b/utils/fractalNoise/rollup.config.js @@ -0,0 +1,19 @@ +import { loadParticlesUtil } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesUtil({ + moduleName: "fractal.noise", + bundle: false, + bundleName: "Fractal Noise", + version, + dir: __dirname, + progress: false, +}); diff --git a/utils/fractalNoise/src/browser.ts b/utils/fractalNoise/src/browser.ts new file mode 100644 index 00000000000..f6874998b9f --- /dev/null +++ b/utils/fractalNoise/src/browser.ts @@ -0,0 +1,6 @@ +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; + +export * from "./index.js"; diff --git a/utils/fractalNoise/src/index.lazy.ts b/utils/fractalNoise/src/index.lazy.ts new file mode 100644 index 00000000000..014457e12a9 --- /dev/null +++ b/utils/fractalNoise/src/index.lazy.ts @@ -0,0 +1 @@ +export { FractalNoise } from "./FractalNoise.js"; diff --git a/utils/fractalNoise/webpack.config.js b/utils/fractalNoise/webpack.config.js deleted file mode 100644 index f28fe7522e1..00000000000 --- a/utils/fractalNoise/webpack.config.js +++ /dev/null @@ -1,19 +0,0 @@ -import { loadParticlesBundle } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesBundle({ - moduleName: "fractal.noise", - bundle: false, - bundleName: "Fractal Noise", - version, - dir: __dirname, - progress: false, -}); diff --git a/utils/noiseField/CHANGELOG.md b/utils/noiseField/CHANGELOG.md index eaccb5d9fea..f2d10598f0e 100644 --- a/utils/noiseField/CHANGELOG.md +++ b/utils/noiseField/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/noise-field + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/noise-field diff --git a/utils/noiseField/package.dist.json b/utils/noiseField/package.dist.json index 6341492e8fd..d1b9ed6a69f 100644 --- a/utils/noiseField/package.dist.json +++ b/utils/noiseField/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/noise-field", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles noise field library", "homepage": "https://particles.js.org", "repository": { @@ -92,8 +92,8 @@ "module": "esm/index.js", "types": "types/index.d.ts", "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12", - "@tsparticles/plugin-move": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15", + "@tsparticles/plugin-move": "4.0.0-beta.15" }, "exports": { ".": { @@ -103,6 +103,13 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "type": "module" diff --git a/utils/noiseField/package.json b/utils/noiseField/package.json index 842f5d8357f..f348afb0de2 100644 --- a/utils/noiseField/package.json +++ b/utils/noiseField/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/noise-field", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles noise field library", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -103,6 +103,13 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { @@ -110,6 +117,8 @@ "@tsparticles/plugin-move": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*", "@tsparticles/plugin-move": "workspace:*" }, diff --git a/utils/noiseField/rollup.config.js b/utils/noiseField/rollup.config.js new file mode 100644 index 00000000000..aabef7e27de --- /dev/null +++ b/utils/noiseField/rollup.config.js @@ -0,0 +1,19 @@ +import { loadParticlesUtil } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesUtil({ + moduleName: "noise.field", + bundle: false, + bundleName: "Noise Field", + version, + dir: __dirname, + progress: false, +}); diff --git a/utils/noiseField/src/browser.ts b/utils/noiseField/src/browser.ts new file mode 100644 index 00000000000..f6874998b9f --- /dev/null +++ b/utils/noiseField/src/browser.ts @@ -0,0 +1,6 @@ +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; + +export * from "./index.js"; diff --git a/utils/noiseField/src/index.lazy.ts b/utils/noiseField/src/index.lazy.ts new file mode 100644 index 00000000000..5e2a6033eb3 --- /dev/null +++ b/utils/noiseField/src/index.lazy.ts @@ -0,0 +1,4 @@ +export type { IFactorValues, IOffsetValues } from "./IFactorOffsetValues.js"; +export type { INoiseFieldOptions } from "./INoiseFieldOptions.js"; +export type { INoiseGenerator } from "./INoiseGenerator.js"; +export { NoiseFieldGenerator } from "./NoiseFieldGenerator.js"; diff --git a/utils/noiseField/webpack.config.js b/utils/noiseField/webpack.config.js deleted file mode 100644 index 787682c24c4..00000000000 --- a/utils/noiseField/webpack.config.js +++ /dev/null @@ -1,19 +0,0 @@ -import { loadParticlesBundle } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesBundle({ - moduleName: "noise.field", - bundle: false, - bundleName: "Noise Field", - version, - dir: __dirname, - progress: false, -}); diff --git a/utils/pathUtils/CHANGELOG.md b/utils/pathUtils/CHANGELOG.md index fde9c6d957a..3d019c2de90 100644 --- a/utils/pathUtils/CHANGELOG.md +++ b/utils/pathUtils/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/path-utils + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/path-utils diff --git a/utils/pathUtils/package.dist.json b/utils/pathUtils/package.dist.json index 541f29472a0..68204ceb1f3 100644 --- a/utils/pathUtils/package.dist.json +++ b/utils/pathUtils/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/path-utils", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles path utils library", "homepage": "https://particles.js.org", "repository": { @@ -99,10 +99,17 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "peerDependencies": { - "@tsparticles/engine": "4.0.0-beta.12" + "@tsparticles/engine": "4.0.0-beta.15" }, "type": "module" } diff --git a/utils/pathUtils/package.json b/utils/pathUtils/package.json index 69e42684e10..87595ba2930 100644 --- a/utils/pathUtils/package.json +++ b/utils/pathUtils/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/path-utils", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles path utils path", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -103,12 +103,21 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "peerDependencies": { "@tsparticles/engine": "workspace:*" }, "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", "@tsparticles/engine": "workspace:*" }, "publishConfig": { diff --git a/utils/pathUtils/rollup.config.js b/utils/pathUtils/rollup.config.js new file mode 100644 index 00000000000..4909ffb25fa --- /dev/null +++ b/utils/pathUtils/rollup.config.js @@ -0,0 +1,19 @@ +import { loadParticlesUtil } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesUtil({ + moduleName: "path.utils", + bundle: false, + bundleName: "Path Utils", + version, + dir: __dirname, + progress: false, +}); diff --git a/utils/pathUtils/src/browser.ts b/utils/pathUtils/src/browser.ts new file mode 100644 index 00000000000..f6874998b9f --- /dev/null +++ b/utils/pathUtils/src/browser.ts @@ -0,0 +1,6 @@ +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; + +export * from "./index.js"; diff --git a/utils/pathUtils/src/index.lazy.ts b/utils/pathUtils/src/index.lazy.ts new file mode 100644 index 00000000000..0e17d71bda5 --- /dev/null +++ b/utils/pathUtils/src/index.lazy.ts @@ -0,0 +1,3 @@ +export type * from "./IPathData.js"; +export * from "./SegmentType.js"; +export * from "./Utils.js"; diff --git a/utils/pathUtils/webpack.config.js b/utils/pathUtils/webpack.config.js deleted file mode 100644 index cf99551d3a2..00000000000 --- a/utils/pathUtils/webpack.config.js +++ /dev/null @@ -1,19 +0,0 @@ -import { loadParticlesBundle } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesBundle({ - moduleName: "path.utils", - bundle: false, - bundleName: "Path Utils", - version, - dir: __dirname, - progress: false, -}); diff --git a/utils/perlinNoise/CHANGELOG.md b/utils/perlinNoise/CHANGELOG.md index 4be2bb7f634..51ace1907a0 100644 --- a/utils/perlinNoise/CHANGELOG.md +++ b/utils/perlinNoise/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/perlin-noise + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/perlin-noise diff --git a/utils/perlinNoise/package.dist.json b/utils/perlinNoise/package.dist.json index 9a5c18e1a51..d83e3338c5d 100644 --- a/utils/perlinNoise/package.dist.json +++ b/utils/perlinNoise/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/perlin-noise", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles perlin noise library", "homepage": "https://particles.js.org", "repository": { @@ -99,6 +99,13 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "type": "module" diff --git a/utils/perlinNoise/package.json b/utils/perlinNoise/package.json index bf366170be6..14aa391fcae 100644 --- a/utils/perlinNoise/package.json +++ b/utils/perlinNoise/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/perlin-noise", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles perlin noise path", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -103,6 +103,13 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "publishConfig": { @@ -110,5 +117,10 @@ "directory": "dist", "linkDirectory": true }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", + "@tsparticles/engine": "workspace:*" + } } diff --git a/utils/perlinNoise/rollup.config.js b/utils/perlinNoise/rollup.config.js new file mode 100644 index 00000000000..9276f8fc88a --- /dev/null +++ b/utils/perlinNoise/rollup.config.js @@ -0,0 +1,19 @@ +import { loadParticlesUtil } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesUtil({ + moduleName: "perlin.noise", + bundle: false, + bundleName: "Perlin Noise", + version, + dir: __dirname, + progress: false, +}); diff --git a/utils/perlinNoise/src/browser.ts b/utils/perlinNoise/src/browser.ts new file mode 100644 index 00000000000..f6874998b9f --- /dev/null +++ b/utils/perlinNoise/src/browser.ts @@ -0,0 +1,6 @@ +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; + +export * from "./index.js"; diff --git a/utils/perlinNoise/src/index.lazy.ts b/utils/perlinNoise/src/index.lazy.ts new file mode 100644 index 00000000000..b51aa83adcd --- /dev/null +++ b/utils/perlinNoise/src/index.lazy.ts @@ -0,0 +1 @@ +export { PerlinNoise } from "./PerlinNoise.js"; diff --git a/utils/perlinNoise/webpack.config.js b/utils/perlinNoise/webpack.config.js deleted file mode 100644 index 322bb132667..00000000000 --- a/utils/perlinNoise/webpack.config.js +++ /dev/null @@ -1,19 +0,0 @@ -import { loadParticlesBundle } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesBundle({ - moduleName: "perlin.noise", - bundle: false, - bundleName: "Perlin Noise", - version, - dir: __dirname, - progress: false, -}); diff --git a/utils/simplexNoise/CHANGELOG.md b/utils/simplexNoise/CHANGELOG.md index 4228c186284..bccab11392b 100644 --- a/utils/simplexNoise/CHANGELOG.md +++ b/utils/simplexNoise/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/simplex-noise + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/simplex-noise diff --git a/utils/simplexNoise/package.dist.json b/utils/simplexNoise/package.dist.json index 70849d8948b..c592e7ff941 100644 --- a/utils/simplexNoise/package.dist.json +++ b/utils/simplexNoise/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/simplex-noise", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles simplex noise library", "homepage": "https://particles.js.org", "repository": { @@ -99,6 +99,13 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "type": "module" diff --git a/utils/simplexNoise/package.json b/utils/simplexNoise/package.json index fef701242ab..8ab137adc3f 100644 --- a/utils/simplexNoise/package.json +++ b/utils/simplexNoise/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/simplex-noise", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles simplex noise library", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -89,6 +89,13 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "publishConfig": { @@ -96,5 +103,10 @@ "directory": "dist", "linkDirectory": true }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", + "@tsparticles/engine": "workspace:*" + } } diff --git a/utils/simplexNoise/rollup.config.js b/utils/simplexNoise/rollup.config.js new file mode 100644 index 00000000000..acc81d2e2a0 --- /dev/null +++ b/utils/simplexNoise/rollup.config.js @@ -0,0 +1,19 @@ +import { loadParticlesUtil } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesUtil({ + moduleName: "simplex.noise", + bundle: false, + bundleName: "Simplex Noise", + version, + dir: __dirname, + progress: false, +}); diff --git a/utils/simplexNoise/src/browser.ts b/utils/simplexNoise/src/browser.ts new file mode 100644 index 00000000000..f6874998b9f --- /dev/null +++ b/utils/simplexNoise/src/browser.ts @@ -0,0 +1,6 @@ +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; + +export * from "./index.js"; diff --git a/utils/simplexNoise/src/index.lazy.ts b/utils/simplexNoise/src/index.lazy.ts new file mode 100644 index 00000000000..6c3f7214fb1 --- /dev/null +++ b/utils/simplexNoise/src/index.lazy.ts @@ -0,0 +1 @@ +export { SimplexNoise } from "./SimplexNoise.js"; diff --git a/utils/simplexNoise/webpack.config.js b/utils/simplexNoise/webpack.config.js deleted file mode 100644 index 27d4ceb5463..00000000000 --- a/utils/simplexNoise/webpack.config.js +++ /dev/null @@ -1,19 +0,0 @@ -import { loadParticlesBundle } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesBundle({ - moduleName: "simplex.noise", - bundle: false, - bundleName: "Simplex Noise", - version, - dir: __dirname, - progress: false, -}); diff --git a/utils/smoothValueNoise/CHANGELOG.md b/utils/smoothValueNoise/CHANGELOG.md index d72dc72fba6..fc3ef92976d 100644 --- a/utils/smoothValueNoise/CHANGELOG.md +++ b/utils/smoothValueNoise/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/smooth-value-noise + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/smooth-value-noise diff --git a/utils/smoothValueNoise/package.dist.json b/utils/smoothValueNoise/package.dist.json index a8a46619e7c..997906422b4 100644 --- a/utils/smoothValueNoise/package.dist.json +++ b/utils/smoothValueNoise/package.dist.json @@ -1,6 +1,6 @@ { "name": "@tsparticles/smooth-value-noise", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles smooth value noise library", "homepage": "https://particles.js.org", "repository": { @@ -99,6 +99,13 @@ "require": "./cjs/index.js", "default": "./esm/index.js" }, + "./lazy": { + "types": "./types/index.lazy.d.ts", + "browser": "./browser/index.lazy.js", + "import": "./esm/index.lazy.js", + "require": "./cjs/index.lazy.js", + "default": "./esm/index.lazy.js" + }, "./package.json": "./package.json" }, "type": "module" diff --git a/utils/smoothValueNoise/package.json b/utils/smoothValueNoise/package.json index 41492bddf81..f065af1a98a 100644 --- a/utils/smoothValueNoise/package.json +++ b/utils/smoothValueNoise/package.json @@ -1,11 +1,11 @@ { "name": "@tsparticles/smooth-value-noise", - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "description": "tsParticles smooth value noise path", "homepage": "https://particles.js.org", "scripts": { - "build": "tsparticles-cli build", - "version": "tsparticles-cli build -d && git add package.dist.json && tsparticles-cli build -p -l && git add .", + "build": "tsparticles-build", + "version": "tsparticles-build -d && git add package.dist.json && tsparticles-build -p -l && git add .", "prepack": "pnpm run build" }, "repository": { @@ -103,6 +103,13 @@ "require": "./dist/cjs/index.js", "default": "./dist/esm/index.js" }, + "./lazy": { + "types": "./dist/types/index.lazy.d.ts", + "browser": "./dist/browser/index.lazy.js", + "import": "./dist/esm/index.lazy.js", + "require": "./dist/cjs/index.lazy.js", + "default": "./dist/esm/index.lazy.js" + }, "./package.json": "./dist/package.json" }, "publishConfig": { @@ -110,5 +117,10 @@ "directory": "dist", "linkDirectory": true }, - "type": "module" + "type": "module", + "devDependencies": { + "@tsparticles/cli-build": "workspace:^", + "@tsparticles/cli-command-build": "workspace:^", + "@tsparticles/engine": "workspace:*" + } } diff --git a/utils/smoothValueNoise/rollup.config.js b/utils/smoothValueNoise/rollup.config.js new file mode 100644 index 00000000000..756077aad62 --- /dev/null +++ b/utils/smoothValueNoise/rollup.config.js @@ -0,0 +1,19 @@ +import { loadParticlesUtil } from "@tsparticles/rollup-plugin"; +import { fileURLToPath } from "node:url"; +import fs from "fs-extra"; +import path from "node:path"; + +const __filename = fileURLToPath(import.meta.url), + __dirname = path.dirname(__filename), + rootPkgPath = path.join(__dirname, "package.json"), + pkg = await fs.readJson(rootPkgPath), + version = pkg.version; + +export default loadParticlesUtil({ + moduleName: "smooth.value.noise", + bundle: false, + bundleName: "Smooth Value Noise", + version, + dir: __dirname, + progress: false, +}); diff --git a/utils/smoothValueNoise/src/browser.ts b/utils/smoothValueNoise/src/browser.ts new file mode 100644 index 00000000000..f6874998b9f --- /dev/null +++ b/utils/smoothValueNoise/src/browser.ts @@ -0,0 +1,6 @@ +const globalObject = globalThis as typeof globalThis & { + __tsParticlesInternals?: Record; +}; +globalObject.__tsParticlesInternals = globalObject.__tsParticlesInternals ?? {}; + +export * from "./index.js"; diff --git a/utils/smoothValueNoise/src/index.lazy.ts b/utils/smoothValueNoise/src/index.lazy.ts new file mode 100644 index 00000000000..3b24b0abbd9 --- /dev/null +++ b/utils/smoothValueNoise/src/index.lazy.ts @@ -0,0 +1 @@ +export { SmoothValueNoise } from "./SmoothValueNoise.js"; diff --git a/utils/smoothValueNoise/webpack.config.js b/utils/smoothValueNoise/webpack.config.js deleted file mode 100644 index 3b6a84743c7..00000000000 --- a/utils/smoothValueNoise/webpack.config.js +++ /dev/null @@ -1,19 +0,0 @@ -import { loadParticlesBundle } from "@tsparticles/webpack-plugin"; -import { fileURLToPath } from "node:url"; -import fs from "fs-extra"; -import path from "node:path"; - -const __filename = fileURLToPath(import.meta.url), - __dirname = path.dirname(__filename), - rootPkgPath = path.join(__dirname, "package.json"), - pkg = await fs.readJson(rootPkgPath), - version = pkg.version; - -export default loadParticlesBundle({ - moduleName: "smooth.value.noise", - bundle: false, - bundleName: "Smooth Value Noise", - version, - dir: __dirname, - progress: false, -}); diff --git a/utils/tests/CHANGELOG.md b/utils/tests/CHANGELOG.md index 1a326045a25..b25f7e7ea7c 100644 --- a/utils/tests/CHANGELOG.md +++ b/utils/tests/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [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/tests + # [4.0.0-beta.12](https://github.com/tsparticles/tsparticles/compare/v4.0.0-beta.11...v4.0.0-beta.12) (2026-04-15) **Note:** Version bump only for package @tsparticles/tests diff --git a/utils/tests/package.json b/utils/tests/package.json index 79533934d50..3db59632d10 100644 --- a/utils/tests/package.json +++ b/utils/tests/package.json @@ -1,7 +1,7 @@ { "name": "@tsparticles/tests", "private": true, - "version": "4.0.0-beta.12", + "version": "4.0.0-beta.15", "scripts": { "prettify:ci": "prettier --check ./src", "prettify": "prettier --write ./src", diff --git a/websites/confetti/.gitignore b/websites/confetti/.gitignore new file mode 100644 index 00000000000..ffc1c108a0d --- /dev/null +++ b/websites/confetti/.gitignore @@ -0,0 +1,354 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ +.DS_Store +.idea + +dist/ \ No newline at end of file diff --git a/websites/confetti/.prettierignore b/websites/confetti/.prettierignore new file mode 100644 index 00000000000..d02df1922e8 --- /dev/null +++ b/websites/confetti/.prettierignore @@ -0,0 +1,4 @@ +public/js/confetti-modes.js +package.json +.prettierrc +eslint.config.js diff --git a/websites/confetti/.prettierrc b/websites/confetti/.prettierrc new file mode 100644 index 00000000000..cbd1fe375e6 --- /dev/null +++ b/websites/confetti/.prettierrc @@ -0,0 +1,6 @@ +{ + "semi": true, + "singleQuote": true, + "trailingComma": "es5", + "printWidth": 100 +} diff --git a/websites/confetti/CHANGELOG.md b/websites/confetti/CHANGELOG.md new file mode 100644 index 00000000000..3c406e1d179 --- /dev/null +++ b/websites/confetti/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/confetti-website diff --git a/websites/confetti/CNAME b/websites/confetti/CNAME new file mode 100644 index 00000000000..afc80de5b8e --- /dev/null +++ b/websites/confetti/CNAME @@ -0,0 +1 @@ +confetti.js.org diff --git a/websites/confetti/LICENSE b/websites/confetti/LICENSE new file mode 100644 index 00000000000..dc41654e178 --- /dev/null +++ b/websites/confetti/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/websites/confetti/README.md b/websites/confetti/README.md new file mode 100644 index 00000000000..e9a8b982297 --- /dev/null +++ b/websites/confetti/README.md @@ -0,0 +1,74 @@ +# tsParticles confetti website + +tsParticles official confetti website + + + +## Development + +Install dependencies (uses pnpm): + +```bash +pnpm install +``` + +Common commands: + +- `pnpm run build` — generate `public/js/confetti-modes.js` from `confetti-modes.handlebars` +- `pnpm run deploy` — run the deploy script (`deploy.js`) +- `pnpm run lint` — run ESLint for `public/js` +- `pnpm run lint:fix` — run ESLint with `--fix` on `public/js` +- `pnpm run format` — run Prettier to format the repository + +## CI + +CI is now managed by the main `tsparticles` monorepo workflows. + +## Privacy and consent + +The website uses an integrated consent manager in `public/js/cookie-consent.js`. + +- Visitors can reject all, accept all, or save granular choices for analytics and ads. +- Consent is stored locally and can be changed later via the footer "Cookie preferences" button. +- AdSense can run in non-personalized mode when ad consent is not granted. + +### Analytics events + +When analytics consent is granted, social share actions emit these events: + +- `share_click` for social/email share buttons +- `share_copy_link` for the copy link button + +Shared parameters: + +- `method` (for example `x`, `linkedin`, `copy_link`) +- `page_path` +- `page_title` + +## Contributing + +Quick checklist for contributors: + +- Fork the repo and create a feature branch: `git checkout -b feat/your-change` +- Install dependencies: `pnpm install` +- Before committing run: + - `pnpm run format` to apply Prettier formatting + - `pnpm run lint` to run ESLint (fix issues with `pnpm run lint:fix`) +- Commit changes with a clear message and push your branch +- Open a Pull Request describing the change and linking relevant issues + +Notes: + +- Generated files (e.g. `public/js/confetti-modes.js`) are ignored by ESLint and should not be edited directly; update the source `confetti-modes.handlebars` and run the build. +- Maintain code style by running `pnpm run format` and `pnpm run lint` locally. + +## Node version + +This project requires a Node.js LTS release. We recommend using `nvm` to manage Node versions and to install the current LTS: + +```bash +nvm install --lts +nvm use --lts +``` + +After switching Node versions, run `pnpm install` to ensure dependencies are installed for the correct environment. diff --git a/websites/confetti/deploy.js b/websites/confetti/deploy.js new file mode 100644 index 00000000000..2bfd1a67adf --- /dev/null +++ b/websites/confetti/deploy.js @@ -0,0 +1,42 @@ +import { execSync } from "child_process"; +import { resolve, dirname } from "path"; +import { fileURLToPath } from "url"; + +import ghpages from "gh-pages"; + +const __dirname = dirname(fileURLToPath(import.meta.url)); +const rootDir = resolve(__dirname, "."); + +execSync("npx vite build", { cwd: rootDir, stdio: "inherit" }); + +const ghToken = process.env.GITHUB_TOKEN, + gitUser = ghToken + ? { + name: "github-actions-bot", + email: "support+actions@github.com", + } + : { + name: "Matteo Bruni", + email: "176620+matteobruni@users.noreply.github.com", + }; + +ghpages.publish( + "./dist", + { + repo: ghToken + ? `https://git:${ghToken}@github.com/tsparticles/confetti.git` + : `https://git:github.com/tsparticles/confetti.git`, + branch: "main", + dotfiles: true, + history: false, + message: "build: website updated", + user: gitUser, + }, + (publishErr) => { + if (!publishErr) { + console.log("Website published successfully"); + } else { + console.log(`Error publishing website: ${publishErr}`); + } + }, +); diff --git a/websites/confetti/eslint.config.js b/websites/confetti/eslint.config.js new file mode 100644 index 00000000000..31d4101e902 --- /dev/null +++ b/websites/confetti/eslint.config.js @@ -0,0 +1,33 @@ +import js from '@eslint/js'; +import globals from 'globals'; +import prettierConfig from 'eslint-config-prettier'; +import prettierPlugin from 'eslint-plugin-prettier'; + +export default [ + { + ignores: ['node_modules/**', '.git/**', 'dist/**'], + }, + js.configs.recommended, + { + files: ['src/**/*.js'], + languageOptions: { + ecmaVersion: 'latest', + sourceType: 'module', + globals: { + ...globals.browser, + ace: 'readonly', + js_beautify: 'readonly', + }, + }, + plugins: { + prettier: prettierPlugin, + }, + rules: { + ...prettierConfig.rules, + 'prettier/prettier': 'error', + 'no-unused-vars': 'warn', + 'no-console': 'off', + 'no-extra-boolean-cast': 'off', + }, + }, +]; diff --git a/websites/confetti/index.html b/websites/confetti/index.html new file mode 100644 index 00000000000..dd9d84aca70 --- /dev/null +++ b/websites/confetti/index.html @@ -0,0 +1,257 @@ + + + + + + + + + + + + + tsParticles 🎉🎊 | JavaScript Confetti, Particles and Fireworks animations for your website + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +
+ +

tsParticles Confetti

+ + + +
+
+
+
+
+

Usage

+
+
+

+ First of all include the script in your page, only if using in plain HTML/JS pages: +

+
+
+
+ <script + src="https://cdn.jsdelivr.net/npm/@tsparticles/confetti@__CONFETTI_VERSION__/tsparticles.confetti.bundle.min.js"></script> +
+
+
+
+ +
+ + + + + + + + diff --git a/websites/confetti/package.json b/websites/confetti/package.json new file mode 100644 index 00000000000..847704f371e --- /dev/null +++ b/websites/confetti/package.json @@ -0,0 +1,44 @@ +{ + "name": "@tsparticles/confetti-website", + "version": "4.0.0-beta.15", + "description": "tsParticles confetti webpage", + "private": true, + "type": "module", + "engines": { + "node": ">=20" + }, + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview", + "deploy": "node deploy.js", + "lint": "eslint src", + "lint:fix": "eslint src --fix", + "format": "prettier --write .", + "format:check": "prettier --check ." + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tsparticles/tsparticles.git", + "directory": "websites/confetti" + }, + "author": "Matteo Bruni ", + "license": "MIT", + "bugs": { + "url": "https://github.com/tsparticles/tsparticles/issues" + }, + "homepage": "https://confetti.js.org", + "dependencies": { + "@tsparticles/confetti": "workspace:*" + }, + "devDependencies": { + "@eslint/js": "^10.0.1", + "eslint": "^10.3.0", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-prettier": "^5.5.5", + "gh-pages": "^6.3.0", + "globals": "^17.6.0", + "prettier": "^3.8.3", + "vite": "^8.0.11" + } +} diff --git a/websites/confetti/public/CNAME b/websites/confetti/public/CNAME new file mode 100644 index 00000000000..afc80de5b8e --- /dev/null +++ b/websites/confetti/public/CNAME @@ -0,0 +1 @@ +confetti.js.org diff --git a/websites/confetti/public/ads.txt b/websites/confetti/public/ads.txt new file mode 100644 index 00000000000..63f133da4fc --- /dev/null +++ b/websites/confetti/public/ads.txt @@ -0,0 +1 @@ +google.com, pub-1784552607103901, DIRECT, f08c47fec0942fa0 diff --git a/websites/confetti/public/cookie-policy.html b/websites/confetti/public/cookie-policy.html new file mode 100644 index 00000000000..77b000e33e9 --- /dev/null +++ b/websites/confetti/public/cookie-policy.html @@ -0,0 +1,49 @@ + + + + + + + + Cookie Policy | tsParticles Confetti + + + + +
+

Cookie Policy

+

+ This website uses optional cookies to improve content quality and to support the project + with ads. +

+ +

Categories

+

+ Analytics: used to understand aggregate usage of the website through Google + Analytics. +

+

Advertising: used to show ads through Google AdSense.

+ +

Consent and control

+

+ Analytics and personalized advertising scripts are loaded only after explicit consent. You + can reject all, accept all, or save a custom choice from the privacy banner. +

+

+ You can change your choice at any time from the Cookie preferences button in the + website footer. +

+ +

Storage

+

+ Your preference is stored locally in your browser using localStorage under a consent key + dedicated to this website. +

+ +

Back to the homepage

+
+ + diff --git a/websites/confetti/public/css/index.css b/websites/confetti/public/css/index.css new file mode 100644 index 00000000000..cc8f3883098 --- /dev/null +++ b/websites/confetti/public/css/index.css @@ -0,0 +1,528 @@ +:root { + --primary-color: #eeeeee; + --secondary-color: #363636; + --secondary-variant-color: #272727; + --background-color: #212121; + --inner-color: #ffffff; + --border-color: #555651; + + /* icons by Google - Material Design + * https://material.io/resources/icons/?style=baseline + */ + --switch-moon-white: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' %3E%3Cpath fill='%23eeeeee' d='M20 8.69V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69zM12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6c3.31 0 6 2.69 6 6s-2.69 6-6 6z'%3E%3C/path%3E%3C/svg%3E"); + --switch-sun-black: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' %3E%3Cpath fill='%23212121' d='M20 15.31L23.31 12 20 8.69V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69zM12 18c-3.31 0-6-2.69-6-6s2.69-6 6-6 6 2.69 6 6-2.69 6-6 6z'%3E%3C/path%3E%3C/svg%3E"); + --switch-auto-white: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' %3E%3Cpath fill='%23eeeeee' d='M10.85 12.65h2.3L12 9l-1.15 3.65zM20 8.69V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69zM14.3 16l-.7-2h-3.2l-.7 2H7.8L11 7h2l3.2 9h-1.9z'%3E%3C/path%3E%3C/svg%3E"); + --switch-auto-black: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' %3E%3Cpath fill='%23212121' d='M10.85 12.65h2.3L12 9l-1.15 3.65zM20 8.69V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69zM14.3 16l-.7-2h-3.2l-.7 2H7.8L11 7h2l3.2 9h-1.9z'%3E%3C/path%3E%3C/svg%3E"); + + --theme-switch: var(--switch-moon-white); +} + +[data-theme='light'] { + --primary-color: #212121; + --secondary-color: #ffffff; + --background-color: #f0f0f0; + --inner-color: #363636; + + --theme-switch: var(--switch-sun-black); +} + +[auto-theme] { + --theme-switch: var(--switch-auto-white); +} + +[data-theme='light'][auto-theme] { + --theme-switch: var(--switch-auto-black); +} + +html, +body { + margin: 0; + padding: 0; + width: 100%; + height: 100%; +} + +html { + scroll-behavior: smooth; +} + +body { + background: var(--background-color); + color: var(--primary-color); + font-size: 1em; + font-family: 'Noto Sans', sans-serif; +} + +* { + box-sizing: border-box; +} + +.sprite { + display: none; +} + +header { + position: absolute; + top: 0; + left: 0; + display: flex; + justify-content: flex-end; + align-items: center; + width: 100%; + height: 64px; +} + +.theme { + --size: 28px; + position: relative; + display: inline-block; + width: var(--size); + height: var(--size); + background: none; + border: none; + outline: none; + margin-right: 12px; + cursor: pointer; +} + +.theme:after { + position: absolute; + top: 0; + left: 0; + content: ''; + width: var(--size); + height: var(--size); + background-repeat: no-repeat; + background-position: center; + background: var(--theme-switch); +} + +.github-icon { + --size: 36px; + position: relative; + display: block; + width: var(--size); + height: var(--size); + margin-right: 12px; +} + +.github-icon svg.icon { + fill: var(--primary-color); +} + +h1, +h2, +.center { + text-align: center; +} + +h1 { + margin-top: 64px; +} + +h2 { + padding: 0; + margin: 0.25em; +} + +p { + margin: 0.5em; +} + +.container { + position: relative; + max-width: 1000px; + width: 100%; + margin: 0 auto; +} + +.group { + position: relative; + width: 100%; + margin: 40px 0; + padding-top: 16px; + + border-top: 1px solid var(--border-color); + border-radius: 20px; +} + +.run { + padding: 10px 6px; + margin: 0.75em auto; + max-width: 200px; + width: 100%; + display: inline-block; + + background: var(--secondary-color); + border: none; + outline: none; + + color: var(--inner-color); + font-weight: bold; + cursor: pointer; + user-select: none; + + opacity: 0.8; + transition: opacity 100ms ease; +} + +.group .run:hover { + opacity: 1; +} + +.editor { + position: relative; + min-height: 100px; + width: 100%; +} + +.editor.ace_dark.ace_editor { + background-color: var(--secondary-color); +} +.editor.ace_dark .ace_gutter { + background: var(--secondary-variant-color); +} +.editor.ace_dark .ace_gutter .ace_gutter-cell { + color: var(--inner-color); + opacity: 0.6; +} + +.flex-rows { + position: relative; + display: block; + width: 100%; + padding-bottom: 1em; +} + +.description { + width: 94%; + margin: 10px auto; + padding: 0; + + align-items: center; + line-height: 1.5; +} + +.left { + flex-grow: 1; + display: flex; + flex-direction: column; +} + +a.anchor { + position: relative; + color: currentColor; + text-decoration: none; +} + +a.anchor:hover::before { + content: '🔗'; + color: currentColor; + position: absolute; + left: -2rem; + top: 0; + transform: scale(0.75, 0.75); +} + +footer { + font-size: 0.9rem; + text-align: center; + line-height: 2; + + background: var(--secondary-color); +} + +footer span { + vertical-align: middle; +} + +span.icon { + position: relative; + display: inline-block; + height: 1em; + width: 1em; +} +svg.icon { + position: absolute; + pointer-events: none; + left: 0; + width: 100%; + height: 100%; + + fill: var(--inner-color); +} + +footer a { + text-decoration: none; + color: var(--inner-color); + opacity: 0.85; + will-change: opacity; +} + +footer a:hover { + opacity: 1; +} + +.cookie-preferences-button { + margin: 0.5rem 0 1rem; + background: transparent; + border: 1px solid var(--inner-color); + color: var(--inner-color); + border-radius: 999px; + padding: 0.35rem 0.75rem; + cursor: pointer; +} + +.social-share { + margin: 0; + display: flex; + flex-wrap: wrap; + justify-content: flex-start; + align-items: center; + gap: 0.24rem; + width: 100%; +} + +.social-share-button { + display: inline-flex; + align-items: center; + justify-content: center; + gap: 0.32rem; + border: 1px solid rgba(255, 255, 255, 0.28); + border-radius: 0.42rem; + padding: 0.2rem 0.42rem; + color: var(--inner-color); + opacity: 0.9; + font-size: 0.74rem; + line-height: 1.1; + text-decoration: none; + background: rgba(255, 255, 255, 0.03); + transition: + border-color 120ms ease, + background 120ms ease, + opacity 120ms ease; +} + +.social-share-button-icon { + display: inline-flex; + align-items: center; + justify-content: center; + width: 0.95rem; + height: 0.95rem; + border-radius: 0.2rem; + background: rgba(255, 255, 255, 0.12); +} + +.social-share-button-icon svg { + width: 0.68rem; + height: 0.68rem; + display: block; +} + +.social-share-button:hover { + opacity: 1; + border-color: rgba(255, 255, 255, 0.55); + background: rgba(255, 255, 255, 0.08); +} + +.social-share-button[data-share-link='facebook']:hover .social-share-button-icon { + color: #1877f2; + background: rgba(24, 119, 242, 0.2); +} + +.social-share-button[data-share-link='x']:hover .social-share-button-icon { + color: #111111; + background: rgba(17, 17, 17, 0.18); +} + +.social-share-button[data-share-link='linkedin']:hover .social-share-button-icon { + color: #0a66c2; + background: rgba(10, 102, 194, 0.2); +} + +.social-share-button[data-share-link='reddit']:hover .social-share-button-icon { + color: #ff4500; + background: rgba(255, 69, 0, 0.2); +} + +.social-share-button[data-share-link='telegram']:hover .social-share-button-icon { + color: #229ed9; + background: rgba(34, 158, 217, 0.2); +} + +.social-share-button[data-share-link='whatsapp']:hover .social-share-button-icon { + color: #25d366; + background: rgba(37, 211, 102, 0.2); +} + +.social-share-button[data-share-link='email']:hover .social-share-button-icon { + color: #7c3aed; + background: rgba(124, 58, 237, 0.2); +} + +.share-menu-wrapper { + max-width: 1000px; + margin: 0 auto 0.75rem; + width: 100%; + padding: 0 1rem; + display: flex; + justify-content: center; +} + +.share-menu { + position: relative; +} + +.share-menu-trigger { + list-style: none; + display: inline-flex; + align-items: center; + gap: 0.35rem; + border: 1px solid rgba(255, 255, 255, 0.28); + border-radius: 999px; + padding: 0.3rem 0.7rem; + font-size: 0.75rem; + line-height: 1; + color: var(--primary-color); + cursor: pointer; + background: var(--secondary-color); +} + +.share-menu-trigger-icon { + width: 0.82rem; + height: 0.82rem; + display: block; +} + +.share-menu-trigger::-webkit-details-marker { + display: none; +} + +.share-menu[open] .share-menu-trigger { + border-color: rgba(255, 255, 255, 0.55); +} + +.share-menu .social-share { + position: absolute; + left: 50%; + top: calc(100% + 0.4rem); + transform: translateX(-50%); + width: min(560px, calc(100vw - 2rem)); + padding: 0.35rem; + border: 1px solid rgba(255, 255, 255, 0.22); + border-radius: 0.6rem; + background: var(--secondary-color); + box-shadow: 0 10px 24px rgba(0, 0, 0, 0.22); + z-index: 20; +} + +.cookie-policy-link { + display: inline-block; + margin: 0 0 1rem; + color: var(--inner-color); + opacity: 0.85; +} + +.cookie-policy-link:hover { + opacity: 1; +} + +.cookie-consent-banner { + position: fixed; + left: 1rem; + right: 1rem; + bottom: 1rem; + background: var(--secondary-color); + border: 1px solid var(--border-color); + border-radius: 0.75rem; + box-shadow: 0 6px 20px rgba(0, 0, 0, 0.35); + z-index: 1000; +} + +.cookie-consent-content { + padding: 1rem; +} + +.cookie-consent-title { + margin: 0 0 0.25rem; + font-weight: 700; +} + +.cookie-consent-text { + margin: 0 0 0.75rem; + line-height: 1.4; +} + +.cookie-consent-link { + color: inherit; +} + +.cookie-consent-option { + display: flex; + gap: 0.5rem; + align-items: center; + margin: 0.4rem 0; +} + +.cookie-consent-actions { + margin-top: 0.8rem; + display: flex; + gap: 0.5rem; + flex-wrap: wrap; +} + +.cookie-consent-actions button { + border: 1px solid var(--border-color); + background: transparent; + color: var(--primary-color); + border-radius: 0.5rem; + padding: 0.4rem 0.75rem; + cursor: pointer; +} + +.cookie-consent-actions .cookie-consent-primary { + background: var(--primary-color); + color: var(--background-color); + border-color: transparent; +} + +.policy-container { + margin: 0 auto; + max-width: 800px; + padding: 2rem 1rem; + line-height: 1.6; +} + +.policy-container a { + color: var(--primary-color); +} + +.custom-canvas { + margin-top: 30px; + background: var(--secondary-color); +} + +@media (min-width: 44em) { + .container { + width: 95%; + } + + .flex-rows { + display: flex; + flex-direction: row; + } + + .description { + width: 66%; + padding: 0 0 0 1em; + } + + .cookie-consent-banner { + left: auto; + width: min(36rem, calc(100% - 2rem)); + } +} + +.dh-banner { + margin-top: 64px !important; +} diff --git a/websites/confetti/public/sitemap.xml b/websites/confetti/public/sitemap.xml new file mode 100644 index 00000000000..caa6e0ebde6 --- /dev/null +++ b/websites/confetti/public/sitemap.xml @@ -0,0 +1,15 @@ + + + + https://confetti.js.org/ + 2026-04-05 + monthly + 1 + + + https://confetti.js.org/cookie-policy.html + 2026-04-06 + monthly + 0.5 + + \ No newline at end of file diff --git a/websites/confetti/src/cookie-consent.js b/websites/confetti/src/cookie-consent.js new file mode 100644 index 00000000000..ef0acff6d4d --- /dev/null +++ b/websites/confetti/src/cookie-consent.js @@ -0,0 +1,230 @@ +const CONSENT_KEY = "tsparticles-confetti/cookie-consent-v1"; +const GA_MEASUREMENT_ID = "G-80MY3TZM79"; +const ADSENSE_CLIENT_ID = "ca-pub-1784552607103901"; +const ADSENSE_NON_PERSONALIZED_ON_REJECT = true; + +const defaultConsent = { + analytics: false, + adsense: false, +}; + +let consent = readConsent(); +let analyticsInitialized = false; +let adsenseInitialized = false; + +function readConsent() { + try { + const rawConsent = localStorage.getItem(CONSENT_KEY); + + if (!rawConsent) { + return undefined; + } + + const parsed = JSON.parse(rawConsent); + + if (typeof parsed !== "object" || !parsed) { + return undefined; + } + + return { + analytics: !!parsed.analytics, + adsense: !!parsed.adsense, + }; + } catch (err) { + console.warn("Cannot read cookie consent preferences.", err); + + return undefined; + } +} + +function writeConsent(nextConsent) { + localStorage.setItem(CONSENT_KEY, JSON.stringify(nextConsent)); +} + +function hasUserChoice() { + return !!consent; +} + +function loadScript(id, src, attributes) { + if (document.getElementById(id)) { + return; + } + + const script = document.createElement("script"); + + script.id = id; + script.src = src; + script.async = true; + + Object.entries(attributes || {}).forEach(([key, value]) => { + script.setAttribute(key, value); + }); + + document.head.appendChild(script); +} + +function ensureGtagStub() { + window.dataLayer = window.dataLayer || []; + window.gtag = + window.gtag || + function () { + window.dataLayer.push(arguments); + }; +} + +function initAnalytics() { + if (analyticsInitialized) { + return; + } + + ensureGtagStub(); + loadScript("ga-script", `https://www.googletagmanager.com/gtag/js?id=${GA_MEASUREMENT_ID}`); + window.gtag("js", new Date()); + window.gtag("config", GA_MEASUREMENT_ID, { + send_page_view: false, + }); + + analyticsInitialized = true; +} + +function initAdSense() { + if (adsenseInitialized) { + return; + } + + loadScript( + "adsense-script", + `https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=${ADSENSE_CLIENT_ID}`, + { + crossorigin: "anonymous", + }, + ); + + window.adsbygoogle = window.adsbygoogle || []; + window.adsbygoogle.push({ + google_ad_client: ADSENSE_CLIENT_ID, + enable_page_level_ads: true, + }); + + adsenseInitialized = true; +} + +function updateConsentMode(activeConsent) { + ensureGtagStub(); + + window.gtag("consent", "update", { + ad_storage: activeConsent.adsense ? "granted" : "denied", + analytics_storage: activeConsent.analytics ? "granted" : "denied", + ad_user_data: activeConsent.adsense ? "granted" : "denied", + ad_personalization: activeConsent.adsense ? "granted" : "denied", + }); +} + +function updateAdSensePersonalization(activeConsent) { + window.adsbygoogle = window.adsbygoogle || []; + window.adsbygoogle.requestNonPersonalizedAds = + activeConsent.adsense || !ADSENSE_NON_PERSONALIZED_ON_REJECT ? 0 : 1; +} + +function applyConsent(activeConsent) { + updateConsentMode(activeConsent); + updateAdSensePersonalization(activeConsent); + + if (activeConsent.analytics) { + initAnalytics(); + } + + if (activeConsent.adsense || ADSENSE_NON_PERSONALIZED_ON_REJECT) { + initAdSense(); + } +} + +function closeBanner() { + const banner = document.getElementById("cookieConsentBanner"); + + if (banner) { + banner.remove(); + } +} + +function saveAndApply(nextConsent) { + consent = nextConsent; + writeConsent(nextConsent); + applyConsent(nextConsent); + closeBanner(); +} + +function createBanner() { + if (document.getElementById("cookieConsentBanner")) { + return; + } + + const banner = document.createElement("div"); + const consentState = consent || defaultConsent; + + banner.id = "cookieConsentBanner"; + banner.className = "cookie-consent-banner"; + + banner.innerHTML = ` + + `; + + document.body.appendChild(banner); + + document.getElementById("cookieConsentReject").addEventListener("click", () => { + saveAndApply({ analytics: false, adsense: false }); + }); + + document.getElementById("cookieConsentAccept").addEventListener("click", () => { + saveAndApply({ analytics: true, adsense: true }); + }); + + document.getElementById("cookieConsentSave").addEventListener("click", () => { + saveAndApply({ + analytics: document.getElementById("cookieConsentAnalytics").checked, + adsense: document.getElementById("cookieConsentAdsense").checked, + }); + }); +} + +document.addEventListener("DOMContentLoaded", () => { + if (hasUserChoice()) { + applyConsent(consent); + } else { + applyConsent(defaultConsent); + createBanner(); + } + + const preferencesButton = document.getElementById("cookiePreferencesButton"); + + if (preferencesButton) { + preferencesButton.addEventListener("click", () => { + createBanner(); + }); + } + + window.tsParticlesConfettiConsent = { + get() { + return consent || defaultConsent; + }, + }; +}); diff --git a/websites/confetti/src/main.js b/websites/confetti/src/main.js new file mode 100644 index 00000000000..a9d7015b1e1 --- /dev/null +++ b/websites/confetti/src/main.js @@ -0,0 +1,873 @@ +import { confetti } from "@tsparticles/confetti"; +import "./style.css"; +import "./cookie-consent.js"; + +window.confetti = confetti; + +const editors = []; + +const sharePlatformTemplates = { + facebook: (url) => `https://www.facebook.com/sharer/sharer.php?u=${url}`, + x: (url, text) => `https://x.com/intent/tweet?url=${url}&text=${text}`, + linkedin: (url) => `https://www.linkedin.com/sharing/share-offsite/?url=${url}`, + reddit: (url, text) => `https://www.reddit.com/submit?url=${url}&title=${text}`, + telegram: (url, text) => `https://t.me/share/url?url=${url}&text=${text}`, + whatsapp: (url, text) => `https://wa.me/?text=${text}%20${url}`, + email: (url, text) => `mailto:?subject=${text}&body=${url}`, +}; +const shareDesktopOrder = ["facebook", "x", "linkedin", "reddit", "telegram", "whatsapp", "email"]; +const shareMobileOrder = ["x", "whatsapp", "telegram", "facebook", "linkedin", "reddit", "email"]; + +let activeTheme = "dark"; +let currentStep = parseInt(localStorage.getItem("tsparticles-confetti/theme"), 10) || 0; + +const prefersLightTheme = window.matchMedia && window.matchMedia("(prefers-color-scheme: light)"); +const themes = { + light: "ace/theme/xcode", + dark: "ace/theme/monokai", +}; + +const getPreferedTheme = function () { + return prefersLightTheme ? (prefersLightTheme.matches ? "light" : "dark") : "dark"; +}; + +const updateShareLinks = function () { + const encodedUrl = encodeURIComponent(window.location.href); + const encodedText = encodeURIComponent(document.title || "tsParticles Confetti"); + + Array.from(document.querySelectorAll("[data-share-link]")).forEach((link) => { + const platform = link.getAttribute("data-share-link"); + const template = sharePlatformTemplates[platform]; + + if (!template) { + return; + } + + link.setAttribute("href", template(encodedUrl, encodedText)); + }); +}; + +const hasAnalyticsConsent = function () { + const consentApi = window.tsParticlesConfettiConsent; + + return !!consentApi?.get?.()?.analytics; +}; + +const trackShare = function (platform) { + if (!hasAnalyticsConsent() || !window.gtag) { + return; + } + + window.gtag("event", "share_click", { + method: platform, + page_path: window.location.pathname, + page_title: document.title, + }); +}; + +const trackCopyLink = function () { + if (!hasAnalyticsConsent() || !window.gtag) { + return; + } + + window.gtag("event", "share_copy_link", { + method: "copy_link", + page_path: window.location.pathname, + page_title: document.title, + }); +}; + +const updateShareOrder = function () { + const currentOrder = window.matchMedia("(max-width: 768px)").matches + ? shareMobileOrder + : shareDesktopOrder; + + Array.from(document.querySelectorAll(".social-share")).forEach((shareContainer) => { + const linksByPlatform = {}; + + Array.from(shareContainer.querySelectorAll("[data-share-link]")).forEach((link) => { + const platform = link.getAttribute("data-share-link"); + + if (platform) { + linksByPlatform[platform] = link; + } + }); + + currentOrder.forEach((platform) => { + const link = linksByPlatform[platform]; + + if (link) { + shareContainer.appendChild(link); + } + }); + + const copyButton = shareContainer.querySelector("#shareCopyLinkButton"); + + if (copyButton) { + shareContainer.appendChild(copyButton); + } + }); +}; + +const setupShareActions = function () { + const shareDropdown = document.querySelector(".share-menu"); + + if (shareDropdown) { + document.addEventListener("click", (event) => { + if (!shareDropdown.contains(event.target)) { + shareDropdown.removeAttribute("open"); + } + }); + } + + Array.from(document.querySelectorAll("[data-share-link]")).forEach((link) => { + const platform = link.getAttribute("data-share-link") || "unknown"; + + link.addEventListener("click", () => { + trackShare(platform); + }); + }); + + Array.from(document.querySelectorAll("#shareCopyLinkButton")).forEach((copyButton) => { + copyButton.addEventListener("click", async () => { + try { + await navigator.clipboard.writeText(window.location.href); + const originalLabel = copyButton.textContent; + + copyButton.textContent = "Copied"; + trackCopyLink(); + window.setTimeout(() => { + copyButton.textContent = originalLabel; + }, 1800); + } catch (err) { + console.error("Unable to copy share link.", err); + } + }); + }); +}; + +const setTheme = function (isAuto, theme) { + if (isAuto) { + document.body.setAttribute("auto-theme", true); + + activeTheme = getPreferedTheme(); + } else { + document.body.removeAttribute("auto-theme"); + + activeTheme = theme; + } + + document.body.setAttribute("data-theme", activeTheme); + + editors.forEach(function (editor) { + editor.setTheme(themes[activeTheme]); + }); +}; + +const updateTheme = function (step) { + currentStep = step; + + switch (step) { + case 0: + setTheme(true); + + prefersLightTheme && prefersLightTheme.addEventListener("change", setTheme); + + break; + + case 1: + case 2: + setTheme(false, step === 1 ? "dark" : "light"); + + prefersLightTheme && prefersLightTheme.removeListener(setTheme); + break; + } + + localStorage.setItem("tsparticles-confetti/theme", currentStep); +}; + +updateTheme(currentStep); + +document.getElementById("themeToggle").addEventListener("click", function () { + updateTheme(++currentStep % 3); +}); + +const modes = [ + { + id: "cannon", + name: "Basic Cannon", + description: [ + { + cssClass: "", + text: "The default mode... just your regular basic average blast of confetti. But it's still a little cool, right?", + }, + ], + fn: function () { + confetti({ + particleCount: 100, + spread: 70, + origin: { y: 0.6 }, + }); + }, + }, + + { + id: "random", + name: "Random Direction", + description: [ + { + cssClass: "", + text: "Go crazy with some randomness. Shoot a random amount of confetti in random directions. (Go ahead... you know you want to click that button more than once.)", + }, + ], + fn: function () { + function randomInRange(min, max) { + return Math.random() * (max - min) + min; + } + + confetti({ + angle: randomInRange(55, 125), + spread: randomInRange(50, 70), + particleCount: randomInRange(50, 100), + origin: { y: 0.6 }, + }); + }, + }, + + { + id: "realistic", + name: "Realistic Look", + description: [ + { + cssClass: "", + text: 'If you happened to get curious and changed the particle count to 400 or so, you saw something disappointing. An even "flattened cone" look to the confetti, making it look way too perfect and ruining the illusion. We can fix that by mixing a few effects together.', + }, + ], + fn: function () { + const count = 200, + defaults = { + origin: { y: 0.7 }, + }; + + function fire(particleRatio, opts) { + confetti( + Object.assign({}, defaults, opts, { + particleCount: Math.floor(count * particleRatio), + }), + ); + } + + fire(0.25, { + spread: 26, + startVelocity: 55, + }); + + fire(0.2, { + spread: 60, + }); + + fire(0.35, { + spread: 100, + decay: 0.91, + scalar: 0.8, + }); + + fire(0.1, { + spread: 120, + startVelocity: 25, + decay: 0.92, + scalar: 1.2, + }); + + fire(0.1, { + spread: 120, + startVelocity: 45, + }); + }, + }, + + { + id: "hearts", + name: "Valentine's Day", + description: [ + { + cssClass: "", + text: "You can create beautiful Valentine's Day effects with the heart shape. Spread the love with some heart shaped confetti.", + }, + { + cssClass: "center", + text: "❤️ Happy Valentine's Day! ❤️", + }, + ], + fn: function () { + const defaults = { + spread: 360, + ticks: 100, + gravity: 0, + decay: 0.94, + startVelocity: 30, + shapes: ["heart"], + colors: ["FFC0CB", "FF69B4", "FF1493", "C71585"], + }; + + confetti({ + ...defaults, + particleCount: 50, + scalar: 2, + }); + + confetti({ + ...defaults, + particleCount: 25, + scalar: 3, + }); + + confetti({ + ...defaults, + particleCount: 10, + scalar: 4, + }); + }, + }, + + { + id: "stars", + name: "Stars", + description: [ + { + cssClass: "", + text: "You can combine multiple calls to confetti with any settings in order to create a more complex effect. Go ahead, combine different shapes, sizes, etc. Stagger them for an extra boost of excitement.", + }, + { + cssClass: "center", + text: "✨ Celebrate with a burst of stars! ✨", + }, + ], + fn: function () { + const defaults = { + spread: 360, + ticks: 50, + gravity: 0, + decay: 0.94, + startVelocity: 30, + shapes: ["star"], + colors: ["FFE400", "FFBD00", "E89400", "FFCA6C", "FDFFB8"], + }; + + function shoot() { + confetti({ + ...defaults, + particleCount: 40, + scalar: 1.2, + shapes: ["star"], + }); + + confetti({ + ...defaults, + particleCount: 10, + scalar: 0.75, + shapes: ["circle"], + }); + } + + setTimeout(shoot, 0); + setTimeout(shoot, 100); + setTimeout(shoot, 200); + }, + }, + + { + id: "emoji", + name: "Emoji and Unicorns", + description: [ + { + cssClass: "", + text: "You can create a beautiful rainbow effect combined with some emoji unicorns. Unicorns already love this. 🦄 ", + }, + { + cssClass: "center", + text: "🦄 Unicorns loves rainbows! 🦄", + }, + ], + fn: function () { + const defaults = { + spread: 360, + ticks: 100, + gravity: 0, + decay: 0.94, + startVelocity: 30, + }; + + function shoot() { + confetti({ + ...defaults, + particleCount: 30, + scalar: 1.2, + shapes: ["circle", "square"], + colors: ["#a864fd", "#29cdff", "#78ff44", "#ff718d", "#fdff6a"], + }); + + confetti({ + ...defaults, + particleCount: 20, + scalar: 2, + shapes: ["emoji"], + shapeOptions: { + emoji: { + value: ["🦄", "🌈"], + }, + }, + }); + } + + setTimeout(shoot, 0); + setTimeout(shoot, 100); + setTimeout(shoot, 200); + }, + }, + + { + id: "images", + name: "Images", + description: [ + { + cssClass: "", + text: "You can create beautiful effects using all your favorite images. Just make sure they're the right size for being used as a confetti shape.", + }, + { + cssClass: "center", + text: "🍎🥑🍌🍉🍍🍓 Aren't these fruits just the cutest? 🍒🍑🍈🍇🍊🍋", + }, + ], + fn: function () { + confetti({ + spread: 360, + ticks: 200, + gravity: 1, + decay: 0.94, + startVelocity: 30, + particleCount: 100, + scalar: 3, + shapes: ["image"], + shapeOptions: { + image: [ + { + src: "https://particles.js.org/images/fruits/apple.png", + width: 32, + height: 32, + }, + { + src: "https://particles.js.org/images/fruits/avocado.png", + width: 32, + height: 32, + }, + { + src: "https://particles.js.org/images/fruits/banana.png", + width: 32, + height: 32, + }, + { + src: "https://particles.js.org/images/fruits/berries.png", + width: 32, + height: 32, + }, + { + src: "https://particles.js.org/images/fruits/cherry.png", + width: 32, + height: 32, + }, + { + src: "https://particles.js.org/images/fruits/grapes.png", + width: 32, + height: 32, + }, + { + src: "https://particles.js.org/images/fruits/lemon.png", + width: 32, + height: 32, + }, + { + src: "https://particles.js.org/images/fruits/orange.png", + width: 32, + height: 32, + }, + { + src: "https://particles.js.org/images/fruits/peach.png", + width: 32, + height: 32, + }, + { + src: "https://particles.js.org/images/fruits/pear.png", + width: 32, + height: 32, + }, + { + src: "https://particles.js.org/images/fruits/pepper.png", + width: 32, + height: 32, + }, + { + src: "https://particles.js.org/images/fruits/plum.png", + width: 32, + height: 32, + }, + { + src: "https://particles.js.org/images/fruits/star.png", + width: 32, + height: 32, + }, + { + src: "https://particles.js.org/images/fruits/strawberry.png", + width: 32, + height: 32, + }, + { + src: "https://particles.js.org/images/fruits/watermelon.png", + width: 32, + height: 32, + }, + { + src: "https://particles.js.org/images/fruits/watermelon_slice.png", + width: 32, + height: 32, + }, + ], + }, + }); + }, + }, + + { + id: "fireworks", + name: "Fireworks", + description: [ + { + cssClass: "", + text: "Why click a button repeatedly when you can have code do it for you? Shoot some firework of confetti from the sides of page so you can still read the content in the center.", + }, + ], + fn: function () { + const duration = 15 * 1000, + animationEnd = Date.now() + duration, + defaults = { startVelocity: 30, spread: 360, ticks: 60, zIndex: 0 }; + + function randomInRange(min, max) { + return Math.random() * (max - min) + min; + } + + const interval = setInterval(function () { + const timeLeft = animationEnd - Date.now(); + + if (timeLeft <= 0) { + return clearInterval(interval); + } + + const particleCount = 50 * (timeLeft / duration); + + confetti( + Object.assign({}, defaults, { + particleCount, + origin: { x: randomInRange(0.1, 0.3), y: Math.random() - 0.2 }, + }), + ); + confetti( + Object.assign({}, defaults, { + particleCount, + origin: { x: randomInRange(0.7, 0.9), y: Math.random() - 0.2 }, + }), + ); + }, 250); + }, + }, + + { + id: "snow", + name: "Snow", + description: [ + { + cssClass: "", + text: "The effect is not limited to crazy rapid fire of confetti though. You can create a wintery mood with gently falling particles across the entire page.", + }, + ], + fn: function () { + const duration = 15 * 1000, + animationEnd = Date.now() + duration; + + let skew = 1; + + function randomInRange(min, max) { + return Math.random() * (max - min) + min; + } + + (function frame() { + const timeLeft = animationEnd - Date.now(), + ticks = Math.max(200, 500 * (timeLeft / duration)); + + skew = Math.max(0.8, skew - 0.001); + + confetti({ + particleCount: 1, + startVelocity: 0, + ticks: ticks, + origin: { + x: Math.random(), + y: Math.random() * skew - 0.2, + }, + colors: ["#ffffff"], + shapes: ["circle"], + gravity: randomInRange(0.4, 0.6), + scalar: randomInRange(0.4, 1), + drift: randomInRange(-0.4, 0.4), + }); + + if (timeLeft > 0) { + requestAnimationFrame(frame); + } + })(); + }, + }, + + { + id: "continuous", + name: "School Pride", + description: [ + { + cssClass: "", + text: "But if you are into crazy rapid fire of confetti, what could be a better use than to show everyone what you are all about? Tell people where you are from with two confetti cannons from either side of the page.", + }, + { + cssClass: "center", + text: "🌰 Go Buckeyes! 🌰", + }, + ], + fn: function () { + const end = Date.now() + 15 * 1000; + + const colors = ["#bb0000", "#ffffff"]; + + (function frame() { + confetti({ + particleCount: 2, + angle: 60, + spread: 55, + origin: { x: 0 }, + colors: colors, + }); + + confetti({ + particleCount: 2, + angle: 120, + spread: 55, + origin: { x: 1 }, + colors: colors, + }); + + if (Date.now() < end) { + requestAnimationFrame(frame); + } + })(); + }, + }, + + { + id: "customShapes", + name: "Custom Shapes", + description: [ + { + cssClass: "", + text: "Celebrate some holidays with holiday-appropriate shapes! You can use any SVG path to make a confetti out of it. Go wild!", + }, + { + cssClass: "center", + text: "🎃🎄💜", + }, + ], + fn: function () { + var defaults = { + scalar: 2, + spread: 270, + particleCount: 25, + origin: { y: 0.4 }, + startVelocity: 35, + }; + + confetti({ + ...defaults, + shapes: ["image"], + shapeOptions: { + image: { + src: "https://particles.js.org/images/pumpkin.svg", + replaceColor: true, + width: 32, + height: 40, + }, + }, + colors: ["#ff9a00", "#ff7400", "#ff4d00"], + }); + confetti({ + ...defaults, + shapes: ["image"], + shapeOptions: { + image: { + src: "https://particles.js.org/images/pine-tree.svg", + replaceColor: true, + width: 271, + height: 351.5, + }, + }, + colors: ["#8d960f", "#be0f10", "#445404"], + }); + confetti({ + ...defaults, + shapes: ["heart"], + colors: ["#f93963", "#a10864", "#ee0b93"], + }); + }, + }, + + { + id: "custom", + name: "Custom Canvas", + description: [ + { + cssClass: "", + text: "But if you just hate confetti all over the place, there's something here for you as well. You can limit where the confetti appear by providing your own canvas element.", + }, + ], + fn: function () { + (async () => { + const canvas = document.getElementById("my-canvas"); + + canvas.confetti = canvas.confetti || (await confetti.create(canvas, { resize: true })); + + canvas.confetti({ + spread: 70, + origin: { y: 1.2 }, + }); + })(); + }, + }, +]; + +function renderModes(modes) { + return modes + .map( + (mode) => ` +
+
+
+
+

${mode.name}

+ +
+
+ ${mode.description.map((d) => `

${d.text}

`).join("")} +
+
+
+ ${mode.id === "custom" ? ` +
+ +
` : ""} +
+
`, + ) + .join("\n"); +} + +function pretty(val) { + return js_beautify(val, { indent_size: 2, brace_style: "preserve-inline" }); +} + +function getCode(name) { + const mode = modes.find((t) => t.id === name); + + let code = pretty(mode.fn.toString()); + + code = code + .split("\n") + .slice(1) + .slice(0, -1) + .map(function (s) { + return s.trim(); + }) + .join("\n"); + + return pretty(code); +} + +document.addEventListener("DOMContentLoaded", () => { + updateShareLinks(); + updateShareOrder(); + setupShareActions(); + window.addEventListener("resize", updateShareOrder); + + Array.from(document.querySelectorAll(".html-group")).forEach(function (group) { + const codeElem = group.querySelector(".editor"), + editor = ace.edit(codeElem); + + editor.setTheme(themes[activeTheme]); + + editor.session.setMode("ace/mode/html"); + editor.session.setUseSoftTabs(true); + editor.session.setTabSize(2); + + const count = editor.session.getLength(); + + codeElem.style.minHeight = 14 * count + 1 + "px"; + codeElem.style.height = count + "rem"; + + editors.push(editor); + }); + + document.getElementById("confetti-modes").innerHTML = renderModes(modes); + + Array.from(document.querySelectorAll(".group")).forEach(function (group) { + const name = group.getAttribute("data-name"), + button = group.querySelector(".run"), + codeElem = group.querySelector(".editor"), + editor = ace.edit(codeElem); + + editor.setTheme(themes[activeTheme]); + + editor.session.on("changeMode", function (e, session) { + if ("ace/mode/javascript" === session.getMode().$id) { + if (!!session.$worker) { + session.$worker.send("setOptions", [ + { + esversion: 9, + esnext: false, + }, + ]); + } + } + }); + + editor.session.setMode("ace/mode/javascript"); + editor.session.setUseSoftTabs(true); + editor.session.setTabSize(2); + editor.session.setValue(getCode(name)); + + const count = editor.session.getLength(); + + codeElem.style.minHeight = 14 * count + 1 + "px"; + codeElem.style.height = count + "rem"; + + button.addEventListener("click", (ev) => { + if (ev && typeof ev.preventDefault === "function") ev.preventDefault(); + + try { + eval(editor.getValue()); + } catch (err) { + console.error(err); + } + }); + + editors.push(editor); + }); +}); diff --git a/websites/confetti/src/style.css b/websites/confetti/src/style.css new file mode 100644 index 00000000000..332fbe6d4af --- /dev/null +++ b/websites/confetti/src/style.css @@ -0,0 +1,525 @@ +:root { + --primary-color: #eeeeee; + --secondary-color: #363636; + --secondary-variant-color: #272727; + --background-color: #212121; + --inner-color: #ffffff; + --border-color: #555651; + + --switch-moon-white: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' %3E%3Cpath fill='%23eeeeee' d='M20 8.69V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69zM12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6c3.31 0 6 2.69 6 6s-2.69 6-6 6z'%3E%3C/path%3E%3C/svg%3E"); + --switch-sun-black: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' %3E%3Cpath fill='%23212121' d='M20 15.31L23.31 12 20 8.69V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69zM12 18c-3.31 0-6-2.69-6-6s2.69-6 6-6 6 2.69 6 6-2.69 6-6 6z'%3E%3C/path%3E%3C/svg%3E"); + --switch-auto-white: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' %3E%3Cpath fill='%23eeeeee' d='M10.85 12.65h2.3L12 9l-1.15 3.65zM20 8.69V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69zM14.3 16l-.7-2h-3.2l-.7 2H7.8L11 7h2l3.2 9h-1.9z'%3E%3C/path%3E%3C/svg%3E"); + --switch-auto-black: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' %3E%3Cpath fill='%23212121' d='M10.85 12.65h2.3L12 9l-1.15 3.65zM20 8.69V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69zM14.3 16l-.7-2h-3.2l-.7 2H7.8L11 7h2l3.2 9h-1.9z'%3E%3C/path%3E%3C/svg%3E"); + + --theme-switch: var(--switch-moon-white); +} + +[data-theme='light'] { + --primary-color: #212121; + --secondary-color: #ffffff; + --background-color: #f0f0f0; + --inner-color: #363636; + + --theme-switch: var(--switch-sun-black); +} + +[auto-theme] { + --theme-switch: var(--switch-auto-white); +} + +[data-theme='light'][auto-theme] { + --theme-switch: var(--switch-auto-black); +} + +html, +body { + margin: 0; + padding: 0; + width: 100%; + height: 100%; +} + +html { + scroll-behavior: smooth; +} + +body { + background: var(--background-color); + color: var(--primary-color); + font-size: 1em; + font-family: 'Noto Sans', sans-serif; +} + +* { + box-sizing: border-box; +} + +.sprite { + display: none; +} + +header { + position: absolute; + top: 0; + left: 0; + display: flex; + justify-content: flex-end; + align-items: center; + width: 100%; + height: 64px; +} + +.theme { + --size: 28px; + position: relative; + display: inline-block; + width: var(--size); + height: var(--size); + background: none; + border: none; + outline: none; + margin-right: 12px; + cursor: pointer; +} + +.theme:after { + position: absolute; + top: 0; + left: 0; + content: ''; + width: var(--size); + height: var(--size); + background-repeat: no-repeat; + background-position: center; + background: var(--theme-switch); +} + +.github-icon { + --size: 36px; + position: relative; + display: block; + width: var(--size); + height: var(--size); + margin-right: 12px; +} + +.github-icon svg.icon { + fill: var(--primary-color); +} + +h1, +h2, +.center { + text-align: center; +} + +h1 { + margin-top: 64px; +} + +h2 { + padding: 0; + margin: 0.25em; +} + +p { + margin: 0.5em; +} + +.container { + position: relative; + max-width: 1000px; + width: 100%; + margin: 0 auto; +} + +.group { + position: relative; + width: 100%; + margin: 40px 0; + padding-top: 16px; + + border-top: 1px solid var(--border-color); + border-radius: 20px; +} + +.run { + padding: 10px 6px; + margin: 0.75em auto; + max-width: 200px; + width: 100%; + display: inline-block; + + background: var(--secondary-color); + border: none; + outline: none; + + color: var(--inner-color); + font-weight: bold; + cursor: pointer; + user-select: none; + + opacity: 0.8; + transition: opacity 100ms ease; +} + +.group .run:hover { + opacity: 1; +} + +.editor { + position: relative; + min-height: 100px; + width: 100%; +} + +.editor.ace_dark.ace_editor { + background-color: var(--secondary-color); +} +.editor.ace_dark .ace_gutter { + background: var(--secondary-variant-color); +} +.editor.ace_dark .ace_gutter .ace_gutter-cell { + color: var(--inner-color); + opacity: 0.6; +} + +.flex-rows { + position: relative; + display: block; + width: 100%; + padding-bottom: 1em; +} + +.description { + width: 94%; + margin: 10px auto; + padding: 0; + + align-items: center; + line-height: 1.5; +} + +.left { + flex-grow: 1; + display: flex; + flex-direction: column; +} + +a.anchor { + position: relative; + color: currentColor; + text-decoration: none; +} + +a.anchor:hover::before { + content: '🔗'; + color: currentColor; + position: absolute; + left: -2rem; + top: 0; + transform: scale(0.75, 0.75); +} + +footer { + font-size: 0.9rem; + text-align: center; + line-height: 2; + + background: var(--secondary-color); +} + +footer span { + vertical-align: middle; +} + +span.icon { + position: relative; + display: inline-block; + height: 1em; + width: 1em; +} +svg.icon { + position: absolute; + pointer-events: none; + left: 0; + width: 100%; + height: 100%; + + fill: var(--inner-color); +} + +footer a { + text-decoration: none; + color: var(--inner-color); + opacity: 0.85; + will-change: opacity; +} + +footer a:hover { + opacity: 1; +} + +.cookie-preferences-button { + margin: 0.5rem 0 1rem; + background: transparent; + border: 1px solid var(--inner-color); + color: var(--inner-color); + border-radius: 999px; + padding: 0.35rem 0.75rem; + cursor: pointer; +} + +.social-share { + margin: 0; + display: flex; + flex-wrap: wrap; + justify-content: flex-start; + align-items: center; + gap: 0.24rem; + width: 100%; +} + +.social-share-button { + display: inline-flex; + align-items: center; + justify-content: center; + gap: 0.32rem; + border: 1px solid rgba(255, 255, 255, 0.28); + border-radius: 0.42rem; + padding: 0.2rem 0.42rem; + color: var(--inner-color); + opacity: 0.9; + font-size: 0.74rem; + line-height: 1.1; + text-decoration: none; + background: rgba(255, 255, 255, 0.03); + transition: + border-color 120ms ease, + background 120ms ease, + opacity 120ms ease; +} + +.social-share-button-icon { + display: inline-flex; + align-items: center; + justify-content: center; + width: 0.95rem; + height: 0.95rem; + border-radius: 0.2rem; + background: rgba(255, 255, 255, 0.12); +} + +.social-share-button-icon svg { + width: 0.68rem; + height: 0.68rem; + display: block; +} + +.social-share-button:hover { + opacity: 1; + border-color: rgba(255, 255, 255, 0.55); + background: rgba(255, 255, 255, 0.08); +} + +.social-share-button[data-share-link='facebook']:hover .social-share-button-icon { + color: #1877f2; + background: rgba(24, 119, 242, 0.2); +} + +.social-share-button[data-share-link='x']:hover .social-share-button-icon { + color: #111111; + background: rgba(17, 17, 17, 0.18); +} + +.social-share-button[data-share-link='linkedin']:hover .social-share-button-icon { + color: #0a66c2; + background: rgba(10, 102, 194, 0.2); +} + +.social-share-button[data-share-link='reddit']:hover .social-share-button-icon { + color: #ff4500; + background: rgba(255, 69, 0, 0.2); +} + +.social-share-button[data-share-link='telegram']:hover .social-share-button-icon { + color: #229ed9; + background: rgba(34, 158, 217, 0.2); +} + +.social-share-button[data-share-link='whatsapp']:hover .social-share-button-icon { + color: #25d366; + background: rgba(37, 211, 102, 0.2); +} + +.social-share-button[data-share-link='email']:hover .social-share-button-icon { + color: #7c3aed; + background: rgba(124, 58, 237, 0.2); +} + +.share-menu-wrapper { + max-width: 1000px; + margin: 0 auto 0.75rem; + width: 100%; + padding: 0 1rem; + display: flex; + justify-content: center; +} + +.share-menu { + position: relative; +} + +.share-menu-trigger { + list-style: none; + display: inline-flex; + align-items: center; + gap: 0.35rem; + border: 1px solid rgba(255, 255, 255, 0.28); + border-radius: 999px; + padding: 0.3rem 0.7rem; + font-size: 0.75rem; + line-height: 1; + color: var(--primary-color); + cursor: pointer; + background: var(--secondary-color); +} + +.share-menu-trigger-icon { + width: 0.82rem; + height: 0.82rem; + display: block; +} + +.share-menu-trigger::-webkit-details-marker { + display: none; +} + +.share-menu[open] .share-menu-trigger { + border-color: rgba(255, 255, 255, 0.55); +} + +.share-menu .social-share { + position: absolute; + left: 50%; + top: calc(100% + 0.4rem); + transform: translateX(-50%); + width: min(560px, calc(100vw - 2rem)); + padding: 0.35rem; + border: 1px solid rgba(255, 255, 255, 0.22); + border-radius: 0.6rem; + background: var(--secondary-color); + box-shadow: 0 10px 24px rgba(0, 0, 0, 0.22); + z-index: 20; +} + +.cookie-policy-link { + display: inline-block; + margin: 0 0 1rem; + color: var(--inner-color); + opacity: 0.85; +} + +.cookie-policy-link:hover { + opacity: 1; +} + +.cookie-consent-banner { + position: fixed; + left: 1rem; + right: 1rem; + bottom: 1rem; + background: var(--secondary-color); + border: 1px solid var(--border-color); + border-radius: 0.75rem; + box-shadow: 0 6px 20px rgba(0, 0, 0, 0.35); + z-index: 1000; +} + +.cookie-consent-content { + padding: 1rem; +} + +.cookie-consent-title { + margin: 0 0 0.25rem; + font-weight: 700; +} + +.cookie-consent-text { + margin: 0 0 0.75rem; + line-height: 1.4; +} + +.cookie-consent-link { + color: inherit; +} + +.cookie-consent-option { + display: flex; + gap: 0.5rem; + align-items: center; + margin: 0.4rem 0; +} + +.cookie-consent-actions { + margin-top: 0.8rem; + display: flex; + gap: 0.5rem; + flex-wrap: wrap; +} + +.cookie-consent-actions button { + border: 1px solid var(--border-color); + background: transparent; + color: var(--primary-color); + border-radius: 0.5rem; + padding: 0.4rem 0.75rem; + cursor: pointer; +} + +.cookie-consent-actions .cookie-consent-primary { + background: var(--primary-color); + color: var(--background-color); + border-color: transparent; +} + +.policy-container { + margin: 0 auto; + max-width: 800px; + padding: 2rem 1rem; + line-height: 1.6; +} + +.policy-container a { + color: var(--primary-color); +} + +.custom-canvas { + margin-top: 30px; + background: var(--secondary-color); +} + +@media (min-width: 44em) { + .container { + width: 95%; + } + + .flex-rows { + display: flex; + flex-direction: row; + } + + .description { + width: 66%; + padding: 0 0 0 1em; + } + + .cookie-consent-banner { + left: auto; + width: min(36rem, calc(100% - 2rem)); + } +} + +.dh-banner { + margin-top: 64px !important; +} diff --git a/websites/confetti/vite.config.js b/websites/confetti/vite.config.js new file mode 100644 index 00000000000..c32c02b6b6f --- /dev/null +++ b/websites/confetti/vite.config.js @@ -0,0 +1,20 @@ +import { defineConfig } from "vite"; +import { readFileSync } from "fs"; + +const confettiPkg = JSON.parse( + readFileSync("./node_modules/@tsparticles/confetti/package.json", "utf8"), +); + +export default defineConfig({ + plugins: [ + { + name: "html-transform", + transformIndexHtml(html) { + return html.replace(/__CONFETTI_VERSION__/g, confettiPkg.version); + }, + }, + ], + build: { + outDir: "dist", + }, +}); diff --git a/websites/website/.env b/websites/website/.env new file mode 100644 index 00000000000..d239adb2553 --- /dev/null +++ b/websites/website/.env @@ -0,0 +1,7 @@ +VITE_GA_MEASUREMENT_ID=G-922Z47NPS0 + +VITE_GOOGLE_ADSENSE_CLIENT_ID=ca-pub-1784552607103901 + +VITE_COOKIE_POLICY_PATH=/cookie-policy + +VITE_PRIVACY_POLICY_PATH=/privacy-policy diff --git a/websites/website/.gitignore b/websites/website/.gitignore new file mode 100644 index 00000000000..087e83120cc --- /dev/null +++ b/websites/website/.gitignore @@ -0,0 +1,377 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + + +dist/ +tmp_tsparticles/ +.idea +.DS_Store + +js/*.min.js +css/*.css +css/*.map + +# VitePress generated artifacts +docs/.vitepress/cache/ +docs/.vitepress/dist/ +docs/public/audio/ +docs/public/images/ +docs/public/videos/ + +# Local package manager / debug leftovers +pnpm-debug.log* +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Temporary local check scripts +.tmp-check-*.py + diff --git a/websites/website/.nojekyll b/websites/website/.nojekyll new file mode 100644 index 00000000000..e69de29bb2d diff --git a/websites/website/.prettierrc b/websites/website/.prettierrc new file mode 100644 index 00000000000..2c48f43193e --- /dev/null +++ b/websites/website/.prettierrc @@ -0,0 +1,30 @@ +{ + "printWidth": 120, + "endOfLine": "lf", + "overrides": [ + { + "files": "*.html", + "options": { + "tabWidth": 4 + } + }, + { + "files": "*.scss", + "options": { + "tabWidth": 2 + } + }, + { + "files": "*.json", + "options": { + "tabWidth": 4 + } + }, + { + "files": "*.js", + "options": { + "tabWidth": 4 + } + } + ] +} diff --git a/websites/website/CHANGELOG.md b/websites/website/CHANGELOG.md new file mode 100644 index 00000000000..3c0f11a590a --- /dev/null +++ b/websites/website/CHANGELOG.md @@ -0,0 +1,8 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +# [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/website diff --git a/websites/website/CNAME b/websites/website/CNAME new file mode 100644 index 00000000000..e37e9bc494f --- /dev/null +++ b/websites/website/CNAME @@ -0,0 +1 @@ +particles.js.org \ No newline at end of file diff --git a/websites/website/LICENSE b/websites/website/LICENSE new file mode 100644 index 00000000000..dc41654e178 --- /dev/null +++ b/websites/website/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Matteo Bruni + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/websites/website/README.md b/websites/website/README.md new file mode 100644 index 00000000000..430cfdc0112 --- /dev/null +++ b/websites/website/README.md @@ -0,0 +1,65 @@ +# @tsparticles/website + +New docs-first website for tsParticles, built with VitePress and published to GitHub Pages. + +## Goals + +- make onboarding clear in a few minutes +- keep docs navigation simple and release-oriented +- centralize links to demos, options, migration notes, and package guidance + +## Tech stack + +- [VitePress](https://vitepress.dev/) for static site generation +- GitHub Pages deployment via GitHub Actions + +## Project structure + +- `docs/` - all website content +- `docs/.vitepress/config.ts` - site config, nav, sidebar, search, metadata +- `docs/.vitepress/theme/` - visual theme overrides + +## Run locally + +```bash +pnpm install +pnpm run dev +``` + +## Tracking and consent + +The website uses an integrated consent manager in the VitePress theme. + +- Visitors can reject all, accept all, or save granular choices for analytics and ads. +- Consent is stored locally and can be changed later through the "Privacy settings" button. +- AdSense can run in non-personalized mode when ad consent is not granted. + +Related environment variables: + +- `VITE_GA_MEASUREMENT_ID` +- `VITE_GOOGLE_ADSENSE_CLIENT_ID` +- `VITE_ADSENSE_NON_PERSONALIZED_ON_REJECT` (`true` by default) + +### Analytics events + +When analytics consent is granted, social share actions emit these events: + +- `share_click` for social/email share buttons +- `share_copy_link` for the copy link button + +Shared parameters: + +- `method` (for example `x`, `linkedin`, `copy_link`) +- `page_path` +- `page_title` + +## Build + +```bash +pnpm run docs:build +pnpm run docs:preview +``` + +## Deploy to GitHub Pages + +Deployment is now managed from the main `tsparticles` monorepo CI/CD setup. diff --git a/websites/website/ads.txt b/websites/website/ads.txt new file mode 100644 index 00000000000..ebde8ffa1bd --- /dev/null +++ b/websites/website/ads.txt @@ -0,0 +1,2 @@ +google.com, pub-1784552607103901, DIRECT, f08c47fec0942fa0 +carbonads.com, CEAI6KJL, particlesjsorg diff --git a/websites/website/audio/explosion0.mp3 b/websites/website/audio/explosion0.mp3 new file mode 100644 index 00000000000..bc1af2a6496 Binary files /dev/null and b/websites/website/audio/explosion0.mp3 differ diff --git a/websites/website/audio/explosion1.mp3 b/websites/website/audio/explosion1.mp3 new file mode 100644 index 00000000000..574246cd241 Binary files /dev/null and b/websites/website/audio/explosion1.mp3 differ diff --git a/websites/website/audio/explosion2.mp3 b/websites/website/audio/explosion2.mp3 new file mode 100644 index 00000000000..58a8e49e914 Binary files /dev/null and b/websites/website/audio/explosion2.mp3 differ diff --git a/websites/website/audio/nyancat-loop.mp3 b/websites/website/audio/nyancat-loop.mp3 new file mode 100644 index 00000000000..fe406b8056a Binary files /dev/null and b/websites/website/audio/nyancat-loop.mp3 differ diff --git a/websites/website/docs/.vitepress/config.ts b/websites/website/docs/.vitepress/config.ts new file mode 100644 index 00000000000..049bd416005 --- /dev/null +++ b/websites/website/docs/.vitepress/config.ts @@ -0,0 +1,415 @@ +import { defineConfig, type DefaultTheme } from "vitepress"; + +const base = process.env.VITEPRESS_BASE ?? "/"; +const hostname = "https://particles.js.org"; + +const nav: DefaultTheme.NavItem[] = [ + { text: "Start", link: "/guide/getting-started" }, + { text: "Playground", link: "/playground/" }, + { text: "Demos", link: "/demos/" }, + { text: "Wrappers", link: "/guide/wrappers" }, + { text: "Options", link: "/options/" }, + { + text: "Sponsor", + items: [ + { text: "@matteobruni", link: "https://github.com/matteobruni" }, + { text: "@tsparticles", link: "https://github.com/tsparticles" }, + ], + }, + { text: "Changelog", link: "/changelog" }, + { text: "Releases", link: "/releases/" }, +]; + +const baseSidebar: DefaultTheme.Sidebar = { + "/guide/wrappers": [ + { + text: "Guides", + items: [ + { text: "Wrappers Overview", link: "/guide/wrappers" }, + { text: "Framework Integrations", link: "/guide/frameworks" }, + ], + }, + { + text: "Wrappers", + items: [ + { text: "Angular", link: "/guide/wrappers-angular" }, + { text: "React", link: "/guide/wrappers-react" }, + { text: "Svelte", link: "/guide/wrappers-svelte" }, + { text: "Vue", link: "/guide/wrappers-vue3" }, + { text: "Next.js", link: "/guide/wrappers-nextjs" }, + { text: "Nuxt 2", link: "/guide/wrappers-nuxt2" }, + { text: "Nuxt 3", link: "/guide/wrappers-nuxt3" }, + { text: "Nuxt 4", link: "/guide/wrappers-nuxt4" }, + { text: "Vue 2", link: "/guide/wrappers-vue2" }, + { text: "Vue 3", link: "/guide/wrappers-vue3" }, + { text: "Angular Confetti", link: "/guide/wrappers-angular-confetti" }, + { text: "Angular Fireworks", link: "/guide/wrappers-angular-fireworks" }, + { text: "Astro", link: "/guide/wrappers-astro" }, + { text: "Ember", link: "/guide/wrappers-ember" }, + { text: "Inferno", link: "/guide/wrappers-inferno" }, + { text: "jQuery", link: "/guide/wrappers-jquery" }, + { text: "Lit", link: "/guide/wrappers-lit" }, + { text: "Preact", link: "/guide/wrappers-preact" }, + { text: "Qwik", link: "/guide/wrappers-qwik" }, + { text: "Riot", link: "/guide/wrappers-riot" }, + { text: "Solid", link: "/guide/wrappers-solid" }, + { text: "Web Components", link: "/guide/wrappers-webcomponents" }, + { text: "WordPress", link: "/guide/wrappers-wordpress" }, + ], + }, + ], + "/guide/": [ + { + text: "Guide", + items: [ + { text: "Getting Started", link: "/guide/getting-started" }, + { text: "Installation", link: "/guide/installation" }, + { text: "Migrations", link: "/guide/migrations" }, + { text: "Option Rename Matrix", link: "/guide/option-rename-matrix" }, + { text: "Migrate from v3.x", link: "/guide/migrate-from-v3" }, + { text: "Migrate from v2.x", link: "/guide/migrate-from-v2" }, + { text: "Migrate from v1.x", link: "/guide/migrate-from-v1" }, + { text: "Bundles", link: "/guide/bundles" }, + { text: "Bundle: Basic", link: "/guide/bundles-basic" }, + { text: "Bundle: Slim", link: "/guide/bundles-slim" }, + { text: "Bundle: tsparticles (Full)", link: "/guide/bundles-full" }, + { text: "Bundle: All", link: "/guide/bundles-all" }, + { text: "Bundle: Confetti", link: "/guide/bundles-confetti" }, + { text: "Bundle: Fireworks", link: "/guide/bundles-fireworks" }, + { text: "Bundle: Particles", link: "/guide/bundles-particles" }, + { text: "Framework Integrations", link: "/guide/frameworks" }, + { text: "Color Formats", link: "/guide/color-formats" }, + { text: "Container Lifecycle", link: "/guide/container-lifecycle" }, + { text: "Plugins & Customization", link: "/guide/plugins-customization" }, + { text: "Templates & Resources", link: "/guide/templates-resources" }, + { text: "Video Tutorials", link: "/guide/video-tutorials" }, + { text: "Dependency Graph", link: "/guide/dependency-graph" }, + ], + }, + ], + "/guide/wrappers-": [ + { + text: "Guides", + items: [ + { text: "Wrappers Overview", link: "/guide/wrappers" }, + { text: "Framework Integrations", link: "/guide/frameworks" }, + ], + }, + { + text: "Wrappers", + items: [ + { text: "Angular", link: "/guide/wrappers-angular" }, + { text: "React", link: "/guide/wrappers-react" }, + { text: "Svelte", link: "/guide/wrappers-svelte" }, + { text: "Vue", link: "/guide/wrappers-vue3" }, + { text: "Next.js", link: "/guide/wrappers-nextjs" }, + { text: "Nuxt 2", link: "/guide/wrappers-nuxt2" }, + { text: "Nuxt 3", link: "/guide/wrappers-nuxt3" }, + { text: "Nuxt 4", link: "/guide/wrappers-nuxt4" }, + { text: "Vue 2", link: "/guide/wrappers-vue2" }, + { text: "Vue 3", link: "/guide/wrappers-vue3" }, + { text: "Angular Confetti", link: "/guide/wrappers-angular-confetti" }, + { text: "Angular Fireworks", link: "/guide/wrappers-angular-fireworks" }, + { text: "Astro", link: "/guide/wrappers-astro" }, + { text: "Ember", link: "/guide/wrappers-ember" }, + { text: "Inferno", link: "/guide/wrappers-inferno" }, + { text: "jQuery", link: "/guide/wrappers-jquery" }, + { text: "Lit", link: "/guide/wrappers-lit" }, + { text: "Preact", link: "/guide/wrappers-preact" }, + { text: "Qwik", link: "/guide/wrappers-qwik" }, + { text: "Riot", link: "/guide/wrappers-riot" }, + { text: "Solid", link: "/guide/wrappers-solid" }, + { text: "Web Components", link: "/guide/wrappers-webcomponents" }, + { text: "WordPress", link: "/guide/wrappers-wordpress" }, + ], + }, + ], + "/playground/": [ + { + text: "Playground", + items: [ + { text: "Overview", link: "/playground/" }, + { text: "Bundles", link: "/playground/bundles" }, + { text: "Configs", link: "/playground/configs" }, + { text: "Shapes", link: "/playground/shapes" }, + { text: "Palettes", link: "/playground/palettes" }, + { text: "Presets", link: "/playground/presets" }, + ], + }, + ], + "/demos/": [ + { + text: "Demos", + items: [ + { text: "Ready-to-Use", link: "/demos/" }, + { text: "Presets Catalog", link: "/demos/presets" }, + { text: "Palettes Catalog", link: "/demos/palettes" }, + { text: "Shapes Catalog", link: "/demos/shapes" }, + { text: "Ambient", link: "/demos/recipes/ambient" }, + { text: "Big Circles", link: "/demos/recipes/big-circles" }, + { text: "Bubbles", link: "/demos/recipes/bubbles" }, + { text: "Confetti", link: "/demos/recipes/confetti" }, + { text: "Confetti Cannon", link: "/demos/recipes/confetti-cannon" }, + { text: "Confetti Explosions", link: "/demos/recipes/confetti-explosions" }, + { text: "Confetti Falling", link: "/demos/recipes/confetti-falling" }, + { text: "Confetti Parade", link: "/demos/recipes/confetti-parade" }, + { text: "Fire", link: "/demos/recipes/fire" }, + { text: "Firefly", link: "/demos/recipes/firefly" }, + { text: "Fireworks", link: "/demos/recipes/fireworks" }, + { text: "Fountain", link: "/demos/recipes/fountain" }, + { text: "Hyperspace", link: "/demos/recipes/hyperspace" }, + { text: "Links", link: "/demos/recipes/links" }, + { text: "Matrix", link: "/demos/recipes/matrix" }, + { text: "Sea Anemone", link: "/demos/recipes/sea-anemone" }, + { text: "Snow", link: "/demos/recipes/snow" }, + { text: "Squares", link: "/demos/recipes/squares" }, + { text: "Stars", link: "/demos/recipes/stars" }, + { text: "Triangles", link: "/demos/recipes/triangles" }, + ], + }, + ], + "/options/": [ + { + text: "Getting Started", + items: [ + { text: "Options Reference", link: "/options/" }, + { text: "Background & Canvas", link: "/options/background" }, + { text: "Background Mask", link: "/options/background-mask" }, + { text: "Full Screen", link: "/options/fullscreen" }, + { text: "Motion", link: "/options/motion" }, + { text: "Manual Particles", link: "/options/manual-particles" }, + { text: "Themes", link: "/options/themes" }, + { text: "Performance Guide", link: "/options/performance" }, + ], + }, + { + text: "Particles Essentials", + items: [ + { text: "Particles", link: "/options/particles" }, + { text: "Particles Number", link: "/options/particles-number" }, + { text: "Particles Move", link: "/options/particles-move" }, + { text: "Particles Links", link: "/options/particles-links" }, + { text: "Particles Shape", link: "/options/particles-shape" }, + { text: "Particles Color", link: "/options/particles-color" }, + { text: "Particles Size", link: "/options/particles-size" }, + { text: "Particles Opacity", link: "/options/particles-opacity" }, + { text: "Particles ZIndex", link: "/options/particles-zindex" }, + ], + }, + { + text: "Particles Advanced", + items: [ + { text: "Particles Palette", link: "/options/particles-palette" }, + { text: "Particles Bounce", link: "/options/particles-bounce" }, + { text: "Particles Collisions", link: "/options/particles-collisions" }, + { text: "Particles Destroy", link: "/options/particles-destroy" }, + { text: "Particles Group", link: "/options/particles-group" }, + { text: "Particles Life", link: "/options/particles-life" }, + { text: "Particles Orbit", link: "/options/particles-orbit" }, + { text: "Particles Repulse", link: "/options/particles-repulse" }, + { text: "Particles Roll", link: "/options/particles-roll" }, + { text: "Particles Rotate", link: "/options/particles-rotate" }, + { text: "Particles Shadow", link: "/options/particles-shadow" }, + { text: "Particles Stroke", link: "/options/particles-stroke" }, + { text: "Particles Tilt", link: "/options/particles-tilt" }, + { text: "Particles Twinkle", link: "/options/particles-twinkle" }, + { text: "Particles Wobble", link: "/options/particles-wobble" }, + ], + }, + { + text: "Interactivity", + items: [ + { text: "Interactivity", link: "/options/interactivity" }, + { text: "Interactivity Click", link: "/options/interactivity-click" }, + { text: "Interactivity Hover", link: "/options/interactivity-hover" }, + { text: "Interactivity Div", link: "/options/interactivity-div" }, + { text: "Interactivity Events", link: "/options/interactivity-events" }, + { text: "Interactivity Modes", link: "/options/interactivity-modes" }, + ], + }, + { + text: "Plugins", + items: [ + { text: "Plugin: Absorbers", link: "/options/plugin-absorbers" }, + { text: "Plugin: Emitters", link: "/options/plugin-emitters" }, + { text: "Plugin: Infection", link: "/options/plugin-infection" }, + { text: "Plugin: Polygon Mask", link: "/options/plugin-polygon-mask" }, + ], + }, + ], + "/migration/": [{ text: "Migration", items: [{ text: "Compatibility & Migrations", link: "/migration/" }] }], + "/changelog": [{ text: "Changelog", items: [{ text: "Latest Release", link: "/changelog" }] }], + "/releases/": [{ text: "Releases", items: [{ text: "Versioning & Release", link: "/releases/" }] }], +}; + +function prefixSidebarItems(items: DefaultTheme.SidebarItem[], prefix: string): DefaultTheme.SidebarItem[] { + return items.map(item => ({ + ...item, + link: item.link ? prefix + item.link : undefined, + items: item.items ? prefixSidebarItems(item.items, prefix) : undefined, + })); +} + +function prefixNavItems(items: DefaultTheme.NavItem[], prefix: string): DefaultTheme.NavItem[] { + return items.map(item => { + if ("link" in item && item.link && !item.link.startsWith("http") && !item.link.startsWith("//")) { + return { ...item, link: prefix + item.link } as DefaultTheme.NavItem; + } + if ("items" in item && item.items) { + return { ...item, items: prefixNavItems(item.items, prefix) } as DefaultTheme.NavItem; + } + return item; + }); +} + +const localePrefixes = ["/it", "/fr", "/es", "/de", "/pt", "/ru", "/zh", "/ja", "/hi"]; + +const sidebar: DefaultTheme.Sidebar = { + ...baseSidebar, +}; + +for (const prefix of localePrefixes) { + for (const [key, value] of Object.entries(baseSidebar)) { + sidebar[prefix + key] = prefixSidebarItems(value, prefix); + } +} + +export default defineConfig({ + title: "tsParticles", + description: "Modern particle animations for the web", + lang: "en-US", + cleanUrls: true, + lastUpdated: true, + base, + ignoreDeadLinks: [ + /\/releases\/index$/, + /\/[a-z]{2}\/releases\/index$/, + ], + locales: { + root: { + label: "English", + lang: "en-US", + link: "/", + title: "tsParticles", + description: "Modern particle animations for the web", + themeConfig: { + nav, + }, + }, + it: { + label: "Italiano", + lang: "it-IT", + link: "/it/", + title: "tsParticles", + description: "Animazioni particellari moderne per il web", + themeConfig: { + nav: prefixNavItems(nav, "/it"), + }, + }, + fr: { + label: "Français", + lang: "fr-FR", + link: "/fr/", + title: "tsParticles", + description: "Animations de particules modernes pour le web", + themeConfig: { + nav: prefixNavItems(nav, "/fr"), + }, + }, + es: { + label: "Español", + lang: "es-ES", + link: "/es/", + title: "tsParticles", + description: "Animaciones de partículas modernas para la web", + themeConfig: { + nav: prefixNavItems(nav, "/es"), + }, + }, + de: { + label: "Deutsch", + lang: "de-DE", + link: "/de/", + title: "tsParticles", + description: "Moderne Partikelanimationen für das Web", + themeConfig: { + nav: prefixNavItems(nav, "/de"), + }, + }, + pt: { + label: "Português", + lang: "pt-PT", + link: "/pt/", + title: "tsParticles", + description: "Animacoes modernas de particulas para a web", + themeConfig: { + nav: prefixNavItems(nav, "/pt"), + }, + }, + ru: { + label: "Русский", + lang: "ru-RU", + link: "/ru/", + title: "tsParticles", + description: "Современные анимации частиц для веба", + themeConfig: { + nav: prefixNavItems(nav, "/ru"), + }, + }, + zh: { + label: "中文", + lang: "zh-CN", + link: "/zh/", + title: "tsParticles", + description: "适用于 Web 的现代粒子动画", + themeConfig: { + nav: prefixNavItems(nav, "/zh"), + }, + }, + ja: { + label: "日本語", + lang: "ja-JP", + link: "/ja/", + title: "tsParticles", + description: "Web 向けのモダンなパーティクルアニメーション", + themeConfig: { + nav: prefixNavItems(nav, "/ja"), + }, + }, + hi: { + label: "हिन्दी", + lang: "hi-IN", + link: "/hi/", + title: "tsParticles", + description: "वेब के लिए आधुनिक पार्टिकल एनिमेशन", + themeConfig: { + nav: prefixNavItems(nav, "/hi"), + }, + }, + }, + vite: { + envDir: "..", + }, + sitemap: { + hostname, + }, + head: [ + ["meta", { name: "theme-color", content: "#0b1020" }], + ["meta", { property: "og:type", content: "website" }], + ["meta", { property: "og:title", content: "tsParticles" }], + ["meta", { property: "og:description", content: "TypeScript particle engine for websites and apps" }], + ], + themeConfig: { + logo: "https://particles.js.org/tsParticles-64.png", + socialLinks: [{ icon: "github", link: "https://github.com/tsparticles/tsparticles" }], + sidebar, + search: { + provider: "local", + }, + footer: { + message: + 'Released under MIT License. Cookie Policy · Privacy Policy · Support: @matteobruni / @tsparticles', + copyright: "Copyright © 2026 Matteo Bruni", + }, + }, +}); diff --git a/websites/website/docs/.vitepress/theme/components/AppLayout.vue b/websites/website/docs/.vitepress/theme/components/AppLayout.vue new file mode 100644 index 00000000000..dce922e34a9 --- /dev/null +++ b/websites/website/docs/.vitepress/theme/components/AppLayout.vue @@ -0,0 +1,14 @@ + + + diff --git a/websites/website/docs/.vitepress/theme/components/CookieConsentBanner.vue b/websites/website/docs/.vitepress/theme/components/CookieConsentBanner.vue new file mode 100644 index 00000000000..c6aef84a541 --- /dev/null +++ b/websites/website/docs/.vitepress/theme/components/CookieConsentBanner.vue @@ -0,0 +1,106 @@ + + + diff --git a/websites/website/docs/.vitepress/theme/components/PlaygroundBundlesPanel.vue b/websites/website/docs/.vitepress/theme/components/PlaygroundBundlesPanel.vue new file mode 100644 index 00000000000..b8abe27827b --- /dev/null +++ b/websites/website/docs/.vitepress/theme/components/PlaygroundBundlesPanel.vue @@ -0,0 +1,501 @@ + + +